{"diffoscope-json-version": 1, "source1": "/srv/reproducible-results/rbuild-debian/r-b-build.1O69HkeM/b1/dune-functions_2.9.0-2_i386.changes", "source2": "/srv/reproducible-results/rbuild-debian/r-b-build.1O69HkeM/b2/dune-functions_2.9.0-2_i386.changes", "unified_diff": null, "details": [{"source1": "Files", "source2": "Files", "unified_diff": "@@ -1,3 +1,3 @@\n \n 129adf9806cb1155b50a04f89a06d81d 83200 libdevel optional libdune-functions-dev_2.9.0-2_i386.deb\n- 5a95175301cc7a35857e534fdf84ba21 1780536 doc optional libdune-functions-doc_2.9.0-2_all.deb\n+ 6a1267c9c2ab420f8e4ca055055d8058 1780720 doc optional libdune-functions-doc_2.9.0-2_all.deb\n"}, {"source1": "libdune-functions-doc_2.9.0-2_all.deb", "source2": "libdune-functions-doc_2.9.0-2_all.deb", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -1,3 +1,3 @@\n -rw-r--r-- 0 0 0 4 2023-01-12 22:26:33.000000 debian-binary\n--rw-r--r-- 0 0 0 13164 2023-01-12 22:26:33.000000 control.tar.xz\n--rw-r--r-- 0 0 0 1767180 2023-01-12 22:26:33.000000 data.tar.xz\n+-rw-r--r-- 0 0 0 13188 2023-01-12 22:26:33.000000 control.tar.xz\n+-rw-r--r-- 0 0 0 1767340 2023-01-12 22:26:33.000000 data.tar.xz\n"}, {"source1": "control.tar.xz", "source2": "control.tar.xz", "unified_diff": null, "details": [{"source1": "control.tar", "source2": "control.tar", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "comments": ["Files differ"], "unified_diff": null}, {"source1": "line order", "source2": "line order", "unified_diff": "@@ -1,14 +1,16 @@\n usr/share/doc/libdune-functions-doc/changelog.Debian.gz\n usr/share/doc/libdune-functions-doc/changelog.gz\n usr/share/doc/libdune-functions-doc/copyright\n usr/share/doc/libdune-functions-doc/doxygen/a00002.html\n usr/share/doc/libdune-functions-doc/doxygen/a00002_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00005.html\n usr/share/doc/libdune-functions-doc/doxygen/a00005_source.html\n+usr/share/doc/libdune-functions-doc/doxygen/a00008.html\n+usr/share/doc/libdune-functions-doc/doxygen/a00008_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00011.html\n usr/share/doc/libdune-functions-doc/doxygen/a00011_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00014.html\n usr/share/doc/libdune-functions-doc/doxygen/a00014_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00017.html\n usr/share/doc/libdune-functions-doc/doxygen/a00017_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00020.html\n@@ -71,16 +73,14 @@\n usr/share/doc/libdune-functions-doc/doxygen/a00104_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00107.html\n usr/share/doc/libdune-functions-doc/doxygen/a00107_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00110.html\n usr/share/doc/libdune-functions-doc/doxygen/a00110_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00113.html\n usr/share/doc/libdune-functions-doc/doxygen/a00113_source.html\n-usr/share/doc/libdune-functions-doc/doxygen/a00116.html\n-usr/share/doc/libdune-functions-doc/doxygen/a00116_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00119.html\n usr/share/doc/libdune-functions-doc/doxygen/a00119_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00122.html\n usr/share/doc/libdune-functions-doc/doxygen/a00122_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00125.html\n usr/share/doc/libdune-functions-doc/doxygen/a00125_source.html\n usr/share/doc/libdune-functions-doc/doxygen/a00128.html\n"}]}]}]}, {"source1": "data.tar.xz", "source2": "data.tar.xz", "unified_diff": null, "details": [{"source1": "data.tar", "source2": "data.tar", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -3,140 +3,140 @@\n drwxr-xr-x 0 root (0) root (0) 0 2023-01-12 22:26:33.000000 ./usr/share/\n drwxr-xr-x 0 root (0) root (0) 0 2023-01-12 22:26:33.000000 ./usr/share/doc/\n drwxr-xr-x 0 root (0) root (0) 0 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/\n -rw-r--r-- 0 root (0) root (0) 810 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/changelog.Debian.gz\n -rw-r--r-- 0 root (0) root (0) 4118 2022-11-16 12:11:40.000000 ./usr/share/doc/libdune-functions-doc/changelog.gz\n -rw-r--r-- 0 root (0) root (0) 3331 2023-01-12 15:07:37.000000 ./usr/share/doc/libdune-functions-doc/copyright\n drwxr-xr-x 0 root (0) root (0) 0 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/\n--rw-r--r-- 0 root (0) root (0) 4953 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00002.html\n--rw-r--r-- 0 root (0) root (0) 20264 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00002_source.html\n--rw-r--r-- 0 root (0) root (0) 6149 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00005.html\n--rw-r--r-- 0 root (0) root (0) 10192 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00005_source.html\n--rw-r--r-- 0 root (0) root (0) 8161 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00011.html\n--rw-r--r-- 0 root (0) root (0) 52869 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00011_source.html\n--rw-r--r-- 0 root (0) root (0) 7229 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00014.html\n--rw-r--r-- 0 root (0) root (0) 46756 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00014_source.html\n--rw-r--r-- 0 root (0) root (0) 6209 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00017.html\n--rw-r--r-- 0 root (0) root (0) 28013 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00017_source.html\n--rw-r--r-- 0 root (0) root (0) 6668 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00020.html\n--rw-r--r-- 0 root (0) root (0) 36917 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00020_source.html\n--rw-r--r-- 0 root (0) root (0) 4906 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00023.html\n--rw-r--r-- 0 root (0) root (0) 21677 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00023_source.html\n--rw-r--r-- 0 root (0) root (0) 9885 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00026.html\n--rw-r--r-- 0 root (0) root (0) 129555 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00026_source.html\n--rw-r--r-- 0 root (0) root (0) 5723 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00029.html\n--rw-r--r-- 0 root (0) root (0) 12131 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00029_source.html\n--rw-r--r-- 0 root (0) root (0) 4509 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00032.html\n--rw-r--r-- 0 root (0) root (0) 13605 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00032_source.html\n--rw-r--r-- 0 root (0) root (0) 5486 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00035.html\n--rw-r--r-- 0 root (0) root (0) 35187 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00035_source.html\n--rw-r--r-- 0 root (0) root (0) 8120 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00038.html\n--rw-r--r-- 0 root (0) root (0) 16692 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00038_source.html\n--rw-r--r-- 0 root (0) root (0) 10231 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00041.html\n--rw-r--r-- 0 root (0) root (0) 51362 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00041_source.html\n--rw-r--r-- 0 root (0) root (0) 7280 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00044.html\n--rw-r--r-- 0 root (0) root (0) 11255 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00044_source.html\n--rw-r--r-- 0 root (0) root (0) 5074 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00047.html\n--rw-r--r-- 0 root (0) root (0) 12567 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00047_source.html\n--rw-r--r-- 0 root (0) root (0) 15745 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00050.html\n--rw-r--r-- 0 root (0) root (0) 48865 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00050_source.html\n--rw-r--r-- 0 root (0) root (0) 23350 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00053.html\n--rw-r--r-- 0 root (0) root (0) 68684 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00053_source.html\n+-rw-r--r-- 0 root (0) root (0) 6149 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00002.html\n+-rw-r--r-- 0 root (0) root (0) 10192 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00002_source.html\n+-rw-r--r-- 0 root (0) root (0) 4953 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00005.html\n+-rw-r--r-- 0 root (0) root (0) 20264 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00005_source.html\n+-rw-r--r-- 0 root (0) root (0) 7683 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00008.html\n+-rw-r--r-- 0 root (0) root (0) 27200 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00008_source.html\n+-rw-r--r-- 0 root (0) root (0) 6093 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00011.html\n+-rw-r--r-- 0 root (0) root (0) 22105 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00011_source.html\n+-rw-r--r-- 0 root (0) root (0) 6923 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00014.html\n+-rw-r--r-- 0 root (0) root (0) 14988 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00014_source.html\n+-rw-r--r-- 0 root (0) root (0) 5074 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00017.html\n+-rw-r--r-- 0 root (0) root (0) 12567 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00017_source.html\n+-rw-r--r-- 0 root (0) root (0) 23350 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00020.html\n+-rw-r--r-- 0 root (0) root (0) 68684 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00020_source.html\n+-rw-r--r-- 0 root (0) root (0) 6659 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00023.html\n+-rw-r--r-- 0 root (0) root (0) 45971 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00023_source.html\n+-rw-r--r-- 0 root (0) root (0) 4881 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00026.html\n+-rw-r--r-- 0 root (0) root (0) 10069 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00026_source.html\n+-rw-r--r-- 0 root (0) root (0) 6513 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00029.html\n+-rw-r--r-- 0 root (0) root (0) 16008 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00029_source.html\n+-rw-r--r-- 0 root (0) root (0) 6686 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00032.html\n+-rw-r--r-- 0 root (0) root (0) 17547 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00032_source.html\n+-rw-r--r-- 0 root (0) root (0) 7651 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00035.html\n+-rw-r--r-- 0 root (0) root (0) 15189 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00035_source.html\n+-rw-r--r-- 0 root (0) root (0) 7280 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00038.html\n+-rw-r--r-- 0 root (0) root (0) 11255 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00038_source.html\n+-rw-r--r-- 0 root (0) root (0) 15745 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00041.html\n+-rw-r--r-- 0 root (0) root (0) 48865 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00041_source.html\n+-rw-r--r-- 0 root (0) root (0) 4388 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00044.html\n+-rw-r--r-- 0 root (0) root (0) 13611 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00044_source.html\n+-rw-r--r-- 0 root (0) root (0) 7509 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00047.html\n+-rw-r--r-- 0 root (0) root (0) 28251 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00047_source.html\n+-rw-r--r-- 0 root (0) root (0) 5328 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00050.html\n+-rw-r--r-- 0 root (0) root (0) 25921 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00050_source.html\n+-rw-r--r-- 0 root (0) root (0) 5963 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00053.html\n+-rw-r--r-- 0 root (0) root (0) 26463 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00053_source.html\n -rw-r--r-- 0 root (0) root (0) 5486 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00056.html\n -rw-r--r-- 0 root (0) root (0) 11779 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00056_source.html\n--rw-r--r-- 0 root (0) root (0) 6659 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00059.html\n--rw-r--r-- 0 root (0) root (0) 45971 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00059_source.html\n--rw-r--r-- 0 root (0) root (0) 5328 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00062.html\n--rw-r--r-- 0 root (0) root (0) 25921 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00062_source.html\n--rw-r--r-- 0 root (0) root (0) 5963 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00065.html\n--rw-r--r-- 0 root (0) root (0) 26463 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00065_source.html\n--rw-r--r-- 0 root (0) root (0) 6093 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00068.html\n--rw-r--r-- 0 root (0) root (0) 22105 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00068_source.html\n--rw-r--r-- 0 root (0) root (0) 6923 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00071.html\n--rw-r--r-- 0 root (0) root (0) 14988 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00071_source.html\n--rw-r--r-- 0 root (0) root (0) 5136 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00074.html\n--rw-r--r-- 0 root (0) root (0) 49466 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00074_source.html\n--rw-r--r-- 0 root (0) root (0) 4388 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00077.html\n--rw-r--r-- 0 root (0) root (0) 13611 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00077_source.html\n--rw-r--r-- 0 root (0) root (0) 7651 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00080.html\n--rw-r--r-- 0 root (0) root (0) 15189 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00080_source.html\n--rw-r--r-- 0 root (0) root (0) 6731 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00083.html\n--rw-r--r-- 0 root (0) root (0) 48399 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00083_source.html\n--rw-r--r-- 0 root (0) root (0) 7683 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00086.html\n--rw-r--r-- 0 root (0) root (0) 27200 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00086_source.html\n--rw-r--r-- 0 root (0) root (0) 4981 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00089.html\n--rw-r--r-- 0 root (0) root (0) 27963 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00089_source.html\n--rw-r--r-- 0 root (0) root (0) 6513 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00092.html\n--rw-r--r-- 0 root (0) root (0) 16008 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00092_source.html\n--rw-r--r-- 0 root (0) root (0) 4881 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00095.html\n--rw-r--r-- 0 root (0) root (0) 10069 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00095_source.html\n--rw-r--r-- 0 root (0) root (0) 4395 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00098.html\n--rw-r--r-- 0 root (0) root (0) 18047 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00098_source.html\n--rw-r--r-- 0 root (0) root (0) 6686 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00101.html\n--rw-r--r-- 0 root (0) root (0) 17547 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00101_source.html\n--rw-r--r-- 0 root (0) root (0) 7509 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00104.html\n--rw-r--r-- 0 root (0) root (0) 28251 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00104_source.html\n--rw-r--r-- 0 root (0) root (0) 10568 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00107.html\n--rw-r--r-- 0 root (0) root (0) 222246 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00107_source.html\n--rw-r--r-- 0 root (0) root (0) 8422 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00110.html\n--rw-r--r-- 0 root (0) root (0) 67255 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00110_source.html\n--rw-r--r-- 0 root (0) root (0) 8515 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00113.html\n--rw-r--r-- 0 root (0) root (0) 73752 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00113_source.html\n--rw-r--r-- 0 root (0) root (0) 7093 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00116.html\n--rw-r--r-- 0 root (0) root (0) 32392 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00116_source.html\n--rw-r--r-- 0 root (0) root (0) 8275 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00119.html\n--rw-r--r-- 0 root (0) root (0) 42991 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00119_source.html\n--rw-r--r-- 0 root (0) root (0) 5337 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00122.html\n--rw-r--r-- 0 root (0) root (0) 7264 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00122_source.html\n--rw-r--r-- 0 root (0) root (0) 9047 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00125.html\n--rw-r--r-- 0 root (0) root (0) 119825 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00125_source.html\n--rw-r--r-- 0 root (0) root (0) 7067 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00128.html\n--rw-r--r-- 0 root (0) root (0) 30363 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00128_source.html\n--rw-r--r-- 0 root (0) root (0) 8289 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00131.html\n--rw-r--r-- 0 root (0) root (0) 73804 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00131_source.html\n--rw-r--r-- 0 root (0) root (0) 4827 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00134.html\n--rw-r--r-- 0 root (0) root (0) 49470 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00134_source.html\n--rw-r--r-- 0 root (0) root (0) 8932 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00137.html\n--rw-r--r-- 0 root (0) root (0) 84710 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00137_source.html\n--rw-r--r-- 0 root (0) root (0) 5502 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00140.html\n--rw-r--r-- 0 root (0) root (0) 41013 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00140_source.html\n--rw-r--r-- 0 root (0) root (0) 8181 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00143.html\n--rw-r--r-- 0 root (0) root (0) 58888 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00143_source.html\n--rw-r--r-- 0 root (0) root (0) 5166 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00146.html\n--rw-r--r-- 0 root (0) root (0) 34473 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00146_source.html\n--rw-r--r-- 0 root (0) root (0) 8146 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00149.html\n--rw-r--r-- 0 root (0) root (0) 55287 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00149_source.html\n--rw-r--r-- 0 root (0) root (0) 7961 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00152.html\n--rw-r--r-- 0 root (0) root (0) 25642 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00152_source.html\n--rw-r--r-- 0 root (0) root (0) 5633 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00155.html\n--rw-r--r-- 0 root (0) root (0) 16399 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00155_source.html\n--rw-r--r-- 0 root (0) root (0) 7711 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00158.html\n--rw-r--r-- 0 root (0) root (0) 47942 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00158_source.html\n--rw-r--r-- 0 root (0) root (0) 10569 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00161.html\n--rw-r--r-- 0 root (0) root (0) 57247 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00161_source.html\n--rw-r--r-- 0 root (0) root (0) 5264 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00164.html\n--rw-r--r-- 0 root (0) root (0) 12341 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00164_source.html\n--rw-r--r-- 0 root (0) root (0) 8154 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00167.html\n--rw-r--r-- 0 root (0) root (0) 51505 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00167_source.html\n--rw-r--r-- 0 root (0) root (0) 8298 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00170.html\n--rw-r--r-- 0 root (0) root (0) 46365 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00170_source.html\n--rw-r--r-- 0 root (0) root (0) 7007 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00173.html\n--rw-r--r-- 0 root (0) root (0) 23394 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00173_source.html\n--rw-r--r-- 0 root (0) root (0) 8424 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00176.html\n--rw-r--r-- 0 root (0) root (0) 38765 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00176_source.html\n--rw-r--r-- 0 root (0) root (0) 12925 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00179.html\n--rw-r--r-- 0 root (0) root (0) 22115 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00179_source.html\n--rw-r--r-- 0 root (0) root (0) 8734 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00182.html\n--rw-r--r-- 0 root (0) root (0) 76258 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00182_source.html\n--rw-r--r-- 0 root (0) root (0) 5531 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00185.html\n--rw-r--r-- 0 root (0) root (0) 16841 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00185_source.html\n--rw-r--r-- 0 root (0) root (0) 7995 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00188.html\n--rw-r--r-- 0 root (0) root (0) 79863 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00188_source.html\n--rw-r--r-- 0 root (0) root (0) 7931 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00191.html\n--rw-r--r-- 0 root (0) root (0) 51127 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00191_source.html\n+-rw-r--r-- 0 root (0) root (0) 5136 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00059.html\n+-rw-r--r-- 0 root (0) root (0) 49466 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00059_source.html\n+-rw-r--r-- 0 root (0) root (0) 10231 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00062.html\n+-rw-r--r-- 0 root (0) root (0) 51362 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00062_source.html\n+-rw-r--r-- 0 root (0) root (0) 6731 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00065.html\n+-rw-r--r-- 0 root (0) root (0) 48399 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00065_source.html\n+-rw-r--r-- 0 root (0) root (0) 4981 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00068.html\n+-rw-r--r-- 0 root (0) root (0) 27963 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00068_source.html\n+-rw-r--r-- 0 root (0) root (0) 4395 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00071.html\n+-rw-r--r-- 0 root (0) root (0) 18047 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00071_source.html\n+-rw-r--r-- 0 root (0) root (0) 4509 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00074.html\n+-rw-r--r-- 0 root (0) root (0) 13605 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00074_source.html\n+-rw-r--r-- 0 root (0) root (0) 5486 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00077.html\n+-rw-r--r-- 0 root (0) root (0) 35187 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00077_source.html\n+-rw-r--r-- 0 root (0) root (0) 7229 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00080.html\n+-rw-r--r-- 0 root (0) root (0) 46756 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00080_source.html\n+-rw-r--r-- 0 root (0) root (0) 4906 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00083.html\n+-rw-r--r-- 0 root (0) root (0) 21677 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00083_source.html\n+-rw-r--r-- 0 root (0) root (0) 8120 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00086.html\n+-rw-r--r-- 0 root (0) root (0) 16692 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00086_source.html\n+-rw-r--r-- 0 root (0) root (0) 9885 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00089.html\n+-rw-r--r-- 0 root (0) root (0) 129555 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00089_source.html\n+-rw-r--r-- 0 root (0) root (0) 6668 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00092.html\n+-rw-r--r-- 0 root (0) root (0) 36917 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00092_source.html\n+-rw-r--r-- 0 root (0) root (0) 5723 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00095.html\n+-rw-r--r-- 0 root (0) root (0) 12131 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00095_source.html\n+-rw-r--r-- 0 root (0) root (0) 6209 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00098.html\n+-rw-r--r-- 0 root (0) root (0) 28013 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00098_source.html\n+-rw-r--r-- 0 root (0) root (0) 7995 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00101.html\n+-rw-r--r-- 0 root (0) root (0) 79863 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00101_source.html\n+-rw-r--r-- 0 root (0) root (0) 8146 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00104.html\n+-rw-r--r-- 0 root (0) root (0) 55287 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00104_source.html\n+-rw-r--r-- 0 root (0) root (0) 8424 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00107.html\n+-rw-r--r-- 0 root (0) root (0) 38765 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00107_source.html\n+-rw-r--r-- 0 root (0) root (0) 5633 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00110.html\n+-rw-r--r-- 0 root (0) root (0) 16399 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00110_source.html\n+-rw-r--r-- 0 root (0) root (0) 7961 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00113.html\n+-rw-r--r-- 0 root (0) root (0) 25642 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00113_source.html\n+-rw-r--r-- 0 root (0) root (0) 8181 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00119.html\n+-rw-r--r-- 0 root (0) root (0) 58888 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00119_source.html\n+-rw-r--r-- 0 root (0) root (0) 9047 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00122.html\n+-rw-r--r-- 0 root (0) root (0) 119825 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00122_source.html\n+-rw-r--r-- 0 root (0) root (0) 8515 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00125.html\n+-rw-r--r-- 0 root (0) root (0) 73752 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00125_source.html\n+-rw-r--r-- 0 root (0) root (0) 5502 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00128.html\n+-rw-r--r-- 0 root (0) root (0) 41013 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00128_source.html\n+-rw-r--r-- 0 root (0) root (0) 8298 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00131.html\n+-rw-r--r-- 0 root (0) root (0) 46365 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00131_source.html\n+-rw-r--r-- 0 root (0) root (0) 8289 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00134.html\n+-rw-r--r-- 0 root (0) root (0) 73804 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00134_source.html\n+-rw-r--r-- 0 root (0) root (0) 4827 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00137.html\n+-rw-r--r-- 0 root (0) root (0) 49470 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00137_source.html\n+-rw-r--r-- 0 root (0) root (0) 7007 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00140.html\n+-rw-r--r-- 0 root (0) root (0) 23394 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00140_source.html\n+-rw-r--r-- 0 root (0) root (0) 5337 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00143.html\n+-rw-r--r-- 0 root (0) root (0) 7264 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00143_source.html\n+-rw-r--r-- 0 root (0) root (0) 7093 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00146.html\n+-rw-r--r-- 0 root (0) root (0) 32392 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00146_source.html\n+-rw-r--r-- 0 root (0) root (0) 8734 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00149.html\n+-rw-r--r-- 0 root (0) root (0) 76258 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00149_source.html\n+-rw-r--r-- 0 root (0) root (0) 8275 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00152.html\n+-rw-r--r-- 0 root (0) root (0) 42991 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00152_source.html\n+-rw-r--r-- 0 root (0) root (0) 7067 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00155.html\n+-rw-r--r-- 0 root (0) root (0) 30363 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00155_source.html\n+-rw-r--r-- 0 root (0) root (0) 12925 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00158.html\n+-rw-r--r-- 0 root (0) root (0) 22115 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00158_source.html\n+-rw-r--r-- 0 root (0) root (0) 8932 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00161.html\n+-rw-r--r-- 0 root (0) root (0) 84710 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00161_source.html\n+-rw-r--r-- 0 root (0) root (0) 10569 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00164.html\n+-rw-r--r-- 0 root (0) root (0) 57247 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00164_source.html\n+-rw-r--r-- 0 root (0) root (0) 5531 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00167.html\n+-rw-r--r-- 0 root (0) root (0) 16841 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00167_source.html\n+-rw-r--r-- 0 root (0) root (0) 5264 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00170.html\n+-rw-r--r-- 0 root (0) root (0) 12341 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00170_source.html\n+-rw-r--r-- 0 root (0) root (0) 7711 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00173.html\n+-rw-r--r-- 0 root (0) root (0) 47942 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00173_source.html\n+-rw-r--r-- 0 root (0) root (0) 10568 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00176.html\n+-rw-r--r-- 0 root (0) root (0) 222246 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00176_source.html\n+-rw-r--r-- 0 root (0) root (0) 7931 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00179.html\n+-rw-r--r-- 0 root (0) root (0) 51127 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00179_source.html\n+-rw-r--r-- 0 root (0) root (0) 8422 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00182.html\n+-rw-r--r-- 0 root (0) root (0) 67255 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00182_source.html\n+-rw-r--r-- 0 root (0) root (0) 8154 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00185.html\n+-rw-r--r-- 0 root (0) root (0) 51505 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00185_source.html\n+-rw-r--r-- 0 root (0) root (0) 5166 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00188.html\n+-rw-r--r-- 0 root (0) root (0) 34473 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00188_source.html\n+-rw-r--r-- 0 root (0) root (0) 8161 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00191.html\n+-rw-r--r-- 0 root (0) root (0) 52869 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00191_source.html\n -rw-r--r-- 0 root (0) root (0) 2871 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00194.html\n -rw-r--r-- 0 root (0) root (0) 2879 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00197.html\n -rw-r--r-- 0 root (0) root (0) 2877 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00200.html\n -rw-r--r-- 0 root (0) root (0) 3925 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00203.html\n -rw-r--r-- 0 root (0) root (0) 6471 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00204.html\n -rw-r--r-- 0 root (0) root (0) 6184 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00206.html\n -rw-r--r-- 0 root (0) root (0) 12066 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/a00206.png\n@@ -513,15 +513,15 @@\n -rw-r--r-- 0 root (0) root (0) 6938 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/dir_a5545368301c4029d7054f90c0ed45fc.html\n -rw-r--r-- 0 root (0) root (0) 27691 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/dir_a5545368301c4029d7054f90c0ed45fc_dep.png\n -rw-r--r-- 0 root (0) root (0) 4682 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/dir_e22f2c69b2799e923164d7b2e4fa3f8c.html\n -rw-r--r-- 0 root (0) root (0) 3037 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/dir_e22f2c69b2799e923164d7b2e4fa3f8c_dep.png\n -rw-r--r-- 0 root (0) root (0) 3482 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/dir_e68e8157741866f444e17edd764ebbae.html\n -rw-r--r-- 0 root (0) root (0) 746 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/doc.png\n -rw-r--r-- 0 root (0) root (0) 33676 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/doxygen.css\n--rw-r--r-- 0 root (0) root (0) 55023 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/dune-functions.tag.gz\n+-rw-r--r-- 0 root (0) root (0) 55034 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/dune-functions.tag.gz\n -rw-r--r-- 0 root (0) root (0) 4452 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/dynsections.js\n -rw-r--r-- 0 root (0) root (0) 24524 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/files.html\n -rw-r--r-- 0 root (0) root (0) 616 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/folderclosed.png\n -rw-r--r-- 0 root (0) root (0) 597 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/folderopen.png\n -rw-r--r-- 0 root (0) root (0) 3926 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/functions.html\n -rw-r--r-- 0 root (0) root (0) 9073 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/functions_b.html\n -rw-r--r-- 0 root (0) root (0) 7791 2023-01-12 22:26:33.000000 ./usr/share/doc/libdune-functions-doc/doxygen/functions_c.html\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00002.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00002.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: polynomial.hh File Reference</title>\n+<title>dune-functions: trigonometricfunction.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -64,36 +64,42 @@\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_e22f2c69b2799e923164d7b2e4fa3f8c.html\">analyticfunctions</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n-<a href=\"#namespaces\">Namespaces</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">polynomial.hh File Reference</div></div>\n+<a href=\"#namespaces\">Namespaces</a> |\n+<a href=\"#func-members\">Functions</a> </div>\n+ <div class=\"headertitle\"><div class=\"title\">trigonometricfunction.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <div class=\"textblock\"><code>#include <cmath></code><br />\n-<code>#include <initializer_list></code><br />\n-<code>#include <vector></code><br />\n </div>\n <p><a href=\"a00002_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01047.html\">Dune::Functions::Polynomial< K ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A scalar polynomial implementation. <a href=\"a01047.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01051.html\">Dune::Functions::TrigonometricFunction< K, sinFactor, cosFactor ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A linear combination of trigonomic functions. <a href=\"a01051.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+</table><table class=\"memberdecls\">\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n+Functions</h2></td></tr>\n+<tr class=\"memitem:ga7ec424ff4be740ad675bd85750940472\"><td class=\"memTemplParams\" colspan=\"2\">template<class K , int sinFactor, int cosFactor> </td></tr>\n+<tr class=\"memitem:ga7ec424ff4be740ad675bd85750940472\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">TrigonometricFunction< K, -cosFactor, sinFactor > </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00209.html#ga7ec424ff4be740ad675bd85750940472\">Dune::Functions::derivative</a> (const TrigonometricFunction< K, sinFactor, cosFactor > &f)</td></tr>\n+<tr class=\"memdesc:ga7ec424ff4be740ad675bd85750940472\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Obtain derivative of <a class=\"el\" href=\"a01051.html\" title=\"A linear combination of trigonomic functions.\">TrigonometricFunction</a> function. <a href=\"a00209.html#ga7ec424ff4be740ad675bd85750940472\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga7ec424ff4be740ad675bd85750940472\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,25 +5,31 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * analyticfunctions\n-Classes | Namespaces\n-polynomial.hh File Reference\n+Classes | Namespaces | Functions\n+trigonometricfunction.hh File Reference\n #include <cmath>\n-#include <initializer_list>\n-#include <vector>\n Go_to_the_source_code_of_this_file.\n Classes\n-class \u00a0Dune::Functions::Polynomial<_K_>\n-\u00a0 A scalar polynomial implementation. More...\n+class \u00a0Dune::Functions::TrigonometricFunction<_K,_sinFactor,_cosFactor_>\n+\u00a0 A linear combination of trigonomic functions. More...\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n+ Functions\n+template<class K , int sinFactor, int cosFactor>\n+TrigonometricFunction< K, -cosFactor, Dune::Functions::derivative (const\n+ sinFactor >\u00a0TrigonometricFunction< K, sinFactor,\n+ cosFactor > &f)\n+\u00a0 Obtain derivative of\n+ TrigonometricFunction function. More...\n+\u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00002_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00002_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: polynomial.hh Source File</title>\n+<title>dune-functions: trigonometricfunction.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,102 +62,57 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_e22f2c69b2799e923164d7b2e4fa3f8c.html\">analyticfunctions</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">polynomial.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">trigonometricfunction.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00002.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n <div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <cmath></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <initializer_list></span></div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <vector></span></div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00218.html\"> 10</a></span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html\"> 11</a></span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span> </div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span> </div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n <div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> K></div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01047.html\"> 25</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01047.html\">Polynomial</a></div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span>{</div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> </div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01047.html#a07e1e774e4c3c7b408ec76238faa98e9\"> 30</a></span> <a class=\"code hl_function\" href=\"a01047.html#a07e1e774e4c3c7b408ec76238faa98e9\">Polynomial</a>() = <span class=\"keywordflow\">default</span>;</div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> </div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01047.html#a9ebe46572da09754e511648d2a4a99fa\"> 33</a></span> <a class=\"code hl_function\" href=\"a01047.html#a9ebe46572da09754e511648d2a4a99fa\">Polynomial</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01047.html\">Polynomial</a>& other) = <span class=\"keywordflow\">default</span>;</div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> </div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01047.html#ab919f934c4c52541f63ae715a93f1e86\"> 36</a></span> <a class=\"code hl_function\" href=\"a01047.html#ab919f934c4c52541f63ae715a93f1e86\">Polynomial</a>(<a class=\"code hl_class\" href=\"a01047.html\">Polynomial</a>&& other) = <span class=\"keywordflow\">default</span>;</div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> </div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01047.html#a44d7c53091353fbc4c62244ffa6535fc\"> 39</a></span> <a class=\"code hl_class\" href=\"a01047.html\">Polynomial</a>& <a class=\"code hl_function\" href=\"a01047.html#a44d7c53091353fbc4c62244ffa6535fc\">operator=</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01047.html\">Polynomial</a>& other) = <span class=\"keywordflow\">default</span>;</div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> </div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01047.html#a54908974456c23c0e25d07432c3baf7b\"> 42</a></span> <a class=\"code hl_class\" href=\"a01047.html\">Polynomial</a>& <a class=\"code hl_function\" href=\"a01047.html#a54908974456c23c0e25d07432c3baf7b\">operator=</a>(<a class=\"code hl_class\" href=\"a01047.html\">Polynomial</a>&& other) = <span class=\"keywordflow\">default</span>;</div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> K, <span class=\"keywordtype\">int</span> sinFactor, <span class=\"keywordtype\">int</span> cosFactor></div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01051.html\"> 26</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01051.html\">TrigonometricFunction</a></div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span>{</div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01051.html#a84e99df5856264ae06faa710876763aa\"> 30</a></span> K <a class=\"code hl_function\" href=\"a01051.html#a84e99df5856264ae06faa710876763aa\">operator () </a>(<span class=\"keyword\">const</span> K& x)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> <span class=\"keywordflow\">return</span> sinFactor * std::sin(x) + cosFactor * std::cos(x);</div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> }</div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span>};</div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> </div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> </div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> K, <span class=\"keywordtype\">int</span> sinFactor, <span class=\"keywordtype\">int</span> cosFactor></div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00209.html#ga7ec424ff4be740ad675bd85750940472\"> 39</a></span><a class=\"code hl_class\" href=\"a01051.html\">TrigonometricFunction</a><K, -cosFactor, sinFactor> <a class=\"code hl_function\" href=\"a00209.html#ga7ec424ff4be740ad675bd85750940472\">derivative</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01051.html\">TrigonometricFunction<K, sinFactor, cosFactor></a>& f)</div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span>{</div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01051.html\">TrigonometricFunction</a><K, -cosFactor, sinFactor>();</div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span>}</div>\n <div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> </div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01047.html#a6633b542efeca5e07d3b20067f41e5f2\"> 50</a></span> <a class=\"code hl_function\" href=\"a01047.html#a6633b542efeca5e07d3b20067f41e5f2\">Polynomial</a>(std::initializer_list<K> <a class=\"code hl_function\" href=\"a01047.html#a2666283c2d91541edb1238733b9137a2\">coefficients</a>) :</div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> coefficients_(<a class=\"code hl_function\" href=\"a01047.html#a2666283c2d91541edb1238733b9137a2\">coefficients</a>)</div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> {}</div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> </div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01047.html#aff931db9cc831af67faa25633608b1de\"> 61</a></span> <a class=\"code hl_function\" href=\"a01047.html#aff931db9cc831af67faa25633608b1de\">Polynomial</a>(std::vector<K>&& <a class=\"code hl_function\" href=\"a01047.html#a2666283c2d91541edb1238733b9137a2\">coefficients</a>) :</div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> coefficients_(std::move(<a class=\"code hl_function\" href=\"a01047.html#a2666283c2d91541edb1238733b9137a2\">coefficients</a>))</div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> {}</div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> </div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01047.html#ac4a5b23bc08351760ce7053e0c930e45\"> 72</a></span> <a class=\"code hl_function\" href=\"a01047.html#ac4a5b23bc08351760ce7053e0c930e45\">Polynomial</a>(<span class=\"keyword\">const</span> std::vector<K>& <a class=\"code hl_function\" href=\"a01047.html#a2666283c2d91541edb1238733b9137a2\">coefficients</a>) :</div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> coefficients_(<a class=\"code hl_function\" href=\"a01047.html#a2666283c2d91541edb1238733b9137a2\">coefficients</a>)</div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> {}</div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> </div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01047.html#a99d155c4d14b9348fcc7b1fbfaa4b2b3\"> 77</a></span> K <a class=\"code hl_function\" href=\"a01047.html#a99d155c4d14b9348fcc7b1fbfaa4b2b3\">operator() </a>(<span class=\"keyword\">const</span> K& x)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> <span class=\"keyword\">auto</span> y = K(0);</div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<coefficients_.size(); ++i)</div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> y += coefficients_[i] * std::pow(x, i);</div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> <span class=\"keywordflow\">return</span> y;</div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> }</div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> </div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00209.html#gab201f37e58ec35c0d6fc0029ea309a92\"> 94</a></span> <span class=\"keyword\">friend</span> <a class=\"code hl_class\" href=\"a01047.html\">Polynomial</a> <a class=\"code hl_friend\" href=\"a00209.html#gab201f37e58ec35c0d6fc0029ea309a92\">derivative</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01047.html\">Polynomial</a>& p)</div>\n-<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> {</div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> std::vector<K> dpCoefficients(p.<a class=\"code hl_function\" href=\"a01047.html#a2666283c2d91541edb1238733b9137a2\">coefficients</a>().size()-1);</div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=1; i<p.coefficients_.size(); ++i)</div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> dpCoefficients[i-1] = p.<a class=\"code hl_function\" href=\"a01047.html#a2666283c2d91541edb1238733b9137a2\">coefficients</a>()[i]*i;</div>\n-<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01047.html#a07e1e774e4c3c7b408ec76238faa98e9\">Polynomial</a>(std::move(dpCoefficients));</div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> }</div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> </div>\n-<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01047.html#a2666283c2d91541edb1238733b9137a2\"> 103</a></span> <span class=\"keyword\">const</span> std::vector<K>& <a class=\"code hl_function\" href=\"a01047.html#a2666283c2d91541edb1238733b9137a2\">coefficients</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> <span class=\"keywordflow\">return</span> coefficients_;</div>\n-<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> }</div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> </div>\n-<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span><span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> std::vector<K> coefficients_;</div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span>};</div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> </div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> </div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> </div>\n-<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span>}} <span class=\"comment\">// namespace Dune::Functions</span></div>\n-<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> </div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> </div>\n-<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> </div>\n-<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH</span></div>\n-<div class=\"ttc\" id=\"aa00209_html_gab201f37e58ec35c0d6fc0029ea309a92\"><div class=\"ttname\"><a href=\"a00209.html#gab201f37e58ec35c0d6fc0029ea309a92\">Dune::Functions::Polynomial::derivative</a></div><div class=\"ttdeci\">friend Polynomial derivative(const Polynomial &p)</div><div class=\"ttdoc\">Obtain derivative of Polynomial function.</div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:94</div></div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> </div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> </div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span>}} <span class=\"comment\">// namespace Dune::Functions</span></div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> </div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> </div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH</span></div>\n+<div class=\"ttc\" id=\"aa00209_html_ga7ec424ff4be740ad675bd85750940472\"><div class=\"ttname\"><a href=\"a00209.html#ga7ec424ff4be740ad675bd85750940472\">Dune::Functions::derivative</a></div><div class=\"ttdeci\">TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const TrigonometricFunction< K, sinFactor, cosFactor > &f)</div><div class=\"ttdoc\">Obtain derivative of TrigonometricFunction function.</div><div class=\"ttdef\"><b>Definition:</b> trigonometricfunction.hh:39</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa01047_html\"><div class=\"ttname\"><a href=\"a01047.html\">Dune::Functions::Polynomial</a></div><div class=\"ttdoc\">A scalar polynomial implementation.</div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:26</div></div>\n-<div class=\"ttc\" id=\"aa01047_html_a07e1e774e4c3c7b408ec76238faa98e9\"><div class=\"ttname\"><a href=\"a01047.html#a07e1e774e4c3c7b408ec76238faa98e9\">Dune::Functions::Polynomial::Polynomial</a></div><div class=\"ttdeci\">Polynomial()=default</div><div class=\"ttdoc\">Default constructor.</div></div>\n-<div class=\"ttc\" id=\"aa01047_html_a2666283c2d91541edb1238733b9137a2\"><div class=\"ttname\"><a href=\"a01047.html#a2666283c2d91541edb1238733b9137a2\">Dune::Functions::Polynomial::coefficients</a></div><div class=\"ttdeci\">const std::vector< K > & coefficients() const</div><div class=\"ttdoc\">Obtain reference to coefficient vector.</div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:103</div></div>\n-<div class=\"ttc\" id=\"aa01047_html_a44d7c53091353fbc4c62244ffa6535fc\"><div class=\"ttname\"><a href=\"a01047.html#a44d7c53091353fbc4c62244ffa6535fc\">Dune::Functions::Polynomial::operator=</a></div><div class=\"ttdeci\">Polynomial & operator=(const Polynomial &other)=default</div><div class=\"ttdoc\">Copy-assignment operator.</div></div>\n-<div class=\"ttc\" id=\"aa01047_html_a54908974456c23c0e25d07432c3baf7b\"><div class=\"ttname\"><a href=\"a01047.html#a54908974456c23c0e25d07432c3baf7b\">Dune::Functions::Polynomial::operator=</a></div><div class=\"ttdeci\">Polynomial & operator=(Polynomial &&other)=default</div><div class=\"ttdoc\">Move-assignment operator.</div></div>\n-<div class=\"ttc\" id=\"aa01047_html_a6633b542efeca5e07d3b20067f41e5f2\"><div class=\"ttname\"><a href=\"a01047.html#a6633b542efeca5e07d3b20067f41e5f2\">Dune::Functions::Polynomial::Polynomial</a></div><div class=\"ttdeci\">Polynomial(std::initializer_list< K > coefficients)</div><div class=\"ttdoc\">Create from list of coefficients.</div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:50</div></div>\n-<div class=\"ttc\" id=\"aa01047_html_a99d155c4d14b9348fcc7b1fbfaa4b2b3\"><div class=\"ttname\"><a href=\"a01047.html#a99d155c4d14b9348fcc7b1fbfaa4b2b3\">Dune::Functions::Polynomial::operator()</a></div><div class=\"ttdeci\">K operator()(const K &x) const</div><div class=\"ttdoc\">Evaluate polynomial.</div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:77</div></div>\n-<div class=\"ttc\" id=\"aa01047_html_a9ebe46572da09754e511648d2a4a99fa\"><div class=\"ttname\"><a href=\"a01047.html#a9ebe46572da09754e511648d2a4a99fa\">Dune::Functions::Polynomial::Polynomial</a></div><div class=\"ttdeci\">Polynomial(const Polynomial &other)=default</div><div class=\"ttdoc\">Copy constructor.</div></div>\n-<div class=\"ttc\" id=\"aa01047_html_ab919f934c4c52541f63ae715a93f1e86\"><div class=\"ttname\"><a href=\"a01047.html#ab919f934c4c52541f63ae715a93f1e86\">Dune::Functions::Polynomial::Polynomial</a></div><div class=\"ttdeci\">Polynomial(Polynomial &&other)=default</div><div class=\"ttdoc\">Move constructor.</div></div>\n-<div class=\"ttc\" id=\"aa01047_html_ac4a5b23bc08351760ce7053e0c930e45\"><div class=\"ttname\"><a href=\"a01047.html#ac4a5b23bc08351760ce7053e0c930e45\">Dune::Functions::Polynomial::Polynomial</a></div><div class=\"ttdeci\">Polynomial(const std::vector< K > &coefficients)</div><div class=\"ttdoc\">Create from list of coefficients.</div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:72</div></div>\n-<div class=\"ttc\" id=\"aa01047_html_aff931db9cc831af67faa25633608b1de\"><div class=\"ttname\"><a href=\"a01047.html#aff931db9cc831af67faa25633608b1de\">Dune::Functions::Polynomial::Polynomial</a></div><div class=\"ttdeci\">Polynomial(std::vector< K > &&coefficients)</div><div class=\"ttdoc\">Create from list of coefficients.</div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:61</div></div>\n+<div class=\"ttc\" id=\"aa01051_html\"><div class=\"ttname\"><a href=\"a01051.html\">Dune::Functions::TrigonometricFunction</a></div><div class=\"ttdoc\">A linear combination of trigonomic functions.</div><div class=\"ttdef\"><b>Definition:</b> trigonometricfunction.hh:27</div></div>\n+<div class=\"ttc\" id=\"aa01051_html_a84e99df5856264ae06faa710876763aa\"><div class=\"ttname\"><a href=\"a01051.html#a84e99df5856264ae06faa710876763aa\">Dune::Functions::TrigonometricFunction::operator()</a></div><div class=\"ttdeci\">K operator()(const K &x) const</div><div class=\"ttdoc\">Evaluate function.</div><div class=\"ttdef\"><b>Definition:</b> trigonometricfunction.hh:30</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,128 +5,63 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * analyticfunctions\n-polynomial.hh\n+trigonometricfunction.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH\n- 4#define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH\n+ 3#ifndef DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH\n+ 4#define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH\n 5\n 6#include <cmath>\n- 7#include <initializer_list>\n- 8#include <vector>\n- 9\n-10namespace Dune {\n-11namespace Functions {\n+ 7\n+ 8namespace Dune {\n+ 9namespace Functions {\n+ 10\n+ 11\n 12\n- 13\n- 24template<class K>\n-25class Polynomial\n- 26{\n- 27public:\n- 28\n-30 Polynomial() = default;\n- 31\n-33 Polynomial(const Polynomial& other) = default;\n- 34\n-36 Polynomial(Polynomial&& other) = default;\n- 37\n-39 Polynomial& operator=(const Polynomial& other) = default;\n- 40\n-42 Polynomial& operator=(Polynomial&& other) = default;\n+ 25template<class K, int sinFactor, int cosFactor>\n+26class TrigonometricFunction\n+ 27{\n+ 28public:\n+30 K operator_()(const K& x) const\n+ 31 {\n+ 32 return sinFactor * std::sin(x) + cosFactor * std::cos(x);\n+ 33 }\n+ 34};\n+ 35\n+ 36\n+ 38template<class K, int sinFactor, int cosFactor>\n+39TrigonometricFunction<K, -cosFactor, sinFactor> derivative(const\n+TrigonometricFunction<K,_sinFactor,_cosFactor>& f)\n+ 40{\n+ 41 return TrigonometricFunction<K, -cosFactor, sinFactor>();\n+ 42}\n 43\n-50 Polynomial(std::initializer_list<K> coefficients) :\n- 51 coefficients_(coefficients)\n- 52 {}\n- 53\n-61 Polynomial(std::vector<K>&& coefficients) :\n- 62 coefficients_(std::move(coefficients))\n- 63 {}\n- 64\n-72 Polynomial(const std::vector<K>& coefficients) :\n- 73 coefficients_(coefficients)\n- 74 {}\n- 75\n-77 K operator()(const K& x) const\n- 78 {\n- 79 auto y = K(0);\n- 80 for (size_t i=0; i<coefficients_.size(); ++i)\n- 81 y += coefficients_[i] * std::pow(x, i);\n- 82 return y;\n- 83 }\n- 84\n-94 friend Polynomial derivative(const Polynomial& p)\n- 95 {\n- 96 std::vector<K> dpCoefficients(p.coefficients().size()-1);\n- 97 for (size_t i=1; i<p.coefficients_.size(); ++i)\n- 98 dpCoefficients[i-1] = p.coefficients()[i]*i;\n- 99 return Polynomial(std::move(dpCoefficients));\n- 100 }\n- 101\n-103 const std::vector<K>& coefficients() const\n- 104 {\n- 105 return coefficients_;\n- 106 }\n- 107\n- 108private:\n- 109 std::vector<K> coefficients_;\n- 110};\n- 111\n- 112\n- 113\n- 114}} // namespace Dune::Functions\n- 115\n- 116\n- 117\n- 118#endif // DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH\n-Dune::Functions::Polynomial::derivative\n-friend Polynomial derivative(const Polynomial &p)\n-Obtain derivative of Polynomial function.\n-Definition: polynomial.hh:94\n+ 44\n+ 45\n+ 46}} // namespace Dune::Functions\n+ 47\n+ 48\n+ 49\n+ 50#endif // DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH\n+Dune::Functions::derivative\n+TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const\n+TrigonometricFunction< K, sinFactor, cosFactor > &f)\n+Obtain derivative of TrigonometricFunction function.\n+Definition: trigonometricfunction.hh:39\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::Polynomial\n-A scalar polynomial implementation.\n-Definition: polynomial.hh:26\n-Dune::Functions::Polynomial::Polynomial\n-Polynomial()=default\n-Default constructor.\n-Dune::Functions::Polynomial::coefficients\n-const std::vector< K > & coefficients() const\n-Obtain reference to coefficient vector.\n-Definition: polynomial.hh:103\n-Dune::Functions::Polynomial::operator=\n-Polynomial & operator=(const Polynomial &other)=default\n-Copy-assignment operator.\n-Dune::Functions::Polynomial::operator=\n-Polynomial & operator=(Polynomial &&other)=default\n-Move-assignment operator.\n-Dune::Functions::Polynomial::Polynomial\n-Polynomial(std::initializer_list< K > coefficients)\n-Create from list of coefficients.\n-Definition: polynomial.hh:50\n-Dune::Functions::Polynomial::operator()\n+Dune::Functions::TrigonometricFunction\n+A linear combination of trigonomic functions.\n+Definition: trigonometricfunction.hh:27\n+Dune::Functions::TrigonometricFunction::operator()\n K operator()(const K &x) const\n-Evaluate polynomial.\n-Definition: polynomial.hh:77\n-Dune::Functions::Polynomial::Polynomial\n-Polynomial(const Polynomial &other)=default\n-Copy constructor.\n-Dune::Functions::Polynomial::Polynomial\n-Polynomial(Polynomial &&other)=default\n-Move constructor.\n-Dune::Functions::Polynomial::Polynomial\n-Polynomial(const std::vector< K > &coefficients)\n-Create from list of coefficients.\n-Definition: polynomial.hh:72\n-Dune::Functions::Polynomial::Polynomial\n-Polynomial(std::vector< K > &&coefficients)\n-Create from list of coefficients.\n-Definition: polynomial.hh:61\n+Evaluate function.\n+Definition: trigonometricfunction.hh:30\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00005.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00005.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: trigonometricfunction.hh File Reference</title>\n+<title>dune-functions: polynomial.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -64,42 +64,36 @@\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_e22f2c69b2799e923164d7b2e4fa3f8c.html\">analyticfunctions</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n-<a href=\"#namespaces\">Namespaces</a> |\n-<a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">trigonometricfunction.hh File Reference</div></div>\n+<a href=\"#namespaces\">Namespaces</a> </div>\n+ <div class=\"headertitle\"><div class=\"title\">polynomial.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <div class=\"textblock\"><code>#include <cmath></code><br />\n+<code>#include <initializer_list></code><br />\n+<code>#include <vector></code><br />\n </div>\n <p><a href=\"a00005_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01051.html\">Dune::Functions::TrigonometricFunction< K, sinFactor, cosFactor ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A linear combination of trigonomic functions. <a href=\"a01051.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01047.html\">Dune::Functions::Polynomial< K ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A scalar polynomial implementation. <a href=\"a01047.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-</table><table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n-Functions</h2></td></tr>\n-<tr class=\"memitem:ga7ec424ff4be740ad675bd85750940472\"><td class=\"memTemplParams\" colspan=\"2\">template<class K , int sinFactor, int cosFactor> </td></tr>\n-<tr class=\"memitem:ga7ec424ff4be740ad675bd85750940472\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">TrigonometricFunction< K, -cosFactor, sinFactor > </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00209.html#ga7ec424ff4be740ad675bd85750940472\">Dune::Functions::derivative</a> (const TrigonometricFunction< K, sinFactor, cosFactor > &f)</td></tr>\n-<tr class=\"memdesc:ga7ec424ff4be740ad675bd85750940472\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Obtain derivative of <a class=\"el\" href=\"a01051.html\" title=\"A linear combination of trigonomic functions.\">TrigonometricFunction</a> function. <a href=\"a00209.html#ga7ec424ff4be740ad675bd85750940472\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga7ec424ff4be740ad675bd85750940472\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,31 +5,25 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * analyticfunctions\n-Classes | Namespaces | Functions\n-trigonometricfunction.hh File Reference\n+Classes | Namespaces\n+polynomial.hh File Reference\n #include <cmath>\n+#include <initializer_list>\n+#include <vector>\n Go_to_the_source_code_of_this_file.\n Classes\n-class \u00a0Dune::Functions::TrigonometricFunction<_K,_sinFactor,_cosFactor_>\n-\u00a0 A linear combination of trigonomic functions. More...\n+class \u00a0Dune::Functions::Polynomial<_K_>\n+\u00a0 A scalar polynomial implementation. More...\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n- Functions\n-template<class K , int sinFactor, int cosFactor>\n-TrigonometricFunction< K, -cosFactor, Dune::Functions::derivative (const\n- sinFactor >\u00a0TrigonometricFunction< K, sinFactor,\n- cosFactor > &f)\n-\u00a0 Obtain derivative of\n- TrigonometricFunction function. More...\n-\u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00005_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00005_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: trigonometricfunction.hh Source File</title>\n+<title>dune-functions: polynomial.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,57 +62,102 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_e22f2c69b2799e923164d7b2e4fa3f8c.html\">analyticfunctions</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">trigonometricfunction.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">polynomial.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00005.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n <div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <cmath></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span> </div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span> </div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <initializer_list></span></div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <vector></span></div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00218.html\"> 10</a></span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html\"> 11</a></span><span class=\"keyword\">namespace </span>Functions {</div>\n <div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> K, <span class=\"keywordtype\">int</span> sinFactor, <span class=\"keywordtype\">int</span> cosFactor></div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01051.html\"> 26</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01051.html\">TrigonometricFunction</a></div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span>{</div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01051.html#a84e99df5856264ae06faa710876763aa\"> 30</a></span> K <a class=\"code hl_function\" href=\"a01051.html#a84e99df5856264ae06faa710876763aa\">operator () </a>(<span class=\"keyword\">const</span> K& x)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> <span class=\"keywordflow\">return</span> sinFactor * std::sin(x) + cosFactor * std::cos(x);</div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> }</div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span>};</div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> </div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> </div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> K, <span class=\"keywordtype\">int</span> sinFactor, <span class=\"keywordtype\">int</span> cosFactor></div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00209.html#ga7ec424ff4be740ad675bd85750940472\"> 39</a></span><a class=\"code hl_class\" href=\"a01051.html\">TrigonometricFunction</a><K, -cosFactor, sinFactor> <a class=\"code hl_function\" href=\"a00209.html#ga7ec424ff4be740ad675bd85750940472\">derivative</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01051.html\">TrigonometricFunction<K, sinFactor, cosFactor></a>& f)</div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span>{</div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01051.html\">TrigonometricFunction</a><K, -cosFactor, sinFactor>();</div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span>}</div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> K></div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01047.html\"> 25</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01047.html\">Polynomial</a></div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span>{</div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> </div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01047.html#a07e1e774e4c3c7b408ec76238faa98e9\"> 30</a></span> <a class=\"code hl_function\" href=\"a01047.html#a07e1e774e4c3c7b408ec76238faa98e9\">Polynomial</a>() = <span class=\"keywordflow\">default</span>;</div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> </div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01047.html#a9ebe46572da09754e511648d2a4a99fa\"> 33</a></span> <a class=\"code hl_function\" href=\"a01047.html#a9ebe46572da09754e511648d2a4a99fa\">Polynomial</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01047.html\">Polynomial</a>& other) = <span class=\"keywordflow\">default</span>;</div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> </div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01047.html#ab919f934c4c52541f63ae715a93f1e86\"> 36</a></span> <a class=\"code hl_function\" href=\"a01047.html#ab919f934c4c52541f63ae715a93f1e86\">Polynomial</a>(<a class=\"code hl_class\" href=\"a01047.html\">Polynomial</a>&& other) = <span class=\"keywordflow\">default</span>;</div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> </div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01047.html#a44d7c53091353fbc4c62244ffa6535fc\"> 39</a></span> <a class=\"code hl_class\" href=\"a01047.html\">Polynomial</a>& <a class=\"code hl_function\" href=\"a01047.html#a44d7c53091353fbc4c62244ffa6535fc\">operator=</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01047.html\">Polynomial</a>& other) = <span class=\"keywordflow\">default</span>;</div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> </div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01047.html#a54908974456c23c0e25d07432c3baf7b\"> 42</a></span> <a class=\"code hl_class\" href=\"a01047.html\">Polynomial</a>& <a class=\"code hl_function\" href=\"a01047.html#a54908974456c23c0e25d07432c3baf7b\">operator=</a>(<a class=\"code hl_class\" href=\"a01047.html\">Polynomial</a>&& other) = <span class=\"keywordflow\">default</span>;</div>\n <div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> </div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> </div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> </div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span>}} <span class=\"comment\">// namespace Dune::Functions</span></div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> </div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> </div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH</span></div>\n-<div class=\"ttc\" id=\"aa00209_html_ga7ec424ff4be740ad675bd85750940472\"><div class=\"ttname\"><a href=\"a00209.html#ga7ec424ff4be740ad675bd85750940472\">Dune::Functions::derivative</a></div><div class=\"ttdeci\">TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const TrigonometricFunction< K, sinFactor, cosFactor > &f)</div><div class=\"ttdoc\">Obtain derivative of TrigonometricFunction function.</div><div class=\"ttdef\"><b>Definition:</b> trigonometricfunction.hh:39</div></div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01047.html#a6633b542efeca5e07d3b20067f41e5f2\"> 50</a></span> <a class=\"code hl_function\" href=\"a01047.html#a6633b542efeca5e07d3b20067f41e5f2\">Polynomial</a>(std::initializer_list<K> <a class=\"code hl_function\" href=\"a01047.html#a2666283c2d91541edb1238733b9137a2\">coefficients</a>) :</div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> coefficients_(<a class=\"code hl_function\" href=\"a01047.html#a2666283c2d91541edb1238733b9137a2\">coefficients</a>)</div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> {}</div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> </div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01047.html#aff931db9cc831af67faa25633608b1de\"> 61</a></span> <a class=\"code hl_function\" href=\"a01047.html#aff931db9cc831af67faa25633608b1de\">Polynomial</a>(std::vector<K>&& <a class=\"code hl_function\" href=\"a01047.html#a2666283c2d91541edb1238733b9137a2\">coefficients</a>) :</div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> coefficients_(std::move(<a class=\"code hl_function\" href=\"a01047.html#a2666283c2d91541edb1238733b9137a2\">coefficients</a>))</div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> {}</div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> </div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01047.html#ac4a5b23bc08351760ce7053e0c930e45\"> 72</a></span> <a class=\"code hl_function\" href=\"a01047.html#ac4a5b23bc08351760ce7053e0c930e45\">Polynomial</a>(<span class=\"keyword\">const</span> std::vector<K>& <a class=\"code hl_function\" href=\"a01047.html#a2666283c2d91541edb1238733b9137a2\">coefficients</a>) :</div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> coefficients_(<a class=\"code hl_function\" href=\"a01047.html#a2666283c2d91541edb1238733b9137a2\">coefficients</a>)</div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> {}</div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> </div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01047.html#a99d155c4d14b9348fcc7b1fbfaa4b2b3\"> 77</a></span> K <a class=\"code hl_function\" href=\"a01047.html#a99d155c4d14b9348fcc7b1fbfaa4b2b3\">operator() </a>(<span class=\"keyword\">const</span> K& x)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> <span class=\"keyword\">auto</span> y = K(0);</div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<coefficients_.size(); ++i)</div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> y += coefficients_[i] * std::pow(x, i);</div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> <span class=\"keywordflow\">return</span> y;</div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> }</div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> </div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00209.html#gab201f37e58ec35c0d6fc0029ea309a92\"> 94</a></span> <span class=\"keyword\">friend</span> <a class=\"code hl_class\" href=\"a01047.html\">Polynomial</a> <a class=\"code hl_friend\" href=\"a00209.html#gab201f37e58ec35c0d6fc0029ea309a92\">derivative</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01047.html\">Polynomial</a>& p)</div>\n+<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> {</div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> std::vector<K> dpCoefficients(p.<a class=\"code hl_function\" href=\"a01047.html#a2666283c2d91541edb1238733b9137a2\">coefficients</a>().size()-1);</div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=1; i<p.coefficients_.size(); ++i)</div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> dpCoefficients[i-1] = p.<a class=\"code hl_function\" href=\"a01047.html#a2666283c2d91541edb1238733b9137a2\">coefficients</a>()[i]*i;</div>\n+<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01047.html#a07e1e774e4c3c7b408ec76238faa98e9\">Polynomial</a>(std::move(dpCoefficients));</div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> }</div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> </div>\n+<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01047.html#a2666283c2d91541edb1238733b9137a2\"> 103</a></span> <span class=\"keyword\">const</span> std::vector<K>& <a class=\"code hl_function\" href=\"a01047.html#a2666283c2d91541edb1238733b9137a2\">coefficients</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> <span class=\"keywordflow\">return</span> coefficients_;</div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> }</div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> </div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> std::vector<K> coefficients_;</div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span>};</div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> </div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> </div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> </div>\n+<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span>}} <span class=\"comment\">// namespace Dune::Functions</span></div>\n+<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> </div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> </div>\n+<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> </div>\n+<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH</span></div>\n+<div class=\"ttc\" id=\"aa00209_html_gab201f37e58ec35c0d6fc0029ea309a92\"><div class=\"ttname\"><a href=\"a00209.html#gab201f37e58ec35c0d6fc0029ea309a92\">Dune::Functions::Polynomial::derivative</a></div><div class=\"ttdeci\">friend Polynomial derivative(const Polynomial &p)</div><div class=\"ttdoc\">Obtain derivative of Polynomial function.</div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:94</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa01051_html\"><div class=\"ttname\"><a href=\"a01051.html\">Dune::Functions::TrigonometricFunction</a></div><div class=\"ttdoc\">A linear combination of trigonomic functions.</div><div class=\"ttdef\"><b>Definition:</b> trigonometricfunction.hh:27</div></div>\n-<div class=\"ttc\" id=\"aa01051_html_a84e99df5856264ae06faa710876763aa\"><div class=\"ttname\"><a href=\"a01051.html#a84e99df5856264ae06faa710876763aa\">Dune::Functions::TrigonometricFunction::operator()</a></div><div class=\"ttdeci\">K operator()(const K &x) const</div><div class=\"ttdoc\">Evaluate function.</div><div class=\"ttdef\"><b>Definition:</b> trigonometricfunction.hh:30</div></div>\n+<div class=\"ttc\" id=\"aa01047_html\"><div class=\"ttname\"><a href=\"a01047.html\">Dune::Functions::Polynomial</a></div><div class=\"ttdoc\">A scalar polynomial implementation.</div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:26</div></div>\n+<div class=\"ttc\" id=\"aa01047_html_a07e1e774e4c3c7b408ec76238faa98e9\"><div class=\"ttname\"><a href=\"a01047.html#a07e1e774e4c3c7b408ec76238faa98e9\">Dune::Functions::Polynomial::Polynomial</a></div><div class=\"ttdeci\">Polynomial()=default</div><div class=\"ttdoc\">Default constructor.</div></div>\n+<div class=\"ttc\" id=\"aa01047_html_a2666283c2d91541edb1238733b9137a2\"><div class=\"ttname\"><a href=\"a01047.html#a2666283c2d91541edb1238733b9137a2\">Dune::Functions::Polynomial::coefficients</a></div><div class=\"ttdeci\">const std::vector< K > & coefficients() const</div><div class=\"ttdoc\">Obtain reference to coefficient vector.</div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:103</div></div>\n+<div class=\"ttc\" id=\"aa01047_html_a44d7c53091353fbc4c62244ffa6535fc\"><div class=\"ttname\"><a href=\"a01047.html#a44d7c53091353fbc4c62244ffa6535fc\">Dune::Functions::Polynomial::operator=</a></div><div class=\"ttdeci\">Polynomial & operator=(const Polynomial &other)=default</div><div class=\"ttdoc\">Copy-assignment operator.</div></div>\n+<div class=\"ttc\" id=\"aa01047_html_a54908974456c23c0e25d07432c3baf7b\"><div class=\"ttname\"><a href=\"a01047.html#a54908974456c23c0e25d07432c3baf7b\">Dune::Functions::Polynomial::operator=</a></div><div class=\"ttdeci\">Polynomial & operator=(Polynomial &&other)=default</div><div class=\"ttdoc\">Move-assignment operator.</div></div>\n+<div class=\"ttc\" id=\"aa01047_html_a6633b542efeca5e07d3b20067f41e5f2\"><div class=\"ttname\"><a href=\"a01047.html#a6633b542efeca5e07d3b20067f41e5f2\">Dune::Functions::Polynomial::Polynomial</a></div><div class=\"ttdeci\">Polynomial(std::initializer_list< K > coefficients)</div><div class=\"ttdoc\">Create from list of coefficients.</div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:50</div></div>\n+<div class=\"ttc\" id=\"aa01047_html_a99d155c4d14b9348fcc7b1fbfaa4b2b3\"><div class=\"ttname\"><a href=\"a01047.html#a99d155c4d14b9348fcc7b1fbfaa4b2b3\">Dune::Functions::Polynomial::operator()</a></div><div class=\"ttdeci\">K operator()(const K &x) const</div><div class=\"ttdoc\">Evaluate polynomial.</div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:77</div></div>\n+<div class=\"ttc\" id=\"aa01047_html_a9ebe46572da09754e511648d2a4a99fa\"><div class=\"ttname\"><a href=\"a01047.html#a9ebe46572da09754e511648d2a4a99fa\">Dune::Functions::Polynomial::Polynomial</a></div><div class=\"ttdeci\">Polynomial(const Polynomial &other)=default</div><div class=\"ttdoc\">Copy constructor.</div></div>\n+<div class=\"ttc\" id=\"aa01047_html_ab919f934c4c52541f63ae715a93f1e86\"><div class=\"ttname\"><a href=\"a01047.html#ab919f934c4c52541f63ae715a93f1e86\">Dune::Functions::Polynomial::Polynomial</a></div><div class=\"ttdeci\">Polynomial(Polynomial &&other)=default</div><div class=\"ttdoc\">Move constructor.</div></div>\n+<div class=\"ttc\" id=\"aa01047_html_ac4a5b23bc08351760ce7053e0c930e45\"><div class=\"ttname\"><a href=\"a01047.html#ac4a5b23bc08351760ce7053e0c930e45\">Dune::Functions::Polynomial::Polynomial</a></div><div class=\"ttdeci\">Polynomial(const std::vector< K > &coefficients)</div><div class=\"ttdoc\">Create from list of coefficients.</div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:72</div></div>\n+<div class=\"ttc\" id=\"aa01047_html_aff931db9cc831af67faa25633608b1de\"><div class=\"ttname\"><a href=\"a01047.html#aff931db9cc831af67faa25633608b1de\">Dune::Functions::Polynomial::Polynomial</a></div><div class=\"ttdeci\">Polynomial(std::vector< K > &&coefficients)</div><div class=\"ttdoc\">Create from list of coefficients.</div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:61</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,63 +5,128 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * analyticfunctions\n-trigonometricfunction.hh\n+polynomial.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH\n- 4#define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH\n+ 3#ifndef DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH\n+ 4#define DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH\n 5\n 6#include <cmath>\n- 7\n- 8namespace Dune {\n- 9namespace Functions {\n- 10\n- 11\n+ 7#include <initializer_list>\n+ 8#include <vector>\n+ 9\n+10namespace Dune {\n+11namespace Functions {\n 12\n- 25template<class K, int sinFactor, int cosFactor>\n-26class TrigonometricFunction\n- 27{\n- 28public:\n-30 K operator_()(const K& x) const\n- 31 {\n- 32 return sinFactor * std::sin(x) + cosFactor * std::cos(x);\n- 33 }\n- 34};\n- 35\n- 36\n- 38template<class K, int sinFactor, int cosFactor>\n-39TrigonometricFunction<K, -cosFactor, sinFactor> derivative(const\n-TrigonometricFunction<K,_sinFactor,_cosFactor>& f)\n- 40{\n- 41 return TrigonometricFunction<K, -cosFactor, sinFactor>();\n- 42}\n+ 13\n+ 24template<class K>\n+25class Polynomial\n+ 26{\n+ 27public:\n+ 28\n+30 Polynomial() = default;\n+ 31\n+33 Polynomial(const Polynomial& other) = default;\n+ 34\n+36 Polynomial(Polynomial&& other) = default;\n+ 37\n+39 Polynomial& operator=(const Polynomial& other) = default;\n+ 40\n+42 Polynomial& operator=(Polynomial&& other) = default;\n 43\n- 44\n- 45\n- 46}} // namespace Dune::Functions\n- 47\n- 48\n- 49\n- 50#endif // DUNE_FUNCTIONS_ANALYTICFUNCTIONS_TRIGONOMETRICFUNCTION_HH\n-Dune::Functions::derivative\n-TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const\n-TrigonometricFunction< K, sinFactor, cosFactor > &f)\n-Obtain derivative of TrigonometricFunction function.\n-Definition: trigonometricfunction.hh:39\n+50 Polynomial(std::initializer_list<K> coefficients) :\n+ 51 coefficients_(coefficients)\n+ 52 {}\n+ 53\n+61 Polynomial(std::vector<K>&& coefficients) :\n+ 62 coefficients_(std::move(coefficients))\n+ 63 {}\n+ 64\n+72 Polynomial(const std::vector<K>& coefficients) :\n+ 73 coefficients_(coefficients)\n+ 74 {}\n+ 75\n+77 K operator()(const K& x) const\n+ 78 {\n+ 79 auto y = K(0);\n+ 80 for (size_t i=0; i<coefficients_.size(); ++i)\n+ 81 y += coefficients_[i] * std::pow(x, i);\n+ 82 return y;\n+ 83 }\n+ 84\n+94 friend Polynomial derivative(const Polynomial& p)\n+ 95 {\n+ 96 std::vector<K> dpCoefficients(p.coefficients().size()-1);\n+ 97 for (size_t i=1; i<p.coefficients_.size(); ++i)\n+ 98 dpCoefficients[i-1] = p.coefficients()[i]*i;\n+ 99 return Polynomial(std::move(dpCoefficients));\n+ 100 }\n+ 101\n+103 const std::vector<K>& coefficients() const\n+ 104 {\n+ 105 return coefficients_;\n+ 106 }\n+ 107\n+ 108private:\n+ 109 std::vector<K> coefficients_;\n+ 110};\n+ 111\n+ 112\n+ 113\n+ 114}} // namespace Dune::Functions\n+ 115\n+ 116\n+ 117\n+ 118#endif // DUNE_FUNCTIONS_ANALYTICFUNCTIONS_POLYNOMIAL_HH\n+Dune::Functions::Polynomial::derivative\n+friend Polynomial derivative(const Polynomial &p)\n+Obtain derivative of Polynomial function.\n+Definition: polynomial.hh:94\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::TrigonometricFunction\n-A linear combination of trigonomic functions.\n-Definition: trigonometricfunction.hh:27\n-Dune::Functions::TrigonometricFunction::operator()\n+Dune::Functions::Polynomial\n+A scalar polynomial implementation.\n+Definition: polynomial.hh:26\n+Dune::Functions::Polynomial::Polynomial\n+Polynomial()=default\n+Default constructor.\n+Dune::Functions::Polynomial::coefficients\n+const std::vector< K > & coefficients() const\n+Obtain reference to coefficient vector.\n+Definition: polynomial.hh:103\n+Dune::Functions::Polynomial::operator=\n+Polynomial & operator=(const Polynomial &other)=default\n+Copy-assignment operator.\n+Dune::Functions::Polynomial::operator=\n+Polynomial & operator=(Polynomial &&other)=default\n+Move-assignment operator.\n+Dune::Functions::Polynomial::Polynomial\n+Polynomial(std::initializer_list< K > coefficients)\n+Create from list of coefficients.\n+Definition: polynomial.hh:50\n+Dune::Functions::Polynomial::operator()\n K operator()(const K &x) const\n-Evaluate function.\n-Definition: trigonometricfunction.hh:30\n+Evaluate polynomial.\n+Definition: polynomial.hh:77\n+Dune::Functions::Polynomial::Polynomial\n+Polynomial(const Polynomial &other)=default\n+Copy constructor.\n+Dune::Functions::Polynomial::Polynomial\n+Polynomial(Polynomial &&other)=default\n+Move constructor.\n+Dune::Functions::Polynomial::Polynomial\n+Polynomial(const std::vector< K > &coefficients)\n+Create from list of coefficients.\n+Definition: polynomial.hh:72\n+Dune::Functions::Polynomial::Polynomial\n+Polynomial(std::vector< K > &&coefficients)\n+Create from list of coefficients.\n+Definition: polynomial.hh:61\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00011.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00011.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: istlvectorbackend.hh File Reference</title>\n+<title>dune-functions: differentiablefunction.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,61 +58,49 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_8457ebf380090bd61e5d3eab5b7eb9a1.html\">backends</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n-<a href=\"#namespaces\">Namespaces</a> |\n-<a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">istlvectorbackend.hh File Reference</div></div>\n+<a href=\"#nested-classes\">Classes</a> |\n+<a href=\"#namespaces\">Namespaces</a> </div>\n+ <div class=\"headertitle\"><div class=\"title\">differentiablefunction.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <cstddef></code><br />\n-<code>#include <utility></code><br />\n-<code>#include <type_traits></code><br />\n-<code>#include <dune/common/std/type_traits.hh></code><br />\n-<code>#include <dune/common/indices.hh></code><br />\n-<code>#include <dune/common/hybridutilities.hh></code><br />\n-<code>#include <dune/common/concept.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00041_source.html\">dune/functions/common/indexaccess.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a02876_source.html\">dune/functions/functionspacebases/concepts.hh</a>></code><br />\n+<div class=\"textblock\"><code>#include <type_traits></code><br />\n+<code>#include <dune/common/typeutilities.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00029_source.html\">dune/functions/common/type_traits.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00035_source.html\">dune/functions/common/defaultderivativetraits.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00071_source.html\">dune/functions/common/differentiablefunction_imp.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00008_source.html\">dune/functions/common/signature.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00050_source.html\">dune/functions/common/typeerasure.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00020_source.html\">dune/functions/common/functionconcepts.hh</a>></code><br />\n </div>\n <p><a href=\"a00011_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n+Classes</h2></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01095.html\">Dune::Functions::DifferentiableFunction< Signature, DerivativeTraits, bufferSize ></a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01103.html\">Dune::Functions::DifferentiableFunction< Range(Domain), DerivativeTraits, bufferSize ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Class storing differentiable functions using type erasure. <a href=\"a01103.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+</table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-</table><table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n-Functions</h2></td></tr>\n-<tr class=\"memitem:ad0a3b4e397e76b3d02cb06a7793fdb7b\"><td class=\"memTemplParams\" colspan=\"2\">template<class V > </td></tr>\n-<tr class=\"memitem:ad0a3b4e397e76b3d02cb06a7793fdb7b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">constexpr auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#ad0a3b4e397e76b3d02cb06a7793fdb7b\">Dune::Functions::fieldTypes</a> ()</td></tr>\n-<tr class=\"memdesc:ad0a3b4e397e76b3d02cb06a7793fdb7b\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Generate list of field types in container. <a href=\"a00219.html#ad0a3b4e397e76b3d02cb06a7793fdb7b\">More...</a><br /></td></tr>\n-<tr class=\"separator:ad0a3b4e397e76b3d02cb06a7793fdb7b\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:af8b09a0411c63ab6a6500a7b6edb9dfb\"><td class=\"memTemplParams\" colspan=\"2\">template<class V > </td></tr>\n-<tr class=\"memitem:af8b09a0411c63ab6a6500a7b6edb9dfb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">constexpr bool </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#af8b09a0411c63ab6a6500a7b6edb9dfb\">Dune::Functions::hasUniqueFieldType</a> ()</td></tr>\n-<tr class=\"memdesc:af8b09a0411c63ab6a6500a7b6edb9dfb\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Check if container has a unique field type. <a href=\"a00219.html#af8b09a0411c63ab6a6500a7b6edb9dfb\">More...</a><br /></td></tr>\n-<tr class=\"separator:af8b09a0411c63ab6a6500a7b6edb9dfb\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:gae5b9f62f85e3d638423142695a74d056\"><td class=\"memTemplParams\" colspan=\"2\">template<class Vector > </td></tr>\n-<tr class=\"memitem:gae5b9f62f85e3d638423142695a74d056\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00214.html#gae5b9f62f85e3d638423142695a74d056\">Dune::Functions::istlVectorBackend</a> (Vector &v)</td></tr>\n-<tr class=\"memdesc:gae5b9f62f85e3d638423142695a74d056\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Return a vector backend wrapping non-const ISTL like containers. <a href=\"a00214.html#gae5b9f62f85e3d638423142695a74d056\">More...</a><br /></td></tr>\n-<tr class=\"separator:gae5b9f62f85e3d638423142695a74d056\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:ga50a181637103e7abc011235a9fd30611\"><td class=\"memTemplParams\" colspan=\"2\">template<class Vector > </td></tr>\n-<tr class=\"memitem:ga50a181637103e7abc011235a9fd30611\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00214.html#ga50a181637103e7abc011235a9fd30611\">Dune::Functions::istlVectorBackend</a> (const Vector &v)</td></tr>\n-<tr class=\"memdesc:ga50a181637103e7abc011235a9fd30611\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Return a vector backend wrapping const ISTL like containers. <a href=\"a00214.html#ga50a181637103e7abc011235a9fd30611\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga50a181637103e7abc011235a9fd30611\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,47 +4,35 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * backends\n-Namespaces | Functions\n-istlvectorbackend.hh File Reference\n-#include <cstddef>\n-#include <utility>\n+ * common\n+Classes | Namespaces\n+differentiablefunction.hh File Reference\n #include <type_traits>\n-#include <dune/common/std/type_traits.hh>\n-#include <dune/common/indices.hh>\n-#include <dune/common/hybridutilities.hh>\n-#include <dune/common/concept.hh>\n-#include <dune/functions/common/indexaccess.hh>\n-#include <dune/functions/functionspacebases/concepts.hh>\n+#include <dune/common/typeutilities.hh>\n+#include <dune/functions/common/type_traits.hh>\n+#include <dune/functions/common/defaultderivativetraits.hh>\n+#include <dune/functions/common/differentiablefunction_imp.hh>\n+#include <dune/functions/common/signature.hh>\n+#include <dune/functions/common/typeerasure.hh>\n+#include <dune/functions/common/functionconcepts.hh>\n Go_to_the_source_code_of_this_file.\n+ Classes\n+class \u00a0Dune::Functions::DifferentiableFunction<_Signature,_DerivativeTraits,\n+ bufferSize_>\n+\u00a0\n+class \u00a0Dune::Functions::DifferentiableFunction<_Range(Domain),\n+ DerivativeTraits,_bufferSize_>\n+\u00a0 Class storing differentiable functions using type erasure. More...\n+\u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n- Functions\n-template<class V >\n-constexpr auto\u00a0Dune::Functions::fieldTypes ()\n-\u00a0 Generate list of field types in container. More...\n-\u00a0\n-template<class V >\n-constexpr bool\u00a0Dune::Functions::hasUniqueFieldType ()\n-\u00a0 Check if container has a unique field type. More...\n-\u00a0\n-template<class Vector >\n- auto\u00a0Dune::Functions::istlVectorBackend (Vector &v)\n-\u00a0 Return a vector backend wrapping non-const ISTL like\n- containers. More...\n-\u00a0\n-template<class Vector >\n- auto\u00a0Dune::Functions::istlVectorBackend (const Vector &v)\n-\u00a0 Return a vector backend wrapping const ISTL like containers.\n- More...\n-\u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00011_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00011_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: istlvectorbackend.hh Source File</title>\n+<title>dune-functions: differentiablefunction.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,339 +58,132 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_8457ebf380090bd61e5d3eab5b7eb9a1.html\">backends</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">istlvectorbackend.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">differentiablefunction.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00011.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <cstddef></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <utility></span></div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <type_traits></span></div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <type_traits></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span> </div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <dune/common/typeutilities.hh></span></div>\n <div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/std/type_traits.hh></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/common/indices.hh></span></div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <dune/common/hybridutilities.hh></span></div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <dune/common/concept.hh></span></div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00041.html\">dune/functions/common/indexaccess.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a02876.html\">dune/functions/functionspacebases/concepts.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00029.html\">dune/functions/common/type_traits.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00035.html\">dune/functions/common/defaultderivativetraits.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00071.html\">dune/functions/common/differentiablefunction_imp.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00008.html\">dune/functions/common/signature.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00050.html\">dune/functions/common/typeerasure.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00020.html\">dune/functions/common/functionconcepts.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span> </div>\n <div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> </div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"keyword\">namespace </span>Impl {</div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span> </div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>V,</div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> std::enable_if_t<not Dune::models<Imp::Concept::HasStaticIndexAccess, V>() , <span class=\"keywordtype\">int</span>> = 0></div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00219.html#ad0a3b4e397e76b3d02cb06a7793fdb7b\">fieldTypes</a>(V&& <span class=\"comment\">/*v*/</span>)</div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span>{</div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> <span class=\"keywordflow\">return</span> TypeList<V>{};</div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span>}</div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"comment\">/*</span></div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"comment\"> * Default implementation is empty</span></div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"comment\"> * The actual implementation is only given if Signature is an type</span></div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span><span class=\"comment\"> * describing a function signature as Range(Domain).</span></div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"comment\"> */</span></div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits=DefaultDerivativeTraits, <span class=\"keywordtype\">size_t</span> bufferSize=56></div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01095.html\"> 28</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01095.html\">DifferentiableFunction</a></div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span>{};</div>\n <div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> </div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>V,</div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> std::enable_if_t<Dune::models<Imp::Concept::HasStaticIndexAccess, V>(), <span class=\"keywordtype\">int</span>> = 0></div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00219.html#ad0a3b4e397e76b3d02cb06a7793fdb7b\">fieldTypes</a>(V&& v)</div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> </div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> </div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span><span class=\"keyword\">namespace </span>Imp</div>\n <div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span>{</div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> (Dune::models<Imp::Concept::HasDynamicIndexAccess<std::size_t>, V>())</div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00219.html#ad0a3b4e397e76b3d02cb06a7793fdb7b\">fieldTypes</a>(v[std::size_t{0}]);</div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> <span class=\"keywordflow\">else</span></div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> {</div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> <span class=\"keyword\">auto</span> indexRange = <span class=\"keyword\">typename</span> <span class=\"keyword\">decltype</span>(range(Hybrid::size(v)))::integer_sequence();</div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> <span class=\"keywordflow\">return</span> unpackIntegerSequence([&](<span class=\"keyword\">auto</span>... i) {</div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> <span class=\"keywordflow\">return</span> uniqueTypeList(std::tuple_cat(<a class=\"code hl_function\" href=\"a00219.html#ad0a3b4e397e76b3d02cb06a7793fdb7b\">fieldTypes</a>(v[i])...));</div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> }, indexRange);</div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> }</div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span>}</div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> </div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> S, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits, <span class=\"keywordtype\">size_t</span> bufferSize></div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> <span class=\"keyword\">struct </span>DifferentiableFunctionTraits</div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> {</div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> <span class=\"keyword\">using </span>Signature = S;</div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> </div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> <span class=\"keyword\">using </span>Range = <span class=\"keyword\">typename</span> <a class=\"code hl_struct\" href=\"a01291.html\">SignatureTraits<Signature>::Range</a>;</div>\n <div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> </div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span>} <span class=\"comment\">// namespace Impl</span></div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> <span class=\"keyword\">using </span>Domain = <span class=\"keyword\">typename</span> <a class=\"code hl_struct\" href=\"a01291.html\">SignatureTraits<Signature>::Domain</a>;</div>\n <div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> </div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> </div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> V></div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#ad0a3b4e397e76b3d02cb06a7793fdb7b\"> 63</a></span><span class=\"keyword\">constexpr</span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00219.html#ad0a3b4e397e76b3d02cb06a7793fdb7b\">fieldTypes</a>()</div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span>{</div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> <span class=\"keywordflow\">return</span> <span class=\"keyword\">decltype</span>(<a class=\"code hl_function\" href=\"a00219.html#ad0a3b4e397e76b3d02cb06a7793fdb7b\">Impl::fieldTypes</a>(std::declval<V>())){};</div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span>}</div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> </div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> V></div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#af8b09a0411c63ab6a6500a7b6edb9dfb\"> 74</a></span><span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a00219.html#af8b09a0411c63ab6a6500a7b6edb9dfb\">hasUniqueFieldType</a>()</div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span>{</div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> <span class=\"keywordflow\">return</span> std::tuple_size<std::decay_t<decltype(fieldTypes<V>())>>::value==1;</div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span>}</div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> </div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> </div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> </div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span><span class=\"keyword\">namespace </span>Impl {</div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> </div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span><span class=\"comment\">/*</span></div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span><span class=\"comment\"> * \\brief A wrapper providing multi-index access to vector entries</span></div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span><span class=\"comment\"> *</span></div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span><span class=\"comment\"> * The wrapped vector type should be an istl like random</span></div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span><span class=\"comment\"> * access container providing operator[] and size() methods.</span></div>\n-<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span><span class=\"comment\"> * For classical containers this should support indices</span></div>\n-<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span><span class=\"comment\"> * of type std::size_t. For multi-type containers indices</span></div>\n-<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span><span class=\"comment\"> * of the form Dune::index_constant<i> should be supported</span></div>\n-<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span><span class=\"comment\"> * while size() should be a static constexpr method.</span></div>\n-<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span><span class=\"comment\"> *</span></div>\n-<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span><span class=\"comment\"> * When resolving multi-indices the backend appends indices</span></div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span><span class=\"comment\"> * using operator[] as long as the result is not a scalar.</span></div>\n-<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span><span class=\"comment\"> * If this exhausts the digits of the multi-index, additional</span></div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span><span class=\"comment\"> * zero`s are appended.</span></div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span><span class=\"comment\"> *</span></div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span><span class=\"comment\"> * \\tparam V Type of the raw wrapper vector</span></div>\n-<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span><span class=\"comment\"> */</span></div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> V></div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span><span class=\"keyword\">class </span>ISTLVectorBackend</div>\n-<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span>{</div>\n-<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> </div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> <span class=\"comment\">// Template aliases for using detection idiom.</span></div>\n-<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C></div>\n-<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> <span class=\"keyword\">using </span>dynamicIndexAccess_t = <span class=\"keyword\">decltype</span>(std::declval<C>()[0]);</div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> </div>\n-<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C></div>\n-<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> <span class=\"keyword\">using </span>staticIndexAccess_t = <span class=\"keyword\">decltype</span>(std::declval<C>()[Dune::Indices::_0]);</div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> </div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C></div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> <span class=\"keyword\">using </span>resizeMethod_t = <span class=\"keyword\">decltype</span>(std::declval<C>().resize(0));</div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> </div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> <span class=\"keyword\">using </span>DerivativeSignature = <span class=\"keyword\">typename</span> <a class=\"code hl_struct\" href=\"a01291.html\">SignatureTraits<Signature>::template</a> DerivativeSignature<DerivativeTraits>;</div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> </div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> <span class=\"keyword\">using </span>DerivativeInterface = <a class=\"code hl_class\" href=\"a01095.html\">DifferentiableFunction<DerivativeSignature, DerivativeTraits, bufferSize></a>;</div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> </div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> <span class=\"keyword\">using </span>Concept = DifferentiableFunctionWrapperInterface<Signature, DerivativeInterface>;</div>\n+<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> </div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> B></div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> <span class=\"keyword\">using </span>Model = DifferentiableFunctionWrapperImplementation<Signature, DerivativeInterface, B>;</div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> };</div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span>}</div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> </div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> </div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> </div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits, <span class=\"keywordtype\">size_t</span> bufferSize></div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01103.html\"> 81</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01095.html\">DifferentiableFunction</a>< Range(Domain), DerivativeTraits, bufferSize> :</div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01351.html\">TypeErasureBase</a><</div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> typename Imp::DifferentiableFunctionTraits<Range(Domain), DerivativeTraits, bufferSize>::Concept,</div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> Imp::DifferentiableFunctionTraits<Range(Domain), DerivativeTraits, bufferSize>::template Model></div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span>{</div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> <span class=\"keyword\">using </span>Traits = Imp::DifferentiableFunctionTraits<Range(Domain), DerivativeTraits, bufferSize>;</div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> </div>\n+<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01351.html\">Base</a> = <a class=\"code hl_class\" href=\"a01351.html\">TypeErasureBase<typename Traits::Concept, Traits::template Model></a>;</div>\n+<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> </div>\n+<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> <span class=\"keyword\">using </span>DerivativeInterface = <span class=\"keyword\">typename</span> <a class=\"code hl_class\" href=\"a01095.html\">Traits::DerivativeInterface</a>;</div>\n+<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> </div>\n+<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> </div>\n+<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F, disableCopyMove<DifferentiableFunction, F> = 0 ></div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01103.html#a2bfab7479475446c596aaa715e392e51\"> 106</a></span> <a class=\"code hl_function\" href=\"a01103.html#a2bfab7479475446c596aaa715e392e51\">DifferentiableFunction</a>(F&& f) :</div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> <a class=\"code hl_class\" href=\"a01351.html\">Base</a>(std::forward<F>(f))</div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> {</div>\n+<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> <span class=\"keyword\">static_assert</span>(Dune::Functions::Concept::isFunction<F, Range(Domain)>(), <span class=\"stringliteral\">"Trying to construct a DifferentiableFunction from type that does not model the Function concept"</span>);</div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> }</div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> </div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01103.html#aeec09a544bd23e1fabc708ae576ebb91\"> 113</a></span> <a class=\"code hl_function\" href=\"a01103.html#aeec09a544bd23e1fabc708ae576ebb91\">DifferentiableFunction</a>() = <span class=\"keywordflow\">default</span>;</div>\n <div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> </div>\n-<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> </div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> <span class=\"comment\">// Short cuts for feature detection</span></div>\n-<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C></div>\n-<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> <span class=\"keyword\">using </span>hasDynamicIndexAccess = Dune::Std::is_detected<dynamicIndexAccess_t, std::remove_reference_t<C>>;</div>\n-<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> </div>\n-<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C></div>\n-<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> <span class=\"keyword\">using </span>hasStaticIndexAccess = Dune::Std::is_detected<staticIndexAccess_t, std::remove_reference_t<C>>;</div>\n+<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01103.html#a92008c20202968cf4d5f7d705a06c1cc\"> 118</a></span> Range operator() (<span class=\"keyword\">const</span> Domain& x)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> <span class=\"keywordflow\">return</span> this->asInterface().operator()(x);</div>\n+<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> }</div>\n <div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> </div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C></div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> <span class=\"keyword\">using </span>hasResizeMethod = Dune::Std::is_detected<resizeMethod_t, std::remove_reference_t<C>>;</div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> </div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C></div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> <span class=\"keyword\">using </span>isDynamicVector = Dune::Std::is_detected<dynamicIndexAccess_t, std::remove_reference_t<C>>;</div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> </div>\n-<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C></div>\n-<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> <span class=\"keyword\">using </span>isStaticVector = Dune::Std::bool_constant<</div>\n-<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> Dune::Std::is_detected_v<staticIndexAccess_t, std::remove_reference_t<C>></div>\n-<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> and not Dune::Std::is_detected_v<dynamicIndexAccess_t, std::remove_reference_t<C>>>;</div>\n-<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> </div>\n-<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C></div>\n-<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> <span class=\"keyword\">using </span>isScalar = Dune::Std::bool_constant<not Dune::Std::is_detected_v<staticIndexAccess_t, std::remove_reference_t<C>>>;</div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00208.html#ga5f71e575dd0d9891e038c9b6d2ba7bdb\"> 130</a></span> <span class=\"keyword\">friend</span> DerivativeInterface <a class=\"code hl_friend\" href=\"a00208.html#ga5f71e575dd0d9891e038c9b6d2ba7bdb\">derivative</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01095.html\">DifferentiableFunction</a>& t)</div>\n+<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> {</div>\n+<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> <span class=\"keywordflow\">return</span> t.asInterface().derivative();</div>\n+<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> }</div>\n+<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span>};</div>\n+<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> </div>\n <div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> </div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C></div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> <span class=\"keyword\">using </span>isVector = Dune::Std::bool_constant<Dune::Std::is_detected_v<staticIndexAccess_t, std::remove_reference_t<C>>>;</div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> </div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span>}} <span class=\"comment\">// namespace Dune::Functions</span></div>\n <div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> </div>\n <div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> </div>\n <div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> </div>\n-<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>... Args></div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> forwardToResize(Args&&... args)</div>\n-<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> {</div>\n-<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> resize(std::forward<Args>(args)...);</div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> }</div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> </div>\n-<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> </div>\n-<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>C, <span class=\"keyword\">class </span>SizeProvider,</div>\n-<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> std::enable_if_t<hasResizeMethod<C>::value, <span class=\"keywordtype\">int</span>> = 0></div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> resize(C&& c, <span class=\"keyword\">const</span> SizeProvider& sizeProvider, <span class=\"keyword\">typename</span> SizeProvider::SizePrefix prefix)</div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> {</div>\n-<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> <span class=\"keyword\">auto</span> size = sizeProvider.size(prefix);</div>\n-<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> <span class=\"keywordflow\">if</span> (size==0)</div>\n-<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> {</div>\n-<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> <span class=\"comment\">// If size==0 this prefix refers to a single coefficient c.</span></div>\n-<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> <span class=\"comment\">// But being in this overload means that c is not a scalar</span></div>\n-<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> <span class=\"comment\">// because is has a resize() method. Since operator[] deliberately</span></div>\n-<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> <span class=\"comment\">// supports implicit padding of multi-indices by as many</span></div>\n-<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> <span class=\"comment\">// [0]'s as needed to resolve a scalar entry, we should also</span></div>\n-<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> <span class=\"comment\">// except a non-scalar c here. However, this requires that</span></div>\n-<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> <span class=\"comment\">// we silently believe that whatever size c already has is</span></div>\n-<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> <span class=\"comment\">// intended by the user. The only exception is c.size()==0</span></div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> <span class=\"comment\">// which is not acceptable but we also cannot know the desired size.</span></div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> <span class=\"keywordflow\">if</span> (c.size()==0)</div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> DUNE_THROW(RangeError, <span class=\"stringliteral\">"The vector entry v["</span> << prefix << <span class=\"stringliteral\">"] should refer to a "</span></div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> << <span class=\"stringliteral\">"scalar coefficient, but is a dynamically sized vector of size==0"</span>);</div>\n-<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> <span class=\"keywordflow\">else</span></div>\n-<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> <span class=\"comment\">// Accept non-zero sized coefficients to avoid that resize(basis)</span></div>\n-<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> <span class=\"comment\">// fails for a vector that works with operator[] and already</span></div>\n-<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> <span class=\"comment\">// has the appropriate size.</span></div>\n-<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> <span class=\"keywordflow\">return</span>;</div>\n-<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> }</div>\n-<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> c.resize(size);</div>\n-<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> prefix.push_back(0);</div>\n-<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> <span class=\"keywordflow\">for</span>(std::size_t i=0; i<size; ++i)</div>\n-<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> {</div>\n-<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> prefix.back() = i;</div>\n-<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> resize(c[i], sizeProvider, prefix);</div>\n-<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> }</div>\n-<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> }</div>\n-<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> </div>\n-<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>C, <span class=\"keyword\">class </span>SizeProvider,</div>\n-<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span> std::enable_if_t<not hasResizeMethod<C>::value, <span class=\"keywordtype\">int</span>> = 0,</div>\n-<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> std::enable_if_t<isVector<C>::value, <span class=\"keywordtype\">int</span>> = 0></div>\n-<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> resize(C&& c, <span class=\"keyword\">const</span> SizeProvider& sizeProvider, <span class=\"keyword\">typename</span> SizeProvider::SizePrefix prefix)</div>\n-<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> {</div>\n-<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> <span class=\"keyword\">auto</span> size = sizeProvider.size(prefix);</div>\n-<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> <span class=\"comment\">// If size == 0 there's nothing to do:</span></div>\n-<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span> <span class=\"comment\">// We can't resize c and it's already</span></div>\n-<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> <span class=\"comment\">// large enough anyway.</span></div>\n-<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> <span class=\"keywordflow\">if</span> (size == 0)</div>\n-<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> <span class=\"keywordflow\">return</span>;</div>\n-<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> </div>\n-<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> <span class=\"comment\">// If size>0 but c does not have the appropriate</span></div>\n-<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> <span class=\"comment\">// size we throw an exception.</span></div>\n-<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> <span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> <span class=\"comment\">// We could perhaps also allow c.size()>size.</span></div>\n-<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> <span class=\"comment\">// But then looping the loop below gets complicated:</span></div>\n-<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> <span class=\"comment\">// We're not allowed to loop until c.size(). But</span></div>\n-<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> <span class=\"comment\">// we also cannot use size for termination,</span></div>\n-<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> <span class=\"comment\">// because this fails if c is a static vector.</span></div>\n-<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> <span class=\"keywordflow\">if</span> (c.size() != size)</div>\n-<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> DUNE_THROW(RangeError, <span class=\"stringliteral\">"Can't resize non-resizable entry v["</span> << prefix << <span class=\"stringliteral\">"] of size "</span> << c.size() << <span class=\"stringliteral\">" to size("</span> << prefix << <span class=\"stringliteral\">")="</span> << size);</div>\n-<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span> </div>\n-<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> <span class=\"comment\">// Recursively resize all entries of c now.</span></div>\n-<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> <span class=\"keyword\">using namespace </span>Dune::Hybrid;</div>\n-<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span> prefix.push_back(0);</div>\n-<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> forEach(integralRange(Hybrid::size(c)), [&](<span class=\"keyword\">auto</span>&& i) {</div>\n-<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> prefix.back() = i;</div>\n-<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> <span class=\"comment\">// Here we'd simply like to call resize(c[i], sizeProvider, prefix);</span></div>\n-<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"> 212</span> <span class=\"comment\">// but even gcc-7 does not except this bus reports</span></div>\n-<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span> <span class=\"comment\">// "error: \u2018this\u2019 was not captured for this lambda function"</span></div>\n-<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> <span class=\"comment\">// although there's no 'this' because we're in a static method.</span></div>\n-<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> <span class=\"comment\">// Bypassing this by and additional method that does perfect</span></div>\n-<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span> <span class=\"comment\">// forwarding allows to workaround this.</span></div>\n-<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> ISTLVectorBackend<V>::forwardToResize(c[i], sizeProvider, prefix);</div>\n-<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> });</div>\n-<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> }</div>\n-<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span> </div>\n-<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>C, <span class=\"keyword\">class </span>SizeProvider,</div>\n-<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span> std::enable_if_t<not hasResizeMethod<C>::value, <span class=\"keywordtype\">int</span>> = 0,</div>\n-<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> std::enable_if_t<isScalar<C>::value, <span class=\"keywordtype\">int</span>> = 0></div>\n-<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> resize(C&&, <span class=\"keyword\">const</span> SizeProvider& sizeProvider, <span class=\"keyword\">typename</span> SizeProvider::SizePrefix prefix)</div>\n-<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span> {</div>\n-<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> <span class=\"keyword\">auto</span> size = sizeProvider.size(prefix);</div>\n-<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> <span class=\"keywordflow\">if</span> (size != 0)</div>\n-<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> DUNE_THROW(RangeError, <span class=\"stringliteral\">"Can't resize scalar vector entry v["</span> << prefix << <span class=\"stringliteral\">"] to size("</span> << prefix << <span class=\"stringliteral\">")="</span> << size);</div>\n-<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> }</div>\n-<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span> </div>\n-<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>C, <span class=\"keyword\">class </span>T,</div>\n-<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> std::enable_if_t<std::is_assignable<C&,T>::value, <span class=\"keywordtype\">int</span>> = 0></div>\n-<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> <span class=\"keywordtype\">void</span> recursiveAssign(C& c, <span class=\"keyword\">const</span> T& t)</div>\n-<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> {</div>\n-<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> c = t;</div>\n-<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span> }</div>\n-<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span> </div>\n-<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>C, <span class=\"keyword\">class </span>T,</div>\n-<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span> std::enable_if_t<not std::is_assignable<C&,T>::value, <span class=\"keywordtype\">int</span>> = 0></div>\n-<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"> 240</span> <span class=\"keywordtype\">void</span> recursiveAssign(C& c, <span class=\"keyword\">const</span> T& t)</div>\n-<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span> {</div>\n-<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span> Dune::Hybrid::forEach(c, [&](<span class=\"keyword\">auto</span>&& ci) {</div>\n-<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> recursiveAssign(ci, t);</div>\n-<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> });</div>\n-<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> }</div>\n-<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span> </div>\n-<div class=\"line\"><a id=\"l00247\" name=\"l00247\"></a><span class=\"lineno\"> 247</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"> 248</span> </div>\n-<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span> <span class=\"keyword\">using </span>Vector = V;</div>\n-<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span> </div>\n-<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span> ISTLVectorBackend(Vector& vector) :</div>\n-<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span> vector_(&vector)</div>\n-<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"> 253</span> {}</div>\n-<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"> 254</span> </div>\n-<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizeProv<span class=\"keywordtype\">id</span>er></div>\n-<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"> 256</span> <span class=\"keywordtype\">void</span> resize(<span class=\"keyword\">const</span> SizeProvider& sizeProvider)</div>\n-<div class=\"line\"><a id=\"l00257\" name=\"l00257\"></a><span class=\"lineno\"> 257</span> {</div>\n-<div class=\"line\"><a id=\"l00258\" name=\"l00258\"></a><span class=\"lineno\"> 258</span> <span class=\"keyword\">auto</span> prefix = <span class=\"keyword\">typename</span> SizeProvider::SizePrefix();</div>\n-<div class=\"line\"><a id=\"l00259\" name=\"l00259\"></a><span class=\"lineno\"> 259</span> prefix.resize(0);</div>\n-<div class=\"line\"><a id=\"l00260\" name=\"l00260\"></a><span class=\"lineno\"> 260</span> resize(*vector_, sizeProvider, prefix);</div>\n-<div class=\"line\"><a id=\"l00261\" name=\"l00261\"></a><span class=\"lineno\"> 261</span> }</div>\n-<div class=\"line\"><a id=\"l00262\" name=\"l00262\"></a><span class=\"lineno\"> 262</span> </div>\n-<div class=\"line\"><a id=\"l00263\" name=\"l00263\"></a><span class=\"lineno\"> 263</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> MultiIndex></div>\n-<div class=\"line\"><a id=\"l00264\" name=\"l00264\"></a><span class=\"lineno\"> 264</span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <span class=\"keyword\">operator</span>[](<span class=\"keyword\">const</span> MultiIndex& index) <span class=\"keyword\">const</span></div>\n-<div class=\"line\"><a id=\"l00265\" name=\"l00265\"></a><span class=\"lineno\"> 265</span> {</div>\n-<div class=\"line\"><a id=\"l00266\" name=\"l00266\"></a><span class=\"lineno\"> 266</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00215.html#ga9aaec884c080483fea267d1098f81590\">resolveDynamicMultiIndex</a>(*vector_, index);</div>\n-<div class=\"line\"><a id=\"l00267\" name=\"l00267\"></a><span class=\"lineno\"> 267</span> }</div>\n-<div class=\"line\"><a id=\"l00268\" name=\"l00268\"></a><span class=\"lineno\"> 268</span> </div>\n-<div class=\"line\"><a id=\"l00269\" name=\"l00269\"></a><span class=\"lineno\"> 269</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> MultiIndex></div>\n-<div class=\"line\"><a id=\"l00270\" name=\"l00270\"></a><span class=\"lineno\"> 270</span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <span class=\"keyword\">operator</span>[](<span class=\"keyword\">const</span> MultiIndex& index)</div>\n-<div class=\"line\"><a id=\"l00271\" name=\"l00271\"></a><span class=\"lineno\"> 271</span> {</div>\n-<div class=\"line\"><a id=\"l00272\" name=\"l00272\"></a><span class=\"lineno\"> 272</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00215.html#ga9aaec884c080483fea267d1098f81590\">resolveDynamicMultiIndex</a>(*vector_, index);</div>\n-<div class=\"line\"><a id=\"l00273\" name=\"l00273\"></a><span class=\"lineno\"> 273</span> }</div>\n-<div class=\"line\"><a id=\"l00274\" name=\"l00274\"></a><span class=\"lineno\"> 274</span> </div>\n-<div class=\"line\"><a id=\"l00283\" name=\"l00283\"></a><span class=\"lineno\"> 283</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> T></div>\n-<div class=\"line\"><a id=\"l00284\" name=\"l00284\"></a><span class=\"lineno\"> 284</span> <span class=\"keywordtype\">void</span> operator= (<span class=\"keyword\">const</span> T& other)</div>\n-<div class=\"line\"><a id=\"l00285\" name=\"l00285\"></a><span class=\"lineno\"> 285</span> {</div>\n-<div class=\"line\"><a id=\"l00286\" name=\"l00286\"></a><span class=\"lineno\"> 286</span> recursiveAssign(vector(), other);</div>\n-<div class=\"line\"><a id=\"l00287\" name=\"l00287\"></a><span class=\"lineno\"> 287</span> }</div>\n-<div class=\"line\"><a id=\"l00288\" name=\"l00288\"></a><span class=\"lineno\"> 288</span> </div>\n-<div class=\"line\"><a id=\"l00289\" name=\"l00289\"></a><span class=\"lineno\"> 289</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> T></div>\n-<div class=\"line\"><a id=\"l00290\" name=\"l00290\"></a><span class=\"lineno\"> 290</span> <span class=\"keywordtype\">void</span> operator= (<span class=\"keyword\">const</span> ISTLVectorBackend<T>& other)</div>\n-<div class=\"line\"><a id=\"l00291\" name=\"l00291\"></a><span class=\"lineno\"> 291</span> {</div>\n-<div class=\"line\"><a id=\"l00292\" name=\"l00292\"></a><span class=\"lineno\"> 292</span> vector() = other.vector();</div>\n-<div class=\"line\"><a id=\"l00293\" name=\"l00293\"></a><span class=\"lineno\"> 293</span> }</div>\n-<div class=\"line\"><a id=\"l00294\" name=\"l00294\"></a><span class=\"lineno\"> 294</span> </div>\n-<div class=\"line\"><a id=\"l00295\" name=\"l00295\"></a><span class=\"lineno\"> 295</span> <span class=\"keyword\">const</span> Vector& vector()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00296\" name=\"l00296\"></a><span class=\"lineno\"> 296</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00297\" name=\"l00297\"></a><span class=\"lineno\"> 297</span> <span class=\"keywordflow\">return</span> *vector_;</div>\n-<div class=\"line\"><a id=\"l00298\" name=\"l00298\"></a><span class=\"lineno\"> 298</span> }</div>\n-<div class=\"line\"><a id=\"l00299\" name=\"l00299\"></a><span class=\"lineno\"> 299</span> </div>\n-<div class=\"line\"><a id=\"l00300\" name=\"l00300\"></a><span class=\"lineno\"> 300</span> Vector& vector()</div>\n-<div class=\"line\"><a id=\"l00301\" name=\"l00301\"></a><span class=\"lineno\"> 301</span> {</div>\n-<div class=\"line\"><a id=\"l00302\" name=\"l00302\"></a><span class=\"lineno\"> 302</span> <span class=\"keywordflow\">return</span> *vector_;</div>\n-<div class=\"line\"><a id=\"l00303\" name=\"l00303\"></a><span class=\"lineno\"> 303</span> }</div>\n-<div class=\"line\"><a id=\"l00304\" name=\"l00304\"></a><span class=\"lineno\"> 304</span> </div>\n-<div class=\"line\"><a id=\"l00305\" name=\"l00305\"></a><span class=\"lineno\"> 305</span><span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00306\" name=\"l00306\"></a><span class=\"lineno\"> 306</span> </div>\n-<div class=\"line\"><a id=\"l00307\" name=\"l00307\"></a><span class=\"lineno\"> 307</span> Vector* vector_;</div>\n-<div class=\"line\"><a id=\"l00308\" name=\"l00308\"></a><span class=\"lineno\"> 308</span>};</div>\n-<div class=\"line\"><a id=\"l00309\" name=\"l00309\"></a><span class=\"lineno\"> 309</span> </div>\n-<div class=\"line\"><a id=\"l00310\" name=\"l00310\"></a><span class=\"lineno\"> 310</span>} <span class=\"comment\">// end namespace Impl</span></div>\n-<div class=\"line\"><a id=\"l00311\" name=\"l00311\"></a><span class=\"lineno\"> 311</span> </div>\n-<div class=\"line\"><a id=\"l00312\" name=\"l00312\"></a><span class=\"lineno\"> 312</span> </div>\n-<div class=\"line\"><a id=\"l00313\" name=\"l00313\"></a><span class=\"lineno\"> 313</span> </div>\n-<div class=\"line\"><a id=\"l00345\" name=\"l00345\"></a><span class=\"lineno\"> 345</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Vector></div>\n-<div class=\"line\"><a id=\"l00346\" name=\"l00346\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00214.html#gae5b9f62f85e3d638423142695a74d056\"> 346</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00214.html#gae5b9f62f85e3d638423142695a74d056\">istlVectorBackend</a>(Vector& v)</div>\n-<div class=\"line\"><a id=\"l00347\" name=\"l00347\"></a><span class=\"lineno\"> 347</span>{</div>\n-<div class=\"line\"><a id=\"l00348\" name=\"l00348\"></a><span class=\"lineno\"> 348</span> <span class=\"keyword\">static_assert</span>(hasUniqueFieldType<Vector&>(), <span class=\"stringliteral\">"Vector type passed to istlVectorBackend() does not have a unique field type."</span>);</div>\n-<div class=\"line\"><a id=\"l00349\" name=\"l00349\"></a><span class=\"lineno\"> 349</span> <span class=\"keywordflow\">return</span> Impl::ISTLVectorBackend<Vector>(v);</div>\n-<div class=\"line\"><a id=\"l00350\" name=\"l00350\"></a><span class=\"lineno\"> 350</span>}</div>\n-<div class=\"line\"><a id=\"l00351\" name=\"l00351\"></a><span class=\"lineno\"> 351</span> </div>\n-<div class=\"line\"><a id=\"l00352\" name=\"l00352\"></a><span class=\"lineno\"> 352</span> </div>\n-<div class=\"line\"><a id=\"l00353\" name=\"l00353\"></a><span class=\"lineno\"> 353</span> </div>\n-<div class=\"line\"><a id=\"l00383\" name=\"l00383\"></a><span class=\"lineno\"> 383</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Vector></div>\n-<div class=\"line\"><a id=\"l00384\" name=\"l00384\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00214.html#ga50a181637103e7abc011235a9fd30611\"> 384</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00214.html#gae5b9f62f85e3d638423142695a74d056\">istlVectorBackend</a>(<span class=\"keyword\">const</span> Vector& v)</div>\n-<div class=\"line\"><a id=\"l00385\" name=\"l00385\"></a><span class=\"lineno\"> 385</span>{</div>\n-<div class=\"line\"><a id=\"l00386\" name=\"l00386\"></a><span class=\"lineno\"> 386</span> <span class=\"keyword\">static_assert</span>(hasUniqueFieldType<const Vector&>(), <span class=\"stringliteral\">"Vector type passed to istlVectorBackend() does not have a unique field type."</span>);</div>\n-<div class=\"line\"><a id=\"l00387\" name=\"l00387\"></a><span class=\"lineno\"> 387</span> <span class=\"keywordflow\">return</span> Impl::ISTLVectorBackend<const Vector>(v);</div>\n-<div class=\"line\"><a id=\"l00388\" name=\"l00388\"></a><span class=\"lineno\"> 388</span>}</div>\n-<div class=\"line\"><a id=\"l00389\" name=\"l00389\"></a><span class=\"lineno\"> 389</span> </div>\n-<div class=\"line\"><a id=\"l00390\" name=\"l00390\"></a><span class=\"lineno\"> 390</span> </div>\n-<div class=\"line\"><a id=\"l00391\" name=\"l00391\"></a><span class=\"lineno\"> 391</span> </div>\n-<div class=\"line\"><a id=\"l00392\" name=\"l00392\"></a><span class=\"lineno\"> 392</span>} <span class=\"comment\">// namespace Functions</span></div>\n-<div class=\"line\"><a id=\"l00393\" name=\"l00393\"></a><span class=\"lineno\"> 393</span>} <span class=\"comment\">// namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00394\" name=\"l00394\"></a><span class=\"lineno\"> 394</span> </div>\n-<div class=\"line\"><a id=\"l00395\" name=\"l00395\"></a><span class=\"lineno\"> 395</span> </div>\n-<div class=\"line\"><a id=\"l00396\" name=\"l00396\"></a><span class=\"lineno\"> 396</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH</span></div>\n-<div class=\"ttc\" id=\"aa00041_html\"><div class=\"ttname\"><a href=\"a00041.html\">indexaccess.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00214_html_gae5b9f62f85e3d638423142695a74d056\"><div class=\"ttname\"><a href=\"a00214.html#gae5b9f62f85e3d638423142695a74d056\">Dune::Functions::istlVectorBackend</a></div><div class=\"ttdeci\">auto istlVectorBackend(Vector &v)</div><div class=\"ttdoc\">Return a vector backend wrapping non-const ISTL like containers.</div><div class=\"ttdef\"><b>Definition:</b> istlvectorbackend.hh:346</div></div>\n-<div class=\"ttc\" id=\"aa00215_html_ga9aaec884c080483fea267d1098f81590\"><div class=\"ttname\"><a href=\"a00215.html#ga9aaec884c080483fea267d1098f81590\">Dune::Functions::resolveDynamicMultiIndex</a></div><div class=\"ttdeci\">constexpr decltype(auto) resolveDynamicMultiIndex(C &&c, const MultiIndex &multiIndex, const IsFinal &isFinal)</div><div class=\"ttdoc\">Provide multi-index access by chaining operator[].</div><div class=\"ttdef\"><b>Definition:</b> indexaccess.hh:354</div></div>\n+<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_HH</span></div>\n+<div class=\"ttc\" id=\"aa00008_html\"><div class=\"ttname\"><a href=\"a00008.html\">signature.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00020_html\"><div class=\"ttname\"><a href=\"a00020.html\">functionconcepts.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00029_html\"><div class=\"ttname\"><a href=\"a00029.html\">type_traits.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00035_html\"><div class=\"ttname\"><a href=\"a00035.html\">defaultderivativetraits.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00050_html\"><div class=\"ttname\"><a href=\"a00050.html\">typeerasure.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00071_html\"><div class=\"ttname\"><a href=\"a00071.html\">differentiablefunction_imp.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00208_html_ga5f71e575dd0d9891e038c9b6d2ba7bdb\"><div class=\"ttname\"><a href=\"a00208.html#ga5f71e575dd0d9891e038c9b6d2ba7bdb\">Dune::Functions::DifferentiableFunction< Range(Domain), DerivativeTraits, bufferSize >::derivative</a></div><div class=\"ttdeci\">friend DerivativeInterface derivative(const DifferentiableFunction &t)</div><div class=\"ttdoc\">Get derivative of wrapped function.</div><div class=\"ttdef\"><b>Definition:</b> differentiablefunction.hh:130</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa00219_html_ad0a3b4e397e76b3d02cb06a7793fdb7b\"><div class=\"ttname\"><a href=\"a00219.html#ad0a3b4e397e76b3d02cb06a7793fdb7b\">Dune::Functions::fieldTypes</a></div><div class=\"ttdeci\">constexpr auto fieldTypes()</div><div class=\"ttdoc\">Generate list of field types in container.</div><div class=\"ttdef\"><b>Definition:</b> istlvectorbackend.hh:63</div></div>\n-<div class=\"ttc\" id=\"aa00219_html_af8b09a0411c63ab6a6500a7b6edb9dfb\"><div class=\"ttname\"><a href=\"a00219.html#af8b09a0411c63ab6a6500a7b6edb9dfb\">Dune::Functions::hasUniqueFieldType</a></div><div class=\"ttdeci\">constexpr bool hasUniqueFieldType()</div><div class=\"ttdoc\">Check if container has a unique field type.</div><div class=\"ttdef\"><b>Definition:</b> istlvectorbackend.hh:74</div></div>\n-<div class=\"ttc\" id=\"aa02876_html\"><div class=\"ttname\"><a href=\"a02876.html\">concepts.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa01095_html\"><div class=\"ttname\"><a href=\"a01095.html\">Dune::Functions::DifferentiableFunction</a></div><div class=\"ttdef\"><b>Definition:</b> differentiablefunction.hh:29</div></div>\n+<div class=\"ttc\" id=\"aa01103_html_a2bfab7479475446c596aaa715e392e51\"><div class=\"ttname\"><a href=\"a01103.html#a2bfab7479475446c596aaa715e392e51\">Dune::Functions::DifferentiableFunction< Range(Domain), DerivativeTraits, bufferSize >::DifferentiableFunction</a></div><div class=\"ttdeci\">DifferentiableFunction(F &&f)</div><div class=\"ttdoc\">Construct from function.</div><div class=\"ttdef\"><b>Definition:</b> differentiablefunction.hh:106</div></div>\n+<div class=\"ttc\" id=\"aa01103_html_aeec09a544bd23e1fabc708ae576ebb91\"><div class=\"ttname\"><a href=\"a01103.html#aeec09a544bd23e1fabc708ae576ebb91\">Dune::Functions::DifferentiableFunction< Range(Domain), DerivativeTraits, bufferSize >::DifferentiableFunction</a></div><div class=\"ttdeci\">DifferentiableFunction()=default</div><div class=\"ttdoc\">Default constructor.</div></div>\n+<div class=\"ttc\" id=\"aa01291_html\"><div class=\"ttname\"><a href=\"a01291.html\">Dune::Functions::SignatureTraits</a></div><div class=\"ttdoc\">Helper class to deduce the signature of a callable.</div><div class=\"ttdef\"><b>Definition:</b> signature.hh:56</div></div>\n+<div class=\"ttc\" id=\"aa01351_html\"><div class=\"ttname\"><a href=\"a01351.html\">Dune::Functions::TypeErasureBase</a></div><div class=\"ttdoc\">Base class for type-erased interface wrapper.</div><div class=\"ttdef\"><b>Definition:</b> typeerasure.hh:165</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-utf-8\n+us-ascii\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,365 +4,154 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * backends\n-istlvectorbackend.hh\n+ * common\n+differentiablefunction.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH\n- 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH\n+ 3#ifndef DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_HH\n+ 4#define DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_HH\n 5\n- 6#include <cstddef>\n- 7#include <utility>\n- 8#include <type_traits>\n+ 6#include <type_traits>\n+ 7\n+ 8#include <dune/common/typeutilities.hh>\n 9\n- 10#include <dune/common/std/type_traits.hh>\n- 11#include <dune/common/indices.hh>\n- 12#include <dune/common/hybridutilities.hh>\n- 13#include <dune/common/concept.hh>\n- 14\n- 15#include <dune/functions/common/indexaccess.hh>\n- 16#include <dune/functions/functionspacebases/concepts.hh>\n- 17\n- 18\n- 19namespace Dune {\n- 20namespace Functions {\n+ 10#include <dune/functions/common/type_traits.hh>\n+ 11#include <dune/functions/common/defaultderivativetraits.hh>\n+ 12#include <dune/functions/common/differentiablefunction_imp.hh>\n+ 13#include <dune/functions/common/signature.hh>\n+ 14#include <dune/functions/common/typeerasure.hh>\n+ 15#include <dune/functions/common/functionconcepts.hh>\n+ 16\n+ 17namespace Dune {\n+ 18namespace Functions {\n+ 19\n+ 20\n 21\n- 22namespace Impl {\n- 23\n- 24template<class V,\n- 25 std::enable_if_t<not Dune::models<Imp::Concept::HasStaticIndexAccess, V>()\n-, int> = 0>\n- 26auto fieldTypes(V&& /*v*/)\n- 27{\n- 28 return TypeList<V>{};\n- 29}\n+ 22/*\n+ 23 * Default implementation is empty\n+ 24 * The actual implementation is only given if Signature is an type\n+ 25 * describing a function signature as Range(Domain).\n+ 26 */\n+ 27template<class Signature, template<class> class\n+DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>\n+28class DifferentiableFunction\n+ 29{};\n 30\n- 31template<class V,\n- 32 std::enable_if_t<Dune::models<Imp::Concept::HasStaticIndexAccess, V>(),\n-int> = 0>\n- 33auto fieldTypes(V&& v)\n+ 31\n+ 32\n+ 33namespace Imp\n 34{\n- 35 if constexpr (Dune::models<Imp::Concept::HasDynamicIndexAccess<std::\n-size_t>, V>())\n- 36 return fieldTypes(v[std::size_t{0}]);\n- 37 else\n- 38 {\n- 39 auto indexRange = typename decltype(range(Hybrid::size(v)))::\n-integer_sequence();\n- 40 return unpackIntegerSequence([&](auto... i) {\n- 41 return uniqueTypeList(std::tuple_cat(fieldTypes(v[i])...));\n- 42 }, indexRange);\n- 43 }\n- 44}\n+ 35\n+ 37 template<class S, template<class> class DerivativeTraits, size_t\n+bufferSize>\n+ 38 struct DifferentiableFunctionTraits\n+ 39 {\n+ 41 using Signature = S;\n+ 42\n+ 44 using Range = typename SignatureTraits<Signature>::Range;\n 45\n- 46} // namespace Impl\n- 47\n+ 47 using Domain = typename SignatureTraits<Signature>::Domain;\n 48\n- 49\n- 62template<class V>\n-63constexpr auto fieldTypes()\n- 64{\n- 65 return decltype(Impl::fieldTypes(std::declval<V>())){};\n- 66}\n- 67\n- 73template<class V>\n-74constexpr bool hasUniqueFieldType()\n- 75{\n- 76 return std::tuple_size<std::decay_t<decltype(fieldTypes<V>())>>::value==1;\n- 77}\n- 78\n- 79\n- 80\n- 81namespace Impl {\n- 82\n- 83/*\n- 84 * \\brief A wrapper providing multi-index access to vector entries\n- 85 *\n- 86 * The wrapped vector type should be an istl like random\n- 87 * access container providing operator[] and size() methods.\n- 88 * For classical containers this should support indices\n- 89 * of type std::size_t. For multi-type containers indices\n- 90 * of the form Dune::index_constant<i> should be supported\n- 91 * while size() should be a static constexpr method.\n- 92 *\n- 93 * When resolving multi-indices the backend appends indices\n- 94 * using operator[] as long as the result is not a scalar.\n- 95 * If this exhausts the digits of the multi-index, additional\n- 96 * zero`s are appended.\n- 97 *\n- 98 * \\tparam V Type of the raw wrapper vector\n- 99 */\n- 100template<class V>\n- 101class ISTLVectorBackend\n- 102{\n- 103\n- 104 // Template aliases for using detection idiom.\n- 105 template<class C>\n- 106 using dynamicIndexAccess_t = decltype(std::declval<C>()[0]);\n- 107\n- 108 template<class C>\n- 109 using staticIndexAccess_t = decltype(std::declval<C>()[Dune::Indices::\n-_0]);\n- 110\n- 111 template<class C>\n- 112 using resizeMethod_t = decltype(std::declval<C>().resize(0));\n- 113\n+ 50 using DerivativeSignature = typename SignatureTraits<Signature>::template\n+DerivativeSignature<DerivativeTraits>;\n+ 51\n+ 53 using DerivativeInterface = DifferentiableFunction<DerivativeSignature,\n+DerivativeTraits,_bufferSize>;\n+ 54\n+ 56 using Concept = DifferentiableFunctionWrapperInterface<Signature,\n+DerivativeInterface>;\n+ 57\n+ 59 template<class B>\n+ 60 using Model = DifferentiableFunctionWrapperImplementation<Signature,\n+DerivativeInterface, B>;\n+ 61 };\n+ 62}\n+ 63\n+ 64\n+ 65\n+ 80template<class Range, class Domain, template<class> class DerivativeTraits,\n+size_t bufferSize>\n+81class DifferentiableFunction< Range(Domain), DerivativeTraits, bufferSize> :\n+ 82 public TypeErasureBase<\n+ 83 typename Imp::DifferentiableFunctionTraits<Range(Domain), DerivativeTraits,\n+bufferSize>::Concept,\n+ 84 Imp::DifferentiableFunctionTraits<Range(Domain), DerivativeTraits,\n+bufferSize>::template Model>\n+ 85{\n+ 86 using Traits = Imp::DifferentiableFunctionTraits<Range(Domain),\n+DerivativeTraits, bufferSize>;\n+ 87\n+ 88 using Base = TypeErasureBase<typename_Traits::Concept,_Traits::template\n+Model>;\n+ 89\n+ 90 using DerivativeInterface = typename Traits::DerivativeInterface;\n+ 91\n+ 92public:\n+ 93\n+ 105 template<class F, disableCopyMove<DifferentiableFunction, F> = 0 >\n+106 DifferentiableFunction(F&& f) :\n+ 107 Base(std::forward<F>(f))\n+ 108 {\n+ 109 static_assert(Dune::Functions::Concept::isFunction<F, Range(Domain)>(),\n+\"Trying to construct a DifferentiableFunction from type that does not model the\n+Function concept\");\n+ 110 }\n+ 111\n+113 DifferentiableFunction() = default;\n 114\n- 115\n- 116 // Short cuts for feature detection\n- 117 template<class C>\n- 118 using hasDynamicIndexAccess = Dune::Std::is_detected<dynamicIndexAccess_t,\n-std::remove_reference_t<C>>;\n- 119\n- 120 template<class C>\n- 121 using hasStaticIndexAccess = Dune::Std::is_detected<staticIndexAccess_t,\n-std::remove_reference_t<C>>;\n+118 Range operator() (const Domain& x) const\n+ 119 {\n+ 120 return this->asInterface().operator()(x);\n+ 121 }\n 122\n- 123 template<class C>\n- 124 using hasResizeMethod = Dune::Std::is_detected<resizeMethod_t, std::\n-remove_reference_t<C>>;\n- 125\n- 126 template<class C>\n- 127 using isDynamicVector = Dune::Std::is_detected<dynamicIndexAccess_t, std::\n-remove_reference_t<C>>;\n- 128\n- 129 template<class C>\n- 130 using isStaticVector = Dune::Std::bool_constant<\n- 131 Dune::Std::is_detected_v<staticIndexAccess_t, std::remove_reference_t<C>>\n- 132 and not Dune::Std::is_detected_v<dynamicIndexAccess_t, std::\n-remove_reference_t<C>>>;\n- 133\n- 134 template<class C>\n- 135 using isScalar = Dune::Std::bool_constant<not Dune::Std::\n-is_detected_v<staticIndexAccess_t, std::remove_reference_t<C>>>;\n+130 friend DerivativeInterface derivative(const DifferentiableFunction& t)\n+ 131 {\n+ 132 return t.asInterface().derivative();\n+ 133 }\n+ 134};\n+ 135\n 136\n- 137 template<class C>\n- 138 using isVector = Dune::Std::bool_constant<Dune::Std::\n-is_detected_v<staticIndexAccess_t, std::remove_reference_t<C>>>;\n+ 137\n+ 138}} // namespace Dune::Functions\n 139\n 140\n 141\n- 142 template<class... Args>\n- 143 static void forwardToResize(Args&&... args)\n- 144 {\n- 145 resize(std::forward<Args>(args)...);\n- 146 }\n- 147\n- 148\n- 149 template<class C, class SizeProvider,\n- 150 std::enable_if_t<hasResizeMethod<C>::value, int> = 0>\n- 151 static void resize(C&& c, const SizeProvider& sizeProvider, typename\n-SizeProvider::SizePrefix prefix)\n- 152 {\n- 153 auto size = sizeProvider.size(prefix);\n- 154 if (size==0)\n- 155 {\n- 156 // If size==0 this prefix refers to a single coefficient c.\n- 157 // But being in this overload means that c is not a scalar\n- 158 // because is has a resize() method. Since operator[] deliberately\n- 159 // supports implicit padding of multi-indices by as many\n- 160 // [0]'s as needed to resolve a scalar entry, we should also\n- 161 // except a non-scalar c here. However, this requires that\n- 162 // we silently believe that whatever size c already has is\n- 163 // intended by the user. The only exception is c.size()==0\n- 164 // which is not acceptable but we also cannot know the desired size.\n- 165 if (c.size()==0)\n- 166 DUNE_THROW(RangeError, \"The vector entry v[\" << prefix << \"] should refer\n-to a \"\n- 167 << \"scalar coefficient, but is a dynamically sized vector of size==0\");\n- 168 else\n- 169 // Accept non-zero sized coefficients to avoid that resize(basis)\n- 170 // fails for a vector that works with operator[] and already\n- 171 // has the appropriate size.\n- 172 return;\n- 173 }\n- 174 c.resize(size);\n- 175 prefix.push_back(0);\n- 176 for(std::size_t i=0; i<size; ++i)\n- 177 {\n- 178 prefix.back() = i;\n- 179 resize(c[i], sizeProvider, prefix);\n- 180 }\n- 181 }\n- 182\n- 183 template<class C, class SizeProvider,\n- 184 std::enable_if_t<not hasResizeMethod<C>::value, int> = 0,\n- 185 std::enable_if_t<isVector<C>::value, int> = 0>\n- 186 static void resize(C&& c, const SizeProvider& sizeProvider, typename\n-SizeProvider::SizePrefix prefix)\n- 187 {\n- 188 auto size = sizeProvider.size(prefix);\n- 189 // If size == 0 there's nothing to do:\n- 190 // We can't resize c and it's already\n- 191 // large enough anyway.\n- 192 if (size == 0)\n- 193 return;\n- 194\n- 195 // If size>0 but c does not have the appropriate\n- 196 // size we throw an exception.\n- 197 //\n- 198 // We could perhaps also allow c.size()>size.\n- 199 // But then looping the loop below gets complicated:\n- 200 // We're not allowed to loop until c.size(). But\n- 201 // we also cannot use size for termination,\n- 202 // because this fails if c is a static vector.\n- 203 if (c.size() != size)\n- 204 DUNE_THROW(RangeError, \"Can't resize non-resizable entry v[\" << prefix <<\n-\"] of size \" << c.size() << \" to size(\" << prefix << \")=\" << size);\n- 205\n- 206 // Recursively resize all entries of c now.\n- 207 using namespace Dune::Hybrid;\n- 208 prefix.push_back(0);\n- 209 forEach(integralRange(Hybrid::size(c)), [&](auto&& i) {\n- 210 prefix.back() = i;\n- 211 // Here we'd simply like to call resize(c[i], sizeProvider, prefix);\n- 212 // but even gcc-7 does not except this bus reports\n- 213 // \"error: \u2018this\u2019 was not captured for this lambda function\"\n- 214 // although there's no 'this' because we're in a static method.\n- 215 // Bypassing this by and additional method that does perfect\n- 216 // forwarding allows to workaround this.\n- 217 ISTLVectorBackend<V>::forwardToResize(c[i], sizeProvider, prefix);\n- 218 });\n- 219 }\n- 220\n- 221 template<class C, class SizeProvider,\n- 222 std::enable_if_t<not hasResizeMethod<C>::value, int> = 0,\n- 223 std::enable_if_t<isScalar<C>::value, int> = 0>\n- 224 static void resize(C&&, const SizeProvider& sizeProvider, typename\n-SizeProvider::SizePrefix prefix)\n- 225 {\n- 226 auto size = sizeProvider.size(prefix);\n- 227 if (size != 0)\n- 228 DUNE_THROW(RangeError, \"Can't resize scalar vector entry v[\" << prefix <<\n-\"] to size(\" << prefix << \")=\" << size);\n- 229 }\n- 230\n- 231 template<class C, class T,\n- 232 std::enable_if_t<std::is_assignable<C&,T>::value, int> = 0>\n- 233 void recursiveAssign(C& c, const T& t)\n- 234 {\n- 235 c = t;\n- 236 }\n- 237\n- 238 template<class C, class T,\n- 239 std::enable_if_t<not std::is_assignable<C&,T>::value, int> = 0>\n- 240 void recursiveAssign(C& c, const T& t)\n- 241 {\n- 242 Dune::Hybrid::forEach(c, [&](auto&& ci) {\n- 243 recursiveAssign(ci, t);\n- 244 });\n- 245 }\n- 246\n- 247public:\n- 248\n- 249 using Vector = V;\n- 250\n- 251 ISTLVectorBackend(Vector& vector) :\n- 252 vector_(&vector)\n- 253 {}\n- 254\n- 255 template<class SizeProvider>\n- 256 void resize(const SizeProvider& sizeProvider)\n- 257 {\n- 258 auto prefix = typename SizeProvider::SizePrefix();\n- 259 prefix.resize(0);\n- 260 resize(*vector_, sizeProvider, prefix);\n- 261 }\n- 262\n- 263 template<class MultiIndex>\n- 264 decltype(auto) operator[](const MultiIndex& index) const\n- 265 {\n- 266 return resolveDynamicMultiIndex(*vector_, index);\n- 267 }\n- 268\n- 269 template<class MultiIndex>\n- 270 decltype(auto) operator[](const MultiIndex& index)\n- 271 {\n- 272 return resolveDynamicMultiIndex(*vector_, index);\n- 273 }\n- 274\n- 283 template<typename T>\n- 284 void operator= (const T& other)\n- 285 {\n- 286 recursiveAssign(vector(), other);\n- 287 }\n- 288\n- 289 template<typename T>\n- 290 void operator= (const ISTLVectorBackend<T>& other)\n- 291 {\n- 292 vector() = other.vector();\n- 293 }\n- 294\n- 295 const Vector& vector() const\n- 296 {\n- 297 return *vector_;\n- 298 }\n- 299\n- 300 Vector& vector()\n- 301 {\n- 302 return *vector_;\n- 303 }\n- 304\n- 305private:\n- 306\n- 307 Vector* vector_;\n- 308};\n- 309\n- 310} // end namespace Impl\n- 311\n- 312\n- 313\n- 345template<class Vector>\n-346auto istlVectorBackend(Vector& v)\n- 347{\n- 348 static_assert(hasUniqueFieldType<Vector&>(), \"Vector type passed to\n-istlVectorBackend() does not have a unique field type.\");\n- 349 return Impl::ISTLVectorBackend<Vector>(v);\n- 350}\n- 351\n- 352\n- 353\n- 383template<class Vector>\n-384auto istlVectorBackend(const Vector& v)\n- 385{\n- 386 static_assert(hasUniqueFieldType<const Vector&>(), \"Vector type passed to\n-istlVectorBackend() does not have a unique field type.\");\n- 387 return Impl::ISTLVectorBackend<const Vector>(v);\n- 388}\n- 389\n- 390\n- 391\n- 392} // namespace Functions\n- 393} // namespace Dune\n- 394\n- 395\n- 396#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH\n-indexaccess.hh\n-Dune::Functions::istlVectorBackend\n-auto istlVectorBackend(Vector &v)\n-Return a vector backend wrapping non-const ISTL like containers.\n-Definition: istlvectorbackend.hh:346\n-Dune::Functions::resolveDynamicMultiIndex\n-constexpr decltype(auto) resolveDynamicMultiIndex(C &&c, const MultiIndex\n-&multiIndex, const IsFinal &isFinal)\n-Provide multi-index access by chaining operator[].\n-Definition: indexaccess.hh:354\n+ 142#endif // DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_HH\n+signature.hh\n+functionconcepts.hh\n+type_traits.hh\n+defaultderivativetraits.hh\n+typeerasure.hh\n+differentiablefunction_imp.hh\n+Dune::Functions::DifferentiableFunction<_Range(Domain),_DerivativeTraits,\n+bufferSize_>::derivative\n+friend DerivativeInterface derivative(const DifferentiableFunction &t)\n+Get derivative of wrapped function.\n+Definition: differentiablefunction.hh:130\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::fieldTypes\n-constexpr auto fieldTypes()\n-Generate list of field types in container.\n-Definition: istlvectorbackend.hh:63\n-Dune::Functions::hasUniqueFieldType\n-constexpr bool hasUniqueFieldType()\n-Check if container has a unique field type.\n-Definition: istlvectorbackend.hh:74\n-concepts.hh\n+Dune::Functions::DifferentiableFunction\n+Definition: differentiablefunction.hh:29\n+Dune::Functions::DifferentiableFunction<_Range(Domain),_DerivativeTraits,\n+bufferSize_>::DifferentiableFunction\n+DifferentiableFunction(F &&f)\n+Construct from function.\n+Definition: differentiablefunction.hh:106\n+Dune::Functions::DifferentiableFunction<_Range(Domain),_DerivativeTraits,\n+bufferSize_>::DifferentiableFunction\n+DifferentiableFunction()=default\n+Default constructor.\n+Dune::Functions::SignatureTraits\n+Helper class to deduce the signature of a callable.\n+Definition: signature.hh:56\n+Dune::Functions::TypeErasureBase\n+Base class for type-erased interface wrapper.\n+Definition: typeerasure.hh:165\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00014.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00014.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: analyticgridviewfunction.hh File Reference</title>\n+<title>dune-functions: callable.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,56 +58,55 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> |\n <a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">analyticgridviewfunction.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">callable.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <type_traits></code><br />\n-<code>#include <optional></code><br />\n-<code>#include <dune/common/typeutilities.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00086_source.html\">dune/functions/common/signature.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00080_source.html\">dune/functions/common/defaultderivativetraits.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00098_source.html\">dune/functions/common/differentiablefunction_imp.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00068_source.html\">dune/functions/common/differentiablefunction.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00023_source.html\">dune/functions/gridfunctions/gridviewentityset.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00029_source.html\">dune/functions/gridfunctions/localderivativetraits.hh</a>></code><br />\n+<div class=\"textblock\"><code>#include <memory></code><br />\n+<code>#include <functional></code><br />\n+<code>#include <dune/common/function.hh></code><br />\n+<code>#include <dune/common/shared_ptr.hh></code><br />\n </div>\n <p><a href=\"a00014_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01847.html\">Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Class wrapping any differentiable function as grid function. <a href=\"a01847.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01067.html\">Dune::Functions::CallableFunctionWrapper< F ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Wrap a Dune::VirtualFunction into a callable object. <a href=\"a01067.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n Functions</h2></td></tr>\n-<tr class=\"memitem:gafe8f06fb6d4027bfaf39e0971d8eb3c6\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class GridView > </td></tr>\n-<tr class=\"memitem:gafe8f06fb6d4027bfaf39e0971d8eb3c6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">AnalyticGridViewFunction< typename std::invoke_result< F, typename GridView::template Codim< 0 >::Geometry::GlobalCoordinate >::type(typename GridView::template Codim< 0 >::Geometry::GlobalCoordinate), GridView, typename std::decay< F >::type > </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00209.html#gafe8f06fb6d4027bfaf39e0971d8eb3c6\">Dune::Functions::makeAnalyticGridViewFunction</a> (F &&f, const GridView &gridView)</td></tr>\n-<tr class=\"memdesc:gafe8f06fb6d4027bfaf39e0971d8eb3c6\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create an <a class=\"el\" href=\"a01843.html\">AnalyticGridViewFunction</a> from a function and a grid view. <a href=\"a00209.html#gafe8f06fb6d4027bfaf39e0971d8eb3c6\">More...</a><br /></td></tr>\n-<tr class=\"separator:gafe8f06fb6d4027bfaf39e0971d8eb3c6\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:gae3639def57e4833c434ae816ea82271e\"><td class=\"memTemplParams\" colspan=\"2\">template<class F > </td></tr>\n+<tr class=\"memitem:gae3639def57e4833c434ae816ea82271e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">CallableFunctionWrapper< F > </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00209.html#gae3639def57e4833c434ae816ea82271e\">Dune::Functions::callable</a> (const F &f)</td></tr>\n+<tr class=\"memdesc:gae3639def57e4833c434ae816ea82271e\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a callable object from some Dune::VirtualFunction. <a href=\"a00209.html#gae3639def57e4833c434ae816ea82271e\">More...</a><br /></td></tr>\n+<tr class=\"separator:gae3639def57e4833c434ae816ea82271e\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga5831245ed303c2103ab06af079cb8cf9\"><td class=\"memTemplParams\" colspan=\"2\">template<class F > </td></tr>\n+<tr class=\"memitem:ga5831245ed303c2103ab06af079cb8cf9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">CallableFunctionWrapper< F > </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00209.html#ga5831245ed303c2103ab06af079cb8cf9\">Dune::Functions::callable</a> (const std::shared_ptr< F > &fp)</td></tr>\n+<tr class=\"memdesc:ga5831245ed303c2103ab06af079cb8cf9\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a callable object from std::shared_ptr<F> <a href=\"a00209.html#ga5831245ed303c2103ab06af079cb8cf9\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga5831245ed303c2103ab06af079cb8cf9\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,46 +4,39 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * gridfunctions\n+ * common\n Classes | Namespaces | Functions\n-analyticgridviewfunction.hh File Reference\n-#include <type_traits>\n-#include <optional>\n-#include <dune/common/typeutilities.hh>\n-#include <dune/functions/common/signature.hh>\n-#include <dune/functions/common/defaultderivativetraits.hh>\n-#include <dune/functions/common/differentiablefunction_imp.hh>\n-#include <dune/functions/common/differentiablefunction.hh>\n-#include <dune/functions/gridfunctions/gridviewentityset.hh>\n-#include <dune/functions/gridfunctions/localderivativetraits.hh>\n+callable.hh File Reference\n+#include <memory>\n+#include <functional>\n+#include <dune/common/function.hh>\n+#include <dune/common/shared_ptr.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-class \u00a0Dune::Functions::AnalyticGridViewFunction<_Range(Domain),_GV,_F,\n- DerivativeTraits_>\n-\u00a0 Class wrapping any differentiable function as grid function. More...\n+class \u00a0Dune::Functions::CallableFunctionWrapper<_F_>\n+\u00a0 Wrap a Dune::VirtualFunction into a callable object. More...\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n Functions\n-template<class F , class GridView >\n- AnalyticGridViewFunction< typename\n- std::invoke_result< F, typename\n- GridView::template Codim< 0 >::\n- Geometry::GlobalCoordinate >::type\n-(typename GridView::template Codim< 0\n- >::Geometry::GlobalCoordinate), Dune::Functions::\n- GridView, typename std::decay< F >:: makeAnalyticGridViewFunction (F &&f,\n- type >\u00a0const GridView &gridView)\n-\u00a0 Create an AnalyticGridViewFunction from\n- a function and a grid view. More...\n+template<class F >\n+CallableFunctionWrapper< F >\u00a0Dune::Functions::callable (const F &f)\n+\u00a0 Create a callable object from some Dune::\n+ VirtualFunction. More...\n+\u00a0\n+template<class F >\n+CallableFunctionWrapper< F >\u00a0Dune::Functions::callable (const std::shared_ptr<\n+ F > &fp)\n+\u00a0 Create a callable object from std::shared_ptr<F>\n+ More...\n \u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00014_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00014_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: analyticgridviewfunction.hh Source File</title>\n+<title>dune-functions: callable.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,239 +58,94 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">analyticgridviewfunction.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">callable.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00014.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_CALLABLE_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_CALLABLE_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <type_traits></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <optional></span></div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <memory></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <functional></span></div>\n <div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/common/typeutilities.hh></span></div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span> </div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00086.html\">dune/functions/common/signature.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00080.html\">dune/functions/common/defaultderivativetraits.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00098.html\">dune/functions/common/differentiablefunction_imp.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00068.html\">dune/functions/common/differentiablefunction.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00023.html\">dune/functions/gridfunctions/gridviewentityset.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00029.html\">dune/functions/gridfunctions/localderivativetraits.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/common/function.hh></span></div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/shared_ptr.hh></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n <div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n <div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> </div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"keyword\">namespace </span>Imp {</div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span> </div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> GV, <span class=\"keyword\">class</span> FLocal, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits=DefaultDerivativeTraits></div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span><span class=\"keyword\">class </span>LocalAnalyticGridViewFunction;</div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> </div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> LocalDomain, <span class=\"keyword\">class</span> GV, <span class=\"keyword\">class</span> F, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits></div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span><span class=\"keyword\">class </span>LocalAnalyticGridViewFunction<Range(LocalDomain), GV, F, DerivativeTraits></div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span>{</div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> <span class=\"keyword\">using </span>Signature = Range(LocalDomain);</div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> <span class=\"keyword\">using </span>RawSignature = <span class=\"keyword\">typename</span> SignatureTraits<Signature>::RawSignature;</div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> <span class=\"keyword\">using </span>DerivativeSignature = <span class=\"keyword\">typename</span> DerivativeTraits<RawSignature>::Range(LocalDomain);</div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> </div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> <span class=\"keyword\">using </span>GridView = GV;</div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> <span class=\"keyword\">using </span>EntitySet = GridViewEntitySet<GridView, 0>;</div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> <span class=\"keyword\">using </span>Element = <span class=\"keyword\">typename</span> EntitySet::Element;</div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span><span class=\"comment\">// using Geometry = typename Element::Geometry;</span></div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> <span class=\"keyword\">using </span>Geometry = <span class=\"keyword\">typename</span> std::decay<typename Element::Geometry>::type;</div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> </div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> <span class=\"comment\">// Use the indirection via derivativeIfImplemented to also support</span></div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> <span class=\"comment\">// function types F that do not implement derivative. In this case</span></div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> <span class=\"comment\">// the interface type DifferentiableFunction is using a dummy for</span></div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> <span class=\"comment\">// the derivative type</span></div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> <span class=\"keyword\">using </span>DerivativeDummy = DifferentiableFunction<DerivativeSignature>;</div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> <span class=\"keyword\">using </span>GlobalRawDerivative = <span class=\"keyword\">decltype</span>(Imp::derivativeIfImplemented<DerivativeDummy, F>(std::declval<F>()));</div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> <span class=\"keyword\">using </span>LocalDerivative = LocalAnalyticGridViewFunction<DerivativeSignature, GridView, GlobalRawDerivative, DerivativeTraits>;</div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> </div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> FT, disableCopyMove<LocalAnalyticGr<span class=\"keywordtype\">id</span>ViewFunction, FT> = 0></div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> LocalAnalyticGridViewFunction(FT&& f) :</div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> f_(std::forward<FT>(f))</div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> {}</div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F></div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01067.html\"> 37</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01067.html\">CallableFunctionWrapper</a></div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span>{</div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> <span class=\"keyword\">using </span>Range = <span class=\"keyword\">typename</span> F::RangeType;</div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> <span class=\"keyword\">using </span>Domain = <span class=\"keyword\">typename</span> F::DomainType;</div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> </div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> <span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> </div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01067.html#a488ad53137f6f83fd7efff332758bbf3\"> 50</a></span> <a class=\"code hl_function\" href=\"a01067.html#a488ad53137f6f83fd7efff332758bbf3\">CallableFunctionWrapper</a>(<span class=\"keyword\">const</span> F& f)</div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> {</div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> f_ = Dune::stackobject_to_shared_ptr(f);</div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> }</div>\n <div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> </div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> FT></div>\n-<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> LocalAnalyticGridViewFunction(FT&& f, <span class=\"keyword\">const</span> Element& element, <span class=\"keyword\">const</span> std::optional<Geometry>& geometry) :</div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> f_(std::forward<FT>(f)),</div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> element_(element),</div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> geometry_(geometry)</div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> {}</div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> </div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> </div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> <span class=\"keywordtype\">void</span> bind(<span class=\"keyword\">const</span> Element& element)</div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> {</div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> element_ = element;</div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> geometry_.emplace(element_.geometry());</div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> }</div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> </div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> <span class=\"keywordtype\">void</span> unbind()</div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> {</div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> geometry_.reset();</div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> }</div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> </div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> <span class=\"keywordtype\">bool</span> bound()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> <span class=\"keywordflow\">return</span> <span class=\"keyword\">static_cast<</span><span class=\"keywordtype\">bool</span><span class=\"keyword\">></span>(geometry_);</div>\n-<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> }</div>\n-<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> </div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> Range operator()(<span class=\"keyword\">const</span> LocalDomain& x)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> assert(!!geometry_);</div>\n-<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> <span class=\"keywordflow\">return</span> f_(geometry_->global(x));</div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> }</div>\n-<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> </div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> <span class=\"keyword\">const</span> Element& localContext()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> assert(!!geometry_);</div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> <span class=\"keywordflow\">return</span> element_;</div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> }</div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> </div>\n-<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> <span class=\"keyword\">friend</span> LocalDerivative <a class=\"code hl_function\" href=\"a00209.html#ga7ec424ff4be740ad675bd85750940472\">derivative</a>(<span class=\"keyword\">const</span> LocalAnalyticGridViewFunction& t)</div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> {</div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> <span class=\"keywordflow\">return</span> LocalDerivative(Imp::derivativeIfImplemented<DerivativeDummy, F>(t.f_), t.element_, t.geometry_);</div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> }</div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> </div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span><span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> F f_;</div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> Element element_;</div>\n-<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> std::optional<Geometry> geometry_ = std::nullopt;</div>\n-<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span>};</div>\n-<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> </div>\n-<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span>} <span class=\"comment\">// end namespace Imp</span></div>\n-<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> </div>\n-<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> </div>\n-<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> </div>\n-<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> </div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> GV, <span class=\"keyword\">class</span> F, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits=DefaultDerivativeTraits></div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01843.html\"> 138</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01843.html\">AnalyticGridViewFunction</a>;</div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> </div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> </div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">class</span> GV, <span class=\"keyword\">class</span> F, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits></div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html\"> 147</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01843.html\">AnalyticGridViewFunction</a><Range(Domain), GV, F, DerivativeTraits></div>\n-<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span>{</div>\n-<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#aa2e57079e8165771b468b0f8ec045543\"> 150</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01847.html#aa2e57079e8165771b468b0f8ec045543\">Signature</a> = Range(Domain);</div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#ad2d85b10863874dd3e2776713d5076e9\"> 151</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01847.html#ad2d85b10863874dd3e2776713d5076e9\">RawSignature</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_struct\" href=\"a01291.html\">SignatureTraits<Signature>::RawSignature</a>;</div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#afcaf671c34c3553f4d420211028dab76\"> 152</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01847.html#afcaf671c34c3553f4d420211028dab76\">DerivativeSignature</a> = <span class=\"keyword\">typename</span> DerivativeTraits<RawSignature>::Range(Domain);</div>\n-<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> </div>\n-<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#a3ab08bad4d12b17d8c8f7c8e7b1bbc69\"> 154</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01847.html#a3ab08bad4d12b17d8c8f7c8e7b1bbc69\">GridView</a> = GV;</div>\n-<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#aed254f1cdaa3f08febd06e909d35b3cd\"> 155</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01919.html\">EntitySet</a> = <a class=\"code hl_class\" href=\"a01919.html\">GridViewEntitySet<GridView, 0></a>;</div>\n-<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#a36bf73d91911801df4dcaa5ae961d0b0\"> 156</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01847.html#a36bf73d91911801df4dcaa5ae961d0b0\">Element</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01919.html#a1d5eaf3facd0219b2e150d964a664752\">EntitySet::Element</a>;</div>\n-<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#a2d4c287ddf9b17b7d6320dd572ddfcf1\"> 157</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01847.html#a2d4c287ddf9b17b7d6320dd572ddfcf1\">Geometry</a> = <span class=\"keyword\">typename</span> Element::Geometry;</div>\n-<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> </div>\n-<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> <span class=\"comment\">// Use the indirection via derivativeIfImplemented to also support</span></div>\n-<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> <span class=\"comment\">// function types F that do not implement derivative. In this case</span></div>\n-<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> <span class=\"comment\">// the interface type DifferentiableFunction is used a dummy for</span></div>\n-<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> <span class=\"comment\">// the derivative type</span></div>\n-<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#a68a3493c4e43d6c64410275156852ac2\"> 163</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01095.html\">DerivativeDummy</a> = <a class=\"code hl_class\" href=\"a01095.html\">DifferentiableFunction<DerivativeSignature></a>;</div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#a4c8813afc37057a21fc7536d9a18685e\"> 164</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01847.html#a4c8813afc37057a21fc7536d9a18685e\">GlobalRawDerivative</a> = <span class=\"keyword\">decltype</span>(Imp::derivativeIfImplemented<DerivativeDummy, F>(std::declval<F>()));</div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#afe9abda88e9aa9396e3485ea5475b31e\"> 165</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01843.html\">Derivative</a> = <a class=\"code hl_class\" href=\"a01843.html\">AnalyticGridViewFunction<DerivativeSignature, GridView, GlobalRawDerivative, DerivativeTraits></a>;</div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> </div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#a2644d1c93770a9a8ad1931c8f1cdc7f8\"> 167</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01847.html#a2644d1c93770a9a8ad1931c8f1cdc7f8\">LocalDomain</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01919.html#aa4368ad66f18ba8279f20ab7a794069d\">EntitySet::LocalCoordinate</a>;</div>\n-<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#ab92fb33a585d4dfdbe78dd0e77993d7a\"> 168</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01847.html#ab92fb33a585d4dfdbe78dd0e77993d7a\">LocalFunction</a> = <span class=\"keyword\">typename</span> Imp::LocalAnalyticGridViewFunction<Range(<a class=\"code hl_typedef\" href=\"a01847.html#a2644d1c93770a9a8ad1931c8f1cdc7f8\">LocalDomain</a>), <a class=\"code hl_typedef\" href=\"a01847.html#a3ab08bad4d12b17d8c8f7c8e7b1bbc69\">GridView</a>, F, <a class=\"code hl_struct\" href=\"a01931.html\">LocalDerivativeTraits<EntitySet, DerivativeTraits>::template</a> Traits>;</div>\n-<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> </div>\n-<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> FT></div>\n-<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#aa421b38ced5abc500288056268631b3e\"> 172</a></span> <a class=\"code hl_function\" href=\"a01847.html#aa421b38ced5abc500288056268631b3e\">AnalyticGridViewFunction</a>(FT&& f, <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01847.html#a3ab08bad4d12b17d8c8f7c8e7b1bbc69\">GridView</a>& gridView) :</div>\n-<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> f_(std::forward<FT>(f)),</div>\n-<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> entitySet_(gridView)</div>\n-<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> {}</div>\n-<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> </div>\n-<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#a05726b187a479456361f58e9d4b2fa34\"> 178</a></span> Range <a class=\"code hl_function\" href=\"a01847.html#a05726b187a479456361f58e9d4b2fa34\">operator()</a>(<span class=\"keyword\">const</span> Domain& x)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> <span class=\"keywordflow\">return</span> f_(x);</div>\n-<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> }</div>\n-<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> </div>\n-<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#a2ceb0428654441ce8a49031580a04146\"> 184</a></span> <span class=\"keyword\">friend</span> <a class=\"code hl_class\" href=\"a01843.html\">Derivative</a> <a class=\"code hl_friend\" href=\"a01847.html#a2ceb0428654441ce8a49031580a04146\">derivative</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01843.html\">AnalyticGridViewFunction</a>& t)</div>\n-<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> {</div>\n-<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01843.html\">Derivative</a>(Imp::derivativeIfImplemented<DerivativeDummy, F>(t.f_), t.entitySet_.gridView());</div>\n-<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> }</div>\n-<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> </div>\n-<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#aa46d871f99ccc78e6864cf4d69944af6\"> 190</a></span> <span class=\"keyword\">friend</span> <a class=\"code hl_typedef\" href=\"a01847.html#ab92fb33a585d4dfdbe78dd0e77993d7a\">LocalFunction</a> <a class=\"code hl_friend\" href=\"a01847.html#aa46d871f99ccc78e6864cf4d69944af6\">localFunction</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01843.html\">AnalyticGridViewFunction</a>& t)</div>\n-<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> {</div>\n-<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_typedef\" href=\"a01847.html#ab92fb33a585d4dfdbe78dd0e77993d7a\">LocalFunction</a>(t.f_);</div>\n-<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> }</div>\n-<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> </div>\n-<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#af1cac33f34632fa23f5763d282c4d17e\"> 196</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01919.html\">EntitySet</a>& <a class=\"code hl_function\" href=\"a01847.html#af1cac33f34632fa23f5763d282c4d17e\">entitySet</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> <span class=\"keywordflow\">return</span> entitySet_;</div>\n-<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> }</div>\n-<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> </div>\n-<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span><span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> F f_;</div>\n-<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> EntitySet entitySet_;</div>\n-<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span>};</div>\n-<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span> </div>\n-<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> </div>\n-<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> </div>\n-<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F, <span class=\"keyword\">class</span> Gr<span class=\"keywordtype\">id</span>View></div>\n-<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span>AnalyticGridViewFunction<</div>\n-<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> <span class=\"keyword\">typename</span> std::invoke_result<F, typename GridView::template Codim<0>::Geometry::GlobalCoordinate>::type <span class=\"comment\">// Range</span></div>\n-<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> (<span class=\"keyword\">typename</span> GridView::template Codim<0>::Geometry::GlobalCoordinate), <span class=\"comment\">// Domain</span></div>\n-<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> GridView,</div>\n-<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> <span class=\"keyword\">typename</span> std::decay<F>::type > <span class=\"comment\">// Raw type of F (without & or &&)</span></div>\n-<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00209.html#gafe8f06fb6d4027bfaf39e0971d8eb3c6\"> 230</a></span> <a class=\"code hl_function\" href=\"a00209.html#gafe8f06fb6d4027bfaf39e0971d8eb3c6\">makeAnalyticGridViewFunction</a>(F&& f, <span class=\"keyword\">const</span> GridView& gridView)</div>\n-<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span>{</div>\n-<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> <span class=\"keyword\">using </span>Domain = <span class=\"keyword\">typename</span> GridView::template Codim<0>::Geometry::GlobalCoordinate;</div>\n-<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> <span class=\"keyword\">using </span>Range = <span class=\"keyword\">typename</span> std::invoke_result<F, Domain>::type;</div>\n-<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> <span class=\"keyword\">using </span>FRaw = <span class=\"keyword\">typename</span> std::decay<F>::type;</div>\n-<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> </div>\n-<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01843.html\">AnalyticGridViewFunction<Range(Domain), GridView, FRaw></a>(std::forward<F>(f), gridView);</div>\n-<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span>}</div>\n-<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span> </div>\n-<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span> </div>\n-<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"> 240</span> </div>\n-<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span>}} <span class=\"comment\">// namespace Dune::Functions</span></div>\n-<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span> </div>\n-<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> </div>\n-<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> </div>\n-<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH</span></div>\n-<div class=\"ttc\" id=\"aa00023_html\"><div class=\"ttname\"><a href=\"a00023.html\">gridviewentityset.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00029_html\"><div class=\"ttname\"><a href=\"a00029.html\">localderivativetraits.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00068_html\"><div class=\"ttname\"><a href=\"a00068.html\">differentiablefunction.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00080_html\"><div class=\"ttname\"><a href=\"a00080.html\">defaultderivativetraits.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00086_html\"><div class=\"ttname\"><a href=\"a00086.html\">signature.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00098_html\"><div class=\"ttname\"><a href=\"a00098.html\">differentiablefunction_imp.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00209_html_ga7ec424ff4be740ad675bd85750940472\"><div class=\"ttname\"><a href=\"a00209.html#ga7ec424ff4be740ad675bd85750940472\">Dune::Functions::derivative</a></div><div class=\"ttdeci\">TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const TrigonometricFunction< K, sinFactor, cosFactor > &f)</div><div class=\"ttdoc\">Obtain derivative of TrigonometricFunction function.</div><div class=\"ttdef\"><b>Definition:</b> trigonometricfunction.hh:39</div></div>\n-<div class=\"ttc\" id=\"aa00209_html_gafe8f06fb6d4027bfaf39e0971d8eb3c6\"><div class=\"ttname\"><a href=\"a00209.html#gafe8f06fb6d4027bfaf39e0971d8eb3c6\">Dune::Functions::AnalyticGridViewFunction::makeAnalyticGridViewFunction</a></div><div class=\"ttdeci\">AnalyticGridViewFunction< typename std::invoke_result< F, typename GridView::template Codim< 0 >::Geometry::GlobalCoordinate >::type(typename GridView::template Codim< 0 >::Geometry::GlobalCoordinate), GridView, typename std::decay< F >::type > makeAnalyticGridViewFunction(F &&f, const GridView &gridView)</div><div class=\"ttdoc\">Create an AnalyticGridViewFunction from a function and a grid view.</div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:230</div></div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01067.html#af374bad6d7410748c48c4cfdf085fd56\"> 61</a></span> <a class=\"code hl_function\" href=\"a01067.html#af374bad6d7410748c48c4cfdf085fd56\">CallableFunctionWrapper</a>(<span class=\"keyword\">const</span> std::shared_ptr<const F>& f) :</div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> f_(f)</div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> {}</div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> </div>\n+<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01067.html#a08670433e1fd5804af96dfa0b73edea2\"> 70</a></span> Range <a class=\"code hl_function\" href=\"a01067.html#a08670433e1fd5804af96dfa0b73edea2\">operator()</a>(<span class=\"keyword\">const</span> Domain& x)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> Range y;</div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> f_->evaluate(x, y);</div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> <span class=\"keywordflow\">return</span> y;</div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> }</div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> </div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> <span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> std::shared_ptr<const F> f_;</div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span>};</div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> </div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> </div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> </div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F></div>\n+<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00209.html#gae3639def57e4833c434ae816ea82271e\"> 105</a></span><a class=\"code hl_class\" href=\"a01067.html\">CallableFunctionWrapper<F></a> <a class=\"code hl_function\" href=\"a00209.html#gae3639def57e4833c434ae816ea82271e\">callable</a>(<span class=\"keyword\">const</span> F& f)</div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span>{</div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01067.html\">CallableFunctionWrapper<F></a>(f);</div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span>}</div>\n+<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> </div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> </div>\n+<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F></div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00209.html#ga5831245ed303c2103ab06af079cb8cf9\"> 137</a></span><a class=\"code hl_class\" href=\"a01067.html\">CallableFunctionWrapper<F></a> <a class=\"code hl_function\" href=\"a00209.html#gae3639def57e4833c434ae816ea82271e\">callable</a>(<span class=\"keyword\">const</span> std::shared_ptr<F>& fp)</div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span>{</div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01067.html\">CallableFunctionWrapper<F></a>(fp);</div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span>}</div>\n+<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> </div>\n+<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> </div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> </div>\n+<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span>} <span class=\"comment\">// namespace Functions</span></div>\n+<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span>} <span class=\"comment\">// namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> </div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">//DUNE_FUNCTIONS_COMMON_CALLABLE_HH</span></div>\n+<div class=\"ttc\" id=\"aa00209_html_gae3639def57e4833c434ae816ea82271e\"><div class=\"ttname\"><a href=\"a00209.html#gae3639def57e4833c434ae816ea82271e\">Dune::Functions::callable</a></div><div class=\"ttdeci\">CallableFunctionWrapper< F > callable(const F &f)</div><div class=\"ttdoc\">Create a callable object from some Dune::VirtualFunction.</div><div class=\"ttdef\"><b>Definition:</b> callable.hh:105</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa01095_html\"><div class=\"ttname\"><a href=\"a01095.html\">Dune::Functions::DifferentiableFunction</a></div><div class=\"ttdef\"><b>Definition:</b> differentiablefunction.hh:29</div></div>\n-<div class=\"ttc\" id=\"aa01291_html\"><div class=\"ttname\"><a href=\"a01291.html\">Dune::Functions::SignatureTraits</a></div><div class=\"ttdoc\">Helper class to deduce the signature of a callable.</div><div class=\"ttdef\"><b>Definition:</b> signature.hh:56</div></div>\n-<div class=\"ttc\" id=\"aa01843_html\"><div class=\"ttname\"><a href=\"a01843.html\">Dune::Functions::AnalyticGridViewFunction</a></div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:138</div></div>\n-<div class=\"ttc\" id=\"aa01847_html_a05726b187a479456361f58e9d4b2fa34\"><div class=\"ttname\"><a href=\"a01847.html#a05726b187a479456361f58e9d4b2fa34\">Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits >::operator()</a></div><div class=\"ttdeci\">Range operator()(const Domain &x) const</div><div class=\"ttdoc\">Evaluate the wrapped function f directly in global coordinates x.</div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:178</div></div>\n-<div class=\"ttc\" id=\"aa01847_html_a2644d1c93770a9a8ad1931c8f1cdc7f8\"><div class=\"ttname\"><a href=\"a01847.html#a2644d1c93770a9a8ad1931c8f1cdc7f8\">Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits >::LocalDomain</a></div><div class=\"ttdeci\">typename EntitySet::LocalCoordinate LocalDomain</div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:167</div></div>\n-<div class=\"ttc\" id=\"aa01847_html_a2ceb0428654441ce8a49031580a04146\"><div class=\"ttname\"><a href=\"a01847.html#a2ceb0428654441ce8a49031580a04146\">Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits >::derivative</a></div><div class=\"ttdeci\">friend Derivative derivative(const AnalyticGridViewFunction &t)</div><div class=\"ttdoc\">Create a derivative grid-function by wrapping the derivative of f.</div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:184</div></div>\n-<div class=\"ttc\" id=\"aa01847_html_a2d4c287ddf9b17b7d6320dd572ddfcf1\"><div class=\"ttname\"><a href=\"a01847.html#a2d4c287ddf9b17b7d6320dd572ddfcf1\">Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits >::Geometry</a></div><div class=\"ttdeci\">typename Element::Geometry Geometry</div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:157</div></div>\n-<div class=\"ttc\" id=\"aa01847_html_a36bf73d91911801df4dcaa5ae961d0b0\"><div class=\"ttname\"><a href=\"a01847.html#a36bf73d91911801df4dcaa5ae961d0b0\">Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits >::Element</a></div><div class=\"ttdeci\">typename EntitySet::Element Element</div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:156</div></div>\n-<div class=\"ttc\" id=\"aa01847_html_a3ab08bad4d12b17d8c8f7c8e7b1bbc69\"><div class=\"ttname\"><a href=\"a01847.html#a3ab08bad4d12b17d8c8f7c8e7b1bbc69\">Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits >::GridView</a></div><div class=\"ttdeci\">GV GridView</div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:154</div></div>\n-<div class=\"ttc\" id=\"aa01847_html_a4c8813afc37057a21fc7536d9a18685e\"><div class=\"ttname\"><a href=\"a01847.html#a4c8813afc37057a21fc7536d9a18685e\">Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits >::GlobalRawDerivative</a></div><div class=\"ttdeci\">decltype(Imp::derivativeIfImplemented< DerivativeDummy, F >(std::declval< F >())) GlobalRawDerivative</div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:164</div></div>\n-<div class=\"ttc\" id=\"aa01847_html_aa2e57079e8165771b468b0f8ec045543\"><div class=\"ttname\"><a href=\"a01847.html#aa2e57079e8165771b468b0f8ec045543\">Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits >::Signature</a></div><div class=\"ttdeci\">Range(Domain) Signature</div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:150</div></div>\n-<div class=\"ttc\" id=\"aa01847_html_aa421b38ced5abc500288056268631b3e\"><div class=\"ttname\"><a href=\"a01847.html#aa421b38ced5abc500288056268631b3e\">Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits >::AnalyticGridViewFunction</a></div><div class=\"ttdeci\">AnalyticGridViewFunction(FT &&f, const GridView &gridView)</div><div class=\"ttdoc\">Create the grid-function by wrapping a function f and create a GridViewEntitySet.</div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:172</div></div>\n-<div class=\"ttc\" id=\"aa01847_html_aa46d871f99ccc78e6864cf4d69944af6\"><div class=\"ttname\"><a href=\"a01847.html#aa46d871f99ccc78e6864cf4d69944af6\">Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits >::localFunction</a></div><div class=\"ttdeci\">friend LocalFunction localFunction(const AnalyticGridViewFunction &t)</div><div class=\"ttdoc\">Construct the associated local-function.</div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:190</div></div>\n-<div class=\"ttc\" id=\"aa01847_html_ab92fb33a585d4dfdbe78dd0e77993d7a\"><div class=\"ttname\"><a href=\"a01847.html#ab92fb33a585d4dfdbe78dd0e77993d7a\">Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits >::LocalFunction</a></div><div class=\"ttdeci\">typename Imp::LocalAnalyticGridViewFunction< Range(LocalDomain), GridView, F, LocalDerivativeTraits< EntitySet, DerivativeTraits >::template Traits > LocalFunction</div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:168</div></div>\n-<div class=\"ttc\" id=\"aa01847_html_ad2d85b10863874dd3e2776713d5076e9\"><div class=\"ttname\"><a href=\"a01847.html#ad2d85b10863874dd3e2776713d5076e9\">Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits >::RawSignature</a></div><div class=\"ttdeci\">typename SignatureTraits< Signature >::RawSignature RawSignature</div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:151</div></div>\n-<div class=\"ttc\" id=\"aa01847_html_af1cac33f34632fa23f5763d282c4d17e\"><div class=\"ttname\"><a href=\"a01847.html#af1cac33f34632fa23f5763d282c4d17e\">Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits >::entitySet</a></div><div class=\"ttdeci\">const EntitySet & entitySet() const</div><div class=\"ttdoc\">Return the set of entities this local-function can be bound to.</div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:196</div></div>\n-<div class=\"ttc\" id=\"aa01847_html_afcaf671c34c3553f4d420211028dab76\"><div class=\"ttname\"><a href=\"a01847.html#afcaf671c34c3553f4d420211028dab76\">Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits >::DerivativeSignature</a></div><div class=\"ttdeci\">typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature</div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:152</div></div>\n-<div class=\"ttc\" id=\"aa01919_html\"><div class=\"ttname\"><a href=\"a01919.html\">Dune::Functions::GridViewEntitySet< GridView, 0 ></a></div></div>\n-<div class=\"ttc\" id=\"aa01919_html_a1d5eaf3facd0219b2e150d964a664752\"><div class=\"ttname\"><a href=\"a01919.html#a1d5eaf3facd0219b2e150d964a664752\">Dune::Functions::GridViewEntitySet< GridView, 0 >::Element</a></div><div class=\"ttdeci\">GridView::template Codim< codim >::Entity Element</div><div class=\"ttdoc\">Type of Elements contained in this EntitySet.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:32</div></div>\n-<div class=\"ttc\" id=\"aa01919_html_aa4368ad66f18ba8279f20ab7a794069d\"><div class=\"ttname\"><a href=\"a01919.html#aa4368ad66f18ba8279f20ab7a794069d\">Dune::Functions::GridViewEntitySet< GridView, 0 >::LocalCoordinate</a></div><div class=\"ttdeci\">Element::Geometry::LocalCoordinate LocalCoordinate</div><div class=\"ttdoc\">Type of local coordinates with respect to the Element.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:35</div></div>\n-<div class=\"ttc\" id=\"aa01931_html\"><div class=\"ttname\"><a href=\"a01931.html\">Dune::Functions::LocalDerivativeTraits</a></div><div class=\"ttdoc\">Derivative traits for local functions.</div><div class=\"ttdef\"><b>Definition:</b> localderivativetraits.hh:28</div></div>\n+<div class=\"ttc\" id=\"aa01067_html\"><div class=\"ttname\"><a href=\"a01067.html\">Dune::Functions::CallableFunctionWrapper</a></div><div class=\"ttdoc\">Wrap a Dune::VirtualFunction into a callable object.</div><div class=\"ttdef\"><b>Definition:</b> callable.hh:38</div></div>\n+<div class=\"ttc\" id=\"aa01067_html_a08670433e1fd5804af96dfa0b73edea2\"><div class=\"ttname\"><a href=\"a01067.html#a08670433e1fd5804af96dfa0b73edea2\">Dune::Functions::CallableFunctionWrapper::operator()</a></div><div class=\"ttdeci\">Range operator()(const Domain &x) const</div><div class=\"ttdoc\">Forward operator() to F::evaluate()</div><div class=\"ttdef\"><b>Definition:</b> callable.hh:70</div></div>\n+<div class=\"ttc\" id=\"aa01067_html_a488ad53137f6f83fd7efff332758bbf3\"><div class=\"ttname\"><a href=\"a01067.html#a488ad53137f6f83fd7efff332758bbf3\">Dune::Functions::CallableFunctionWrapper::CallableFunctionWrapper</a></div><div class=\"ttdeci\">CallableFunctionWrapper(const F &f)</div><div class=\"ttdoc\">Instantiate from reference to f.</div><div class=\"ttdef\"><b>Definition:</b> callable.hh:50</div></div>\n+<div class=\"ttc\" id=\"aa01067_html_af374bad6d7410748c48c4cfdf085fd56\"><div class=\"ttname\"><a href=\"a01067.html#af374bad6d7410748c48c4cfdf085fd56\">Dune::Functions::CallableFunctionWrapper::CallableFunctionWrapper</a></div><div class=\"ttdeci\">CallableFunctionWrapper(const std::shared_ptr< const F > &f)</div><div class=\"ttdoc\">Instantiate from std::shared_ptr to f.</div><div class=\"ttdef\"><b>Definition:</b> callable.hh:61</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,326 +4,101 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * gridfunctions\n-analyticgridviewfunction.hh\n+ * common\n+callable.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH\n- 4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH\n+ 3#ifndef DUNE_FUNCTIONS_COMMON_CALLABLE_HH\n+ 4#define DUNE_FUNCTIONS_COMMON_CALLABLE_HH\n 5\n- 6#include <type_traits>\n- 7#include <optional>\n+ 6#include <memory>\n+ 7#include <functional>\n 8\n- 9#include <dune/common/typeutilities.hh>\n- 10\n- 11#include <dune/functions/common/signature.hh>\n- 12#include <dune/functions/common/defaultderivativetraits.hh>\n- 13#include <dune/functions/common/differentiablefunction_imp.hh>\n- 14#include <dune/functions/common/differentiablefunction.hh>\n- 15#include <dune/functions/gridfunctions/gridviewentityset.hh>\n- 16#include <dune/functions/gridfunctions/localderivativetraits.hh>\n+ 9#include <dune/common/function.hh>\n+ 10#include <dune/common/shared_ptr.hh>\n+ 11\n+ 12\n+ 13namespace Dune {\n+ 14namespace Functions {\n+ 15\n+ 16\n 17\n 18\n- 19namespace Dune {\n- 20namespace Functions {\n- 21\n- 22namespace Imp {\n- 23\n- 24template<class Signature, class GV, class FLocal, template<class> class\n-DerivativeTraits=DefaultDerivativeTraits>\n- 25class LocalAnalyticGridViewFunction;\n- 26\n- 27template<class Range, class LocalDomain, class GV, class F, template<class>\n-class DerivativeTraits>\n- 28class LocalAnalyticGridViewFunction<Range(LocalDomain), GV, F,\n-DerivativeTraits>\n- 29{\n- 30public:\n- 31 using Signature = Range(LocalDomain);\n- 32 using RawSignature = typename SignatureTraits<Signature>::RawSignature;\n- 33 using DerivativeSignature = typename DerivativeTraits<RawSignature>::Range\n-(LocalDomain);\n- 34\n- 35 using GridView = GV;\n- 36 using EntitySet = GridViewEntitySet<GridView, 0>;\n- 37 using Element = typename EntitySet::Element;\n- 38// using Geometry = typename Element::Geometry;\n- 39 using Geometry = typename std::decay<typename Element::Geometry>::type;\n- 40\n- 41 // Use the indirection via derivativeIfImplemented to also support\n- 42 // function types F that do not implement derivative. In this case\n- 43 // the interface type DifferentiableFunction is using a dummy for\n- 44 // the derivative type\n- 45 using DerivativeDummy = DifferentiableFunction<DerivativeSignature>;\n- 46 using GlobalRawDerivative = decltype(Imp::\n-derivativeIfImplemented<DerivativeDummy, F>(std::declval<F>()));\n- 47 using LocalDerivative = LocalAnalyticGridViewFunction<DerivativeSignature,\n-GridView, GlobalRawDerivative, DerivativeTraits>;\n- 48\n- 50 template<class FT, disableCopyMove<LocalAnalyticGridViewFunction, FT> = 0>\n- 51 LocalAnalyticGridViewFunction(FT&& f) :\n- 52 f_(std::forward<FT>(f))\n- 53 {}\n+ 36template<class F>\n+37class CallableFunctionWrapper\n+ 38{\n+ 39 using Range = typename F::RangeType;\n+ 40 using Domain = typename F::DomainType;\n+ 41\n+ 42 public:\n+ 43\n+50 CallableFunctionWrapper(const F& f)\n+ 51 {\n+ 52 f_ = Dune::stackobject_to_shared_ptr(f);\n+ 53 }\n 54\n- 56 template<class FT>\n- 57 LocalAnalyticGridViewFunction(FT&& f, const Element& element, const std::\n-optional<Geometry>& geometry) :\n- 58 f_(std::forward<FT>(f)),\n- 59 element_(element),\n- 60 geometry_(geometry)\n- 61 {}\n- 62\n- 63\n- 72 void bind(const Element& element)\n- 73 {\n- 74 element_ = element;\n- 75 geometry_.emplace(element_.geometry());\n- 76 }\n- 77\n- 79 void unbind()\n- 80 {\n- 81 geometry_.reset();\n- 82 }\n- 83\n- 86 bool bound() const\n- 87 {\n- 88 return static_cast<bool>(geometry_);\n- 89 }\n- 90\n- 100 Range operator()(const LocalDomain& x) const\n- 101 {\n- 102 assert(!!geometry_);\n- 103 return f_(geometry_->global(x));\n- 104 }\n- 105\n- 107 const Element& localContext() const\n- 108 {\n- 109 assert(!!geometry_);\n- 110 return element_;\n- 111 }\n- 112\n- 121 friend LocalDerivative derivative(const LocalAnalyticGridViewFunction& t)\n- 122 {\n- 123 return LocalDerivative(Imp::derivativeIfImplemented<DerivativeDummy, F>\n-(t.f_), t.element_, t.geometry_);\n- 124 }\n- 125\n- 126private:\n- 127 F f_;\n- 128 Element element_;\n- 129 std::optional<Geometry> geometry_ = std::nullopt;\n- 130};\n- 131\n- 132} // end namespace Imp\n- 133\n- 134\n- 135\n- 136\n- 137template<class Signature, class GV, class F, template<class> class\n-DerivativeTraits=DefaultDerivativeTraits>\n-138class AnalyticGridViewFunction;\n- 139\n- 140\n- 146template<class Range, class Domain, class GV, class F, template<class>\n-class DerivativeTraits>\n-147class AnalyticGridViewFunction<Range(Domain), GV, F, DerivativeTraits>\n- 148{\n- 149public:\n-150 using Signature = Range(Domain);\n-151 using RawSignature = typename SignatureTraits<Signature>::RawSignature;\n-152 using DerivativeSignature = typename DerivativeTraits<RawSignature>::Range\n-(Domain);\n- 153\n-154 using GridView = GV;\n-155 using EntitySet = GridViewEntitySet<GridView,_0>;\n-156 using Element = typename EntitySet::Element;\n-157 using Geometry = typename Element::Geometry;\n- 158\n- 159 // Use the indirection via derivativeIfImplemented to also support\n- 160 // function types F that do not implement derivative. In this case\n- 161 // the interface type DifferentiableFunction is used a dummy for\n- 162 // the derivative type\n-163 using DerivativeDummy = DifferentiableFunction<DerivativeSignature>;\n-164 using GlobalRawDerivative = decltype(Imp::\n-derivativeIfImplemented<DerivativeDummy, F>(std::declval<F>()));\n-165 using Derivative = AnalyticGridViewFunction<DerivativeSignature,_GridView,\n-GlobalRawDerivative,_DerivativeTraits>;\n- 166\n-167 using LocalDomain = typename EntitySet::LocalCoordinate;\n-168 using LocalFunction = typename Imp::LocalAnalyticGridViewFunction<Range\n-(LocalDomain), GridView, F, LocalDerivativeTraits<EntitySet,\n-DerivativeTraits>::template Traits>;\n- 169\n- 171 template<class FT>\n-172 AnalyticGridViewFunction(FT&& f, const GridView& gridView) :\n- 173 f_(std::forward<FT>(f)),\n- 174 entitySet_(gridView)\n- 175 {}\n- 176\n-178 Range operator()(const Domain& x) const\n- 179 {\n- 180 return f_(x);\n- 181 }\n- 182\n-184 friend Derivative derivative(const AnalyticGridViewFunction& t)\n- 185 {\n- 186 return Derivative(Imp::derivativeIfImplemented<DerivativeDummy, F>(t.f_),\n-t.entitySet_.gridView());\n- 187 }\n- 188\n-190 friend LocalFunction localFunction(const AnalyticGridViewFunction& t)\n- 191 {\n- 192 return LocalFunction(t.f_);\n- 193 }\n- 194\n-196 const EntitySet& entitySet() const\n- 197 {\n- 198 return entitySet_;\n- 199 }\n- 200\n- 201private:\n- 202 F f_;\n- 203 EntitySet entitySet_;\n- 204};\n- 205\n- 206\n- 207\n- 224template<class F, class GridView>\n- 225AnalyticGridViewFunction<\n- 226 typename std::invoke_result<F, typename GridView::template Codim<0>::\n-Geometry::GlobalCoordinate>::type // Range\n- 227 (typename GridView::template Codim<0>::Geometry::GlobalCoordinate), /\n-/ Domain\n- 228 GridView,\n- 229 typename std::decay<F>::type > // Raw type of F (without & or &&)\n-230 makeAnalyticGridViewFunction(F&& f, const GridView& gridView)\n- 231{\n- 232 using Domain = typename GridView::template Codim<0>::Geometry::\n-GlobalCoordinate;\n- 233 using Range = typename std::invoke_result<F, Domain>::type;\n- 234 using FRaw = typename std::decay<F>::type;\n- 235\n- 236 return AnalyticGridViewFunction<Range(Domain),_GridView,_FRaw>(std::\n-forward<F>(f), gridView);\n- 237}\n- 238\n- 239\n- 240\n- 241}} // namespace Dune::Functions\n- 242\n- 243\n- 244\n- 245#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH\n-gridviewentityset.hh\n-localderivativetraits.hh\n-differentiablefunction.hh\n-defaultderivativetraits.hh\n-signature.hh\n-differentiablefunction_imp.hh\n-Dune::Functions::derivative\n-TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const\n-TrigonometricFunction< K, sinFactor, cosFactor > &f)\n-Obtain derivative of TrigonometricFunction function.\n-Definition: trigonometricfunction.hh:39\n-Dune::Functions::AnalyticGridViewFunction::makeAnalyticGridViewFunction\n-AnalyticGridViewFunction< typename std::invoke_result< F, typename GridView::\n-template Codim< 0 >::Geometry::GlobalCoordinate >::type(typename GridView::\n-template Codim< 0 >::Geometry::GlobalCoordinate), GridView, typename std::\n-decay< F >::type > makeAnalyticGridViewFunction(F &&f, const GridView\n-&gridView)\n-Create an AnalyticGridViewFunction from a function and a grid view.\n-Definition: analyticgridviewfunction.hh:230\n+61 CallableFunctionWrapper(const std::shared_ptr<const F>& f) :\n+ 62 f_(f)\n+ 63 {}\n+ 64\n+70 Range operator()(const Domain& x) const\n+ 71 {\n+ 72 Range y;\n+ 73 f_->evaluate(x, y);\n+ 74 return y;\n+ 75 }\n+ 76\n+ 77 private:\n+ 78 std::shared_ptr<const F> f_;\n+ 79};\n+ 80\n+ 81\n+ 82\n+ 104template<class F>\n+105CallableFunctionWrapper<F> callable(const F& f)\n+ 106{\n+ 107 return CallableFunctionWrapper<F>(f);\n+ 108}\n+ 109\n+ 110\n+ 136template<class F>\n+137CallableFunctionWrapper<F> callable(const std::shared_ptr<F>& fp)\n+ 138{\n+ 139 return CallableFunctionWrapper<F>(fp);\n+ 140}\n+ 141\n+ 142\n+ 143\n+ 144} // namespace Functions\n+ 145} // namespace Dune\n+ 146\n+ 147#endif //DUNE_FUNCTIONS_COMMON_CALLABLE_HH\n+Dune::Functions::callable\n+CallableFunctionWrapper< F > callable(const F &f)\n+Create a callable object from some Dune::VirtualFunction.\n+Definition: callable.hh:105\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::DifferentiableFunction\n-Definition: differentiablefunction.hh:29\n-Dune::Functions::SignatureTraits\n-Helper class to deduce the signature of a callable.\n-Definition: signature.hh:56\n-Dune::Functions::AnalyticGridViewFunction\n-Definition: analyticgridviewfunction.hh:138\n-Dune::Functions::AnalyticGridViewFunction<_Range(Domain),_GV,_F,\n-DerivativeTraits_>::operator()\n+Dune::Functions::CallableFunctionWrapper\n+Wrap a Dune::VirtualFunction into a callable object.\n+Definition: callable.hh:38\n+Dune::Functions::CallableFunctionWrapper::operator()\n Range operator()(const Domain &x) const\n-Evaluate the wrapped function f directly in global coordinates x.\n-Definition: analyticgridviewfunction.hh:178\n-Dune::Functions::AnalyticGridViewFunction<_Range(Domain),_GV,_F,\n-DerivativeTraits_>::LocalDomain\n-typename EntitySet::LocalCoordinate LocalDomain\n-Definition: analyticgridviewfunction.hh:167\n-Dune::Functions::AnalyticGridViewFunction<_Range(Domain),_GV,_F,\n-DerivativeTraits_>::derivative\n-friend Derivative derivative(const AnalyticGridViewFunction &t)\n-Create a derivative grid-function by wrapping the derivative of f.\n-Definition: analyticgridviewfunction.hh:184\n-Dune::Functions::AnalyticGridViewFunction<_Range(Domain),_GV,_F,\n-DerivativeTraits_>::Geometry\n-typename Element::Geometry Geometry\n-Definition: analyticgridviewfunction.hh:157\n-Dune::Functions::AnalyticGridViewFunction<_Range(Domain),_GV,_F,\n-DerivativeTraits_>::Element\n-typename EntitySet::Element Element\n-Definition: analyticgridviewfunction.hh:156\n-Dune::Functions::AnalyticGridViewFunction<_Range(Domain),_GV,_F,\n-DerivativeTraits_>::GridView\n-GV GridView\n-Definition: analyticgridviewfunction.hh:154\n-Dune::Functions::AnalyticGridViewFunction<_Range(Domain),_GV,_F,\n-DerivativeTraits_>::GlobalRawDerivative\n-decltype(Imp::derivativeIfImplemented< DerivativeDummy, F >(std::declval< F >\n-())) GlobalRawDerivative\n-Definition: analyticgridviewfunction.hh:164\n-Dune::Functions::AnalyticGridViewFunction<_Range(Domain),_GV,_F,\n-DerivativeTraits_>::Signature\n-Range(Domain) Signature\n-Definition: analyticgridviewfunction.hh:150\n-Dune::Functions::AnalyticGridViewFunction<_Range(Domain),_GV,_F,\n-DerivativeTraits_>::AnalyticGridViewFunction\n-AnalyticGridViewFunction(FT &&f, const GridView &gridView)\n-Create the grid-function by wrapping a function f and create a\n-GridViewEntitySet.\n-Definition: analyticgridviewfunction.hh:172\n-Dune::Functions::AnalyticGridViewFunction<_Range(Domain),_GV,_F,\n-DerivativeTraits_>::localFunction\n-friend LocalFunction localFunction(const AnalyticGridViewFunction &t)\n-Construct the associated local-function.\n-Definition: analyticgridviewfunction.hh:190\n-Dune::Functions::AnalyticGridViewFunction<_Range(Domain),_GV,_F,\n-DerivativeTraits_>::LocalFunction\n-typename Imp::LocalAnalyticGridViewFunction< Range(LocalDomain), GridView, F,\n-LocalDerivativeTraits< EntitySet, DerivativeTraits >::template Traits >\n-LocalFunction\n-Definition: analyticgridviewfunction.hh:168\n-Dune::Functions::AnalyticGridViewFunction<_Range(Domain),_GV,_F,\n-DerivativeTraits_>::RawSignature\n-typename SignatureTraits< Signature >::RawSignature RawSignature\n-Definition: analyticgridviewfunction.hh:151\n-Dune::Functions::AnalyticGridViewFunction<_Range(Domain),_GV,_F,\n-DerivativeTraits_>::entitySet\n-const EntitySet & entitySet() const\n-Return the set of entities this local-function can be bound to.\n-Definition: analyticgridviewfunction.hh:196\n-Dune::Functions::AnalyticGridViewFunction<_Range(Domain),_GV,_F,\n-DerivativeTraits_>::DerivativeSignature\n-typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature\n-Definition: analyticgridviewfunction.hh:152\n-Dune::Functions::GridViewEntitySet<_GridView,_0_>\n-Dune::Functions::GridViewEntitySet<_GridView,_0_>::Element\n-GridView::template Codim< codim >::Entity Element\n-Type of Elements contained in this EntitySet.\n-Definition: gridviewentityset.hh:32\n-Dune::Functions::GridViewEntitySet<_GridView,_0_>::LocalCoordinate\n-Element::Geometry::LocalCoordinate LocalCoordinate\n-Type of local coordinates with respect to the Element.\n-Definition: gridviewentityset.hh:35\n-Dune::Functions::LocalDerivativeTraits\n-Derivative traits for local functions.\n-Definition: localderivativetraits.hh:28\n+Forward operator() to F::evaluate()\n+Definition: callable.hh:70\n+Dune::Functions::CallableFunctionWrapper::CallableFunctionWrapper\n+CallableFunctionWrapper(const F &f)\n+Instantiate from reference to f.\n+Definition: callable.hh:50\n+Dune::Functions::CallableFunctionWrapper::CallableFunctionWrapper\n+CallableFunctionWrapper(const std::shared_ptr< const F > &f)\n+Instantiate from std::shared_ptr to f.\n+Definition: callable.hh:61\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00017.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00017.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: gridfunction.hh File Reference</title>\n+<title>dune-functions: functionfromcallable.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,42 +58,33 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">gridfunction.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">functionfromcallable.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <type_traits></code><br />\n-<code>#include <dune/common/typeutilities.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00062_source.html\">dune/functions/common/typeerasure.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00080_source.html\">dune/functions/common/defaultderivativetraits.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00068_source.html\">dune/functions/common/differentiablefunction.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00065_source.html\">dune/functions/common/localfunction.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00053_source.html\">dune/functions/common/functionconcepts.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00029_source.html\">dune/functions/gridfunctions/localderivativetraits.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00032_source.html\">dune/functions/gridfunctions/gridfunction_imp.hh</a>></code><br />\n+<div class=\"textblock\"><code>#include <dune/common/function.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00008_source.html\">dune/functions/common/signature.hh</a>></code><br />\n </div>\n <p><a href=\"a00017_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01895.html\">Dune::Functions::GridFunction< Signature, EntitySet, DerivativeTraits, bufferSize ></a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01903.html\">Dune::Functions::GridFunction< Range(Domain), ES, DerivativeTraits, bufferSize ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Wrapper class for functions defined on a Grid. <a href=\"a01903.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01215.html\">Dune::Functions::FunctionFromCallable< Range(Domain), F, FunctionInterface ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Wrap a callable object as Dune::Function or Dune::VirtualFunction. <a href=\"a01215.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,34 +4,25 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * gridfunctions\n+ * common\n Classes | Namespaces\n-gridfunction.hh File Reference\n-#include <type_traits>\n-#include <dune/common/typeutilities.hh>\n-#include <dune/functions/common/typeerasure.hh>\n-#include <dune/functions/common/defaultderivativetraits.hh>\n-#include <dune/functions/common/differentiablefunction.hh>\n-#include <dune/functions/common/localfunction.hh>\n-#include <dune/functions/common/functionconcepts.hh>\n-#include <dune/functions/gridfunctions/localderivativetraits.hh>\n-#include <dune/functions/gridfunctions/gridfunction_imp.hh>\n+functionfromcallable.hh File Reference\n+#include <dune/common/function.hh>\n+#include <dune/functions/common/signature.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-class \u00a0Dune::Functions::GridFunction<_Signature,_EntitySet,_DerivativeTraits,\n- bufferSize_>\n-\u00a0\n-class \u00a0Dune::Functions::GridFunction<_Range(Domain),_ES,_DerivativeTraits,\n- bufferSize_>\n-\u00a0 Wrapper class for functions defined on a Grid. More...\n+class \u00a0Dune::Functions::FunctionFromCallable<_Range(Domain),_F,\n+ FunctionInterface_>\n+\u00a0 Wrap a callable object as Dune::Function or Dune::VirtualFunction.\n+ More...\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n \n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00017_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00017_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: gridfunction.hh Source File</title>\n+<title>dune-functions: functionfromcallable.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,165 +58,77 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">gridfunction.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">functionfromcallable.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00017.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_FUNCTION_FROM_CALLABLE_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_FUNCTION_FROM_CALLABLE_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <type_traits></span></div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <dune/common/function.hh></span></div>\n <div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span> </div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <dune/common/typeutilities.hh></span></div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00008.html\">dune/functions/common/signature.hh</a>></span></div>\n <div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00062.html\">dune/functions/common/typeerasure.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00080.html\">dune/functions/common/defaultderivativetraits.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00068.html\">dune/functions/common/differentiablefunction.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00065.html\">dune/functions/common/localfunction.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00053.html\">dune/functions/common/functionconcepts.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00029.html\">dune/functions/gridfunctions/localderivativetraits.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00032.html\">dune/functions/gridfunctions/gridfunction_imp.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> </div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span> </div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> </div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span><span class=\"comment\">/*</span></div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"comment\"> * Default implementation is empty</span></div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span><span class=\"comment\"> * The actual implementation is only given if Signature is an type</span></div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span><span class=\"comment\"> * describing a function signature as Range(Domain).</span></div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span><span class=\"comment\"> */</span></div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> EntitySet, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits=DefaultDerivativeTraits, <span class=\"keywordtype\">size_t</span> bufferSize=56></div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01895.html\"> 31</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01895.html\">GridFunction</a></div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span>{};</div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> </div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> </div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> </div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span><span class=\"keyword\">namespace </span>Imp</div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span>{</div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> </div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> S, <span class=\"keyword\">class</span> ES, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits, <span class=\"keywordtype\">size_t</span> bufferSize></div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> <span class=\"keyword\">struct </span>GridFunctionTraits :</div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize></div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> {</div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> <span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> <span class=\"keyword\">using </span>Base=DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize>;</div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> </div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> <span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> <span class=\"keyword\">using </span>EntitySet = ES;</div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> </div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> <span class=\"keyword\">using </span>Element = <span class=\"keyword\">typename</span> EntitySet::Element;</div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> </div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> <span class=\"keyword\">using </span>DerivativeSignature = <span class=\"keyword\">typename</span> Base::DerivativeSignature;</div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> </div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> <span class=\"keyword\">using </span>DerivativeInterface = <a class=\"code hl_class\" href=\"a01895.html\">GridFunction<DerivativeSignature, ES, DerivativeTraits, bufferSize></a>;</div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> </div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> <span class=\"keyword\">using </span>LocalSignature = <span class=\"keyword\">typename</span> Base::Range(<span class=\"keyword\">typename</span> EntitySet::LocalCoordinate);</div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> </div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> R></div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> <span class=\"keyword\">using </span><a class=\"code hl_struct\" href=\"a01931.html\">LocalDerivativeTraits</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_struct\" href=\"a01931.html\">Dune::Functions::LocalDerivativeTraits<EntitySet, DerivativeTraits>::template</a> Traits<R>;</div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> </div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> <span class=\"keyword\">using </span>LocalFunctionTraits = <span class=\"keyword\">typename</span> Dune::Functions::Imp::LocalFunctionTraits<LocalSignature, Element, LocalDerivativeTraits, bufferSize>;</div>\n-<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> </div>\n-<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> <span class=\"keyword\">using </span>LocalFunctionInterface = <a class=\"code hl_class\" href=\"a01243.html\">LocalFunction<LocalSignature, Element, LocalDerivativeTraits, bufferSize></a>;</div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> </div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> <span class=\"keyword\">using </span>Concept = GridFunctionWrapperInterface<S, DerivativeInterface, LocalFunctionInterface, ES>;</div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> </div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> B></div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> <span class=\"keyword\">using </span>Model = GridFunctionWrapperImplementation<S, DerivativeInterface, LocalFunctionInterface, ES, B>;</div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> };</div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span>}</div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span> </div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>Signature, <span class=\"keyword\">class </span>F,</div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> <span class=\"keyword\">class </span>FunctionInterface = <span class=\"keyword\">typename</span> Dune::VirtualFunction<</div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> <span class=\"keyword\">typename</span> SignatureTraits<Signature>::RawDomain,</div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> <span class=\"keyword\">typename</span> SignatureTraits<Signature>::RawRange> ></div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01211.html\"> 20</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01211.html\">FunctionFromCallable</a>;</div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> </div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">class</span> F, <span class=\"keyword\">class</span> FunctionInterface></div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01215.html\"> 38</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01211.html\">FunctionFromCallable</a><Range(Domain), F, FunctionInterface> :</div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> <span class=\"keyword\">public</span> FunctionInterface</div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span>{</div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> </div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01215.html#a457340c945d3413b6285f28fde39a68b\"> 52</a></span> <a class=\"code hl_function\" href=\"a01215.html#a457340c945d3413b6285f28fde39a68b\">FunctionFromCallable</a>(F&& f) :</div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> f_(f)</div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> {}</div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> </div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01215.html#ae834ef8c2c819c027517478951ef332f\"> 64</a></span> <a class=\"code hl_function\" href=\"a01215.html#ae834ef8c2c819c027517478951ef332f\">FunctionFromCallable</a>(<span class=\"keyword\">const</span> F& f) :</div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> f_(f)</div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> {}</div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> </div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01215.html#a6aca1daa3b7cbe5c186121333ceb21f7\"> 73</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01215.html#a6aca1daa3b7cbe5c186121333ceb21f7\">evaluate</a>(<span class=\"keyword\">const</span> Domain& x, Range&y)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> y = f_(x);</div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> }</div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> </div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> F f_;</div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span>};</div>\n <div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> </div>\n <div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> </div>\n <div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> </div>\n-<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">class</span> ES, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits, <span class=\"keywordtype\">size_t</span> bufferSize></div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01903.html\"> 96</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01895.html\">GridFunction</a><Range(Domain), ES, DerivativeTraits, bufferSize> :</div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01351.html\">TypeErasureBase</a><</div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> typename Imp::GridFunctionTraits<Range(Domain), ES, DerivativeTraits, bufferSize>::Concept,</div>\n-<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> Imp::GridFunctionTraits<Range(Domain), ES, DerivativeTraits, bufferSize>::template Model></div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span>{</div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> <span class=\"keyword\">using </span>Traits = Imp::GridFunctionTraits<Range(Domain), ES, DerivativeTraits, bufferSize>;</div>\n-<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> </div>\n-<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01351.html\">Base</a> = <a class=\"code hl_class\" href=\"a01351.html\">TypeErasureBase<typename Traits::Concept, Traits::template Model></a>;</div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> </div>\n-<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> <span class=\"keyword\">using </span>DerivativeInterface = <span class=\"keyword\">typename</span> <a class=\"code hl_class\" href=\"a01895.html\">Traits::DerivativeInterface</a>;</div>\n-<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> </div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> <span class=\"keyword\">using </span>LocalFunctionInterface = <span class=\"keyword\">typename</span> <a class=\"code hl_class\" href=\"a01243.html\">Traits::LocalFunctionInterface</a>;</div>\n-<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> </div>\n-<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> <span class=\"keyword\">using </span>EntitySet = <span class=\"keyword\">typename</span> Traits::EntitySet;</div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> </div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> </div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F, disableCopyMove<Gr<span class=\"keywordtype\">id</span>Function, F> = 0 ></div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01903.html#a93480ae6b849e3e9912d114954e7919e\"> 125</a></span> <a class=\"code hl_function\" href=\"a01903.html#a93480ae6b849e3e9912d114954e7919e\">GridFunction</a>(F&& f) :</div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> <a class=\"code hl_class\" href=\"a01351.html\">Base</a>(std::forward<F>(f))</div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> {</div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> <span class=\"keyword\">static_assert</span>(Dune::Functions::Concept::isGridFunction<F, Range(Domain), EntitySet>(), <span class=\"stringliteral\">"Trying to construct a GridFunction from type that does not model the GridFunction concept"</span>);</div>\n-<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> }</div>\n-<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> </div>\n-<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01903.html#a716e50afee74d4f1715ec32f6a8264f9\"> 131</a></span> <a class=\"code hl_function\" href=\"a01903.html#a716e50afee74d4f1715ec32f6a8264f9\">GridFunction</a>() = <span class=\"keywordflow\">default</span>;</div>\n-<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> </div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01903.html#a139cc4d411f2288dc6eb76d62d6e281b\"> 138</a></span> Range operator() (<span class=\"keyword\">const</span> Domain& x)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> <span class=\"keywordflow\">return</span> this->asInterface().operator()(x);</div>\n-<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> }</div>\n-<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> </div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01903.html#a66ce733c4a765dd8552093696964657b\"> 151</a></span> <span class=\"keyword\">friend</span> DerivativeInterface <a class=\"code hl_friend\" href=\"a01903.html#a66ce733c4a765dd8552093696964657b\">derivative</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01895.html\">GridFunction</a>& t)</div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> {</div>\n-<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> <span class=\"keywordflow\">return</span> t.asInterface().derivative();</div>\n-<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> }</div>\n-<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> </div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01903.html#abc29b58d9bc3b0423994ad207fec45bb\"> 165</a></span> <span class=\"keyword\">friend</span> LocalFunctionInterface <a class=\"code hl_friend\" href=\"a01903.html#abc29b58d9bc3b0423994ad207fec45bb\">localFunction</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01895.html\">GridFunction</a>& t)</div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> {</div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> <span class=\"keywordflow\">return</span> t.asInterface().wrappedLocalFunction();</div>\n-<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> }</div>\n-<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> </div>\n-<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01903.html#a9202931b754e0fb13df91344eae74ca2\"> 176</a></span> <span class=\"keyword\">const</span> EntitySet& <a class=\"code hl_function\" href=\"a01903.html#a9202931b754e0fb13df91344eae74ca2\">entitySet</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> <span class=\"keywordflow\">return</span> this->asInterface().wrappedEntitySet();</div>\n-<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> }</div>\n-<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span>};</div>\n-<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> </div>\n-<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> </div>\n-<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span> </div>\n-<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span>}} <span class=\"comment\">// namespace Dune::Functions</span></div>\n-<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> </div>\n-<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> </div>\n-<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> </div>\n-<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH</span></div>\n-<div class=\"ttc\" id=\"aa00029_html\"><div class=\"ttname\"><a href=\"a00029.html\">localderivativetraits.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00032_html\"><div class=\"ttname\"><a href=\"a00032.html\">gridfunction_imp.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00053_html\"><div class=\"ttname\"><a href=\"a00053.html\">functionconcepts.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00062_html\"><div class=\"ttname\"><a href=\"a00062.html\">typeerasure.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00065_html\"><div class=\"ttname\"><a href=\"a00065.html\">localfunction.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00068_html\"><div class=\"ttname\"><a href=\"a00068.html\">differentiablefunction.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00080_html\"><div class=\"ttname\"><a href=\"a00080.html\">defaultderivativetraits.hh</a></div></div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span>} <span class=\"comment\">// namespace Functions</span></div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span>} <span class=\"comment\">// namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> </div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">//DUNE_FUNCTIONS_COMMON_FUNCTION_FROM_CALLABLE_HH</span></div>\n+<div class=\"ttc\" id=\"aa00008_html\"><div class=\"ttname\"><a href=\"a00008.html\">signature.hh</a></div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa01243_html\"><div class=\"ttname\"><a href=\"a01243.html\">Dune::Functions::LocalFunction</a></div><div class=\"ttdef\"><b>Definition:</b> localfunction.hh:30</div></div>\n-<div class=\"ttc\" id=\"aa01351_html\"><div class=\"ttname\"><a href=\"a01351.html\">Dune::Functions::TypeErasureBase</a></div><div class=\"ttdoc\">Base class for type-erased interface wrapper.</div><div class=\"ttdef\"><b>Definition:</b> typeerasure.hh:165</div></div>\n-<div class=\"ttc\" id=\"aa01895_html\"><div class=\"ttname\"><a href=\"a01895.html\">Dune::Functions::GridFunction</a></div><div class=\"ttdef\"><b>Definition:</b> gridfunction.hh:32</div></div>\n-<div class=\"ttc\" id=\"aa01903_html_a66ce733c4a765dd8552093696964657b\"><div class=\"ttname\"><a href=\"a01903.html#a66ce733c4a765dd8552093696964657b\">Dune::Functions::GridFunction< Range(Domain), ES, DerivativeTraits, bufferSize >::derivative</a></div><div class=\"ttdeci\">friend DerivativeInterface derivative(const GridFunction &t)</div><div class=\"ttdoc\">Get derivative of wrapped function.</div><div class=\"ttdef\"><b>Definition:</b> gridfunction.hh:151</div></div>\n-<div class=\"ttc\" id=\"aa01903_html_a716e50afee74d4f1715ec32f6a8264f9\"><div class=\"ttname\"><a href=\"a01903.html#a716e50afee74d4f1715ec32f6a8264f9\">Dune::Functions::GridFunction< Range(Domain), ES, DerivativeTraits, bufferSize >::GridFunction</a></div><div class=\"ttdeci\">GridFunction()=default</div></div>\n-<div class=\"ttc\" id=\"aa01903_html_a9202931b754e0fb13df91344eae74ca2\"><div class=\"ttname\"><a href=\"a01903.html#a9202931b754e0fb13df91344eae74ca2\">Dune::Functions::GridFunction< Range(Domain), ES, DerivativeTraits, bufferSize >::entitySet</a></div><div class=\"ttdeci\">const EntitySet & entitySet() const</div><div class=\"ttdoc\">Get associated EntitySet.</div><div class=\"ttdef\"><b>Definition:</b> gridfunction.hh:176</div></div>\n-<div class=\"ttc\" id=\"aa01903_html_a93480ae6b849e3e9912d114954e7919e\"><div class=\"ttname\"><a href=\"a01903.html#a93480ae6b849e3e9912d114954e7919e\">Dune::Functions::GridFunction< Range(Domain), ES, DerivativeTraits, bufferSize >::GridFunction</a></div><div class=\"ttdeci\">GridFunction(F &&f)</div><div class=\"ttdoc\">Construct from function.</div><div class=\"ttdef\"><b>Definition:</b> gridfunction.hh:125</div></div>\n-<div class=\"ttc\" id=\"aa01903_html_abc29b58d9bc3b0423994ad207fec45bb\"><div class=\"ttname\"><a href=\"a01903.html#abc29b58d9bc3b0423994ad207fec45bb\">Dune::Functions::GridFunction< Range(Domain), ES, DerivativeTraits, bufferSize >::localFunction</a></div><div class=\"ttdeci\">friend LocalFunctionInterface localFunction(const GridFunction &t)</div><div class=\"ttdoc\">Get local function of wrapped function.</div><div class=\"ttdef\"><b>Definition:</b> gridfunction.hh:165</div></div>\n-<div class=\"ttc\" id=\"aa01931_html\"><div class=\"ttname\"><a href=\"a01931.html\">Dune::Functions::LocalDerivativeTraits</a></div><div class=\"ttdoc\">Derivative traits for local functions.</div><div class=\"ttdef\"><b>Definition:</b> localderivativetraits.hh:28</div></div>\n+<div class=\"ttc\" id=\"aa01211_html\"><div class=\"ttname\"><a href=\"a01211.html\">Dune::Functions::FunctionFromCallable</a></div><div class=\"ttdef\"><b>Definition:</b> functionfromcallable.hh:20</div></div>\n+<div class=\"ttc\" id=\"aa01215_html_a457340c945d3413b6285f28fde39a68b\"><div class=\"ttname\"><a href=\"a01215.html#a457340c945d3413b6285f28fde39a68b\">Dune::Functions::FunctionFromCallable< Range(Domain), F, FunctionInterface >::FunctionFromCallable</a></div><div class=\"ttdeci\">FunctionFromCallable(F &&f)</div><div class=\"ttdoc\">Create VirtualFunction from callable object.</div><div class=\"ttdef\"><b>Definition:</b> functionfromcallable.hh:52</div></div>\n+<div class=\"ttc\" id=\"aa01215_html_a6aca1daa3b7cbe5c186121333ceb21f7\"><div class=\"ttname\"><a href=\"a01215.html#a6aca1daa3b7cbe5c186121333ceb21f7\">Dune::Functions::FunctionFromCallable< Range(Domain), F, FunctionInterface >::evaluate</a></div><div class=\"ttdeci\">void evaluate(const Domain &x, Range &y) const</div><div class=\"ttdoc\">Evaluate function.</div><div class=\"ttdef\"><b>Definition:</b> functionfromcallable.hh:73</div></div>\n+<div class=\"ttc\" id=\"aa01215_html_ae834ef8c2c819c027517478951ef332f\"><div class=\"ttname\"><a href=\"a01215.html#ae834ef8c2c819c027517478951ef332f\">Dune::Functions::FunctionFromCallable< Range(Domain), F, FunctionInterface >::FunctionFromCallable</a></div><div class=\"ttdeci\">FunctionFromCallable(const F &f)</div><div class=\"ttdoc\">Create VirtualFunction from callable object.</div><div class=\"ttdef\"><b>Definition:</b> functionfromcallable.hh:64</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,199 +4,83 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * gridfunctions\n-gridfunction.hh\n+ * common\n+functionfromcallable.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH\n- 4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH\n+ 3#ifndef DUNE_FUNCTIONS_COMMON_FUNCTION_FROM_CALLABLE_HH\n+ 4#define DUNE_FUNCTIONS_COMMON_FUNCTION_FROM_CALLABLE_HH\n 5\n- 6#include <type_traits>\n+ 6#include <dune/common/function.hh>\n 7\n- 8#include <dune/common/typeutilities.hh>\n+ 8#include <dune/functions/common/signature.hh>\n 9\n- 10#include <dune/functions/common/typeerasure.hh>\n- 11#include <dune/functions/common/defaultderivativetraits.hh>\n- 12#include <dune/functions/common/differentiablefunction.hh>\n- 13#include <dune/functions/common/localfunction.hh>\n- 14#include <dune/functions/common/functionconcepts.hh>\n- 15#include <dune/functions/gridfunctions/localderivativetraits.hh>\n- 16#include <dune/functions/gridfunctions/gridfunction_imp.hh>\n- 17\n- 18\n- 19\n- 20namespace Dune {\n- 21namespace Functions {\n- 22\n- 23\n- 24\n- 25/*\n- 26 * Default implementation is empty\n- 27 * The actual implementation is only given if Signature is an type\n- 28 * describing a function signature as Range(Domain).\n- 29 */\n- 30template<class Signature, class EntitySet, template<class> class\n-DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>\n-31class GridFunction\n- 32{};\n- 33\n- 34\n- 35\n- 36namespace Imp\n- 37{\n- 38\n- 40 template<class S, class ES, template<class> class DerivativeTraits, size_t\n-bufferSize>\n- 41 struct GridFunctionTraits :\n- 42 DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize>\n- 43 {\n- 44 protected:\n- 45 using Base=DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize>;\n- 46\n- 47 public:\n- 49 using EntitySet = ES;\n- 50\n- 52 using Element = typename EntitySet::Element;\n- 53\n- 55 using DerivativeSignature = typename Base::DerivativeSignature;\n- 56\n- 58 using DerivativeInterface = GridFunction<DerivativeSignature,_ES,\n-DerivativeTraits,_bufferSize>;\n- 59\n- 61 using LocalSignature = typename Base::Range(typename EntitySet::\n-LocalCoordinate);\n- 62\n- 64 template<class R>\n- 65 using LocalDerivativeTraits = typename Dune::Functions::\n-LocalDerivativeTraits<EntitySet,_DerivativeTraits>::template Traits<R>;\n- 66\n- 68 using LocalFunctionTraits = typename Dune::Functions::Imp::\n-LocalFunctionTraits<LocalSignature, Element, LocalDerivativeTraits,\n-bufferSize>;\n- 69\n- 71 using LocalFunctionInterface = LocalFunction<LocalSignature,_Element,\n-LocalDerivativeTraits,_bufferSize>;\n- 72\n- 74 using Concept = GridFunctionWrapperInterface<S, DerivativeInterface,\n-LocalFunctionInterface, ES>;\n- 75\n- 77 template<class B>\n- 78 using Model = GridFunctionWrapperImplementation<S, DerivativeInterface,\n-LocalFunctionInterface, ES, B>;\n- 79 };\n- 80}\n+ 10\n+ 11namespace Dune {\n+ 12namespace Functions {\n+ 13\n+ 14\n+ 15\n+ 16template<class Signature, class F,\n+ 17 class FunctionInterface = typename Dune::VirtualFunction<\n+ 18 typename SignatureTraits<Signature>::RawDomain,\n+ 19 typename SignatureTraits<Signature>::RawRange> >\n+20class FunctionFromCallable;\n+ 21\n+ 37template<class Range, class Domain, class F, class FunctionInterface>\n+38class FunctionFromCallable<Range(Domain), F, FunctionInterface> :\n+ 39 public FunctionInterface\n+ 40{\n+ 41public:\n+ 42\n+52 FunctionFromCallable(F&& f) :\n+ 53 f_(f)\n+ 54 {}\n+ 55\n+64 FunctionFromCallable(const F& f) :\n+ 65 f_(f)\n+ 66 {}\n+ 67\n+73 void evaluate(const Domain& x, Range&y) const\n+ 74 {\n+ 75 y = f_(x);\n+ 76 }\n+ 77\n+ 78private:\n+ 79 F f_;\n+ 80};\n 81\n 82\n 83\n- 95template<class Range, class Domain, class ES, template<class> class\n-DerivativeTraits, size_t bufferSize>\n-96class GridFunction<Range(Domain), ES, DerivativeTraits, bufferSize> :\n- 97 public TypeErasureBase<\n- 98 typename Imp::GridFunctionTraits<Range(Domain), ES, DerivativeTraits,\n-bufferSize>::Concept,\n- 99 Imp::GridFunctionTraits<Range(Domain), ES, DerivativeTraits, bufferSize>::\n-template Model>\n- 100{\n- 101 using Traits = Imp::GridFunctionTraits<Range(Domain), ES,\n-DerivativeTraits, bufferSize>;\n- 102\n- 103 using Base = TypeErasureBase<typename_Traits::Concept,_Traits::template\n-Model>;\n- 104\n- 105 using DerivativeInterface = typename Traits::DerivativeInterface;\n- 106\n- 107 using LocalFunctionInterface = typename Traits::LocalFunctionInterface;\n- 108\n- 109 using EntitySet = typename Traits::EntitySet;\n- 110\n- 111public:\n- 112\n- 124 template<class F, disableCopyMove<GridFunction, F> = 0 >\n-125 GridFunction(F&& f) :\n- 126 Base(std::forward<F>(f))\n- 127 {\n- 128 static_assert(Dune::Functions::Concept::isGridFunction<F, Range(Domain),\n-EntitySet>(), \"Trying to construct a GridFunction from type that does not model\n-the GridFunction concept\");\n- 129 }\n- 130\n-131 GridFunction() = default;\n- 132\n-138 Range operator() (const Domain& x) const\n- 139 {\n- 140 return this->asInterface().operator()(x);\n- 141 }\n- 142\n-151 friend DerivativeInterface derivative(const GridFunction& t)\n- 152 {\n- 153 return t.asInterface().derivative();\n- 154 }\n- 155\n-165 friend LocalFunctionInterface localFunction(const GridFunction& t)\n- 166 {\n- 167 return t.asInterface().wrappedLocalFunction();\n- 168 }\n- 169\n-176 const EntitySet& entitySet() const\n- 177 {\n- 178 return this->asInterface().wrappedEntitySet();\n- 179 }\n- 180};\n- 181\n- 182\n- 183\n- 184}} // namespace Dune::Functions\n- 185\n- 186\n- 187\n- 188#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH\n-localderivativetraits.hh\n-gridfunction_imp.hh\n-functionconcepts.hh\n-typeerasure.hh\n-localfunction.hh\n-differentiablefunction.hh\n-defaultderivativetraits.hh\n+ 84} // namespace Functions\n+ 85} // namespace Dune\n+ 86\n+ 87#endif //DUNE_FUNCTIONS_COMMON_FUNCTION_FROM_CALLABLE_HH\n+signature.hh\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::LocalFunction\n-Definition: localfunction.hh:30\n-Dune::Functions::TypeErasureBase\n-Base class for type-erased interface wrapper.\n-Definition: typeerasure.hh:165\n-Dune::Functions::GridFunction\n-Definition: gridfunction.hh:32\n-Dune::Functions::GridFunction<_Range(Domain),_ES,_DerivativeTraits,_bufferSize\n->::derivative\n-friend DerivativeInterface derivative(const GridFunction &t)\n-Get derivative of wrapped function.\n-Definition: gridfunction.hh:151\n-Dune::Functions::GridFunction<_Range(Domain),_ES,_DerivativeTraits,_bufferSize\n->::GridFunction\n-GridFunction()=default\n-Dune::Functions::GridFunction<_Range(Domain),_ES,_DerivativeTraits,_bufferSize\n->::entitySet\n-const EntitySet & entitySet() const\n-Get associated EntitySet.\n-Definition: gridfunction.hh:176\n-Dune::Functions::GridFunction<_Range(Domain),_ES,_DerivativeTraits,_bufferSize\n->::GridFunction\n-GridFunction(F &&f)\n-Construct from function.\n-Definition: gridfunction.hh:125\n-Dune::Functions::GridFunction<_Range(Domain),_ES,_DerivativeTraits,_bufferSize\n->::localFunction\n-friend LocalFunctionInterface localFunction(const GridFunction &t)\n-Get local function of wrapped function.\n-Definition: gridfunction.hh:165\n-Dune::Functions::LocalDerivativeTraits\n-Derivative traits for local functions.\n-Definition: localderivativetraits.hh:28\n+Dune::Functions::FunctionFromCallable\n+Definition: functionfromcallable.hh:20\n+Dune::Functions::FunctionFromCallable<_Range(Domain),_F,_FunctionInterface_>::\n+FunctionFromCallable\n+FunctionFromCallable(F &&f)\n+Create VirtualFunction from callable object.\n+Definition: functionfromcallable.hh:52\n+Dune::Functions::FunctionFromCallable<_Range(Domain),_F,_FunctionInterface_>::\n+evaluate\n+void evaluate(const Domain &x, Range &y) const\n+Evaluate function.\n+Definition: functionfromcallable.hh:73\n+Dune::Functions::FunctionFromCallable<_Range(Domain),_F,_FunctionInterface_>::\n+FunctionFromCallable\n+FunctionFromCallable(const F &f)\n+Create VirtualFunction from callable object.\n+Definition: functionfromcallable.hh:64\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00020.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00020.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: composedgridfunction.hh File Reference</title>\n+<title>dune-functions: functionconcepts.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,54 +58,129 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> |\n <a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">composedgridfunction.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">functionconcepts.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <type_traits></code><br />\n-<code>#include <tuple></code><br />\n-<code>#include <dune/common/referencehelper.hh></code><br />\n-<code>#include <dune/common/typeutilities.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00080_source.html\">dune/functions/common/defaultderivativetraits.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00068_source.html\">dune/functions/common/differentiablefunction.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00017_source.html\">dune/functions/gridfunctions/gridfunction.hh</a>></code><br />\n+<div class=\"textblock\"><code>#include <dune/common/typelist.hh></code><br />\n+<code>#include <dune/common/concept.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00008_source.html\">dune/functions/common/signature.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00095_source.html\">dune/functions/gridfunctions/localderivativetraits.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00083_source.html\">dune/functions/gridfunctions/gridviewentityset.hh</a>></code><br />\n </div>\n <p><a href=\"a00020_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01851.html\">Dune::Functions::ComposedGridFunction< OF, IF ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Composition of grid functions with another function. <a href=\"a01851.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01139.html\">Dune::Functions::Concept::Callable< Args ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\"><a class=\"el\" href=\"a00220.html\">Concept</a> objects that can be called with given argument list. <a href=\"a01139.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01147.html\">Dune::Functions::Concept::Function< Range(Domain)></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\"><a class=\"el\" href=\"a00220.html\">Concept</a> for a function mapping <code>Domain</code> to <code>Range</code>. <a href=\"a01147.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01155.html\">Dune::Functions::Concept::DifferentiableFunction< Range(Domain), DerivativeTraits ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\"><a class=\"el\" href=\"a00220.html\">Concept</a> for a differentiable function mapping <code>Domain</code> to <code>Range</code>. <a href=\"a01155.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01163.html\">Dune::Functions::Concept::LocalFunction< Range(Domain), LocalContext ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\"><a class=\"el\" href=\"a00220.html\">Concept</a> for a local function mapping <code>Domain</code> to <code>Range</code>. <a href=\"a01163.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01171.html\">Dune::Functions::Concept::DifferentiableLocalFunction< Range(Domain), LocalContext, DerivativeTraits ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\"><a class=\"el\" href=\"a00220.html\">Concept</a> for a differentiable local function mapping <code>Domain</code> to <code>Range</code>. <a href=\"a01171.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01175.html\">Dune::Functions::Concept::EntitySet</a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\"><a class=\"el\" href=\"a00220.html\">Concept</a> for an entity set for a Concept::GridFunction<Range(Domain), EntitySet, DerivativeTraits> <a href=\"a01175.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01183.html\">Dune::Functions::Concept::GridFunction< Range(Domain), EntitySet ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\"><a class=\"el\" href=\"a00220.html\">Concept</a> for a grid function mapping <code>Domain</code> to <code>Range</code>. <a href=\"a01183.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01191.html\">Dune::Functions::Concept::DifferentiableGridFunction< Range(Domain), EntitySet, DerivativeTraits ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\"><a class=\"el\" href=\"a00220.html\">Concept</a> for a differentiable grid function mapping <code>Domain</code> to <code>Range</code>. <a href=\"a01191.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01199.html\">Dune::Functions::Concept::GridViewFunction< Range(Domain), GridView ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\"><a class=\"el\" href=\"a00220.html\">Concept</a> for a grid view function mapping <code>Domain</code> to <code>Range</code>. <a href=\"a01199.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01207.html\">Dune::Functions::Concept::DifferentiableGridViewFunction< Range(Domain), GridView, DerivativeTraits ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\"><a class=\"el\" href=\"a00220.html\">Concept</a> for a differentiable grid view function mapping <code>Domain</code> to <code>Range</code>. <a href=\"a01207.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a00220\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00220.html\">Dune::Functions::Concept</a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n Functions</h2></td></tr>\n-<tr class=\"memitem:ga9e5ac1cc0fdfb7d7a0e937f58aff21fd\"><td class=\"memTemplParams\" colspan=\"2\">template<class OF , class... IF> </td></tr>\n-<tr class=\"memitem:ga9e5ac1cc0fdfb7d7a0e937f58aff21fd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00209.html#ga9e5ac1cc0fdfb7d7a0e937f58aff21fd\">Dune::Functions::makeComposedGridFunction</a> (OF &&outerFunction, IF &&... innerFunction)</td></tr>\n-<tr class=\"memdesc:ga9e5ac1cc0fdfb7d7a0e937f58aff21fd\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a <a class=\"el\" href=\"a01851.html\" title=\"Composition of grid functions with another function.\">ComposedGridFunction</a> that composes grid-functions with another function. <a href=\"a00209.html#ga9e5ac1cc0fdfb7d7a0e937f58aff21fd\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga9e5ac1cc0fdfb7d7a0e937f58aff21fd\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga2bc5056bab5babdfa8a82409665f5a26\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class... Args> </td></tr>\n+<tr class=\"memitem:ga2bc5056bab5babdfa8a82409665f5a26\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static constexpr auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00215.html#ga2bc5056bab5babdfa8a82409665f5a26\">Dune::Functions::Concept::isCallable</a> ()</td></tr>\n+<tr class=\"memdesc:ga2bc5056bab5babdfa8a82409665f5a26\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Check if f is callable with given argument list. <a href=\"a00215.html#ga2bc5056bab5babdfa8a82409665f5a26\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga2bc5056bab5babdfa8a82409665f5a26\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga5d8c4be87961f1cff0cb71fc7c7f4c61\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class... Args> </td></tr>\n+<tr class=\"memitem:ga5d8c4be87961f1cff0cb71fc7c7f4c61\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static constexpr auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00215.html#ga5d8c4be87961f1cff0cb71fc7c7f4c61\">Dune::Functions::Concept::isCallable</a> (F &&, Args &&...)</td></tr>\n+<tr class=\"memdesc:ga5d8c4be87961f1cff0cb71fc7c7f4c61\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Check if f is callable with given argument list. <a href=\"a00215.html#ga5d8c4be87961f1cff0cb71fc7c7f4c61\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga5d8c4be87961f1cff0cb71fc7c7f4c61\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga44de2338acc7d9c49fbc12452545c7fc\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class Signature > </td></tr>\n+<tr class=\"memitem:ga44de2338acc7d9c49fbc12452545c7fc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static constexpr bool </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00207.html#ga44de2338acc7d9c49fbc12452545c7fc\">Dune::Functions::Concept::isFunction</a> ()</td></tr>\n+<tr class=\"memdesc:ga44de2338acc7d9c49fbc12452545c7fc\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Check if F models the <a class=\"el\" href=\"a01143.html\">Function</a> concept with given signature. <a href=\"a00207.html#ga44de2338acc7d9c49fbc12452545c7fc\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga44de2338acc7d9c49fbc12452545c7fc\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:gaf3604a4b809f49bb590440c0f06ededa\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class Signature , template< class > class DerivativeTraits> </td></tr>\n+<tr class=\"memitem:gaf3604a4b809f49bb590440c0f06ededa\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static constexpr bool </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00207.html#gaf3604a4b809f49bb590440c0f06ededa\">Dune::Functions::Concept::isFunction</a> (F &&f, SignatureTag< Signature, DerivativeTraits >)</td></tr>\n+<tr class=\"memdesc:gaf3604a4b809f49bb590440c0f06ededa\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Check if f models the <a class=\"el\" href=\"a01143.html\">Function</a> concept with given signature. <a href=\"a00207.html#gaf3604a4b809f49bb590440c0f06ededa\">More...</a><br /></td></tr>\n+<tr class=\"separator:gaf3604a4b809f49bb590440c0f06ededa\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga6c75551b9678848113181d29678ec81e\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class Signature , template< class > class DerivativeTraits = DefaultDerivativeTraits> </td></tr>\n+<tr class=\"memitem:ga6c75551b9678848113181d29678ec81e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static constexpr bool </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00207.html#ga6c75551b9678848113181d29678ec81e\">Dune::Functions::Concept::isDifferentiableFunction</a> ()</td></tr>\n+<tr class=\"memdesc:ga6c75551b9678848113181d29678ec81e\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Check if F models the <a class=\"el\" href=\"a01151.html\">DifferentiableFunction</a> concept with given signature. <a href=\"a00207.html#ga6c75551b9678848113181d29678ec81e\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga6c75551b9678848113181d29678ec81e\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga2ce66508daac0e7fab4ea581865b13c3\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class Signature , template< class > class DerivativeTraits> </td></tr>\n+<tr class=\"memitem:ga2ce66508daac0e7fab4ea581865b13c3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static constexpr bool </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00207.html#ga2ce66508daac0e7fab4ea581865b13c3\">Dune::Functions::Concept::isDifferentiableFunction</a> (F &&f, SignatureTag< Signature, DerivativeTraits >)</td></tr>\n+<tr class=\"memdesc:ga2ce66508daac0e7fab4ea581865b13c3\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Check if f models the <a class=\"el\" href=\"a01151.html\">DifferentiableFunction</a> concept with given signature. <a href=\"a00207.html#ga2ce66508daac0e7fab4ea581865b13c3\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga2ce66508daac0e7fab4ea581865b13c3\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:gae2c89a3c7780ff790a8b066bbb5f9687\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class Signature , class LocalContext > </td></tr>\n+<tr class=\"memitem:gae2c89a3c7780ff790a8b066bbb5f9687\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static constexpr bool </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00207.html#gae2c89a3c7780ff790a8b066bbb5f9687\">Dune::Functions::Concept::isLocalFunction</a> ()</td></tr>\n+<tr class=\"memdesc:gae2c89a3c7780ff790a8b066bbb5f9687\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Check if F models the <a class=\"el\" href=\"a01159.html\">LocalFunction</a> concept with given signature and local context. <a href=\"a00207.html#gae2c89a3c7780ff790a8b066bbb5f9687\">More...</a><br /></td></tr>\n+<tr class=\"separator:gae2c89a3c7780ff790a8b066bbb5f9687\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga2a244aa61f5d2c3f5d0dfb125b0436d5\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class Signature , class LocalContext , template< class > class DerivativeTraits = DefaultDerivativeTraits> </td></tr>\n+<tr class=\"memitem:ga2a244aa61f5d2c3f5d0dfb125b0436d5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static constexpr bool </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00207.html#ga2a244aa61f5d2c3f5d0dfb125b0436d5\">Dune::Functions::Concept::isDifferentiableLocalFunction</a> ()</td></tr>\n+<tr class=\"memdesc:ga2a244aa61f5d2c3f5d0dfb125b0436d5\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Check if F models the <a class=\"el\" href=\"a01167.html\">DifferentiableLocalFunction</a> concept with given signature and local context. <a href=\"a00207.html#ga2a244aa61f5d2c3f5d0dfb125b0436d5\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga2a244aa61f5d2c3f5d0dfb125b0436d5\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:gaa59c2062e5469a358cd00ce5bb90fe4d\"><td class=\"memTemplParams\" colspan=\"2\">template<class E > </td></tr>\n+<tr class=\"memitem:gaa59c2062e5469a358cd00ce5bb90fe4d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static constexpr bool </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00207.html#gaa59c2062e5469a358cd00ce5bb90fe4d\">Dune::Functions::Concept::isEntitySet</a> ()</td></tr>\n+<tr class=\"memdesc:gaa59c2062e5469a358cd00ce5bb90fe4d\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Check if F models the <a class=\"el\" href=\"a01179.html\">GridFunction</a> concept with given signature and entity set. <a href=\"a00207.html#gaa59c2062e5469a358cd00ce5bb90fe4d\">More...</a><br /></td></tr>\n+<tr class=\"separator:gaa59c2062e5469a358cd00ce5bb90fe4d\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga1691be3e84b0405cc8a7ebcd598bd861\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class Signature , class EntitySet > </td></tr>\n+<tr class=\"memitem:ga1691be3e84b0405cc8a7ebcd598bd861\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static constexpr bool </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00207.html#ga1691be3e84b0405cc8a7ebcd598bd861\">Dune::Functions::Concept::isGridFunction</a> ()</td></tr>\n+<tr class=\"memdesc:ga1691be3e84b0405cc8a7ebcd598bd861\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Check if F models the <a class=\"el\" href=\"a01179.html\">GridFunction</a> concept with given signature and entity set. <a href=\"a00207.html#ga1691be3e84b0405cc8a7ebcd598bd861\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga1691be3e84b0405cc8a7ebcd598bd861\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:gab53d12b97e04f88eec30f4192944e85a\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class Signature , class EntitySet , template< class > class DerivativeTraits = DefaultDerivativeTraits> </td></tr>\n+<tr class=\"memitem:gab53d12b97e04f88eec30f4192944e85a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static constexpr bool </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00207.html#gab53d12b97e04f88eec30f4192944e85a\">Dune::Functions::Concept::isDifferentiableGridFunction</a> ()</td></tr>\n+<tr class=\"memdesc:gab53d12b97e04f88eec30f4192944e85a\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Check if F models the <a class=\"el\" href=\"a01187.html\">DifferentiableGridFunction</a> concept with given signature and entity set. <a href=\"a00207.html#gab53d12b97e04f88eec30f4192944e85a\">More...</a><br /></td></tr>\n+<tr class=\"separator:gab53d12b97e04f88eec30f4192944e85a\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga8510d4e3f9e774bd9a3f434e3de659c9\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class Signature , class GridView > </td></tr>\n+<tr class=\"memitem:ga8510d4e3f9e774bd9a3f434e3de659c9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static constexpr bool </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00207.html#ga8510d4e3f9e774bd9a3f434e3de659c9\">Dune::Functions::Concept::isGridViewFunction</a> ()</td></tr>\n+<tr class=\"memdesc:ga8510d4e3f9e774bd9a3f434e3de659c9\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Check if F models the <a class=\"el\" href=\"a01195.html\">GridViewFunction</a> concept with given signature. <a href=\"a00207.html#ga8510d4e3f9e774bd9a3f434e3de659c9\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga8510d4e3f9e774bd9a3f434e3de659c9\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga5fe279401b9387533b85b085d6d521cc\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class Signature , class GridView , template< class > class DerivativeTraits = DefaultDerivativeTraits> </td></tr>\n+<tr class=\"memitem:ga5fe279401b9387533b85b085d6d521cc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static constexpr bool </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00207.html#ga5fe279401b9387533b85b085d6d521cc\">Dune::Functions::Concept::isDifferentiableGridViewFunction</a> ()</td></tr>\n+<tr class=\"memdesc:ga5fe279401b9387533b85b085d6d521cc\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Check if F models the <a class=\"el\" href=\"a01203.html\">DifferentiableGridViewFunction</a> concept with given signature. <a href=\"a00207.html#ga5fe279401b9387533b85b085d6d521cc\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga5fe279401b9387533b85b085d6d521cc\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,37 +4,138 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * gridfunctions\n+ * common\n Classes | Namespaces | Functions\n-composedgridfunction.hh File Reference\n-#include <type_traits>\n-#include <tuple>\n-#include <dune/common/referencehelper.hh>\n-#include <dune/common/typeutilities.hh>\n-#include <dune/functions/common/defaultderivativetraits.hh>\n-#include <dune/functions/common/differentiablefunction.hh>\n-#include <dune/functions/gridfunctions/gridfunction.hh>\n+functionconcepts.hh File Reference\n+#include <dune/common/typelist.hh>\n+#include <dune/common/concept.hh>\n+#include <dune/functions/common/signature.hh>\n+#include <dune/functions/gridfunctions/localderivativetraits.hh>\n+#include <dune/functions/gridfunctions/gridviewentityset.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-class \u00a0Dune::Functions::ComposedGridFunction<_OF,_IF_>\n-\u00a0 Composition of grid functions with another function. More...\n+struct \u00a0Dune::Functions::Concept::Callable<_Args_>\n+\u00a0 Concept objects that can be called with given argument list. More...\n+\u00a0\n+struct \u00a0Dune::Functions::Concept::Function<_Range(Domain)>\n+\u00a0 Concept for a function mapping Domain to Range. More...\n+\u00a0\n+struct \u00a0Dune::Functions::Concept::DifferentiableFunction<_Range(Domain),\n+ DerivativeTraits_>\n+\u00a0 Concept for a differentiable function mapping Domain to Range. More...\n+\u00a0\n+struct \u00a0Dune::Functions::Concept::LocalFunction<_Range(Domain),_LocalContext_>\n+\u00a0 Concept for a local function mapping Domain to Range. More...\n+\u00a0\n+struct \u00a0Dune::Functions::Concept::DifferentiableLocalFunction<_Range(Domain),\n+ LocalContext,_DerivativeTraits_>\n+\u00a0 Concept for a differentiable local function mapping Domain to Range.\n+ More...\n+\u00a0\n+struct \u00a0Dune::Functions::Concept::EntitySet\n+\u00a0 Concept for an entity set for a Concept::GridFunction<Range(Domain),\n+ EntitySet, DerivativeTraits> More...\n+\u00a0\n+struct \u00a0Dune::Functions::Concept::GridFunction<_Range(Domain),_EntitySet_>\n+\u00a0 Concept for a grid function mapping Domain to Range. More...\n+\u00a0\n+struct \u00a0Dune::Functions::Concept::DifferentiableGridFunction<_Range(Domain),\n+ EntitySet,_DerivativeTraits_>\n+\u00a0 Concept for a differentiable grid function mapping Domain to Range.\n+ More...\n+\u00a0\n+struct \u00a0Dune::Functions::Concept::GridViewFunction<_Range(Domain),_GridView_>\n+\u00a0 Concept for a grid view function mapping Domain to Range. More...\n+\u00a0\n+struct \u00a0Dune::Functions::Concept::DifferentiableGridViewFunction<_Range\n+ (Domain),_GridView,_DerivativeTraits_>\n+\u00a0 Concept for a differentiable grid view function mapping Domain to\n+ Range. More...\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n+namespace \u00a0Dune::Functions::Concept\n+\u00a0\n Functions\n-template<class OF , class... IF>\n-auto\u00a0Dune::Functions::makeComposedGridFunction (OF &&outerFunction, IF &&...\n- innerFunction)\n-\u00a0 Create a ComposedGridFunction that composes grid-functions with another\n- function. More...\n+template<class F , class... Args>\n+static constexpr auto\u00a0Dune::Functions::Concept::isCallable ()\n+\u00a0 Check if f is callable with given argument list. More...\n+\u00a0\n+template<class F , class... Args>\n+static constexpr auto\u00a0Dune::Functions::Concept::isCallable (F &&, Args &&...)\n+\u00a0 Check if f is callable with given argument list. More...\n+\u00a0\n+template<class F , class Signature >\n+static constexpr bool\u00a0Dune::Functions::Concept::isFunction ()\n+\u00a0 Check if F models the Function concept with given\n+ signature. More...\n+\u00a0\n+template<class F , class Signature , template< class > class DerivativeTraits>\n+static constexpr bool\u00a0Dune::Functions::Concept::isFunction (F &&f,\n+ SignatureTag< Signature, DerivativeTraits >)\n+\u00a0 Check if f models the Function concept with given\n+ signature. More...\n+\u00a0\n+template<class F , class Signature , template< class > class DerivativeTraits =\n+DefaultDerivativeTraits>\n+static constexpr bool\u00a0Dune::Functions::Concept::isDifferentiableFunction ()\n+\u00a0 Check if F models the DifferentiableFunction concept\n+ with given signature. More...\n+\u00a0\n+template<class F , class Signature , template< class > class DerivativeTraits>\n+static constexpr bool\u00a0Dune::Functions::Concept::isDifferentiableFunction (F\n+ &&f, SignatureTag< Signature, DerivativeTraits >)\n+\u00a0 Check if f models the DifferentiableFunction concept\n+ with given signature. More...\n+\u00a0\n+template<class F , class Signature , class LocalContext >\n+static constexpr bool\u00a0Dune::Functions::Concept::isLocalFunction ()\n+\u00a0 Check if F models the LocalFunction concept with given\n+ signature and local context. More...\n+\u00a0\n+template<class F , class Signature , class LocalContext , template< class >\n+class DerivativeTraits = DefaultDerivativeTraits>\n+static constexpr bool\u00a0Dune::Functions::Concept::isDifferentiableLocalFunction\n+ ()\n+\u00a0 Check if F models the DifferentiableLocalFunction\n+ concept with given signature and local context. More...\n+\u00a0\n+template<class E >\n+static constexpr bool\u00a0Dune::Functions::Concept::isEntitySet ()\n+\u00a0 Check if F models the GridFunction concept with given\n+ signature and entity set. More...\n+\u00a0\n+template<class F , class Signature , class EntitySet >\n+static constexpr bool\u00a0Dune::Functions::Concept::isGridFunction ()\n+\u00a0 Check if F models the GridFunction concept with given\n+ signature and entity set. More...\n+\u00a0\n+template<class F , class Signature , class EntitySet , template< class > class\n+DerivativeTraits = DefaultDerivativeTraits>\n+static constexpr bool\u00a0Dune::Functions::Concept::isDifferentiableGridFunction\n+ ()\n+\u00a0 Check if F models the DifferentiableGridFunction concept\n+ with given signature and entity set. More...\n+\u00a0\n+template<class F , class Signature , class GridView >\n+static constexpr bool\u00a0Dune::Functions::Concept::isGridViewFunction ()\n+\u00a0 Check if F models the GridViewFunction concept with\n+ given signature. More...\n+\u00a0\n+template<class F , class Signature , class GridView , template< class > class\n+DerivativeTraits = DefaultDerivativeTraits>\n+static constexpr bool\u00a0Dune::Functions::Concept::\n+ isDifferentiableGridViewFunction ()\n+\u00a0 Check if F models the DifferentiableGridViewFunction\n+ concept with given signature. More...\n \u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00020_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00020_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: composedgridfunction.hh Source File</title>\n+<title>dune-functions: functionconcepts.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,199 +58,324 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">composedgridfunction.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">functionconcepts.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00020.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_COMPOSEDGRIDFUNCTION_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_GRIDFUNCTIONS_COMPOSEDGRIDFUNCTION_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <type_traits></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <tuple></span></div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <dune/common/typelist.hh></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <dune/common/concept.hh></span></div>\n <div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/common/referencehelper.hh></span></div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/typeutilities.hh></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00080.html\">dune/functions/common/defaultderivativetraits.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00068.html\">dune/functions/common/differentiablefunction.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00017.html\">dune/functions/gridfunctions/gridfunction.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00008.html\">dune/functions/common/signature.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00095.html\">dune/functions/gridfunctions/localderivativetraits.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00083.html\">dune/functions/gridfunctions/gridviewentityset.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"keyword\">namespace </span>Concept {</div>\n <div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"keyword\">using namespace </span>Dune::Concept;</div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n <div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n <div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span> </div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> </div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>OF, <span class=\"keyword\">class</span>... IF></div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01851.html\"> 41</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01851.html\">ComposedGridFunction</a></div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span>{</div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> <span class=\"keyword\">using </span>InnerFunctions = std::tuple<IF...>;</div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> <span class=\"keyword\">using </span>InnerLocalFunctions = std::tuple<decltype(localFunction(resolveRef(std::declval<const IF&>())))...>;</div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> </div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> <span class=\"keyword\">template</span><std::<span class=\"keywordtype\">size_t</span> i></div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> <span class=\"keyword\">using </span>InnerFunction = std::decay_t<ResolveRef_t<std::tuple_element_t<i, InnerFunctions>>>;</div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> </div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> <span class=\"keyword\">using </span>OuterFunction = OF;</div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> </div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> </div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01851.html#a60e88941320bce2a3fd832dcb33b79e8\"> 53</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01851.html#a60e88941320bce2a3fd832dcb33b79e8\">EntitySet</a> = <span class=\"keyword\">typename</span> InnerFunction<0>::EntitySet;</div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01851.html#a6c0975897a61d00e1e5db9e8d1c5943c\"> 54</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01851.html#a6c0975897a61d00e1e5db9e8d1c5943c\">Element</a> = <span class=\"keyword\">typename</span> EntitySet::Element;</div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> </div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01851.html#ad9612763841397749ff243b3f6f16177\"> 56</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01851.html#ad9612763841397749ff243b3f6f16177\">Domain</a> = <span class=\"keyword\">typename</span> EntitySet::GlobalCoordinate;</div>\n-<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01851.html#a62ac2c12e6920194583994cdec60283f\"> 57</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01851.html#a62ac2c12e6920194583994cdec60283f\">LocalDomain</a> = <span class=\"keyword\">typename</span> EntitySet::LocalCoordinate;</div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> </div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01851.html#ad7e7b03a9451ddecdc34db9c424ac38a\"> 59</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01851.html#ad7e7b03a9451ddecdc34db9c424ac38a\">Range</a> = <span class=\"keyword\">decltype</span>(std::declval<OF>()(std::declval<IF>()(std::declval<Domain>())...));</div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> </div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"comment\">// Callable concept ############################################################</span></div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> </div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span> </div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span>... Args></div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01139.html\"> 32</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01139.html\">Callable</a></div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span>{</div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F></div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01139.html#a8020f2dc3373ee93bbb30e7dfd362b9f\"> 35</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a01139.html#a8020f2dc3373ee93bbb30e7dfd362b9f\">require</a>(F&& f) -> <span class=\"keyword\">decltype</span>(</div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> f(std::declval<Args>()...)</div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> );</div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span>};</div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> </div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>F, <span class=\"keyword\">class</span>... Args></div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00215.html#ga2bc5056bab5babdfa8a82409665f5a26\"> 47</a></span><span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00215.html#ga2bc5056bab5babdfa8a82409665f5a26\">isCallable</a>()</div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span>{ <span class=\"keywordflow\">return</span> models<<a class=\"code hl_struct\" href=\"a01139.html\">Concept::Callable</a><Args...>, F>(); }</div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> </div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>F, <span class=\"keyword\">class</span>... Args></div>\n+<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00215.html#ga5d8c4be87961f1cff0cb71fc7c7f4c61\"> 57</a></span><span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00215.html#ga2bc5056bab5babdfa8a82409665f5a26\">isCallable</a>(F&&, Args&&...)</div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span>{</div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> <span class=\"keywordflow\">return</span> models<<a class=\"code hl_struct\" href=\"a01139.html\">Concept::Callable</a><Args&&...>, F>();</div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span>}</div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> </div>\n <div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> </div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> <span class=\"keyword\">using </span>Traits = Imp::GridFunctionTraits<<a class=\"code hl_typedef\" href=\"a01851.html#ad7e7b03a9451ddecdc34db9c424ac38a\">Range</a>(<a class=\"code hl_typedef\" href=\"a01851.html#ad9612763841397749ff243b3f6f16177\">Domain</a>), <a class=\"code hl_typedef\" href=\"a01851.html#a60e88941320bce2a3fd832dcb33b79e8\">EntitySet</a>, <a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a>, 16>;</div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> </div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> <span class=\"keyword\">class </span>LocalFunction</div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> {</div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> <span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> LocalFunction(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01851.html\">ComposedGridFunction</a>& globalFunction) :</div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> globalFunction_(globalFunction),</div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> innerLocalFunctions_(globalFunction.<a class=\"code hl_function\" href=\"a01851.html#ab6fa74b32c63bb86bb048f3e67ead39d\">innerLocalFunctions</a>())</div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> {}</div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> </div>\n-<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> <span class=\"keywordtype\">void</span> bind(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01851.html#a6c0975897a61d00e1e5db9e8d1c5943c\">Element</a>& element)</div>\n-<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> {</div>\n-<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> std::apply([&](<span class=\"keyword\">auto</span>&... innerFunction) {</div>\n-<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> (innerFunction.bind(element),...);</div>\n-<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> }, innerLocalFunctions_);</div>\n-<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> }</div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> </div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> <span class=\"keywordtype\">void</span> unbind()</div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> {</div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> std::apply([&](<span class=\"keyword\">auto</span>&... innerFunction) {</div>\n-<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> (innerFunction.unbind(),...);</div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> }, innerLocalFunctions_);</div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> }</div>\n-<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> </div>\n-<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> <span class=\"keywordtype\">bool</span> bound()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> <span class=\"keywordflow\">return</span> std::apply([](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>&... innerFunction) {</div>\n-<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> <span class=\"keywordflow\">return</span> (innerFunction.bound() && ...);</div>\n-<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> }, innerLocalFunctions_);</div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> }</div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> </div>\n-<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> <a class=\"code hl_typedef\" href=\"a01851.html#ad7e7b03a9451ddecdc34db9c424ac38a\">Range</a> <a class=\"code hl_function\" href=\"a01851.html#ae5d3415a56ecdaae44c4bf96a262885c\">operator()</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01851.html#a62ac2c12e6920194583994cdec60283f\">LocalDomain</a>& x)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> <span class=\"keywordflow\">return</span> std::apply([&](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>&... innerFunction) {</div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> <span class=\"keywordflow\">return</span> globalFunction_.outerFunction_(innerFunction(x)...);</div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> }, innerLocalFunctions_);</div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> }</div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> </div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01851.html#a6c0975897a61d00e1e5db9e8d1c5943c\">Element</a>& localContext()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> <span class=\"keywordflow\">return</span> std::get<0>(innerLocalFunctions_).localContext();</div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> }</div>\n-<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> </div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> <span class=\"keyword\">friend</span> <span class=\"keyword\">typename</span> <a class=\"code hl_class\" href=\"a01895.html\">Traits::LocalFunctionTraits::DerivativeInterface</a> <a class=\"code hl_friend\" href=\"a01851.html#af786f297d006433ef0161f8565df6acf\">derivative</a>(<span class=\"keyword\">const</span> LocalFunction& t)</div>\n-<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> {</div>\n-<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> DUNE_THROW(NotImplemented,<span class=\"stringliteral\">"not implemented"</span>);</div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> }</div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> </div>\n-<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> <span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01851.html\">ComposedGridFunction</a>& globalFunction_;</div>\n-<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> InnerLocalFunctions innerLocalFunctions_;</div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> };</div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> </div>\n-<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> </div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>OFT, <span class=\"keyword\">class</span>... IFT,</div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> disableCopyMove<ComposedGridFunction, OFT> = 0,</div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> std::enable_if_t<(<span class=\"keyword\">sizeof</span>...(IFT) > 0), <span class=\"keywordtype\">int</span>> = 0></div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01851.html#a31f170c22381b94a081e09f25704102a\"> 167</a></span> <a class=\"code hl_function\" href=\"a01851.html#a31f170c22381b94a081e09f25704102a\">ComposedGridFunction</a>(OFT&& outerFunction, IFT&&... innerFunctions) :</div>\n-<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> <a class=\"code hl_variable\" href=\"a01851.html#a145b7b5d536222897e403d6151491e0b\">outerFunction_</a>(std::forward<OFT>(outerFunction)),</div>\n-<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> <a class=\"code hl_variable\" href=\"a01851.html#a1a90b0f55aef5ea1694778c11c31b6ee\">innerFunctions_</a>(std::forward<IFT>(innerFunctions)...)</div>\n-<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> {}</div>\n-<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> </div>\n-<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01851.html#ae5d3415a56ecdaae44c4bf96a262885c\"> 173</a></span> <a class=\"code hl_typedef\" href=\"a01851.html#ad7e7b03a9451ddecdc34db9c424ac38a\">Range</a> <a class=\"code hl_function\" href=\"a01851.html#ae5d3415a56ecdaae44c4bf96a262885c\">operator()</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01851.html#ad9612763841397749ff243b3f6f16177\">Domain</a>& x)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> DUNE_THROW(NotImplemented,<span class=\"stringliteral\">"not implemented"</span>);</div>\n-<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> }</div>\n-<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> </div>\n-<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01851.html#af786f297d006433ef0161f8565df6acf\"> 179</a></span> <span class=\"keyword\">friend</span> <span class=\"keyword\">typename</span> <a class=\"code hl_class\" href=\"a01895.html\">Traits::DerivativeInterface</a> <a class=\"code hl_friend\" href=\"a01851.html#af786f297d006433ef0161f8565df6acf\">derivative</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01851.html\">ComposedGridFunction</a>& t)</div>\n-<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> {</div>\n-<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> DUNE_THROW(NotImplemented,<span class=\"stringliteral\">"not implemented"</span>);</div>\n-<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> }</div>\n-<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span> </div>\n-<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01851.html#ad1b3541b659ef016514458e3edffc149\"> 190</a></span> <span class=\"keyword\">friend</span> LocalFunction <a class=\"code hl_friend\" href=\"a01851.html#ad1b3541b659ef016514458e3edffc149\">localFunction</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01851.html\">ComposedGridFunction</a>& cgf)</div>\n-<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> {</div>\n-<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> <span class=\"keywordflow\">return</span> LocalFunction(cgf);</div>\n-<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> }</div>\n-<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> </div>\n-<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01851.html#a417a35c0e8f111e9dfaf224eb1a08c38\"> 205</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01851.html#a60e88941320bce2a3fd832dcb33b79e8\">EntitySet</a>& <a class=\"code hl_function\" href=\"a01851.html#a417a35c0e8f111e9dfaf224eb1a08c38\">entitySet</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00219.html#acd448ecd78521f983720ec5a6f3e7698\">resolveRef</a>(std::get<0>(<a class=\"code hl_variable\" href=\"a01851.html#a1a90b0f55aef5ea1694778c11c31b6ee\">innerFunctions_</a>)).entitySet();</div>\n-<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span> }</div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> </div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span><span class=\"comment\">// Function concept ############################################################</span></div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature></div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01143.html\"> 66</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01143.html\">Function</a>;</div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> </div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain></div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01147.html\"> 77</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01143.html\">Function</a><Range(Domain)> : Refines<Callable<Domain> ></div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span>{</div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F></div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01147.html#a8cd663e9ec6cd8cef42e103a3dff7b8d\"> 80</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a01147.html#a8cd663e9ec6cd8cef42e103a3dff7b8d\">require</a>(F&& f) -> <span class=\"keyword\">decltype</span>(</div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> <span class=\"comment\">// F models Function<Range(Domain)> if the result of F(Domain) is implicitly convertible to Range</span></div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> requireConvertible<Range>(f(std::declval<Domain>()))</div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> );</div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span>};</div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> </div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F, <span class=\"keyword\">class</span> Signature></div>\n+<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00207.html#ga44de2338acc7d9c49fbc12452545c7fc\"> 88</a></span><span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a00207.html#ga44de2338acc7d9c49fbc12452545c7fc\">isFunction</a>()</div>\n+<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span>{ <span class=\"keywordflow\">return</span> models<Concept::Function<Signature>, F>(); }</div>\n+<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> </div>\n+<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F, <span class=\"keyword\">class</span> Signature, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits></div>\n+<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00207.html#gaf3604a4b809f49bb590440c0f06ededa\"> 93</a></span><span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a00207.html#ga44de2338acc7d9c49fbc12452545c7fc\">isFunction</a>(F&& f, <a class=\"code hl_struct\" href=\"a01295.html\">SignatureTag<Signature, DerivativeTraits></a>)</div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span>{ <span class=\"keywordflow\">return</span> models<Concept::Function<Signature>, F>(); }</div>\n+<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> </div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> </div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> </div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span><span class=\"comment\">// DifferentiableFunction concept ##############################################</span></div>\n+<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits = <a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a>></div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01151.html\"> 100</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01151.html\">DifferentiableFunction</a>;</div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> </div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits></div>\n+<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01155.html\"> 114</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01151.html\">DifferentiableFunction</a><Range(Domain), DerivativeTraits> : Refines<Dune::Functions::Concept::Function<Range(Domain)> ></div>\n+<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span>{</div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01155.html#a06581f35c60f2f1a53ffcb579d2fb018\"> 116</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01155.html#a06581f35c60f2f1a53ffcb579d2fb018\">DerivativeSignature</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_struct\" href=\"a01291.html\">SignatureTraits</a><Range(Domain)>::template <a class=\"code hl_typedef\" href=\"a01155.html#a06581f35c60f2f1a53ffcb579d2fb018\">DerivativeSignature<DerivativeTraits></a>;</div>\n+<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> </div>\n+<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F></div>\n+<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01155.html#a178d79f67e27907184d01fe3258b57f2\"> 119</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a01155.html#a178d79f67e27907184d01fe3258b57f2\">require</a>(F&& f) -> <span class=\"keyword\">decltype</span>(</div>\n+<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> <a class=\"code hl_function\" href=\"a00209.html#ga7ec424ff4be740ad675bd85750940472\">derivative</a>(f),</div>\n+<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> requireConcept<Function<DerivativeSignature>>(<a class=\"code hl_function\" href=\"a00209.html#ga7ec424ff4be740ad675bd85750940472\">derivative</a>(f))</div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> );</div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span>};</div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> </div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F, <span class=\"keyword\">class</span> Signature, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits = <a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a>></div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00207.html#ga6c75551b9678848113181d29678ec81e\"> 127</a></span><span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a00207.html#ga6c75551b9678848113181d29678ec81e\">isDifferentiableFunction</a>()</div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span>{ <span class=\"keywordflow\">return</span> models<Concept::DifferentiableFunction<Signature, DerivativeTraits>, F>(); }</div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> </div>\n+<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F, <span class=\"keyword\">class</span> Signature, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits></div>\n+<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00207.html#ga2ce66508daac0e7fab4ea581865b13c3\"> 132</a></span><span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a00207.html#ga6c75551b9678848113181d29678ec81e\">isDifferentiableFunction</a>(F&& f, <a class=\"code hl_struct\" href=\"a01295.html\">SignatureTag<Signature, DerivativeTraits></a>)</div>\n+<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span>{ <span class=\"keywordflow\">return</span> models<Concept::DifferentiableFunction<Signature, DerivativeTraits>, F>(); }</div>\n+<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> </div>\n+<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> </div>\n+<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> </div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span><span class=\"comment\">// LocalFunction concept ##############################################</span></div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> LocalContext></div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01159.html\"> 139</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01159.html\">LocalFunction</a>;</div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> </div>\n+<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">class</span> LocalContext></div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01163.html\"> 151</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01159.html\">LocalFunction</a><Range(Domain), LocalContext> :</div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> Refines<Dune::Functions::Concept::Function<Range(Domain)> ></div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span>{</div>\n+<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F></div>\n+<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01163.html#a48db21bb312816392239ff02d27a804c\"> 155</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a01163.html#a48db21bb312816392239ff02d27a804c\">require</a>(F&& f) -> <span class=\"keyword\">decltype</span>(</div>\n+<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> f.bind(std::declval<LocalContext>()),</div>\n+<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> f.unbind(),</div>\n+<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> requireConvertible<bool>(f.bound()),</div>\n+<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> f.localContext(),</div>\n+<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> requireConvertible<LocalContext>(f.localContext())</div>\n+<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> );</div>\n+<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span>};</div>\n+<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> </div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F, <span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> LocalContext></div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00207.html#gae2c89a3c7780ff790a8b066bbb5f9687\"> 166</a></span><span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a00207.html#gae2c89a3c7780ff790a8b066bbb5f9687\">isLocalFunction</a>()</div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span>{ <span class=\"keywordflow\">return</span> models<Concept::LocalFunction<Signature, LocalContext>, F>(); }</div>\n+<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> </div>\n+<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> </div>\n+<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span><span class=\"comment\">// DifferentiableLocalFunction concept ##############################################</span></div>\n+<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> LocalContext, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits = <a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a>></div>\n+<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01167.html\"> 172</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01167.html\">DifferentiableLocalFunction</a>;</div>\n+<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> </div>\n+<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">class</span> LocalContext, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits></div>\n+<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01171.html\"> 187</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01167.html\">DifferentiableLocalFunction</a><Range(Domain), LocalContext, DerivativeTraits> :</div>\n+<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> Refines<</div>\n+<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> Dune::Functions::Concept::DifferentiableFunction<Range(Domain), DerivativeTraits>,</div>\n+<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span> Dune::Functions::Concept::LocalFunction<Range(Domain),LocalContext></div>\n+<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> ></div>\n+<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span>{</div>\n+<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F></div>\n+<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01171.html#ac0aee0abe38ae49eeb9cfea8abcd56ba\"> 194</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a01171.html#ac0aee0abe38ae49eeb9cfea8abcd56ba\">require</a>(F&& f) -> <span class=\"keyword\">decltype</span>(</div>\n+<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> f.bind(std::declval<LocalContext>()),</div>\n+<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> f.unbind(),</div>\n+<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> f.localContext(),</div>\n+<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> requireConvertible<LocalContext>(f.localContext())</div>\n+<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> );</div>\n+<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span>};</div>\n+<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> </div>\n+<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F, <span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> LocalContext, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits = <a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a>></div>\n+<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00207.html#ga2a244aa61f5d2c3f5d0dfb125b0436d5\"> 204</a></span><span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a00207.html#ga2a244aa61f5d2c3f5d0dfb125b0436d5\">isDifferentiableLocalFunction</a>()</div>\n+<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span>{ <span class=\"keywordflow\">return</span> models<Concept::DifferentiableLocalFunction<Signature, LocalContext, DerivativeTraits>, F>(); }</div>\n+<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> </div>\n+<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> </div>\n+<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span><span class=\"comment\">// EntitySet concept ##############################################</span></div>\n <div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> </div>\n-<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span><span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> </div>\n-<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01851.html#ab6fa74b32c63bb86bb048f3e67ead39d\"> 212</a></span> InnerLocalFunctions <a class=\"code hl_function\" href=\"a01851.html#ab6fa74b32c63bb86bb048f3e67ead39d\">innerLocalFunctions</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> <span class=\"keywordflow\">return</span> std::apply([&](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>&... innerFunction) {</div>\n-<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> <span class=\"keywordflow\">return</span> std::make_tuple(<a class=\"code hl_friend\" href=\"a01851.html#ad1b3541b659ef016514458e3edffc149\">localFunction</a>(<a class=\"code hl_function\" href=\"a00219.html#acd448ecd78521f983720ec5a6f3e7698\">resolveRef</a>(innerFunction))...);</div>\n-<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span> }, <a class=\"code hl_variable\" href=\"a01851.html#a1a90b0f55aef5ea1694778c11c31b6ee\">innerFunctions_</a>);</div>\n-<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> }</div>\n-<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> </div>\n-<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01851.html#a145b7b5d536222897e403d6151491e0b\"> 219</a></span> OuterFunction <a class=\"code hl_variable\" href=\"a01851.html#a145b7b5d536222897e403d6151491e0b\">outerFunction_</a>;</div>\n-<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01851.html#a1a90b0f55aef5ea1694778c11c31b6ee\"> 220</a></span> InnerFunctions <a class=\"code hl_variable\" href=\"a01851.html#a1a90b0f55aef5ea1694778c11c31b6ee\">innerFunctions_</a>;</div>\n-<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span>};</div>\n-<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span> </div>\n-<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> </div>\n-<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> </div>\n-<div class=\"line\"><a id=\"l00247\" name=\"l00247\"></a><span class=\"lineno\"> 247</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>OF, <span class=\"keyword\">class</span>... IF></div>\n-<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00209.html#ga9e5ac1cc0fdfb7d7a0e937f58aff21fd\"> 248</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00209.html#ga9e5ac1cc0fdfb7d7a0e937f58aff21fd\">makeComposedGridFunction</a>(OF&& outerFunction, IF&&... innerFunction)</div>\n-<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span>{</div>\n-<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span> <span class=\"keyword\">using </span>ComposedGridFunctionType = <a class=\"code hl_class\" href=\"a01851.html\">ComposedGridFunction<std::decay_t<OF></a>, std::decay_t<IF>...>;</div>\n-<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span> <span class=\"keywordflow\">return</span> ComposedGridFunctionType(std::forward<OF>(outerFunction), std::forward<IF>(innerFunction)...);</div>\n-<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span>}</div>\n-<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"> 253</span> </div>\n-<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"> 254</span> </div>\n+<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01175.html\"> 219</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01175.html\">EntitySet</a></div>\n+<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span>{</div>\n+<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> E></div>\n+<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01175.html#a68f40d08a99de681cf30949d76461d8a\"> 222</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a01175.html#a68f40d08a99de681cf30949d76461d8a\">require</a>(E&& f) -> <span class=\"keyword\">decltype</span>(</div>\n+<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> requireType<typename E::Element>(),</div>\n+<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> requireType<typename E::LocalCoordinate>(),</div>\n+<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span> requireType<typename E::GlobalCoordinate>()</div>\n+<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> );</div>\n+<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span>};</div>\n+<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> </div>\n+<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> E></div>\n+<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00207.html#gaa59c2062e5469a358cd00ce5bb90fe4d\"> 231</a></span><span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a00207.html#gaa59c2062e5469a358cd00ce5bb90fe4d\">isEntitySet</a>()</div>\n+<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span>{ <span class=\"keywordflow\">return</span> models<Concept::EntitySet, E>(); }</div>\n+<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> </div>\n+<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> </div>\n+<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> </div>\n+<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span><span class=\"comment\">// GridFunction concept ##############################################</span></div>\n+<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> EntitySet></div>\n+<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01179.html\"> 238</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01179.html\">GridFunction</a>;</div>\n+<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span> </div>\n+<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">class</span> EntitySet></div>\n+<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01183.html\"> 250</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01179.html\">GridFunction</a><Range(Domain), <a class=\"code hl_struct\" href=\"a01175.html\">EntitySet</a>> :</div>\n+<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span> Refines<Dune::Functions::Concept::Function<Range(Domain)> ></div>\n+<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span>{</div>\n+<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01183.html#a6344d487356e0513b458a11b45dd935b\"> 253</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01183.html#a6344d487356e0513b458a11b45dd935b\">LocalSignature</a> = Range(<span class=\"keyword\">typename</span> EntitySet::LocalCoordinate);</div>\n+<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01183.html#a15f0186a48c8602d29c53c131906da6e\"> 254</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01183.html#a15f0186a48c8602d29c53c131906da6e\">LocalContext</a> = <span class=\"keyword\">typename</span> EntitySet::Element;</div>\n <div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span> </div>\n-<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"> 256</span>}} <span class=\"comment\">// namespace Dune::Functions</span></div>\n-<div class=\"line\"><a id=\"l00257\" name=\"l00257\"></a><span class=\"lineno\"> 257</span> </div>\n-<div class=\"line\"><a id=\"l00258\" name=\"l00258\"></a><span class=\"lineno\"> 258</span> </div>\n-<div class=\"line\"><a id=\"l00259\" name=\"l00259\"></a><span class=\"lineno\"> 259</span> </div>\n-<div class=\"line\"><a id=\"l00260\" name=\"l00260\"></a><span class=\"lineno\"> 260</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_GRIDFUNCTIONS_COMPOSEDGRIDFUNCTION_HH</span></div>\n-<div class=\"ttc\" id=\"aa00017_html\"><div class=\"ttname\"><a href=\"a00017.html\">gridfunction.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00068_html\"><div class=\"ttname\"><a href=\"a00068.html\">differentiablefunction.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00080_html\"><div class=\"ttname\"><a href=\"a00080.html\">defaultderivativetraits.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00209_html_ga9e5ac1cc0fdfb7d7a0e937f58aff21fd\"><div class=\"ttname\"><a href=\"a00209.html#ga9e5ac1cc0fdfb7d7a0e937f58aff21fd\">Dune::Functions::ComposedGridFunction::makeComposedGridFunction</a></div><div class=\"ttdeci\">auto makeComposedGridFunction(OF &&outerFunction, IF &&... innerFunction)</div><div class=\"ttdoc\">Create a ComposedGridFunction that composes grid-functions with another function.</div><div class=\"ttdef\"><b>Definition:</b> composedgridfunction.hh:248</div></div>\n+<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"> 256</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F></div>\n+<div class=\"line\"><a id=\"l00257\" name=\"l00257\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01183.html#ae2f4f9301cbe9507a2a643c88ce90d27\"> 257</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a01183.html#ae2f4f9301cbe9507a2a643c88ce90d27\">require</a>(F&& f) -> <span class=\"keyword\">decltype</span>(</div>\n+<div class=\"line\"><a id=\"l00258\" name=\"l00258\"></a><span class=\"lineno\"> 258</span> localFunction(f),</div>\n+<div class=\"line\"><a id=\"l00259\" name=\"l00259\"></a><span class=\"lineno\"> 259</span> f.entitySet(),</div>\n+<div class=\"line\"><a id=\"l00260\" name=\"l00260\"></a><span class=\"lineno\"> 260</span> requireConcept<LocalFunction<LocalSignature, LocalContext>>(localFunction(f)),</div>\n+<div class=\"line\"><a id=\"l00261\" name=\"l00261\"></a><span class=\"lineno\"> 261</span> requireConcept<Concept::EntitySet, EntitySet>(),</div>\n+<div class=\"line\"><a id=\"l00262\" name=\"l00262\"></a><span class=\"lineno\"> 262</span> requireConvertible<EntitySet>(f.entitySet()),</div>\n+<div class=\"line\"><a id=\"l00263\" name=\"l00263\"></a><span class=\"lineno\"> 263</span> requireConvertible<typename EntitySet::GlobalCoordinate, Domain>()</div>\n+<div class=\"line\"><a id=\"l00264\" name=\"l00264\"></a><span class=\"lineno\"> 264</span> );</div>\n+<div class=\"line\"><a id=\"l00265\" name=\"l00265\"></a><span class=\"lineno\"> 265</span>};</div>\n+<div class=\"line\"><a id=\"l00266\" name=\"l00266\"></a><span class=\"lineno\"> 266</span> </div>\n+<div class=\"line\"><a id=\"l00268\" name=\"l00268\"></a><span class=\"lineno\"> 268</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F, <span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> EntitySet></div>\n+<div class=\"line\"><a id=\"l00269\" name=\"l00269\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00207.html#ga1691be3e84b0405cc8a7ebcd598bd861\"> 269</a></span><span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a00207.html#ga1691be3e84b0405cc8a7ebcd598bd861\">isGridFunction</a>()</div>\n+<div class=\"line\"><a id=\"l00270\" name=\"l00270\"></a><span class=\"lineno\"> 270</span>{ <span class=\"keywordflow\">return</span> models<Concept::GridFunction<Signature, EntitySet>, F>(); }</div>\n+<div class=\"line\"><a id=\"l00271\" name=\"l00271\"></a><span class=\"lineno\"> 271</span> </div>\n+<div class=\"line\"><a id=\"l00272\" name=\"l00272\"></a><span class=\"lineno\"> 272</span> </div>\n+<div class=\"line\"><a id=\"l00273\" name=\"l00273\"></a><span class=\"lineno\"> 273</span><span class=\"comment\">// DifferentiableGridFunction concept ##############################################</span></div>\n+<div class=\"line\"><a id=\"l00274\" name=\"l00274\"></a><span class=\"lineno\"> 274</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> EntitySet, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits = <a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a>></div>\n+<div class=\"line\"><a id=\"l00275\" name=\"l00275\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01187.html\"> 275</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01187.html\">DifferentiableGridFunction</a>;</div>\n+<div class=\"line\"><a id=\"l00276\" name=\"l00276\"></a><span class=\"lineno\"> 276</span> </div>\n+<div class=\"line\"><a id=\"l00289\" name=\"l00289\"></a><span class=\"lineno\"> 289</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">class</span> EntitySet, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits></div>\n+<div class=\"line\"><a id=\"l00290\" name=\"l00290\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01191.html\"> 290</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01187.html\">DifferentiableGridFunction</a><Range(Domain), <a class=\"code hl_struct\" href=\"a01175.html\">EntitySet</a>, DerivativeTraits> :</div>\n+<div class=\"line\"><a id=\"l00291\" name=\"l00291\"></a><span class=\"lineno\"> 291</span> Refines<</div>\n+<div class=\"line\"><a id=\"l00292\" name=\"l00292\"></a><span class=\"lineno\"> 292</span> Dune::Functions::Concept::DifferentiableFunction<Range(Domain), DerivativeTraits>,</div>\n+<div class=\"line\"><a id=\"l00293\" name=\"l00293\"></a><span class=\"lineno\"> 293</span> Dune::Functions::Concept::GridFunction<Range(Domain),EntitySet></div>\n+<div class=\"line\"><a id=\"l00294\" name=\"l00294\"></a><span class=\"lineno\"> 294</span> ></div>\n+<div class=\"line\"><a id=\"l00295\" name=\"l00295\"></a><span class=\"lineno\"> 295</span>{</div>\n+<div class=\"line\"><a id=\"l00296\" name=\"l00296\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01191.html#a531f1d9858954a669da2a589f1fc4c4e\"> 296</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01191.html#a531f1d9858954a669da2a589f1fc4c4e\">LocalSignature</a> = Range(<span class=\"keyword\">typename</span> EntitySet::LocalCoordinate);</div>\n+<div class=\"line\"><a id=\"l00297\" name=\"l00297\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01191.html#a8f80cc5322c7d178fcf4707fbc6a02f8\"> 297</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01191.html#a8f80cc5322c7d178fcf4707fbc6a02f8\">LocalContext</a> = <span class=\"keyword\">typename</span> EntitySet::Element;</div>\n+<div class=\"line\"><a id=\"l00298\" name=\"l00298\"></a><span class=\"lineno\"> 298</span> </div>\n+<div class=\"line\"><a id=\"l00299\" name=\"l00299\"></a><span class=\"lineno\"> 299</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> R></div>\n+<div class=\"line\"><a id=\"l00300\" name=\"l00300\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01191.html#a0232d4cb02eb536145d8c115a9737578\"> 300</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01191.html#a0232d4cb02eb536145d8c115a9737578\">LocalDerivativeTraits</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_struct\" href=\"a01931.html\">Dune::Functions::LocalDerivativeTraits<EntitySet, DerivativeTraits>::template</a> Traits<R>;</div>\n+<div class=\"line\"><a id=\"l00301\" name=\"l00301\"></a><span class=\"lineno\"> 301</span> </div>\n+<div class=\"line\"><a id=\"l00302\" name=\"l00302\"></a><span class=\"lineno\"> 302</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F></div>\n+<div class=\"line\"><a id=\"l00303\" name=\"l00303\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01191.html#a450cfe8f161fb0308f19109d9bd7b196\"> 303</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a01191.html#a450cfe8f161fb0308f19109d9bd7b196\">require</a>(F&& f) -> <span class=\"keyword\">decltype</span>(</div>\n+<div class=\"line\"><a id=\"l00304\" name=\"l00304\"></a><span class=\"lineno\"> 304</span> requireConcept<DifferentiableLocalFunction<LocalSignature, LocalContext, LocalDerivativeTraits>>(localFunction(f))</div>\n+<div class=\"line\"><a id=\"l00305\" name=\"l00305\"></a><span class=\"lineno\"> 305</span> );</div>\n+<div class=\"line\"><a id=\"l00306\" name=\"l00306\"></a><span class=\"lineno\"> 306</span>};</div>\n+<div class=\"line\"><a id=\"l00307\" name=\"l00307\"></a><span class=\"lineno\"> 307</span> </div>\n+<div class=\"line\"><a id=\"l00309\" name=\"l00309\"></a><span class=\"lineno\"> 309</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F, <span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> EntitySet, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits = <a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a>></div>\n+<div class=\"line\"><a id=\"l00310\" name=\"l00310\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00207.html#gab53d12b97e04f88eec30f4192944e85a\"> 310</a></span><span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a00207.html#gab53d12b97e04f88eec30f4192944e85a\">isDifferentiableGridFunction</a>()</div>\n+<div class=\"line\"><a id=\"l00311\" name=\"l00311\"></a><span class=\"lineno\"> 311</span>{ <span class=\"keywordflow\">return</span> models<Concept::DifferentiableGridFunction<Signature, EntitySet, DerivativeTraits>, F>(); }</div>\n+<div class=\"line\"><a id=\"l00312\" name=\"l00312\"></a><span class=\"lineno\"> 312</span> </div>\n+<div class=\"line\"><a id=\"l00313\" name=\"l00313\"></a><span class=\"lineno\"> 313</span> </div>\n+<div class=\"line\"><a id=\"l00314\" name=\"l00314\"></a><span class=\"lineno\"> 314</span> </div>\n+<div class=\"line\"><a id=\"l00315\" name=\"l00315\"></a><span class=\"lineno\"> 315</span><span class=\"comment\">// GridViewFunction concept ##############################################</span></div>\n+<div class=\"line\"><a id=\"l00316\" name=\"l00316\"></a><span class=\"lineno\"> 316</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> Gr<span class=\"keywordtype\">id</span>View></div>\n+<div class=\"line\"><a id=\"l00317\" name=\"l00317\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01195.html\"> 317</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01195.html\">GridViewFunction</a>;</div>\n+<div class=\"line\"><a id=\"l00318\" name=\"l00318\"></a><span class=\"lineno\"> 318</span> </div>\n+<div class=\"line\"><a id=\"l00331\" name=\"l00331\"></a><span class=\"lineno\"> 331</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">class</span> Gr<span class=\"keywordtype\">id</span>View></div>\n+<div class=\"line\"><a id=\"l00332\" name=\"l00332\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01199.html\"> 332</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01195.html\">GridViewFunction</a><Range(Domain), GridView> :</div>\n+<div class=\"line\"><a id=\"l00333\" name=\"l00333\"></a><span class=\"lineno\"> 333</span> Refines<Dune::Functions::Concept::GridFunction<Range(Domain), GridViewEntitySet<GridView,0>>></div>\n+<div class=\"line\"><a id=\"l00334\" name=\"l00334\"></a><span class=\"lineno\"> 334</span>{</div>\n+<div class=\"line\"><a id=\"l00335\" name=\"l00335\"></a><span class=\"lineno\"> 335</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F></div>\n+<div class=\"line\"><a id=\"l00336\" name=\"l00336\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01199.html#a8eac66e126c3190e4a7f26bf72cc474e\"> 336</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a01199.html#a8eac66e126c3190e4a7f26bf72cc474e\">require</a>(F&& f) -> <span class=\"keyword\">decltype</span>(</div>\n+<div class=\"line\"><a id=\"l00337\" name=\"l00337\"></a><span class=\"lineno\"> 337</span> 0 <span class=\"comment\">// We don't need to check any further expressions, because a GridViewFunction is just a GridFunction with a special EntitySet</span></div>\n+<div class=\"line\"><a id=\"l00338\" name=\"l00338\"></a><span class=\"lineno\"> 338</span> );</div>\n+<div class=\"line\"><a id=\"l00339\" name=\"l00339\"></a><span class=\"lineno\"> 339</span>};</div>\n+<div class=\"line\"><a id=\"l00340\" name=\"l00340\"></a><span class=\"lineno\"> 340</span> </div>\n+<div class=\"line\"><a id=\"l00342\" name=\"l00342\"></a><span class=\"lineno\"> 342</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F, <span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> Gr<span class=\"keywordtype\">id</span>View></div>\n+<div class=\"line\"><a id=\"l00343\" name=\"l00343\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00207.html#ga8510d4e3f9e774bd9a3f434e3de659c9\"> 343</a></span><span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a00207.html#ga8510d4e3f9e774bd9a3f434e3de659c9\">isGridViewFunction</a>()</div>\n+<div class=\"line\"><a id=\"l00344\" name=\"l00344\"></a><span class=\"lineno\"> 344</span>{ <span class=\"keywordflow\">return</span> models<Concept::GridViewFunction<Signature, GridView>, F>(); }</div>\n+<div class=\"line\"><a id=\"l00345\" name=\"l00345\"></a><span class=\"lineno\"> 345</span> </div>\n+<div class=\"line\"><a id=\"l00346\" name=\"l00346\"></a><span class=\"lineno\"> 346</span> </div>\n+<div class=\"line\"><a id=\"l00347\" name=\"l00347\"></a><span class=\"lineno\"> 347</span><span class=\"comment\">// DifferentiableGridViewFunction concept ##############################################</span></div>\n+<div class=\"line\"><a id=\"l00348\" name=\"l00348\"></a><span class=\"lineno\"> 348</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> Gr<span class=\"keywordtype\">id</span>View, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits = <a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a>></div>\n+<div class=\"line\"><a id=\"l00349\" name=\"l00349\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01203.html\"> 349</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01203.html\">DifferentiableGridViewFunction</a>;</div>\n+<div class=\"line\"><a id=\"l00350\" name=\"l00350\"></a><span class=\"lineno\"> 350</span> </div>\n+<div class=\"line\"><a id=\"l00364\" name=\"l00364\"></a><span class=\"lineno\"> 364</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">class</span> Gr<span class=\"keywordtype\">id</span>View, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits></div>\n+<div class=\"line\"><a id=\"l00365\" name=\"l00365\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01207.html\"> 365</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01203.html\">DifferentiableGridViewFunction</a><Range(Domain), GridView, DerivativeTraits> :</div>\n+<div class=\"line\"><a id=\"l00366\" name=\"l00366\"></a><span class=\"lineno\"> 366</span> Refines<Dune::Functions::Concept::DifferentiableGridFunction<Range(Domain), GridViewEntitySet<GridView,0>, DerivativeTraits>></div>\n+<div class=\"line\"><a id=\"l00367\" name=\"l00367\"></a><span class=\"lineno\"> 367</span>{</div>\n+<div class=\"line\"><a id=\"l00368\" name=\"l00368\"></a><span class=\"lineno\"> 368</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F></div>\n+<div class=\"line\"><a id=\"l00369\" name=\"l00369\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01207.html#a9f3333426a5998365b59d5dc08db2003\"> 369</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a01207.html#a9f3333426a5998365b59d5dc08db2003\">require</a>(F&& f) -> <span class=\"keyword\">decltype</span>(</div>\n+<div class=\"line\"><a id=\"l00370\" name=\"l00370\"></a><span class=\"lineno\"> 370</span> 0 <span class=\"comment\">// We don't need to check any further expressions, because a GridViewFunction is just a GridFunction with a special EntitySet</span></div>\n+<div class=\"line\"><a id=\"l00371\" name=\"l00371\"></a><span class=\"lineno\"> 371</span> );</div>\n+<div class=\"line\"><a id=\"l00372\" name=\"l00372\"></a><span class=\"lineno\"> 372</span>};</div>\n+<div class=\"line\"><a id=\"l00373\" name=\"l00373\"></a><span class=\"lineno\"> 373</span> </div>\n+<div class=\"line\"><a id=\"l00375\" name=\"l00375\"></a><span class=\"lineno\"> 375</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F, <span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> Gr<span class=\"keywordtype\">id</span>View, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits = <a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a>></div>\n+<div class=\"line\"><a id=\"l00376\" name=\"l00376\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00207.html#ga5fe279401b9387533b85b085d6d521cc\"> 376</a></span><span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a00207.html#ga5fe279401b9387533b85b085d6d521cc\">isDifferentiableGridViewFunction</a>()</div>\n+<div class=\"line\"><a id=\"l00377\" name=\"l00377\"></a><span class=\"lineno\"> 377</span>{ <span class=\"keywordflow\">return</span> models<Concept::DifferentiableGridViewFunction<Signature, GridView, DerivativeTraits>, F>(); }</div>\n+<div class=\"line\"><a id=\"l00378\" name=\"l00378\"></a><span class=\"lineno\"> 378</span> </div>\n+<div class=\"line\"><a id=\"l00379\" name=\"l00379\"></a><span class=\"lineno\"> 379</span> </div>\n+<div class=\"line\"><a id=\"l00380\" name=\"l00380\"></a><span class=\"lineno\"> 380</span> </div>\n+<div class=\"line\"><a id=\"l00381\" name=\"l00381\"></a><span class=\"lineno\"> 381</span>}}} <span class=\"comment\">// namespace Dune::Functions::Concept</span></div>\n+<div class=\"line\"><a id=\"l00382\" name=\"l00382\"></a><span class=\"lineno\"> 382</span> </div>\n+<div class=\"line\"><a id=\"l00383\" name=\"l00383\"></a><span class=\"lineno\"> 383</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH</span></div>\n+<div class=\"ttc\" id=\"aa00008_html\"><div class=\"ttname\"><a href=\"a00008.html\">signature.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00083_html\"><div class=\"ttname\"><a href=\"a00083.html\">gridviewentityset.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00095_html\"><div class=\"ttname\"><a href=\"a00095.html\">localderivativetraits.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00207_html_ga1691be3e84b0405cc8a7ebcd598bd861\"><div class=\"ttname\"><a href=\"a00207.html#ga1691be3e84b0405cc8a7ebcd598bd861\">Dune::Functions::Concept::isGridFunction</a></div><div class=\"ttdeci\">static constexpr bool isGridFunction()</div><div class=\"ttdoc\">Check if F models the GridFunction concept with given signature and entity set.</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:269</div></div>\n+<div class=\"ttc\" id=\"aa00207_html_ga2a244aa61f5d2c3f5d0dfb125b0436d5\"><div class=\"ttname\"><a href=\"a00207.html#ga2a244aa61f5d2c3f5d0dfb125b0436d5\">Dune::Functions::Concept::isDifferentiableLocalFunction</a></div><div class=\"ttdeci\">static constexpr bool isDifferentiableLocalFunction()</div><div class=\"ttdoc\">Check if F models the DifferentiableLocalFunction concept with given signature and local context.</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:204</div></div>\n+<div class=\"ttc\" id=\"aa00207_html_ga44de2338acc7d9c49fbc12452545c7fc\"><div class=\"ttname\"><a href=\"a00207.html#ga44de2338acc7d9c49fbc12452545c7fc\">Dune::Functions::Concept::isFunction</a></div><div class=\"ttdeci\">static constexpr bool isFunction()</div><div class=\"ttdoc\">Check if F models the Function concept with given signature.</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:88</div></div>\n+<div class=\"ttc\" id=\"aa00207_html_ga5fe279401b9387533b85b085d6d521cc\"><div class=\"ttname\"><a href=\"a00207.html#ga5fe279401b9387533b85b085d6d521cc\">Dune::Functions::Concept::isDifferentiableGridViewFunction</a></div><div class=\"ttdeci\">static constexpr bool isDifferentiableGridViewFunction()</div><div class=\"ttdoc\">Check if F models the DifferentiableGridViewFunction concept with given signature.</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:376</div></div>\n+<div class=\"ttc\" id=\"aa00207_html_ga6c75551b9678848113181d29678ec81e\"><div class=\"ttname\"><a href=\"a00207.html#ga6c75551b9678848113181d29678ec81e\">Dune::Functions::Concept::isDifferentiableFunction</a></div><div class=\"ttdeci\">static constexpr bool isDifferentiableFunction()</div><div class=\"ttdoc\">Check if F models the DifferentiableFunction concept with given signature.</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:127</div></div>\n+<div class=\"ttc\" id=\"aa00207_html_ga8510d4e3f9e774bd9a3f434e3de659c9\"><div class=\"ttname\"><a href=\"a00207.html#ga8510d4e3f9e774bd9a3f434e3de659c9\">Dune::Functions::Concept::isGridViewFunction</a></div><div class=\"ttdeci\">static constexpr bool isGridViewFunction()</div><div class=\"ttdoc\">Check if F models the GridViewFunction concept with given signature.</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:343</div></div>\n+<div class=\"ttc\" id=\"aa00207_html_gaa59c2062e5469a358cd00ce5bb90fe4d\"><div class=\"ttname\"><a href=\"a00207.html#gaa59c2062e5469a358cd00ce5bb90fe4d\">Dune::Functions::Concept::isEntitySet</a></div><div class=\"ttdeci\">static constexpr bool isEntitySet()</div><div class=\"ttdoc\">Check if F models the GridFunction concept with given signature and entity set.</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:231</div></div>\n+<div class=\"ttc\" id=\"aa00207_html_gab53d12b97e04f88eec30f4192944e85a\"><div class=\"ttname\"><a href=\"a00207.html#gab53d12b97e04f88eec30f4192944e85a\">Dune::Functions::Concept::isDifferentiableGridFunction</a></div><div class=\"ttdeci\">static constexpr bool isDifferentiableGridFunction()</div><div class=\"ttdoc\">Check if F models the DifferentiableGridFunction concept with given signature and entity set.</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:310</div></div>\n+<div class=\"ttc\" id=\"aa00207_html_gae2c89a3c7780ff790a8b066bbb5f9687\"><div class=\"ttname\"><a href=\"a00207.html#gae2c89a3c7780ff790a8b066bbb5f9687\">Dune::Functions::Concept::isLocalFunction</a></div><div class=\"ttdeci\">static constexpr bool isLocalFunction()</div><div class=\"ttdoc\">Check if F models the LocalFunction concept with given signature and local context.</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:166</div></div>\n+<div class=\"ttc\" id=\"aa00209_html_ga7ec424ff4be740ad675bd85750940472\"><div class=\"ttname\"><a href=\"a00209.html#ga7ec424ff4be740ad675bd85750940472\">Dune::Functions::derivative</a></div><div class=\"ttdeci\">TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const TrigonometricFunction< K, sinFactor, cosFactor > &f)</div><div class=\"ttdoc\">Obtain derivative of TrigonometricFunction function.</div><div class=\"ttdef\"><b>Definition:</b> trigonometricfunction.hh:39</div></div>\n+<div class=\"ttc\" id=\"aa00215_html_ga2bc5056bab5babdfa8a82409665f5a26\"><div class=\"ttname\"><a href=\"a00215.html#ga2bc5056bab5babdfa8a82409665f5a26\">Dune::Functions::Concept::isCallable</a></div><div class=\"ttdeci\">static constexpr auto isCallable()</div><div class=\"ttdoc\">Check if f is callable with given argument list.</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:47</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa00219_html_acd448ecd78521f983720ec5a6f3e7698\"><div class=\"ttname\"><a href=\"a00219.html#acd448ecd78521f983720ec5a6f3e7698\">Dune::Functions::resolveRef</a></div><div class=\"ttdeci\">decltype(auto) resolveRef(T &&t)</div><div class=\"ttdoc\">This is an alias for Dune::resolveRef.</div><div class=\"ttdef\"><b>Definition:</b> referencehelper.hh:37</div></div>\n <div class=\"ttc\" id=\"aa01075_html\"><div class=\"ttname\"><a href=\"a01075.html\">Dune::Functions::DefaultDerivativeTraits</a></div><div class=\"ttdoc\">Default implementation for derivative traits.</div><div class=\"ttdef\"><b>Definition:</b> defaultderivativetraits.hh:37</div></div>\n-<div class=\"ttc\" id=\"aa01851_html\"><div class=\"ttname\"><a href=\"a01851.html\">Dune::Functions::ComposedGridFunction</a></div><div class=\"ttdoc\">Composition of grid functions with another function.</div><div class=\"ttdef\"><b>Definition:</b> composedgridfunction.hh:42</div></div>\n-<div class=\"ttc\" id=\"aa01851_html_a145b7b5d536222897e403d6151491e0b\"><div class=\"ttname\"><a href=\"a01851.html#a145b7b5d536222897e403d6151491e0b\">Dune::Functions::ComposedGridFunction::outerFunction_</a></div><div class=\"ttdeci\">OuterFunction outerFunction_</div><div class=\"ttdef\"><b>Definition:</b> composedgridfunction.hh:219</div></div>\n-<div class=\"ttc\" id=\"aa01851_html_a1a90b0f55aef5ea1694778c11c31b6ee\"><div class=\"ttname\"><a href=\"a01851.html#a1a90b0f55aef5ea1694778c11c31b6ee\">Dune::Functions::ComposedGridFunction::innerFunctions_</a></div><div class=\"ttdeci\">InnerFunctions innerFunctions_</div><div class=\"ttdef\"><b>Definition:</b> composedgridfunction.hh:220</div></div>\n-<div class=\"ttc\" id=\"aa01851_html_a31f170c22381b94a081e09f25704102a\"><div class=\"ttname\"><a href=\"a01851.html#a31f170c22381b94a081e09f25704102a\">Dune::Functions::ComposedGridFunction::ComposedGridFunction</a></div><div class=\"ttdeci\">ComposedGridFunction(OFT &&outerFunction, IFT &&... innerFunctions)</div><div class=\"ttdoc\">Create ComposedGridFunction.</div><div class=\"ttdef\"><b>Definition:</b> composedgridfunction.hh:167</div></div>\n-<div class=\"ttc\" id=\"aa01851_html_a417a35c0e8f111e9dfaf224eb1a08c38\"><div class=\"ttname\"><a href=\"a01851.html#a417a35c0e8f111e9dfaf224eb1a08c38\">Dune::Functions::ComposedGridFunction::entitySet</a></div><div class=\"ttdeci\">const EntitySet & entitySet() const</div><div class=\"ttdoc\">Return the EntitySet associated to this composed grid-function.</div><div class=\"ttdef\"><b>Definition:</b> composedgridfunction.hh:205</div></div>\n-<div class=\"ttc\" id=\"aa01851_html_a60e88941320bce2a3fd832dcb33b79e8\"><div class=\"ttname\"><a href=\"a01851.html#a60e88941320bce2a3fd832dcb33b79e8\">Dune::Functions::ComposedGridFunction::EntitySet</a></div><div class=\"ttdeci\">typename InnerFunction< 0 >::EntitySet EntitySet</div><div class=\"ttdef\"><b>Definition:</b> composedgridfunction.hh:53</div></div>\n-<div class=\"ttc\" id=\"aa01851_html_a62ac2c12e6920194583994cdec60283f\"><div class=\"ttname\"><a href=\"a01851.html#a62ac2c12e6920194583994cdec60283f\">Dune::Functions::ComposedGridFunction::LocalDomain</a></div><div class=\"ttdeci\">typename EntitySet::LocalCoordinate LocalDomain</div><div class=\"ttdef\"><b>Definition:</b> composedgridfunction.hh:57</div></div>\n-<div class=\"ttc\" id=\"aa01851_html_a6c0975897a61d00e1e5db9e8d1c5943c\"><div class=\"ttname\"><a href=\"a01851.html#a6c0975897a61d00e1e5db9e8d1c5943c\">Dune::Functions::ComposedGridFunction::Element</a></div><div class=\"ttdeci\">typename EntitySet::Element Element</div><div class=\"ttdef\"><b>Definition:</b> composedgridfunction.hh:54</div></div>\n-<div class=\"ttc\" id=\"aa01851_html_ab6fa74b32c63bb86bb048f3e67ead39d\"><div class=\"ttname\"><a href=\"a01851.html#ab6fa74b32c63bb86bb048f3e67ead39d\">Dune::Functions::ComposedGridFunction::innerLocalFunctions</a></div><div class=\"ttdeci\">InnerLocalFunctions innerLocalFunctions() const</div><div class=\"ttdef\"><b>Definition:</b> composedgridfunction.hh:212</div></div>\n-<div class=\"ttc\" id=\"aa01851_html_ad1b3541b659ef016514458e3edffc149\"><div class=\"ttname\"><a href=\"a01851.html#ad1b3541b659ef016514458e3edffc149\">Dune::Functions::ComposedGridFunction::localFunction</a></div><div class=\"ttdeci\">friend LocalFunction localFunction(const ComposedGridFunction &cgf)</div><div class=\"ttdoc\">Create a local-function of this composed grid-function.</div><div class=\"ttdef\"><b>Definition:</b> composedgridfunction.hh:190</div></div>\n-<div class=\"ttc\" id=\"aa01851_html_ad7e7b03a9451ddecdc34db9c424ac38a\"><div class=\"ttname\"><a href=\"a01851.html#ad7e7b03a9451ddecdc34db9c424ac38a\">Dune::Functions::ComposedGridFunction::Range</a></div><div class=\"ttdeci\">decltype(std::declval< OF >()(std::declval< IF >()(std::declval< Domain >())...)) Range</div><div class=\"ttdef\"><b>Definition:</b> composedgridfunction.hh:59</div></div>\n-<div class=\"ttc\" id=\"aa01851_html_ad9612763841397749ff243b3f6f16177\"><div class=\"ttname\"><a href=\"a01851.html#ad9612763841397749ff243b3f6f16177\">Dune::Functions::ComposedGridFunction::Domain</a></div><div class=\"ttdeci\">typename EntitySet::GlobalCoordinate Domain</div><div class=\"ttdef\"><b>Definition:</b> composedgridfunction.hh:56</div></div>\n-<div class=\"ttc\" id=\"aa01851_html_ae5d3415a56ecdaae44c4bf96a262885c\"><div class=\"ttname\"><a href=\"a01851.html#ae5d3415a56ecdaae44c4bf96a262885c\">Dune::Functions::ComposedGridFunction::operator()</a></div><div class=\"ttdeci\">Range operator()(const Domain &x) const</div><div class=\"ttdoc\">Evaluation of the composed grid function in coordinates x</div><div class=\"ttdef\"><b>Definition:</b> composedgridfunction.hh:173</div></div>\n-<div class=\"ttc\" id=\"aa01851_html_af786f297d006433ef0161f8565df6acf\"><div class=\"ttname\"><a href=\"a01851.html#af786f297d006433ef0161f8565df6acf\">Dune::Functions::ComposedGridFunction::derivative</a></div><div class=\"ttdeci\">friend Traits::DerivativeInterface derivative(const ComposedGridFunction &t)</div><div class=\"ttdoc\">Not implemented.</div><div class=\"ttdef\"><b>Definition:</b> composedgridfunction.hh:179</div></div>\n-<div class=\"ttc\" id=\"aa01895_html\"><div class=\"ttname\"><a href=\"a01895.html\">Dune::Functions::GridFunction</a></div><div class=\"ttdef\"><b>Definition:</b> gridfunction.hh:32</div></div>\n+<div class=\"ttc\" id=\"aa01139_html\"><div class=\"ttname\"><a href=\"a01139.html\">Dune::Functions::Concept::Callable</a></div><div class=\"ttdoc\">Concept objects that can be called with given argument list.</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:33</div></div>\n+<div class=\"ttc\" id=\"aa01139_html_a8020f2dc3373ee93bbb30e7dfd362b9f\"><div class=\"ttname\"><a href=\"a01139.html#a8020f2dc3373ee93bbb30e7dfd362b9f\">Dune::Functions::Concept::Callable::require</a></div><div class=\"ttdeci\">auto require(F &&f) -> decltype(f(std::declval< Args >()...))</div></div>\n+<div class=\"ttc\" id=\"aa01143_html\"><div class=\"ttname\"><a href=\"a01143.html\">Dune::Functions::Concept::Function</a></div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:66</div></div>\n+<div class=\"ttc\" id=\"aa01147_html_a8cd663e9ec6cd8cef42e103a3dff7b8d\"><div class=\"ttname\"><a href=\"a01147.html#a8cd663e9ec6cd8cef42e103a3dff7b8d\">Dune::Functions::Concept::Function< Range(Domain)>::require</a></div><div class=\"ttdeci\">auto require(F &&f) -> decltype(requireConvertible< Range >(f(std::declval< Domain >())))</div></div>\n+<div class=\"ttc\" id=\"aa01151_html\"><div class=\"ttname\"><a href=\"a01151.html\">Dune::Functions::Concept::DifferentiableFunction</a></div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:100</div></div>\n+<div class=\"ttc\" id=\"aa01155_html_a06581f35c60f2f1a53ffcb579d2fb018\"><div class=\"ttname\"><a href=\"a01155.html#a06581f35c60f2f1a53ffcb579d2fb018\">Dune::Functions::Concept::DifferentiableFunction< Range(Domain), DerivativeTraits >::DerivativeSignature</a></div><div class=\"ttdeci\">typename SignatureTraits< Range(Domain)>::template DerivativeSignature< DerivativeTraits > DerivativeSignature</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:116</div></div>\n+<div class=\"ttc\" id=\"aa01155_html_a178d79f67e27907184d01fe3258b57f2\"><div class=\"ttname\"><a href=\"a01155.html#a178d79f67e27907184d01fe3258b57f2\">Dune::Functions::Concept::DifferentiableFunction< Range(Domain), DerivativeTraits >::require</a></div><div class=\"ttdeci\">auto require(F &&f) -> decltype(derivative(f), requireConcept< Function< DerivativeSignature > >(derivative(f)))</div></div>\n+<div class=\"ttc\" id=\"aa01159_html\"><div class=\"ttname\"><a href=\"a01159.html\">Dune::Functions::Concept::LocalFunction</a></div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:139</div></div>\n+<div class=\"ttc\" id=\"aa01163_html_a48db21bb312816392239ff02d27a804c\"><div class=\"ttname\"><a href=\"a01163.html#a48db21bb312816392239ff02d27a804c\">Dune::Functions::Concept::LocalFunction< Range(Domain), LocalContext >::require</a></div><div class=\"ttdeci\">auto require(F &&f) -> decltype(f.bind(std::declval< LocalContext >()), f.unbind(), requireConvertible< bool >(f.bound()), f.localContext(), requireConvertible< LocalContext >(f.localContext()))</div></div>\n+<div class=\"ttc\" id=\"aa01167_html\"><div class=\"ttname\"><a href=\"a01167.html\">Dune::Functions::Concept::DifferentiableLocalFunction</a></div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:172</div></div>\n+<div class=\"ttc\" id=\"aa01171_html_ac0aee0abe38ae49eeb9cfea8abcd56ba\"><div class=\"ttname\"><a href=\"a01171.html#ac0aee0abe38ae49eeb9cfea8abcd56ba\">Dune::Functions::Concept::DifferentiableLocalFunction< Range(Domain), LocalContext, DerivativeTraits >::require</a></div><div class=\"ttdeci\">auto require(F &&f) -> decltype(f.bind(std::declval< LocalContext >()), f.unbind(), f.localContext(), requireConvertible< LocalContext >(f.localContext()))</div></div>\n+<div class=\"ttc\" id=\"aa01175_html\"><div class=\"ttname\"><a href=\"a01175.html\">Dune::Functions::Concept::EntitySet</a></div><div class=\"ttdoc\">Concept for an entity set for a Concept::GridFunction<Range(Domain), EntitySet, DerivativeTraits></div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:220</div></div>\n+<div class=\"ttc\" id=\"aa01175_html_a68f40d08a99de681cf30949d76461d8a\"><div class=\"ttname\"><a href=\"a01175.html#a68f40d08a99de681cf30949d76461d8a\">Dune::Functions::Concept::EntitySet::require</a></div><div class=\"ttdeci\">auto require(E &&f) -> decltype(requireType< typename E::Element >(), requireType< typename E::LocalCoordinate >(), requireType< typename E::GlobalCoordinate >())</div></div>\n+<div class=\"ttc\" id=\"aa01179_html\"><div class=\"ttname\"><a href=\"a01179.html\">Dune::Functions::Concept::GridFunction</a></div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:238</div></div>\n+<div class=\"ttc\" id=\"aa01183_html_a15f0186a48c8602d29c53c131906da6e\"><div class=\"ttname\"><a href=\"a01183.html#a15f0186a48c8602d29c53c131906da6e\">Dune::Functions::Concept::GridFunction< Range(Domain), EntitySet >::LocalContext</a></div><div class=\"ttdeci\">typename EntitySet::Element LocalContext</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:254</div></div>\n+<div class=\"ttc\" id=\"aa01183_html_a6344d487356e0513b458a11b45dd935b\"><div class=\"ttname\"><a href=\"a01183.html#a6344d487356e0513b458a11b45dd935b\">Dune::Functions::Concept::GridFunction< Range(Domain), EntitySet >::LocalSignature</a></div><div class=\"ttdeci\">Range(typename EntitySet::LocalCoordinate) LocalSignature</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:253</div></div>\n+<div class=\"ttc\" id=\"aa01183_html_ae2f4f9301cbe9507a2a643c88ce90d27\"><div class=\"ttname\"><a href=\"a01183.html#ae2f4f9301cbe9507a2a643c88ce90d27\">Dune::Functions::Concept::GridFunction< Range(Domain), EntitySet >::require</a></div><div class=\"ttdeci\">auto require(F &&f) -> decltype(localFunction(f), f.entitySet(), requireConcept< LocalFunction< LocalSignature, LocalContext > >(localFunction(f)), requireConcept< Concept::EntitySet, EntitySet >(), requireConvertible< EntitySet >(f.entitySet()), requireConvertible< typename EntitySet::GlobalCoordinate, Domain >())</div></div>\n+<div class=\"ttc\" id=\"aa01187_html\"><div class=\"ttname\"><a href=\"a01187.html\">Dune::Functions::Concept::DifferentiableGridFunction</a></div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:275</div></div>\n+<div class=\"ttc\" id=\"aa01191_html_a0232d4cb02eb536145d8c115a9737578\"><div class=\"ttname\"><a href=\"a01191.html#a0232d4cb02eb536145d8c115a9737578\">Dune::Functions::Concept::DifferentiableGridFunction< Range(Domain), EntitySet, DerivativeTraits >::LocalDerivativeTraits</a></div><div class=\"ttdeci\">typename Dune::Functions::LocalDerivativeTraits< EntitySet, DerivativeTraits >::template Traits< R > LocalDerivativeTraits</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:300</div></div>\n+<div class=\"ttc\" id=\"aa01191_html_a450cfe8f161fb0308f19109d9bd7b196\"><div class=\"ttname\"><a href=\"a01191.html#a450cfe8f161fb0308f19109d9bd7b196\">Dune::Functions::Concept::DifferentiableGridFunction< Range(Domain), EntitySet, DerivativeTraits >::require</a></div><div class=\"ttdeci\">auto require(F &&f) -> decltype(requireConcept< DifferentiableLocalFunction< LocalSignature, LocalContext, LocalDerivativeTraits > >(localFunction(f)))</div></div>\n+<div class=\"ttc\" id=\"aa01191_html_a531f1d9858954a669da2a589f1fc4c4e\"><div class=\"ttname\"><a href=\"a01191.html#a531f1d9858954a669da2a589f1fc4c4e\">Dune::Functions::Concept::DifferentiableGridFunction< Range(Domain), EntitySet, DerivativeTraits >::LocalSignature</a></div><div class=\"ttdeci\">Range(typename EntitySet::LocalCoordinate) LocalSignature</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:296</div></div>\n+<div class=\"ttc\" id=\"aa01191_html_a8f80cc5322c7d178fcf4707fbc6a02f8\"><div class=\"ttname\"><a href=\"a01191.html#a8f80cc5322c7d178fcf4707fbc6a02f8\">Dune::Functions::Concept::DifferentiableGridFunction< Range(Domain), EntitySet, DerivativeTraits >::LocalContext</a></div><div class=\"ttdeci\">typename EntitySet::Element LocalContext</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:297</div></div>\n+<div class=\"ttc\" id=\"aa01195_html\"><div class=\"ttname\"><a href=\"a01195.html\">Dune::Functions::Concept::GridViewFunction</a></div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:317</div></div>\n+<div class=\"ttc\" id=\"aa01199_html_a8eac66e126c3190e4a7f26bf72cc474e\"><div class=\"ttname\"><a href=\"a01199.html#a8eac66e126c3190e4a7f26bf72cc474e\">Dune::Functions::Concept::GridViewFunction< Range(Domain), GridView >::require</a></div><div class=\"ttdeci\">auto require(F &&f) -> decltype(0)</div></div>\n+<div class=\"ttc\" id=\"aa01203_html\"><div class=\"ttname\"><a href=\"a01203.html\">Dune::Functions::Concept::DifferentiableGridViewFunction</a></div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:349</div></div>\n+<div class=\"ttc\" id=\"aa01207_html_a9f3333426a5998365b59d5dc08db2003\"><div class=\"ttname\"><a href=\"a01207.html#a9f3333426a5998365b59d5dc08db2003\">Dune::Functions::Concept::DifferentiableGridViewFunction< Range(Domain), GridView, DerivativeTraits >::require</a></div><div class=\"ttdeci\">auto require(F &&f) -> decltype(0)</div></div>\n+<div class=\"ttc\" id=\"aa01291_html\"><div class=\"ttname\"><a href=\"a01291.html\">Dune::Functions::SignatureTraits</a></div><div class=\"ttdoc\">Helper class to deduce the signature of a callable.</div><div class=\"ttdef\"><b>Definition:</b> signature.hh:56</div></div>\n+<div class=\"ttc\" id=\"aa01295_html\"><div class=\"ttname\"><a href=\"a01295.html\">Dune::Functions::SignatureTag</a></div><div class=\"ttdef\"><b>Definition:</b> signature.hh:102</div></div>\n+<div class=\"ttc\" id=\"aa01931_html\"><div class=\"ttname\"><a href=\"a01931.html\">Dune::Functions::LocalDerivativeTraits</a></div><div class=\"ttdoc\">Derivative traits for local functions.</div><div class=\"ttdef\"><b>Definition:</b> localderivativetraits.hh:28</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,244 +4,461 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * gridfunctions\n-composedgridfunction.hh\n+ * common\n+functionconcepts.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_COMPOSEDGRIDFUNCTION_HH\n- 4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_COMPOSEDGRIDFUNCTION_HH\n+ 3#ifndef DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH\n+ 4#define DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH\n 5\n- 6#include <type_traits>\n- 7#include <tuple>\n+ 6#include <dune/common/typelist.hh>\n+ 7#include <dune/common/concept.hh>\n 8\n- 9#include <dune/common/referencehelper.hh>\n- 10#include <dune/common/typeutilities.hh>\n- 11\n- 12#include <dune/functions/common/defaultderivativetraits.hh>\n- 13#include <dune/functions/common/differentiablefunction.hh>\n- 14#include <dune/functions/gridfunctions/gridfunction.hh>\n- 15\n+ 9#include <dune/functions/common/signature.hh>\n+ 10#include <dune/functions/gridfunctions/localderivativetraits.hh>\n+ 11#include <dune/functions/gridfunctions/gridviewentityset.hh>\n+ 12\n+ 13namespace Dune {\n+ 14namespace Functions {\n+ 15namespace Concept {\n 16\n- 17namespace Dune {\n- 18namespace Functions {\n+ 17using namespace Dune::Concept;\n+ 18\n 19\n 20\n- 21\n- 40template<class OF, class... IF>\n-41class ComposedGridFunction\n- 42{\n- 43 using InnerFunctions = std::tuple<IF...>;\n- 44 using InnerLocalFunctions = std::tuple<decltype(localFunction(resolveRef\n-(std::declval<const IF&>())))...>;\n- 45\n- 46 template<std::size_t i>\n- 47 using InnerFunction = std::decay_t<ResolveRef_t<std::tuple_element_t<i,\n-InnerFunctions>>>;\n- 48\n- 49 using OuterFunction = OF;\n- 50\n- 51public:\n- 52\n-53 using EntitySet = typename InnerFunction<0>::EntitySet;\n-54 using Element = typename EntitySet::Element;\n- 55\n-56 using Domain = typename EntitySet::GlobalCoordinate;\n-57 using LocalDomain = typename EntitySet::LocalCoordinate;\n- 58\n-59 using Range = decltype(std::declval<OF>()(std::declval<IF>()(std::\n-declval<Domain>())...));\n- 60\n- 61private:\n+ 21// Callable concept\n+############################################################\n+ 22\n+ 23\n+ 31template<class... Args>\n+32struct Callable\n+ 33{\n+ 34 template<class F>\n+35 auto require(F&& f) -> decltype(\n+ 36 f(std::declval<Args>()...)\n+ 37 );\n+ 38};\n+ 39\n+ 46template<class F, class... Args>\n+47static constexpr auto isCallable()\n+ 48{ return models<Concept::Callable<Args...>, F>(); }\n+ 49\n+ 56template<class F, class... Args>\n+57static constexpr auto isCallable(F&&, Args&&...)\n+ 58{\n+ 59 return models<Concept::Callable<Args&&...>, F>();\n+ 60}\n+ 61\n 62\n- 63 using Traits = Imp::GridFunctionTraits<Range(Domain), EntitySet,\n-DefaultDerivativeTraits, 16>;\n- 64\n- 65 class LocalFunction\n- 66 {\n- 67 public:\n- 74 LocalFunction(const ComposedGridFunction& globalFunction) :\n- 75 globalFunction_(globalFunction),\n- 76 innerLocalFunctions_(globalFunction.innerLocalFunctions())\n- 77 {}\n- 78\n- 88 void bind(const Element& element)\n- 89 {\n- 90 std::apply([&](auto&... innerFunction) {\n- 91 (innerFunction.bind(element),...);\n- 92 }, innerLocalFunctions_);\n- 93 }\n- 94\n- 96 void unbind()\n- 97 {\n- 98 std::apply([&](auto&... innerFunction) {\n- 99 (innerFunction.unbind(),...);\n- 100 }, innerLocalFunctions_);\n- 101 }\n- 102\n- 105 bool bound() const\n- 106 {\n- 107 return std::apply([](const auto&... innerFunction) {\n- 108 return (innerFunction.bound() && ...);\n- 109 }, innerLocalFunctions_);\n- 110 }\n- 111\n- 121 Range operator()(const LocalDomain& x) const\n- 122 {\n- 123 return std::apply([&](const auto&... innerFunction) {\n- 124 return globalFunction_.outerFunction_(innerFunction(x)...);\n- 125 }, innerLocalFunctions_);\n- 126 }\n- 127\n- 137 const Element& localContext() const\n- 138 {\n- 139 return std::get<0>(innerLocalFunctions_).localContext();\n- 140 }\n- 141\n- 143 friend typename Traits::LocalFunctionTraits::DerivativeInterface\n-derivative(const LocalFunction& t)\n- 144 {\n- 145 DUNE_THROW(NotImplemented,\"not implemented\");\n- 146 }\n- 147\n- 148 private:\n- 149 const ComposedGridFunction& globalFunction_;\n- 150 InnerLocalFunctions innerLocalFunctions_;\n- 151 };\n- 152\n- 153public:\n- 154\n- 164 template<class OFT, class... IFT,\n- 165 disableCopyMove<ComposedGridFunction, OFT> = 0,\n- 166 std::enable_if_t<(sizeof...(IFT) > 0), int> = 0>\n-167 ComposedGridFunction(OFT&& outerFunction, IFT&&... innerFunctions) :\n- 168 outerFunction_(std::forward<OFT>(outerFunction)),\n- 169 innerFunctions_(std::forward<IFT>(innerFunctions)...)\n- 170 {}\n- 171\n-173 Range operator()(const Domain& x) const\n- 174 {\n- 175 DUNE_THROW(NotImplemented,\"not implemented\");\n- 176 }\n- 177\n-179 friend typename Traits::DerivativeInterface derivative(const\n-ComposedGridFunction& t)\n- 180 {\n- 181 DUNE_THROW(NotImplemented,\"not implemented\");\n- 182 }\n- 183\n-190 friend LocalFunction localFunction(const ComposedGridFunction& cgf)\n- 191 {\n- 192 return LocalFunction(cgf);\n- 193 }\n- 194\n-205 const EntitySet& entitySet() const\n- 206 {\n- 207 return resolveRef(std::get<0>(innerFunctions_)).entitySet();\n- 208 }\n+ 63\n+ 64// Function concept\n+############################################################\n+ 65template<class Signature>\n+66struct Function;\n+ 67\n+ 76template<class Range, class Domain>\n+77struct Function<Range(Domain)> : Refines<Callable<Domain> >\n+ 78{\n+ 79 template<class F>\n+80 auto require(F&& f) -> decltype(\n+ 81 // F models Function<Range(Domain)> if the result of F(Domain) is\n+implicitly convertible to Range\n+ 82 requireConvertible<Range>(f(std::declval<Domain>()))\n+ 83 );\n+ 84};\n+ 85\n+ 87template<class F, class Signature>\n+88static constexpr bool isFunction()\n+ 89{ return models<Concept::Function<Signature>, F>(); }\n+ 90\n+ 92template<class F, class Signature, template<class> class DerivativeTraits>\n+93static constexpr bool isFunction(F&& f, SignatureTag<Signature,\n+DerivativeTraits>)\n+ 94{ return models<Concept::Function<Signature>, F>(); }\n+ 95\n+ 96\n+ 97\n+ 98// DifferentiableFunction concept\n+##############################################\n+ 99template<class Signature, template<class> class DerivativeTraits =\n+DefaultDerivativeTraits>\n+100struct DifferentiableFunction;\n+ 101\n+ 113template<class Range, class Domain, template<class> class DerivativeTraits>\n+114struct DifferentiableFunction<Range(Domain), DerivativeTraits> :\n+Refines<Dune::Functions::Concept::Function<Range(Domain)> >\n+ 115{\n+116 using DerivativeSignature = typename SignatureTraits<Range(Domain)>::\n+template DerivativeSignature<DerivativeTraits>;\n+ 117\n+ 118 template<class F>\n+119 auto require(F&& f) -> decltype(\n+ 120 derivative(f),\n+ 121 requireConcept<Function<DerivativeSignature>>(derivative(f))\n+ 122 );\n+ 123};\n+ 124\n+ 126template<class F, class Signature, template<class> class DerivativeTraits =\n+DefaultDerivativeTraits>\n+127static constexpr bool isDifferentiableFunction()\n+ 128{ return models<Concept::DifferentiableFunction<Signature,\n+DerivativeTraits>, F>(); }\n+ 129\n+ 131template<class F, class Signature, template<class> class DerivativeTraits>\n+132static constexpr bool isDifferentiableFunction(F&& f,\n+SignatureTag<Signature,_DerivativeTraits>)\n+ 133{ return models<Concept::DifferentiableFunction<Signature,\n+DerivativeTraits>, F>(); }\n+ 134\n+ 135\n+ 136\n+ 137// LocalFunction concept ##############################################\n+ 138template<class Signature, class LocalContext>\n+139struct LocalFunction;\n+ 140\n+ 150template<class Range, class Domain, class LocalContext>\n+151struct LocalFunction<Range(Domain), LocalContext> :\n+ 152 Refines<Dune::Functions::Concept::Function<Range(Domain)> >\n+ 153{\n+ 154 template<class F>\n+155 auto require(F&& f) -> decltype(\n+ 156 f.bind(std::declval<LocalContext>()),\n+ 157 f.unbind(),\n+ 158 requireConvertible<bool>(f.bound()),\n+ 159 f.localContext(),\n+ 160 requireConvertible<LocalContext>(f.localContext())\n+ 161 );\n+ 162};\n+ 163\n+ 165template<class F, class Signature, class LocalContext>\n+166static constexpr bool isLocalFunction()\n+ 167{ return models<Concept::LocalFunction<Signature, LocalContext>, F>(); }\n+ 168\n+ 169\n+ 170// DifferentiableLocalFunction concept\n+##############################################\n+ 171template<class Signature, class LocalContext, template<class> class\n+DerivativeTraits = DefaultDerivativeTraits>\n+172struct DifferentiableLocalFunction;\n+ 173\n+ 186template<class Range, class Domain, class LocalContext, template<class>\n+class DerivativeTraits>\n+187struct DifferentiableLocalFunction<Range(Domain), LocalContext,\n+DerivativeTraits> :\n+ 188 Refines<\n+ 189 Dune::Functions::Concept::DifferentiableFunction<Range(Domain),\n+DerivativeTraits>,\n+ 190 Dune::Functions::Concept::LocalFunction<Range(Domain),LocalContext>\n+ 191 >\n+ 192{\n+ 193 template<class F>\n+194 auto require(F&& f) -> decltype(\n+ 195 f.bind(std::declval<LocalContext>()),\n+ 196 f.unbind(),\n+ 197 f.localContext(),\n+ 198 requireConvertible<LocalContext>(f.localContext())\n+ 199 );\n+ 200};\n+ 201\n+ 203template<class F, class Signature, class LocalContext, template<class>\n+class DerivativeTraits = DefaultDerivativeTraits>\n+204static constexpr bool isDifferentiableLocalFunction()\n+ 205{ return models<Concept::DifferentiableLocalFunction<Signature,\n+LocalContext, DerivativeTraits>, F>(); }\n+ 206\n+ 207\n+ 208// EntitySet concept ##############################################\n 209\n- 210protected:\n- 211\n-212 InnerLocalFunctions innerLocalFunctions() const\n- 213 {\n- 214 return std::apply([&](const auto&... innerFunction) {\n- 215 return std::make_tuple(localFunction(resolveRef(innerFunction))...);\n- 216 }, innerFunctions_);\n- 217 }\n- 218\n-219 OuterFunction outerFunction_;\n-220 InnerFunctions innerFunctions_;\n- 221};\n- 222\n- 223\n- 224\n- 247template<class OF, class... IF>\n-248auto makeComposedGridFunction(OF&& outerFunction, IF&&... innerFunction)\n- 249{\n- 250 using ComposedGridFunctionType = ComposedGridFunction<std::decay_t<OF>,\n-std::decay_t<IF>...>;\n- 251 return ComposedGridFunctionType(std::forward<OF>(outerFunction), std::\n-forward<IF>(innerFunction)...);\n- 252}\n- 253\n- 254\n+219struct EntitySet\n+ 220{\n+ 221 template<class E>\n+222 auto require(E&& f) -> decltype(\n+ 223 requireType<typename E::Element>(),\n+ 224 requireType<typename E::LocalCoordinate>(),\n+ 225 requireType<typename E::GlobalCoordinate>()\n+ 226 );\n+ 227};\n+ 228\n+ 230template<class E>\n+231static constexpr bool isEntitySet()\n+ 232{ return models<Concept::EntitySet, E>(); }\n+ 233\n+ 234\n+ 235\n+ 236// GridFunction concept ##############################################\n+ 237template<class Signature, class EntitySet>\n+238struct GridFunction;\n+ 239\n+ 249template<class Range, class Domain, class EntitySet>\n+250struct GridFunction<Range(Domain), EntitySet> :\n+ 251 Refines<Dune::Functions::Concept::Function<Range(Domain)> >\n+ 252{\n+253 using LocalSignature = Range(typename EntitySet::LocalCoordinate);\n+254 using LocalContext = typename EntitySet::Element;\n 255\n- 256}} // namespace Dune::Functions\n- 257\n- 258\n- 259\n- 260#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_COMPOSEDGRIDFUNCTION_HH\n-gridfunction.hh\n-differentiablefunction.hh\n-defaultderivativetraits.hh\n-Dune::Functions::ComposedGridFunction::makeComposedGridFunction\n-auto makeComposedGridFunction(OF &&outerFunction, IF &&... innerFunction)\n-Create a ComposedGridFunction that composes grid-functions with another\n-function.\n-Definition: composedgridfunction.hh:248\n+ 256 template<class F>\n+257 auto require(F&& f) -> decltype(\n+ 258 localFunction(f),\n+ 259 f.entitySet(),\n+ 260 requireConcept<LocalFunction<LocalSignature, LocalContext>>(localFunction\n+(f)),\n+ 261 requireConcept<Concept::EntitySet, EntitySet>(),\n+ 262 requireConvertible<EntitySet>(f.entitySet()),\n+ 263 requireConvertible<typename EntitySet::GlobalCoordinate, Domain>()\n+ 264 );\n+ 265};\n+ 266\n+ 268template<class F, class Signature, class EntitySet>\n+269static constexpr bool isGridFunction()\n+ 270{ return models<Concept::GridFunction<Signature, EntitySet>, F>(); }\n+ 271\n+ 272\n+ 273// DifferentiableGridFunction concept\n+##############################################\n+ 274template<class Signature, class EntitySet, template<class> class\n+DerivativeTraits = DefaultDerivativeTraits>\n+275struct DifferentiableGridFunction;\n+ 276\n+ 289template<class Range, class Domain, class EntitySet, template<class> class\n+DerivativeTraits>\n+290struct DifferentiableGridFunction<Range(Domain), EntitySet,\n+DerivativeTraits> :\n+ 291 Refines<\n+ 292 Dune::Functions::Concept::DifferentiableFunction<Range(Domain),\n+DerivativeTraits>,\n+ 293 Dune::Functions::Concept::GridFunction<Range(Domain),EntitySet>\n+ 294 >\n+ 295{\n+296 using LocalSignature = Range(typename EntitySet::LocalCoordinate);\n+297 using LocalContext = typename EntitySet::Element;\n+ 298\n+ 299 template<class R>\n+300 using LocalDerivativeTraits = typename Dune::Functions::\n+LocalDerivativeTraits<EntitySet,_DerivativeTraits>::template Traits<R>;\n+ 301\n+ 302 template<class F>\n+303 auto require(F&& f) -> decltype(\n+ 304 requireConcept<DifferentiableLocalFunction<LocalSignature, LocalContext,\n+LocalDerivativeTraits>>(localFunction(f))\n+ 305 );\n+ 306};\n+ 307\n+ 309template<class F, class Signature, class EntitySet, template<class> class\n+DerivativeTraits = DefaultDerivativeTraits>\n+310static constexpr bool isDifferentiableGridFunction()\n+ 311{ return models<Concept::DifferentiableGridFunction<Signature, EntitySet,\n+DerivativeTraits>, F>(); }\n+ 312\n+ 313\n+ 314\n+ 315// GridViewFunction concept ##############################################\n+ 316template<class Signature, class GridView>\n+317struct GridViewFunction;\n+ 318\n+ 331template<class Range, class Domain, class GridView>\n+332struct GridViewFunction<Range(Domain), GridView> :\n+ 333 Refines<Dune::Functions::Concept::GridFunction<Range(Domain),\n+GridViewEntitySet<GridView,0>>>\n+ 334{\n+ 335 template<class F>\n+336 auto require(F&& f) -> decltype(\n+ 337 0 // We don't need to check any further expressions, because a\n+GridViewFunction is just a GridFunction with a special EntitySet\n+ 338 );\n+ 339};\n+ 340\n+ 342template<class F, class Signature, class GridView>\n+343static constexpr bool isGridViewFunction()\n+ 344{ return models<Concept::GridViewFunction<Signature, GridView>, F>(); }\n+ 345\n+ 346\n+ 347// DifferentiableGridViewFunction concept\n+##############################################\n+ 348template<class Signature, class GridView, template<class> class\n+DerivativeTraits = DefaultDerivativeTraits>\n+349struct DifferentiableGridViewFunction;\n+ 350\n+ 364template<class Range, class Domain, class GridView, template<class> class\n+DerivativeTraits>\n+365struct DifferentiableGridViewFunction<Range(Domain), GridView,\n+DerivativeTraits> :\n+ 366 Refines<Dune::Functions::Concept::DifferentiableGridFunction<Range\n+(Domain), GridViewEntitySet<GridView,0>, DerivativeTraits>>\n+ 367{\n+ 368 template<class F>\n+369 auto require(F&& f) -> decltype(\n+ 370 0 // We don't need to check any further expressions, because a\n+GridViewFunction is just a GridFunction with a special EntitySet\n+ 371 );\n+ 372};\n+ 373\n+ 375template<class F, class Signature, class GridView, template<class> class\n+DerivativeTraits = DefaultDerivativeTraits>\n+376static constexpr bool isDifferentiableGridViewFunction()\n+ 377{ return models<Concept::DifferentiableGridViewFunction<Signature,\n+GridView, DerivativeTraits>, F>(); }\n+ 378\n+ 379\n+ 380\n+ 381}}} // namespace Dune::Functions::Concept\n+ 382\n+ 383#endif // DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH\n+signature.hh\n+gridviewentityset.hh\n+localderivativetraits.hh\n+Dune::Functions::Concept::isGridFunction\n+static constexpr bool isGridFunction()\n+Check if F models the GridFunction concept with given signature and entity set.\n+Definition: functionconcepts.hh:269\n+Dune::Functions::Concept::isDifferentiableLocalFunction\n+static constexpr bool isDifferentiableLocalFunction()\n+Check if F models the DifferentiableLocalFunction concept with given signature\n+and local context.\n+Definition: functionconcepts.hh:204\n+Dune::Functions::Concept::isFunction\n+static constexpr bool isFunction()\n+Check if F models the Function concept with given signature.\n+Definition: functionconcepts.hh:88\n+Dune::Functions::Concept::isDifferentiableGridViewFunction\n+static constexpr bool isDifferentiableGridViewFunction()\n+Check if F models the DifferentiableGridViewFunction concept with given\n+signature.\n+Definition: functionconcepts.hh:376\n+Dune::Functions::Concept::isDifferentiableFunction\n+static constexpr bool isDifferentiableFunction()\n+Check if F models the DifferentiableFunction concept with given signature.\n+Definition: functionconcepts.hh:127\n+Dune::Functions::Concept::isGridViewFunction\n+static constexpr bool isGridViewFunction()\n+Check if F models the GridViewFunction concept with given signature.\n+Definition: functionconcepts.hh:343\n+Dune::Functions::Concept::isEntitySet\n+static constexpr bool isEntitySet()\n+Check if F models the GridFunction concept with given signature and entity set.\n+Definition: functionconcepts.hh:231\n+Dune::Functions::Concept::isDifferentiableGridFunction\n+static constexpr bool isDifferentiableGridFunction()\n+Check if F models the DifferentiableGridFunction concept with given signature\n+and entity set.\n+Definition: functionconcepts.hh:310\n+Dune::Functions::Concept::isLocalFunction\n+static constexpr bool isLocalFunction()\n+Check if F models the LocalFunction concept with given signature and local\n+context.\n+Definition: functionconcepts.hh:166\n+Dune::Functions::derivative\n+TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const\n+TrigonometricFunction< K, sinFactor, cosFactor > &f)\n+Obtain derivative of TrigonometricFunction function.\n+Definition: trigonometricfunction.hh:39\n+Dune::Functions::Concept::isCallable\n+static constexpr auto isCallable()\n+Check if f is callable with given argument list.\n+Definition: functionconcepts.hh:47\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::resolveRef\n-decltype(auto) resolveRef(T &&t)\n-This is an alias for Dune::resolveRef.\n-Definition: referencehelper.hh:37\n Dune::Functions::DefaultDerivativeTraits\n Default implementation for derivative traits.\n Definition: defaultderivativetraits.hh:37\n-Dune::Functions::ComposedGridFunction\n-Composition of grid functions with another function.\n-Definition: composedgridfunction.hh:42\n-Dune::Functions::ComposedGridFunction::outerFunction_\n-OuterFunction outerFunction_\n-Definition: composedgridfunction.hh:219\n-Dune::Functions::ComposedGridFunction::innerFunctions_\n-InnerFunctions innerFunctions_\n-Definition: composedgridfunction.hh:220\n-Dune::Functions::ComposedGridFunction::ComposedGridFunction\n-ComposedGridFunction(OFT &&outerFunction, IFT &&... innerFunctions)\n-Create ComposedGridFunction.\n-Definition: composedgridfunction.hh:167\n-Dune::Functions::ComposedGridFunction::entitySet\n-const EntitySet & entitySet() const\n-Return the EntitySet associated to this composed grid-function.\n-Definition: composedgridfunction.hh:205\n-Dune::Functions::ComposedGridFunction::EntitySet\n-typename InnerFunction< 0 >::EntitySet EntitySet\n-Definition: composedgridfunction.hh:53\n-Dune::Functions::ComposedGridFunction::LocalDomain\n-typename EntitySet::LocalCoordinate LocalDomain\n-Definition: composedgridfunction.hh:57\n-Dune::Functions::ComposedGridFunction::Element\n-typename EntitySet::Element Element\n-Definition: composedgridfunction.hh:54\n-Dune::Functions::ComposedGridFunction::innerLocalFunctions\n-InnerLocalFunctions innerLocalFunctions() const\n-Definition: composedgridfunction.hh:212\n-Dune::Functions::ComposedGridFunction::localFunction\n-friend LocalFunction localFunction(const ComposedGridFunction &cgf)\n-Create a local-function of this composed grid-function.\n-Definition: composedgridfunction.hh:190\n-Dune::Functions::ComposedGridFunction::Range\n-decltype(std::declval< OF >()(std::declval< IF >()(std::declval< Domain >\n-())...)) Range\n-Definition: composedgridfunction.hh:59\n-Dune::Functions::ComposedGridFunction::Domain\n-typename EntitySet::GlobalCoordinate Domain\n-Definition: composedgridfunction.hh:56\n-Dune::Functions::ComposedGridFunction::operator()\n-Range operator()(const Domain &x) const\n-Evaluation of the composed grid function in coordinates x\n-Definition: composedgridfunction.hh:173\n-Dune::Functions::ComposedGridFunction::derivative\n-friend Traits::DerivativeInterface derivative(const ComposedGridFunction &t)\n-Not implemented.\n-Definition: composedgridfunction.hh:179\n-Dune::Functions::GridFunction\n-Definition: gridfunction.hh:32\n+Dune::Functions::Concept::Callable\n+Concept objects that can be called with given argument list.\n+Definition: functionconcepts.hh:33\n+Dune::Functions::Concept::Callable::require\n+auto require(F &&f) -> decltype(f(std::declval< Args >()...))\n+Dune::Functions::Concept::Function\n+Definition: functionconcepts.hh:66\n+Dune::Functions::Concept::Function<_Range(Domain)>::require\n+auto require(F &&f) -> decltype(requireConvertible< Range >(f(std::declval<\n+Domain >())))\n+Dune::Functions::Concept::DifferentiableFunction\n+Definition: functionconcepts.hh:100\n+Dune::Functions::Concept::DifferentiableFunction<_Range(Domain),\n+DerivativeTraits_>::DerivativeSignature\n+typename SignatureTraits< Range(Domain)>::template DerivativeSignature<\n+DerivativeTraits > DerivativeSignature\n+Definition: functionconcepts.hh:116\n+Dune::Functions::Concept::DifferentiableFunction<_Range(Domain),\n+DerivativeTraits_>::require\n+auto require(F &&f) -> decltype(derivative(f), requireConcept< Function<\n+DerivativeSignature > >(derivative(f)))\n+Dune::Functions::Concept::LocalFunction\n+Definition: functionconcepts.hh:139\n+Dune::Functions::Concept::LocalFunction<_Range(Domain),_LocalContext_>::require\n+auto require(F &&f) -> decltype(f.bind(std::declval< LocalContext >()),\n+f.unbind(), requireConvertible< bool >(f.bound()), f.localContext(),\n+requireConvertible< LocalContext >(f.localContext()))\n+Dune::Functions::Concept::DifferentiableLocalFunction\n+Definition: functionconcepts.hh:172\n+Dune::Functions::Concept::DifferentiableLocalFunction<_Range(Domain),\n+LocalContext,_DerivativeTraits_>::require\n+auto require(F &&f) -> decltype(f.bind(std::declval< LocalContext >()),\n+f.unbind(), f.localContext(), requireConvertible< LocalContext >(f.localContext\n+()))\n+Dune::Functions::Concept::EntitySet\n+Concept for an entity set for a Concept::GridFunction<Range(Domain), EntitySet,\n+DerivativeTraits>\n+Definition: functionconcepts.hh:220\n+Dune::Functions::Concept::EntitySet::require\n+auto require(E &&f) -> decltype(requireType< typename E::Element >(),\n+requireType< typename E::LocalCoordinate >(), requireType< typename E::\n+GlobalCoordinate >())\n+Dune::Functions::Concept::GridFunction\n+Definition: functionconcepts.hh:238\n+Dune::Functions::Concept::GridFunction<_Range(Domain),_EntitySet_>::\n+LocalContext\n+typename EntitySet::Element LocalContext\n+Definition: functionconcepts.hh:254\n+Dune::Functions::Concept::GridFunction<_Range(Domain),_EntitySet_>::\n+LocalSignature\n+Range(typename EntitySet::LocalCoordinate) LocalSignature\n+Definition: functionconcepts.hh:253\n+Dune::Functions::Concept::GridFunction<_Range(Domain),_EntitySet_>::require\n+auto require(F &&f) -> decltype(localFunction(f), f.entitySet(),\n+requireConcept< LocalFunction< LocalSignature, LocalContext > >(localFunction\n+(f)), requireConcept< Concept::EntitySet, EntitySet >(), requireConvertible<\n+EntitySet >(f.entitySet()), requireConvertible< typename EntitySet::\n+GlobalCoordinate, Domain >())\n+Dune::Functions::Concept::DifferentiableGridFunction\n+Definition: functionconcepts.hh:275\n+Dune::Functions::Concept::DifferentiableGridFunction<_Range(Domain),_EntitySet,\n+DerivativeTraits_>::LocalDerivativeTraits\n+typename Dune::Functions::LocalDerivativeTraits< EntitySet, DerivativeTraits\n+>::template Traits< R > LocalDerivativeTraits\n+Definition: functionconcepts.hh:300\n+Dune::Functions::Concept::DifferentiableGridFunction<_Range(Domain),_EntitySet,\n+DerivativeTraits_>::require\n+auto require(F &&f) -> decltype(requireConcept< DifferentiableLocalFunction<\n+LocalSignature, LocalContext, LocalDerivativeTraits > >(localFunction(f)))\n+Dune::Functions::Concept::DifferentiableGridFunction<_Range(Domain),_EntitySet,\n+DerivativeTraits_>::LocalSignature\n+Range(typename EntitySet::LocalCoordinate) LocalSignature\n+Definition: functionconcepts.hh:296\n+Dune::Functions::Concept::DifferentiableGridFunction<_Range(Domain),_EntitySet,\n+DerivativeTraits_>::LocalContext\n+typename EntitySet::Element LocalContext\n+Definition: functionconcepts.hh:297\n+Dune::Functions::Concept::GridViewFunction\n+Definition: functionconcepts.hh:317\n+Dune::Functions::Concept::GridViewFunction<_Range(Domain),_GridView_>::require\n+auto require(F &&f) -> decltype(0)\n+Dune::Functions::Concept::DifferentiableGridViewFunction\n+Definition: functionconcepts.hh:349\n+Dune::Functions::Concept::DifferentiableGridViewFunction<_Range(Domain),\n+GridView,_DerivativeTraits_>::require\n+auto require(F &&f) -> decltype(0)\n+Dune::Functions::SignatureTraits\n+Helper class to deduce the signature of a callable.\n+Definition: signature.hh:56\n+Dune::Functions::SignatureTag\n+Definition: signature.hh:102\n+Dune::Functions::LocalDerivativeTraits\n+Derivative traits for local functions.\n+Definition: localderivativetraits.hh:28\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00023.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00023.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: gridviewentityset.hh File Reference</title>\n+<title>dune-functions: reserveddeque.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,41 +58,75 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n-<a href=\"#namespaces\">Namespaces</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">gridviewentityset.hh File Reference</div></div>\n+<a href=\"#namespaces\">Namespaces</a> |\n+<a href=\"#define-members\">Macros</a> </div>\n+ <div class=\"headertitle\"><div class=\"title\">reserveddeque.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <memory></code><br />\n+\n+<p>An stl-compliant double-ended queue which stores everything on the stack. \n+<a href=\"#details\">More...</a></p>\n+<div class=\"textblock\"><code>#include <algorithm></code><br />\n+<code>#include <iostream></code><br />\n+<code>#include <cstddef></code><br />\n+<code>#include <initializer_list></code><br />\n+<code>#include <dune/common/genericiterator.hh></code><br />\n </div>\n <p><a href=\"a00023_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01919.html\">Dune::Functions::GridViewEntitySet< GV, cd ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">An entity set for all entities of given codim in a grid view. <a href=\"a01919.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01283.html\">Dune::Functions::ReservedDeque< T, n ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A double-ended queue (deque) class with statically reserved memory. <a href=\"a01283.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+</table><table class=\"memberdecls\">\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"define-members\" name=\"define-members\"></a>\n+Macros</h2></td></tr>\n+<tr class=\"memitem:a65543e75bc949ecdb95a25b1f4e11675\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00023.html#a65543e75bc949ecdb95a25b1f4e11675\">CHECKSIZE</a>(X)   {}</td></tr>\n+<tr class=\"separator:a65543e75bc949ecdb95a25b1f4e11675\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n+<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n+<div class=\"textblock\"><p >An stl-compliant double-ended queue which stores everything on the stack. </p>\n+</div><h2 class=\"groupheader\">Macro Definition Documentation</h2>\n+<a id=\"a65543e75bc949ecdb95a25b1f4e11675\" name=\"a65543e75bc949ecdb95a25b1f4e11675\"></a>\n+<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a65543e75bc949ecdb95a25b1f4e11675\">◆ </a></span>CHECKSIZE</h2>\n+\n+<div class=\"memitem\">\n+<div class=\"memproto\">\n+ <table class=\"memname\">\n+ <tr>\n+ <td class=\"memname\">#define CHECKSIZE</td>\n+ <td>(</td>\n+ <td class=\"paramtype\"> </td>\n+ <td class=\"paramname\">X</td><td>)</td>\n+ <td>   {}</td>\n+ </tr>\n+ </table>\n+</div><div class=\"memdoc\">\n+\n+</div>\n+</div>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,24 +4,39 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * gridfunctions\n-Classes | Namespaces\n-gridviewentityset.hh File Reference\n-#include <memory>\n+ * common\n+Classes | Namespaces | Macros\n+reserveddeque.hh File Reference\n+An stl-compliant double-ended queue which stores everything on the stack.\n+More...\n+#include <algorithm>\n+#include <iostream>\n+#include <cstddef>\n+#include <initializer_list>\n+#include <dune/common/genericiterator.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-class \u00a0Dune::Functions::GridViewEntitySet<_GV,_cd_>\n-\u00a0 An entity set for all entities of given codim in a grid view. More...\n+class \u00a0Dune::Functions::ReservedDeque<_T,_n_>\n+\u00a0 A double-ended queue (deque) class with statically reserved memory.\n+ More...\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n+ Macros\n+#define\u00a0CHECKSIZE(X)\u00a0\u00a0\u00a0{}\n+\u00a0\n+***** Detailed Description *****\n+An stl-compliant double-ended queue which stores everything on the stack.\n+***** Macro Definition Documentation *****\n+***** \u25c6\u00a0CHECKSIZE *****\n+#define CHECKSIZE ( \u00a0X ) \u00a0\u00a0\u00a0{}\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00023_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00023_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: gridviewentityset.hh Source File</title>\n+<title>dune-functions: reserveddeque.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,109 +58,233 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">gridviewentityset.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">reserveddeque.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00023.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_RESERVEDDEQUE_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_RESERVEDDEQUE_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <memory></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span> </div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span> </div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> GV, <span class=\"keywordtype\">int</span> cd></div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01919.html\"> 22</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01919.html\">GridViewEntitySet</a></div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span>{</div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <algorithm></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <iostream></span></div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <cstddef></span></div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <initializer_list></span></div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <dune/common/genericiterator.hh></span></div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"preprocessor\">#ifdef CHECK_RESERVEDDEQUE</span></div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"preprocessor\">#define CHECKSIZE(X) assert(X)</span></div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"preprocessor\">#else</span></div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00023.html#a65543e75bc949ecdb95a25b1f4e11675\"> 20</a></span><span class=\"preprocessor\">#define CHECKSIZE(X) {}</span></div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"preprocessor\">#endif</span></div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> </div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"keyword\">namespace </span>Functions {</div>\n <div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> </div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01919.html#a1952f7f975b409a9fb7cac45d2dd13c0\"> 26</a></span> <span class=\"keyword\">typedef</span> GV <a class=\"code hl_typedef\" href=\"a01919.html#a1952f7f975b409a9fb7cac45d2dd13c0\">GridView</a>;</div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> <span class=\"keyword\">enum</span> {</div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> <a class=\"code hl_enumvalue\" href=\"a01919.html#adfa21b864d2fe7e5f1e2a1c35df59de1a641d7f1200046247691c0b3e24fbebc6\">codim</a> = cd</div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01919.html#adfa21b864d2fe7e5f1e2a1c35df59de1a641d7f1200046247691c0b3e24fbebc6\"> 29</a></span> };</div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> </div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01919.html#a1d5eaf3facd0219b2e150d964a664752\"> 32</a></span> <span class=\"keyword\">typedef</span> <span class=\"keyword\">typename</span> GridView::template Codim<codim>::Entity <a class=\"code hl_typedef\" href=\"a01919.html#a1d5eaf3facd0219b2e150d964a664752\">Element</a>;</div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> </div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01919.html#aa4368ad66f18ba8279f20ab7a794069d\"> 35</a></span> <span class=\"keyword\">typedef</span> <span class=\"keyword\">typename</span> Element::Geometry::LocalCoordinate <a class=\"code hl_typedef\" href=\"a01919.html#aa4368ad66f18ba8279f20ab7a794069d\">LocalCoordinate</a>;</div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01919.html#ac4e3d0188467b4be3d195c9f5729e629\"> 36</a></span> <span class=\"keyword\">typedef</span> <span class=\"keyword\">typename</span> Element::Geometry::GlobalCoordinate <a class=\"code hl_typedef\" href=\"a01919.html#ac4e3d0188467b4be3d195c9f5729e629\">GlobalCoordinate</a>;</div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> </div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01919.html#a64c695239c50f85f3c3ac009e0d28ec5\"> 38</a></span> <span class=\"keyword\">typedef</span> <a class=\"code hl_typedef\" href=\"a01919.html#a1d5eaf3facd0219b2e150d964a664752\">Element</a> <a class=\"code hl_typedef\" href=\"a01919.html#a64c695239c50f85f3c3ac009e0d28ec5\">value_type</a>;</div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> </div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01919.html#a82d03b324e66290459b11d00f549eca2\"> 41</a></span> <span class=\"keyword\">typedef</span> <span class=\"keyword\">typename</span> GridView::template Codim<codim>::Iterator <a class=\"code hl_typedef\" href=\"a01919.html#a82d03b324e66290459b11d00f549eca2\">const_iterator</a>;</div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> </div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01919.html#af641ddccfd83eac1935a39604afd4335\"> 44</a></span> <span class=\"keyword\">typedef</span> <a class=\"code hl_typedef\" href=\"a01919.html#a82d03b324e66290459b11d00f549eca2\">const_iterator</a> <a class=\"code hl_typedef\" href=\"a01919.html#af641ddccfd83eac1935a39604afd4335\">iterator</a>;</div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> </div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01919.html#a03a85089dbc09737fa68ee0643f253e8\"> 47</a></span> <a class=\"code hl_function\" href=\"a01919.html#a03a85089dbc09737fa68ee0643f253e8\">GridViewEntitySet</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01919.html#a1952f7f975b409a9fb7cac45d2dd13c0\">GridView</a>& gv) :</div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> gv_(gv)</div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> {}</div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> </div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01919.html#aecef1420c439c2cae8ae253822257318\"> 52</a></span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a01919.html#aecef1420c439c2cae8ae253822257318\">contains</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01919.html#a1d5eaf3facd0219b2e150d964a664752\">Element</a>& e)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> <span class=\"keywordflow\">return</span> gv_.contains(e);</div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> }</div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> </div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01919.html#aa53cd545677269ae1e19dda2a02f48dd\"> 58</a></span> <span class=\"keywordtype\">size_t</span> <a class=\"code hl_function\" href=\"a01919.html#aa53cd545677269ae1e19dda2a02f48dd\">size</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> <span class=\"keywordflow\">return</span> gv_.size(<a class=\"code hl_enumvalue\" href=\"a01919.html#adfa21b864d2fe7e5f1e2a1c35df59de1a641d7f1200046247691c0b3e24fbebc6\">codim</a>);</div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> }</div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> </div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01919.html#a6eacf8355789441dabcf555e0c89c967\"> 64</a></span> <a class=\"code hl_typedef\" href=\"a01919.html#a82d03b324e66290459b11d00f549eca2\">const_iterator</a> <a class=\"code hl_function\" href=\"a01919.html#a6eacf8355789441dabcf555e0c89c967\">begin</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> <span class=\"keywordflow\">return</span> gv_.template begin<codim>();</div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> }</div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> </div>\n-<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01919.html#a1e115d056b4517cbef7a2c2007132ab7\"> 70</a></span> <a class=\"code hl_typedef\" href=\"a01919.html#a82d03b324e66290459b11d00f549eca2\">const_iterator</a> <a class=\"code hl_function\" href=\"a01919.html#a1e115d056b4517cbef7a2c2007132ab7\">end</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> <span class=\"keywordflow\">return</span> gv_.template end<codim>();</div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> }</div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> </div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01919.html#a3f882a9eb425fd9dae3c23c829512642\"> 76</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01919.html#a1952f7f975b409a9fb7cac45d2dd13c0\">GridView</a>& <a class=\"code hl_function\" href=\"a01919.html#a3f882a9eb425fd9dae3c23c829512642\">gridView</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> <span class=\"keywordflow\">return</span> gv_;</div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> }</div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> </div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span><span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> <a class=\"code hl_typedef\" href=\"a01919.html#a1952f7f975b409a9fb7cac45d2dd13c0\">GridView</a> gv_;</div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span>};</div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> </div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> </div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span>} <span class=\"comment\">// end of namespace Dune::Functions</span></div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span>} <span class=\"comment\">// end of namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> </div>\n-<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH</span></div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T, <span class=\"keywordtype\">int</span> n></div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html\"> 44</a></span> <span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01283.html\">ReservedDeque</a></div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> {</div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> <span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a1a11a57db6a51cd6ceebc8aba56e87d9\"> 51</a></span> <span class=\"keyword\">typedef</span> T <a class=\"code hl_typedef\" href=\"a01283.html#a1a11a57db6a51cd6ceebc8aba56e87d9\">value_type</a>;</div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a65bd934ebbbb695648a6f506d8914861\"> 53</a></span> <span class=\"keyword\">typedef</span> T* <a class=\"code hl_typedef\" href=\"a01283.html#a65bd934ebbbb695648a6f506d8914861\">pointer</a>;</div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a9d97a3dd5165e57039304aab2c6065b3\"> 55</a></span> <span class=\"keyword\">typedef</span> T& <a class=\"code hl_typedef\" href=\"a01283.html#a9d97a3dd5165e57039304aab2c6065b3\">reference</a>;</div>\n+<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a841549562074d4cf71f7cac885b5e351\"> 57</a></span> <span class=\"keyword\">typedef</span> <span class=\"keyword\">const</span> T& <a class=\"code hl_typedef\" href=\"a01283.html#a841549562074d4cf71f7cac885b5e351\">const_reference</a>;</div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#ae274c5849a958b0d61a6047ae8849ce4\"> 59</a></span> <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">size_t</span> <a class=\"code hl_typedef\" href=\"a01283.html#ae274c5849a958b0d61a6047ae8849ce4\">size_type</a>;</div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a9caae6b45eb4e86efd054b5b21e17ecb\"> 61</a></span> <span class=\"keyword\">typedef</span> std::ptrdiff_t <a class=\"code hl_typedef\" href=\"a01283.html#a9caae6b45eb4e86efd054b5b21e17ecb\">difference_type</a>;</div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a165ae75902a942b5a9a01a540d5e92b3\"> 63</a></span> <span class=\"keyword\">typedef</span> Dune::GenericIterator<ReservedDeque, value_type> <a class=\"code hl_typedef\" href=\"a01283.html#a165ae75902a942b5a9a01a540d5e92b3\">iterator</a>;</div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#aa2e6ff65ab87792f1a761c2a5d3c8d39\"> 65</a></span> <span class=\"keyword\">typedef</span> Dune::GenericIterator<const ReservedDeque, const value_type> <a class=\"code hl_typedef\" href=\"a01283.html#aa2e6ff65ab87792f1a761c2a5d3c8d39\">const_iterator</a>;</div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> </div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a1a933bab5b5adcc06dfd9408aa98e6a5\"> 72</a></span> <a class=\"code hl_function\" href=\"a01283.html#a1a933bab5b5adcc06dfd9408aa98e6a5\">ReservedDeque</a>() :</div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> size_(0),</div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> first_(0)</div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> {}</div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> </div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#ad7ce13b5aef147da1c161680a6002e32\"> 77</a></span> <a class=\"code hl_function\" href=\"a01283.html#ad7ce13b5aef147da1c161680a6002e32\">ReservedDeque</a>(std::initializer_list<T> <span class=\"keyword\">const</span> &l)</div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> {</div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> assert(l.size() <= n);<span class=\"comment\">// Actually, this is not needed any more!</span></div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> size_ = l.size();</div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> std::copy_n(l.begin(), size_, data_);</div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> }</div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> </div>\n+<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a0a444f28dfb7fb3b6218e2f45eaa3815\"> 89</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01283.html#a0a444f28dfb7fb3b6218e2f45eaa3815\">clear</a>()</div>\n+<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> {</div>\n+<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> first_ = 0;</div>\n+<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> size_ = 0;</div>\n+<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> }</div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> </div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#accbfb817461412168779007c0a2e792d\"> 96</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01283.html#accbfb817461412168779007c0a2e792d\">resize</a>(<span class=\"keywordtype\">size_t</span> s)</div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> {</div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> <a class=\"code hl_define\" href=\"a00023.html#a65543e75bc949ecdb95a25b1f4e11675\">CHECKSIZE</a>(s<=n);</div>\n+<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> size_ = s;</div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> }</div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> </div>\n+<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#aec567f9d91f8d29e9baff6adef93051b\"> 103</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01283.html#aec567f9d91f8d29e9baff6adef93051b\">push_back</a>(<span class=\"keyword\">const</span> T& t)</div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> {</div>\n+<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> <a class=\"code hl_define\" href=\"a00023.html#a65543e75bc949ecdb95a25b1f4e11675\">CHECKSIZE</a>(size_<n);</div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> data_[size_++ % n] = t;</div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> }</div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> </div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a492adac13d6ff55ebeb9863346312799\"> 110</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01283.html#a492adac13d6ff55ebeb9863346312799\">push_front</a>(<span class=\"keyword\">const</span> T& t)</div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> {</div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> <a class=\"code hl_define\" href=\"a00023.html#a65543e75bc949ecdb95a25b1f4e11675\">CHECKSIZE</a>(size_<n);</div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> ++size_;</div>\n+<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> first_ = (first_+(n-1)) % n;</div>\n+<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> data_[first_] = t;</div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> }</div>\n+<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> </div>\n+<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a75f1d16ad475f7a915dc9d7e922db2d0\"> 119</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01283.html#a75f1d16ad475f7a915dc9d7e922db2d0\">pop_back</a>()</div>\n+<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> {</div>\n+<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> <span class=\"keywordflow\">if</span> (! <a class=\"code hl_function\" href=\"a01283.html#a306e780119bf0c91e6cd80e34446e3d2\">empty</a>())</div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> size_--;</div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> }</div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> </div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a015e28a7841104760b9b20c173f89c03\"> 126</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01283.html#a015e28a7841104760b9b20c173f89c03\">pop_front</a>()</div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> {</div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> <span class=\"keywordflow\">if</span> (! <a class=\"code hl_function\" href=\"a01283.html#a306e780119bf0c91e6cd80e34446e3d2\">empty</a>())</div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> {</div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> size_--;</div>\n+<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> first_ = (++first_) % n;</div>\n+<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> }</div>\n+<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> }</div>\n+<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> </div>\n+<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#ad03d43143fb36b71f9fca912be89c071\"> 136</a></span> <a class=\"code hl_typedef\" href=\"a01283.html#a165ae75902a942b5a9a01a540d5e92b3\">iterator</a> <a class=\"code hl_function\" href=\"a01283.html#ad03d43143fb36b71f9fca912be89c071\">begin</a>(){</div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_typedef\" href=\"a01283.html#a165ae75902a942b5a9a01a540d5e92b3\">iterator</a>(*<span class=\"keyword\">this</span>, 0);</div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> }</div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> </div>\n+<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#ad668fffa956543db5329ce89256ca800\"> 141</a></span> <a class=\"code hl_typedef\" href=\"a01283.html#aa2e6ff65ab87792f1a761c2a5d3c8d39\">const_iterator</a> <a class=\"code hl_function\" href=\"a01283.html#ad668fffa956543db5329ce89256ca800\">begin</a>()<span class=\"keyword\"> const </span>{</div>\n+<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_typedef\" href=\"a01283.html#aa2e6ff65ab87792f1a761c2a5d3c8d39\">const_iterator</a>(*<span class=\"keyword\">this</span>, 0);</div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> }</div>\n+<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> </div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a71cf40c58f49ea4a73fcc757986f8492\"> 146</a></span> <a class=\"code hl_typedef\" href=\"a01283.html#a165ae75902a942b5a9a01a540d5e92b3\">iterator</a> <a class=\"code hl_function\" href=\"a01283.html#a71cf40c58f49ea4a73fcc757986f8492\">end</a>(){</div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_typedef\" href=\"a01283.html#a165ae75902a942b5a9a01a540d5e92b3\">iterator</a>(*<span class=\"keyword\">this</span>, size_);</div>\n+<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> }</div>\n+<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> </div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#aab4dbf78d7483bd2802dbf8f7d1b2228\"> 151</a></span> <a class=\"code hl_typedef\" href=\"a01283.html#aa2e6ff65ab87792f1a761c2a5d3c8d39\">const_iterator</a> <a class=\"code hl_function\" href=\"a01283.html#aab4dbf78d7483bd2802dbf8f7d1b2228\">end</a>()<span class=\"keyword\"> const </span>{</div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_typedef\" href=\"a01283.html#aa2e6ff65ab87792f1a761c2a5d3c8d39\">const_iterator</a>(*<span class=\"keyword\">this</span>, size_);</div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> }</div>\n+<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> </div>\n+<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a5750b10edac44ae6ee3115d41f103631\"> 156</a></span> <a class=\"code hl_typedef\" href=\"a01283.html#a9d97a3dd5165e57039304aab2c6065b3\">reference</a> <a class=\"code hl_function\" href=\"a01283.html#a5750b10edac44ae6ee3115d41f103631\">operator[] </a>(<a class=\"code hl_typedef\" href=\"a01283.html#ae274c5849a958b0d61a6047ae8849ce4\">size_type</a> i)</div>\n+<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> {</div>\n+<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> <a class=\"code hl_define\" href=\"a00023.html#a65543e75bc949ecdb95a25b1f4e11675\">CHECKSIZE</a>(size_>i);</div>\n+<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> <span class=\"keywordflow\">return</span> data_[(first_ + i) % n];</div>\n+<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> }</div>\n+<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> </div>\n+<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a44d84861a79f22c16a4fd64178bc35f7\"> 163</a></span> <a class=\"code hl_typedef\" href=\"a01283.html#a841549562074d4cf71f7cac885b5e351\">const_reference</a> <a class=\"code hl_function\" href=\"a01283.html#a5750b10edac44ae6ee3115d41f103631\">operator[] </a>(<a class=\"code hl_typedef\" href=\"a01283.html#ae274c5849a958b0d61a6047ae8849ce4\">size_type</a> i)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> <a class=\"code hl_define\" href=\"a00023.html#a65543e75bc949ecdb95a25b1f4e11675\">CHECKSIZE</a>(size_>i);</div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> <span class=\"keywordflow\">return</span> data_[(first_ + i) % n];</div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> }</div>\n+<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> </div>\n+<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a5c980256ebfa4bd92657ce0a97b9202a\"> 170</a></span> <a class=\"code hl_typedef\" href=\"a01283.html#a9d97a3dd5165e57039304aab2c6065b3\">reference</a> <a class=\"code hl_function\" href=\"a01283.html#a5c980256ebfa4bd92657ce0a97b9202a\">front</a>()</div>\n+<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> {</div>\n+<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> <a class=\"code hl_define\" href=\"a00023.html#a65543e75bc949ecdb95a25b1f4e11675\">CHECKSIZE</a>(size_>0);</div>\n+<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> <span class=\"keywordflow\">return</span> data_[first_];</div>\n+<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> }</div>\n+<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> </div>\n+<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a6be336050bece6a071809840bc2946d7\"> 177</a></span> <a class=\"code hl_typedef\" href=\"a01283.html#a841549562074d4cf71f7cac885b5e351\">const_reference</a> <a class=\"code hl_function\" href=\"a01283.html#a6be336050bece6a071809840bc2946d7\">front</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> <a class=\"code hl_define\" href=\"a00023.html#a65543e75bc949ecdb95a25b1f4e11675\">CHECKSIZE</a>(size_>0);</div>\n+<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> <span class=\"keywordflow\">return</span> data_[first_];</div>\n+<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> }</div>\n+<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> </div>\n+<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a748c4f51dd0445ce73228ca16fe016e2\"> 184</a></span> <a class=\"code hl_typedef\" href=\"a01283.html#a9d97a3dd5165e57039304aab2c6065b3\">reference</a> <a class=\"code hl_function\" href=\"a01283.html#a748c4f51dd0445ce73228ca16fe016e2\">back</a>()</div>\n+<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> {</div>\n+<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> <a class=\"code hl_define\" href=\"a00023.html#a65543e75bc949ecdb95a25b1f4e11675\">CHECKSIZE</a>(size_>0);</div>\n+<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> <span class=\"keywordflow\">return</span> data_[(first_ + size_-1) % n];</div>\n+<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> }</div>\n+<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> </div>\n+<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a3615c8d36a753bb2120e5939c11ca39b\"> 191</a></span> <a class=\"code hl_typedef\" href=\"a01283.html#a841549562074d4cf71f7cac885b5e351\">const_reference</a> <a class=\"code hl_function\" href=\"a01283.html#a3615c8d36a753bb2120e5939c11ca39b\">back</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> <a class=\"code hl_define\" href=\"a00023.html#a65543e75bc949ecdb95a25b1f4e11675\">CHECKSIZE</a>(size_>0);</div>\n+<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> <span class=\"keywordflow\">return</span> data_[(first_ + size_-1) % n];</div>\n+<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> }</div>\n+<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> </div>\n+<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#aaa1edbb9f563f59f78abe764b3760020\"> 202</a></span> <a class=\"code hl_typedef\" href=\"a01283.html#ae274c5849a958b0d61a6047ae8849ce4\">size_type</a> <a class=\"code hl_function\" href=\"a01283.html#aaa1edbb9f563f59f78abe764b3760020\">size</a> ()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> <span class=\"keywordflow\">return</span> size_;</div>\n+<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span> }</div>\n+<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> </div>\n+<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a306e780119bf0c91e6cd80e34446e3d2\"> 208</a></span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a01283.html#a306e780119bf0c91e6cd80e34446e3d2\">empty</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> <span class=\"keywordflow\">return</span> size_==0;</div>\n+<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> }</div>\n+<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"> 212</span> </div>\n+<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a08e8f6dc1efef2c93a14442e26ed3cf3\"> 214</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01283.html#ae274c5849a958b0d61a6047ae8849ce4\">size_type</a> <a class=\"code hl_function\" href=\"a01283.html#a08e8f6dc1efef2c93a14442e26ed3cf3\">capacity</a>()</div>\n+<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> {</div>\n+<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span> <span class=\"keywordflow\">return</span> n;</div>\n+<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> }</div>\n+<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> </div>\n+<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a92313a941786106b88b2c43e503d911b\"> 220</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01283.html#ae274c5849a958b0d61a6047ae8849ce4\">size_type</a> <a class=\"code hl_function\" href=\"a01283.html#a92313a941786106b88b2c43e503d911b\">max_size</a>()</div>\n+<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> {</div>\n+<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span> <span class=\"keywordflow\">return</span> n;</div>\n+<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> }</div>\n+<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> </div>\n+<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a43dd4af258c989193a8f25872504c67c\"> 228</a></span> <span class=\"keyword\">friend</span> std::ostream& <a class=\"code hl_friend\" href=\"a01283.html#a43dd4af258c989193a8f25872504c67c\">operator<< </a>(std::ostream& s, <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01283.html\">ReservedDeque</a>& v)</div>\n+<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> {</div>\n+<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<v.<a class=\"code hl_function\" href=\"a01283.html#aaa1edbb9f563f59f78abe764b3760020\">size</a>(); i++)</div>\n+<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span> s << v[i] << <span class=\"stringliteral\">" "</span>;</div>\n+<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> <span class=\"keywordflow\">return</span> s;</div>\n+<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> }</div>\n+<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> </div>\n+<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> <span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span> T data_[n];</div>\n+<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span> <a class=\"code hl_typedef\" href=\"a01283.html#ae274c5849a958b0d61a6047ae8849ce4\">size_type</a> first_;</div>\n+<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span> <a class=\"code hl_typedef\" href=\"a01283.html#ae274c5849a958b0d61a6047ae8849ce4\">size_type</a> size_;</div>\n+<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span> };</div>\n+<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"> 240</span> </div>\n+<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span>} <span class=\"comment\">// end namespace Functions</span></div>\n+<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span>} <span class=\"comment\">// end namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> </div>\n+<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span><span class=\"preprocessor\">#undef CHECKSIZE</span></div>\n+<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> </div>\n+<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_RESERVEDDEQUE_HH</span></div>\n+<div class=\"ttc\" id=\"aa00023_html_a65543e75bc949ecdb95a25b1f4e11675\"><div class=\"ttname\"><a href=\"a00023.html#a65543e75bc949ecdb95a25b1f4e11675\">CHECKSIZE</a></div><div class=\"ttdeci\">#define CHECKSIZE(X)</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:20</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa01919_html\"><div class=\"ttname\"><a href=\"a01919.html\">Dune::Functions::GridViewEntitySet</a></div><div class=\"ttdoc\">An entity set for all entities of given codim in a grid view.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:23</div></div>\n-<div class=\"ttc\" id=\"aa01919_html_a03a85089dbc09737fa68ee0643f253e8\"><div class=\"ttname\"><a href=\"a01919.html#a03a85089dbc09737fa68ee0643f253e8\">Dune::Functions::GridViewEntitySet::GridViewEntitySet</a></div><div class=\"ttdeci\">GridViewEntitySet(const GridView &gv)</div><div class=\"ttdoc\">Construct GridViewEntitySet for a GridView.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:47</div></div>\n-<div class=\"ttc\" id=\"aa01919_html_a1952f7f975b409a9fb7cac45d2dd13c0\"><div class=\"ttname\"><a href=\"a01919.html#a1952f7f975b409a9fb7cac45d2dd13c0\">Dune::Functions::GridViewEntitySet::GridView</a></div><div class=\"ttdeci\">GV GridView</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:26</div></div>\n-<div class=\"ttc\" id=\"aa01919_html_a1d5eaf3facd0219b2e150d964a664752\"><div class=\"ttname\"><a href=\"a01919.html#a1d5eaf3facd0219b2e150d964a664752\">Dune::Functions::GridViewEntitySet::Element</a></div><div class=\"ttdeci\">GridView::template Codim< codim >::Entity Element</div><div class=\"ttdoc\">Type of Elements contained in this EntitySet.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:32</div></div>\n-<div class=\"ttc\" id=\"aa01919_html_a1e115d056b4517cbef7a2c2007132ab7\"><div class=\"ttname\"><a href=\"a01919.html#a1e115d056b4517cbef7a2c2007132ab7\">Dune::Functions::GridViewEntitySet::end</a></div><div class=\"ttdeci\">const_iterator end() const</div><div class=\"ttdoc\">Create an end iterator.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:70</div></div>\n-<div class=\"ttc\" id=\"aa01919_html_a3f882a9eb425fd9dae3c23c829512642\"><div class=\"ttname\"><a href=\"a01919.html#a3f882a9eb425fd9dae3c23c829512642\">Dune::Functions::GridViewEntitySet::gridView</a></div><div class=\"ttdeci\">const GridView & gridView() const</div><div class=\"ttdoc\">Return the associated GridView.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:76</div></div>\n-<div class=\"ttc\" id=\"aa01919_html_a64c695239c50f85f3c3ac009e0d28ec5\"><div class=\"ttname\"><a href=\"a01919.html#a64c695239c50f85f3c3ac009e0d28ec5\">Dune::Functions::GridViewEntitySet::value_type</a></div><div class=\"ttdeci\">Element value_type</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:38</div></div>\n-<div class=\"ttc\" id=\"aa01919_html_a6eacf8355789441dabcf555e0c89c967\"><div class=\"ttname\"><a href=\"a01919.html#a6eacf8355789441dabcf555e0c89c967\">Dune::Functions::GridViewEntitySet::begin</a></div><div class=\"ttdeci\">const_iterator begin() const</div><div class=\"ttdoc\">Create a begin iterator.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:64</div></div>\n-<div class=\"ttc\" id=\"aa01919_html_a82d03b324e66290459b11d00f549eca2\"><div class=\"ttname\"><a href=\"a01919.html#a82d03b324e66290459b11d00f549eca2\">Dune::Functions::GridViewEntitySet::const_iterator</a></div><div class=\"ttdeci\">GridView::template Codim< codim >::Iterator const_iterator</div><div class=\"ttdoc\">A forward iterator.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:41</div></div>\n-<div class=\"ttc\" id=\"aa01919_html_aa4368ad66f18ba8279f20ab7a794069d\"><div class=\"ttname\"><a href=\"a01919.html#aa4368ad66f18ba8279f20ab7a794069d\">Dune::Functions::GridViewEntitySet::LocalCoordinate</a></div><div class=\"ttdeci\">Element::Geometry::LocalCoordinate LocalCoordinate</div><div class=\"ttdoc\">Type of local coordinates with respect to the Element.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:35</div></div>\n-<div class=\"ttc\" id=\"aa01919_html_aa53cd545677269ae1e19dda2a02f48dd\"><div class=\"ttname\"><a href=\"a01919.html#aa53cd545677269ae1e19dda2a02f48dd\">Dune::Functions::GridViewEntitySet::size</a></div><div class=\"ttdeci\">size_t size() const</div><div class=\"ttdoc\">Return number of Elements visited by an iterator.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:58</div></div>\n-<div class=\"ttc\" id=\"aa01919_html_ac4e3d0188467b4be3d195c9f5729e629\"><div class=\"ttname\"><a href=\"a01919.html#ac4e3d0188467b4be3d195c9f5729e629\">Dune::Functions::GridViewEntitySet::GlobalCoordinate</a></div><div class=\"ttdeci\">Element::Geometry::GlobalCoordinate GlobalCoordinate</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:36</div></div>\n-<div class=\"ttc\" id=\"aa01919_html_adfa21b864d2fe7e5f1e2a1c35df59de1a641d7f1200046247691c0b3e24fbebc6\"><div class=\"ttname\"><a href=\"a01919.html#adfa21b864d2fe7e5f1e2a1c35df59de1a641d7f1200046247691c0b3e24fbebc6\">Dune::Functions::GridViewEntitySet::codim</a></div><div class=\"ttdeci\">@ codim</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:28</div></div>\n-<div class=\"ttc\" id=\"aa01919_html_aecef1420c439c2cae8ae253822257318\"><div class=\"ttname\"><a href=\"a01919.html#aecef1420c439c2cae8ae253822257318\">Dune::Functions::GridViewEntitySet::contains</a></div><div class=\"ttdeci\">bool contains(const Element &e) const</div><div class=\"ttdoc\">Return true if e is contained in the EntitySet.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:52</div></div>\n-<div class=\"ttc\" id=\"aa01919_html_af641ddccfd83eac1935a39604afd4335\"><div class=\"ttname\"><a href=\"a01919.html#af641ddccfd83eac1935a39604afd4335\">Dune::Functions::GridViewEntitySet::iterator</a></div><div class=\"ttdeci\">const_iterator iterator</div><div class=\"ttdoc\">Same as const_iterator.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:44</div></div>\n+<div class=\"ttc\" id=\"aa01283_html\"><div class=\"ttname\"><a href=\"a01283.html\">Dune::Functions::ReservedDeque</a></div><div class=\"ttdoc\">A double-ended queue (deque) class with statically reserved memory.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:45</div></div>\n+<div class=\"ttc\" id=\"aa01283_html_a015e28a7841104760b9b20c173f89c03\"><div class=\"ttname\"><a href=\"a01283.html#a015e28a7841104760b9b20c173f89c03\">Dune::Functions::ReservedDeque::pop_front</a></div><div class=\"ttdeci\">void pop_front()</div><div class=\"ttdoc\">Erases the first element of the vector, O(1) time.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:126</div></div>\n+<div class=\"ttc\" id=\"aa01283_html_a08e8f6dc1efef2c93a14442e26ed3cf3\"><div class=\"ttname\"><a href=\"a01283.html#a08e8f6dc1efef2c93a14442e26ed3cf3\">Dune::Functions::ReservedDeque::capacity</a></div><div class=\"ttdeci\">static constexpr size_type capacity()</div><div class=\"ttdoc\">Returns current capacity (allocated memory) of the vector.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:214</div></div>\n+<div class=\"ttc\" id=\"aa01283_html_a0a444f28dfb7fb3b6218e2f45eaa3815\"><div class=\"ttname\"><a href=\"a01283.html#a0a444f28dfb7fb3b6218e2f45eaa3815\">Dune::Functions::ReservedDeque::clear</a></div><div class=\"ttdeci\">void clear()</div><div class=\"ttdoc\">Erases all elements.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:89</div></div>\n+<div class=\"ttc\" id=\"aa01283_html_a165ae75902a942b5a9a01a540d5e92b3\"><div class=\"ttname\"><a href=\"a01283.html#a165ae75902a942b5a9a01a540d5e92b3\">Dune::Functions::ReservedDeque::iterator</a></div><div class=\"ttdeci\">Dune::GenericIterator< ReservedDeque, value_type > iterator</div><div class=\"ttdoc\">Iterator used to iterate through a vector.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:63</div></div>\n+<div class=\"ttc\" id=\"aa01283_html_a1a11a57db6a51cd6ceebc8aba56e87d9\"><div class=\"ttname\"><a href=\"a01283.html#a1a11a57db6a51cd6ceebc8aba56e87d9\">Dune::Functions::ReservedDeque::value_type</a></div><div class=\"ttdeci\">T value_type</div><div class=\"ttdoc\">The type of object, T, stored in the vector.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:51</div></div>\n+<div class=\"ttc\" id=\"aa01283_html_a1a933bab5b5adcc06dfd9408aa98e6a5\"><div class=\"ttname\"><a href=\"a01283.html#a1a933bab5b5adcc06dfd9408aa98e6a5\">Dune::Functions::ReservedDeque::ReservedDeque</a></div><div class=\"ttdeci\">ReservedDeque()</div><div class=\"ttdoc\">Constructor.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:72</div></div>\n+<div class=\"ttc\" id=\"aa01283_html_a306e780119bf0c91e6cd80e34446e3d2\"><div class=\"ttname\"><a href=\"a01283.html#a306e780119bf0c91e6cd80e34446e3d2\">Dune::Functions::ReservedDeque::empty</a></div><div class=\"ttdeci\">bool empty() const</div><div class=\"ttdoc\">Returns true if vector has no elements.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:208</div></div>\n+<div class=\"ttc\" id=\"aa01283_html_a3615c8d36a753bb2120e5939c11ca39b\"><div class=\"ttname\"><a href=\"a01283.html#a3615c8d36a753bb2120e5939c11ca39b\">Dune::Functions::ReservedDeque::back</a></div><div class=\"ttdeci\">const_reference back() const</div><div class=\"ttdoc\">Returns const reference to last element of vector.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:191</div></div>\n+<div class=\"ttc\" id=\"aa01283_html_a43dd4af258c989193a8f25872504c67c\"><div class=\"ttname\"><a href=\"a01283.html#a43dd4af258c989193a8f25872504c67c\">Dune::Functions::ReservedDeque::operator<<</a></div><div class=\"ttdeci\">friend std::ostream & operator<<(std::ostream &s, const ReservedDeque &v)</div><div class=\"ttdoc\">Send ReservedDeque to an output stream.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:228</div></div>\n+<div class=\"ttc\" id=\"aa01283_html_a492adac13d6ff55ebeb9863346312799\"><div class=\"ttname\"><a href=\"a01283.html#a492adac13d6ff55ebeb9863346312799\">Dune::Functions::ReservedDeque::push_front</a></div><div class=\"ttdeci\">void push_front(const T &t)</div><div class=\"ttdoc\">Prepends an element to the begin of a deque if size<capacity, O(1) time.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:110</div></div>\n+<div class=\"ttc\" id=\"aa01283_html_a5750b10edac44ae6ee3115d41f103631\"><div class=\"ttname\"><a href=\"a01283.html#a5750b10edac44ae6ee3115d41f103631\">Dune::Functions::ReservedDeque::operator[]</a></div><div class=\"ttdeci\">reference operator[](size_type i)</div><div class=\"ttdoc\">Returns reference to the i'th element.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:156</div></div>\n+<div class=\"ttc\" id=\"aa01283_html_a5c980256ebfa4bd92657ce0a97b9202a\"><div class=\"ttname\"><a href=\"a01283.html#a5c980256ebfa4bd92657ce0a97b9202a\">Dune::Functions::ReservedDeque::front</a></div><div class=\"ttdeci\">reference front()</div><div class=\"ttdoc\">Returns reference to first element of vector.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:170</div></div>\n+<div class=\"ttc\" id=\"aa01283_html_a65bd934ebbbb695648a6f506d8914861\"><div class=\"ttname\"><a href=\"a01283.html#a65bd934ebbbb695648a6f506d8914861\">Dune::Functions::ReservedDeque::pointer</a></div><div class=\"ttdeci\">T * pointer</div><div class=\"ttdoc\">Pointer to T.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:53</div></div>\n+<div class=\"ttc\" id=\"aa01283_html_a6be336050bece6a071809840bc2946d7\"><div class=\"ttname\"><a href=\"a01283.html#a6be336050bece6a071809840bc2946d7\">Dune::Functions::ReservedDeque::front</a></div><div class=\"ttdeci\">const_reference front() const</div><div class=\"ttdoc\">Returns const reference to first element of vector.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:177</div></div>\n+<div class=\"ttc\" id=\"aa01283_html_a71cf40c58f49ea4a73fcc757986f8492\"><div class=\"ttname\"><a href=\"a01283.html#a71cf40c58f49ea4a73fcc757986f8492\">Dune::Functions::ReservedDeque::end</a></div><div class=\"ttdeci\">iterator end()</div><div class=\"ttdoc\">Returns an iterator pointing to the end of the vector.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:146</div></div>\n+<div class=\"ttc\" id=\"aa01283_html_a748c4f51dd0445ce73228ca16fe016e2\"><div class=\"ttname\"><a href=\"a01283.html#a748c4f51dd0445ce73228ca16fe016e2\">Dune::Functions::ReservedDeque::back</a></div><div class=\"ttdeci\">reference back()</div><div class=\"ttdoc\">Returns reference to last element of vector.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:184</div></div>\n+<div class=\"ttc\" id=\"aa01283_html_a75f1d16ad475f7a915dc9d7e922db2d0\"><div class=\"ttname\"><a href=\"a01283.html#a75f1d16ad475f7a915dc9d7e922db2d0\">Dune::Functions::ReservedDeque::pop_back</a></div><div class=\"ttdeci\">void pop_back()</div><div class=\"ttdoc\">Erases the last element of the vector, O(1) time.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:119</div></div>\n+<div class=\"ttc\" id=\"aa01283_html_a841549562074d4cf71f7cac885b5e351\"><div class=\"ttname\"><a href=\"a01283.html#a841549562074d4cf71f7cac885b5e351\">Dune::Functions::ReservedDeque::const_reference</a></div><div class=\"ttdeci\">const T & const_reference</div><div class=\"ttdoc\">Const reference to T.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:57</div></div>\n+<div class=\"ttc\" id=\"aa01283_html_a92313a941786106b88b2c43e503d911b\"><div class=\"ttname\"><a href=\"a01283.html#a92313a941786106b88b2c43e503d911b\">Dune::Functions::ReservedDeque::max_size</a></div><div class=\"ttdeci\">static constexpr size_type max_size()</div><div class=\"ttdoc\">Returns the maximum length of the vector.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:220</div></div>\n+<div class=\"ttc\" id=\"aa01283_html_a9caae6b45eb4e86efd054b5b21e17ecb\"><div class=\"ttname\"><a href=\"a01283.html#a9caae6b45eb4e86efd054b5b21e17ecb\">Dune::Functions::ReservedDeque::difference_type</a></div><div class=\"ttdeci\">std::ptrdiff_t difference_type</div><div class=\"ttdoc\">A signed integral type.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:61</div></div>\n+<div class=\"ttc\" id=\"aa01283_html_a9d97a3dd5165e57039304aab2c6065b3\"><div class=\"ttname\"><a href=\"a01283.html#a9d97a3dd5165e57039304aab2c6065b3\">Dune::Functions::ReservedDeque::reference</a></div><div class=\"ttdeci\">T & reference</div><div class=\"ttdoc\">Reference to T.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:55</div></div>\n+<div class=\"ttc\" id=\"aa01283_html_aa2e6ff65ab87792f1a761c2a5d3c8d39\"><div class=\"ttname\"><a href=\"a01283.html#aa2e6ff65ab87792f1a761c2a5d3c8d39\">Dune::Functions::ReservedDeque::const_iterator</a></div><div class=\"ttdeci\">Dune::GenericIterator< const ReservedDeque, const value_type > const_iterator</div><div class=\"ttdoc\">Const iterator used to iterate through a vector.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:65</div></div>\n+<div class=\"ttc\" id=\"aa01283_html_aaa1edbb9f563f59f78abe764b3760020\"><div class=\"ttname\"><a href=\"a01283.html#aaa1edbb9f563f59f78abe764b3760020\">Dune::Functions::ReservedDeque::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdoc\">Returns number of elements in the vector.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:202</div></div>\n+<div class=\"ttc\" id=\"aa01283_html_aab4dbf78d7483bd2802dbf8f7d1b2228\"><div class=\"ttname\"><a href=\"a01283.html#aab4dbf78d7483bd2802dbf8f7d1b2228\">Dune::Functions::ReservedDeque::end</a></div><div class=\"ttdeci\">const_iterator end() const</div><div class=\"ttdoc\">Returns a const_iterator pointing to the end of the vector.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:151</div></div>\n+<div class=\"ttc\" id=\"aa01283_html_accbfb817461412168779007c0a2e792d\"><div class=\"ttname\"><a href=\"a01283.html#accbfb817461412168779007c0a2e792d\">Dune::Functions::ReservedDeque::resize</a></div><div class=\"ttdeci\">void resize(size_t s)</div><div class=\"ttdoc\">Specifies a new size for the vector.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:96</div></div>\n+<div class=\"ttc\" id=\"aa01283_html_ad03d43143fb36b71f9fca912be89c071\"><div class=\"ttname\"><a href=\"a01283.html#ad03d43143fb36b71f9fca912be89c071\">Dune::Functions::ReservedDeque::begin</a></div><div class=\"ttdeci\">iterator begin()</div><div class=\"ttdoc\">Returns a iterator pointing to the beginning of the vector.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:136</div></div>\n+<div class=\"ttc\" id=\"aa01283_html_ad668fffa956543db5329ce89256ca800\"><div class=\"ttname\"><a href=\"a01283.html#ad668fffa956543db5329ce89256ca800\">Dune::Functions::ReservedDeque::begin</a></div><div class=\"ttdeci\">const_iterator begin() const</div><div class=\"ttdoc\">Returns a const_iterator pointing to the beginning of the vector.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:141</div></div>\n+<div class=\"ttc\" id=\"aa01283_html_ad7ce13b5aef147da1c161680a6002e32\"><div class=\"ttname\"><a href=\"a01283.html#ad7ce13b5aef147da1c161680a6002e32\">Dune::Functions::ReservedDeque::ReservedDeque</a></div><div class=\"ttdeci\">ReservedDeque(std::initializer_list< T > const &l)</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:77</div></div>\n+<div class=\"ttc\" id=\"aa01283_html_ae274c5849a958b0d61a6047ae8849ce4\"><div class=\"ttname\"><a href=\"a01283.html#ae274c5849a958b0d61a6047ae8849ce4\">Dune::Functions::ReservedDeque::size_type</a></div><div class=\"ttdeci\">size_t size_type</div><div class=\"ttdoc\">An unsigned integral type.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:59</div></div>\n+<div class=\"ttc\" id=\"aa01283_html_aec567f9d91f8d29e9baff6adef93051b\"><div class=\"ttname\"><a href=\"a01283.html#aec567f9d91f8d29e9baff6adef93051b\">Dune::Functions::ReservedDeque::push_back</a></div><div class=\"ttdeci\">void push_back(const T &t)</div><div class=\"ttdoc\">Appends an element to the end of a vector, up to the maximum size n, O(1) time.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:103</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,142 +4,320 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * gridfunctions\n-gridviewentityset.hh\n+ * common\n+reserveddeque.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH\n- 4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH\n+ 3#ifndef DUNE_FUNCTIONS_COMMON_RESERVEDDEQUE_HH\n+ 4#define DUNE_FUNCTIONS_COMMON_RESERVEDDEQUE_HH\n 5\n- 6#include <memory>\n- 7\n- 8\n- 9namespace Dune {\n- 10\n- 11namespace Functions {\n- 12\n- 13\n- 21template<class GV, int cd>\n-22class GridViewEntitySet\n- 23{\n- 24public:\n+ 10#include <algorithm>\n+ 11#include <iostream>\n+ 12#include <cstddef>\n+ 13#include <initializer_list>\n+ 14\n+ 15#include <dune/common/genericiterator.hh>\n+ 16\n+ 17#ifdef CHECK_RESERVEDDEQUE\n+ 18#define CHECKSIZE(X) assert(X)\n+ 19#else\n+20#define CHECKSIZE(X) {}\n+ 21#endif\n+ 22\n+ 23namespace Dune {\n+ 24namespace Functions {\n 25\n-26 typedef GV GridView;\n- 27 enum {\n- 28 codim = cd\n-29 };\n- 30\n-32 typedef typename GridView::template Codim<codim>::Entity Element;\n- 33\n-35 typedef typename Element::Geometry::LocalCoordinate LocalCoordinate;\n-36 typedef typename Element::Geometry::GlobalCoordinate GlobalCoordinate;\n- 37\n-38 typedef Element value_type;\n- 39\n-41 typedef typename GridView::template Codim<codim>::Iterator const_iterator;\n- 42\n-44 typedef const_iterator iterator;\n- 45\n-47 GridViewEntitySet(const GridView& gv) :\n- 48 gv_(gv)\n- 49 {}\n- 50\n-52 bool contains(const Element& e) const\n- 53 {\n- 54 return gv_.contains(e);\n- 55 }\n- 56\n-58 size_t size() const\n- 59 {\n- 60 return gv_.size(codim);\n- 61 }\n- 62\n-64 const_iterator begin() const\n- 65 {\n- 66 return gv_.template begin<codim>();\n- 67 }\n- 68\n-70 const_iterator end() const\n- 71 {\n- 72 return gv_.template end<codim>();\n- 73 }\n- 74\n-76 const GridView& gridView() const\n- 77 {\n- 78 return gv_;\n- 79 }\n- 80\n- 81private:\n- 82 GridView gv_;\n- 83};\n- 84\n- 85\n- 86} // end of namespace Dune::Functions\n- 87} // end of namespace Dune\n- 88\n- 89#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH\n+ 43 template<class T, int n>\n+44 class ReservedDeque\n+ 45 {\n+ 46 public:\n+ 47\n+51 typedef T value_type;\n+53 typedef T* pointer;\n+55 typedef T& reference;\n+57 typedef const T& const_reference;\n+59 typedef size_t size_type;\n+61 typedef std::ptrdiff_t difference_type;\n+63 typedef Dune::GenericIterator<ReservedDeque, value_type> iterator;\n+65 typedef Dune::GenericIterator<const ReservedDeque, const value_type>\n+const_iterator;\n+ 66\n+72 ReservedDeque() :\n+ 73 size_(0),\n+ 74 first_(0)\n+ 75 {}\n+ 76\n+77 ReservedDeque(std::initializer_list<T> const &l)\n+ 78 {\n+ 79 assert(l.size() <= n);// Actually, this is not needed any more!\n+ 80 size_ = l.size();\n+ 81 std::copy_n(l.begin(), size_, data_);\n+ 82 }\n+ 83\n+89 void clear()\n+ 90 {\n+ 91 first_ = 0;\n+ 92 size_ = 0;\n+ 93 }\n+ 94\n+96 void resize(size_t s)\n+ 97 {\n+ 98 CHECKSIZE(s<=n);\n+ 99 size_ = s;\n+ 100 }\n+ 101\n+103 void push_back(const T& t)\n+ 104 {\n+ 105 CHECKSIZE(size_<n);\n+ 106 data_[size_++ % n] = t;\n+ 107 }\n+ 108\n+110 void push_front(const T& t)\n+ 111 {\n+ 112 CHECKSIZE(size_<n);\n+ 113 ++size_;\n+ 114 first_ = (first_+(n-1)) % n;\n+ 115 data_[first_] = t;\n+ 116 }\n+ 117\n+119 void pop_back()\n+ 120 {\n+ 121 if (! empty())\n+ 122 size_--;\n+ 123 }\n+ 124\n+126 void pop_front()\n+ 127 {\n+ 128 if (! empty())\n+ 129 {\n+ 130 size_--;\n+ 131 first_ = (++first_) % n;\n+ 132 }\n+ 133 }\n+ 134\n+136 iterator begin(){\n+ 137 return iterator(*this, 0);\n+ 138 }\n+ 139\n+141 const_iterator begin() const {\n+ 142 return const_iterator(*this, 0);\n+ 143 }\n+ 144\n+146 iterator end(){\n+ 147 return iterator(*this, size_);\n+ 148 }\n+ 149\n+151 const_iterator end() const {\n+ 152 return const_iterator(*this, size_);\n+ 153 }\n+ 154\n+156 reference operator[](size_type i)\n+ 157 {\n+ 158 CHECKSIZE(size_>i);\n+ 159 return data_[(first_ + i) % n];\n+ 160 }\n+ 161\n+163 const_reference operator[](size_type i) const\n+ 164 {\n+ 165 CHECKSIZE(size_>i);\n+ 166 return data_[(first_ + i) % n];\n+ 167 }\n+ 168\n+170 reference front()\n+ 171 {\n+ 172 CHECKSIZE(size_>0);\n+ 173 return data_[first_];\n+ 174 }\n+ 175\n+177 const_reference front() const\n+ 178 {\n+ 179 CHECKSIZE(size_>0);\n+ 180 return data_[first_];\n+ 181 }\n+ 182\n+184 reference back()\n+ 185 {\n+ 186 CHECKSIZE(size_>0);\n+ 187 return data_[(first_ + size_-1) % n];\n+ 188 }\n+ 189\n+191 const_reference back() const\n+ 192 {\n+ 193 CHECKSIZE(size_>0);\n+ 194 return data_[(first_ + size_-1) % n];\n+ 195 }\n+ 196\n+202 size_type size () const\n+ 203 {\n+ 204 return size_;\n+ 205 }\n+ 206\n+208 bool empty() const\n+ 209 {\n+ 210 return size_==0;\n+ 211 }\n+ 212\n+214 static constexpr size_type capacity()\n+ 215 {\n+ 216 return n;\n+ 217 }\n+ 218\n+220 static constexpr size_type max_size()\n+ 221 {\n+ 222 return n;\n+ 223 }\n+ 224\n+228 friend std::ostream& operator<<(std::ostream& s, const ReservedDeque& v)\n+ 229 {\n+ 230 for (size_t i=0; i<v.size(); i++)\n+ 231 s << v[i] << \" \";\n+ 232 return s;\n+ 233 }\n+ 234\n+ 235 private:\n+ 236 T data_[n];\n+ 237 size_type first_;\n+ 238 size_type size_;\n+ 239 };\n+ 240\n+ 241} // end namespace Functions\n+ 242} // end namespace Dune\n+ 243\n+ 244#undef CHECKSIZE\n+ 245\n+ 246#endif // DUNE_FUNCTIONS_COMMON_RESERVEDDEQUE_HH\n+CHECKSIZE\n+#define CHECKSIZE(X)\n+Definition: reserveddeque.hh:20\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::GridViewEntitySet\n-An entity set for all entities of given codim in a grid view.\n-Definition: gridviewentityset.hh:23\n-Dune::Functions::GridViewEntitySet::GridViewEntitySet\n-GridViewEntitySet(const GridView &gv)\n-Construct GridViewEntitySet for a GridView.\n-Definition: gridviewentityset.hh:47\n-Dune::Functions::GridViewEntitySet::GridView\n-GV GridView\n-Definition: gridviewentityset.hh:26\n-Dune::Functions::GridViewEntitySet::Element\n-GridView::template Codim< codim >::Entity Element\n-Type of Elements contained in this EntitySet.\n-Definition: gridviewentityset.hh:32\n-Dune::Functions::GridViewEntitySet::end\n+Dune::Functions::ReservedDeque\n+A double-ended queue (deque) class with statically reserved memory.\n+Definition: reserveddeque.hh:45\n+Dune::Functions::ReservedDeque::pop_front\n+void pop_front()\n+Erases the first element of the vector, O(1) time.\n+Definition: reserveddeque.hh:126\n+Dune::Functions::ReservedDeque::capacity\n+static constexpr size_type capacity()\n+Returns current capacity (allocated memory) of the vector.\n+Definition: reserveddeque.hh:214\n+Dune::Functions::ReservedDeque::clear\n+void clear()\n+Erases all elements.\n+Definition: reserveddeque.hh:89\n+Dune::Functions::ReservedDeque::iterator\n+Dune::GenericIterator< ReservedDeque, value_type > iterator\n+Iterator used to iterate through a vector.\n+Definition: reserveddeque.hh:63\n+Dune::Functions::ReservedDeque::value_type\n+T value_type\n+The type of object, T, stored in the vector.\n+Definition: reserveddeque.hh:51\n+Dune::Functions::ReservedDeque::ReservedDeque\n+ReservedDeque()\n+Constructor.\n+Definition: reserveddeque.hh:72\n+Dune::Functions::ReservedDeque::empty\n+bool empty() const\n+Returns true if vector has no elements.\n+Definition: reserveddeque.hh:208\n+Dune::Functions::ReservedDeque::back\n+const_reference back() const\n+Returns const reference to last element of vector.\n+Definition: reserveddeque.hh:191\n+Dune::Functions::ReservedDeque::operator<<\n+friend std::ostream & operator<<(std::ostream &s, const ReservedDeque &v)\n+Send ReservedDeque to an output stream.\n+Definition: reserveddeque.hh:228\n+Dune::Functions::ReservedDeque::push_front\n+void push_front(const T &t)\n+Prepends an element to the begin of a deque if size<capacity, O(1) time.\n+Definition: reserveddeque.hh:110\n+Dune::Functions::ReservedDeque::operator[]\n+reference operator[](size_type i)\n+Returns reference to the i'th element.\n+Definition: reserveddeque.hh:156\n+Dune::Functions::ReservedDeque::front\n+reference front()\n+Returns reference to first element of vector.\n+Definition: reserveddeque.hh:170\n+Dune::Functions::ReservedDeque::pointer\n+T * pointer\n+Pointer to T.\n+Definition: reserveddeque.hh:53\n+Dune::Functions::ReservedDeque::front\n+const_reference front() const\n+Returns const reference to first element of vector.\n+Definition: reserveddeque.hh:177\n+Dune::Functions::ReservedDeque::end\n+iterator end()\n+Returns an iterator pointing to the end of the vector.\n+Definition: reserveddeque.hh:146\n+Dune::Functions::ReservedDeque::back\n+reference back()\n+Returns reference to last element of vector.\n+Definition: reserveddeque.hh:184\n+Dune::Functions::ReservedDeque::pop_back\n+void pop_back()\n+Erases the last element of the vector, O(1) time.\n+Definition: reserveddeque.hh:119\n+Dune::Functions::ReservedDeque::const_reference\n+const T & const_reference\n+Const reference to T.\n+Definition: reserveddeque.hh:57\n+Dune::Functions::ReservedDeque::max_size\n+static constexpr size_type max_size()\n+Returns the maximum length of the vector.\n+Definition: reserveddeque.hh:220\n+Dune::Functions::ReservedDeque::difference_type\n+std::ptrdiff_t difference_type\n+A signed integral type.\n+Definition: reserveddeque.hh:61\n+Dune::Functions::ReservedDeque::reference\n+T & reference\n+Reference to T.\n+Definition: reserveddeque.hh:55\n+Dune::Functions::ReservedDeque::const_iterator\n+Dune::GenericIterator< const ReservedDeque, const value_type > const_iterator\n+Const iterator used to iterate through a vector.\n+Definition: reserveddeque.hh:65\n+Dune::Functions::ReservedDeque::size\n+size_type size() const\n+Returns number of elements in the vector.\n+Definition: reserveddeque.hh:202\n+Dune::Functions::ReservedDeque::end\n const_iterator end() const\n-Create an end iterator.\n-Definition: gridviewentityset.hh:70\n-Dune::Functions::GridViewEntitySet::gridView\n-const GridView & gridView() const\n-Return the associated GridView.\n-Definition: gridviewentityset.hh:76\n-Dune::Functions::GridViewEntitySet::value_type\n-Element value_type\n-Definition: gridviewentityset.hh:38\n-Dune::Functions::GridViewEntitySet::begin\n+Returns a const_iterator pointing to the end of the vector.\n+Definition: reserveddeque.hh:151\n+Dune::Functions::ReservedDeque::resize\n+void resize(size_t s)\n+Specifies a new size for the vector.\n+Definition: reserveddeque.hh:96\n+Dune::Functions::ReservedDeque::begin\n+iterator begin()\n+Returns a iterator pointing to the beginning of the vector.\n+Definition: reserveddeque.hh:136\n+Dune::Functions::ReservedDeque::begin\n const_iterator begin() const\n-Create a begin iterator.\n-Definition: gridviewentityset.hh:64\n-Dune::Functions::GridViewEntitySet::const_iterator\n-GridView::template Codim< codim >::Iterator const_iterator\n-A forward iterator.\n-Definition: gridviewentityset.hh:41\n-Dune::Functions::GridViewEntitySet::LocalCoordinate\n-Element::Geometry::LocalCoordinate LocalCoordinate\n-Type of local coordinates with respect to the Element.\n-Definition: gridviewentityset.hh:35\n-Dune::Functions::GridViewEntitySet::size\n-size_t size() const\n-Return number of Elements visited by an iterator.\n-Definition: gridviewentityset.hh:58\n-Dune::Functions::GridViewEntitySet::GlobalCoordinate\n-Element::Geometry::GlobalCoordinate GlobalCoordinate\n-Definition: gridviewentityset.hh:36\n-Dune::Functions::GridViewEntitySet::codim\n-@ codim\n-Definition: gridviewentityset.hh:28\n-Dune::Functions::GridViewEntitySet::contains\n-bool contains(const Element &e) const\n-Return true if e is contained in the EntitySet.\n-Definition: gridviewentityset.hh:52\n-Dune::Functions::GridViewEntitySet::iterator\n-const_iterator iterator\n-Same as const_iterator.\n-Definition: gridviewentityset.hh:44\n+Returns a const_iterator pointing to the beginning of the vector.\n+Definition: reserveddeque.hh:141\n+Dune::Functions::ReservedDeque::ReservedDeque\n+ReservedDeque(std::initializer_list< T > const &l)\n+Definition: reserveddeque.hh:77\n+Dune::Functions::ReservedDeque::size_type\n+size_t size_type\n+An unsigned integral type.\n+Definition: reserveddeque.hh:59\n+Dune::Functions::ReservedDeque::push_back\n+void push_back(const T &t)\n+Appends an element to the end of a vector, up to the maximum size n, O(1) time.\n+Definition: reserveddeque.hh:103\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00026.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00026.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: discreteglobalbasisfunction.hh File Reference</title>\n+<title>dune-functions: interfaces.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,73 +58,40 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n-<a href=\"#namespaces\">Namespaces</a> |\n-<a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">discreteglobalbasisfunction.hh File Reference</div></div>\n+<a href=\"#namespaces\">Namespaces</a> </div>\n+ <div class=\"headertitle\"><div class=\"title\">interfaces.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <memory></code><br />\n-<code>#include <optional></code><br />\n-<code>#include <dune/common/typetraits.hh></code><br />\n-<code>#include <dune/typetree/treecontainer.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00164_source.html\">dune/functions/functionspacebases/hierarchicnodetorangemap.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00128_source.html\">dune/functions/functionspacebases/flatvectorview.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00023_source.html\">dune/functions/gridfunctions/gridviewentityset.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00017_source.html\">dune/functions/gridfunctions/gridfunction.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a02873_source.html\">dune/functions/backends/concepts.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00011_source.html\">dune/functions/backends/istlvectorbackend.hh</a>></code><br />\n+<div class=\"textblock\"><code>#include <type_traits></code><br />\n </div>\n <p><a href=\"a00026_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01859.html\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase< B, V, NTRE ></a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01863.html\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase< B, V, NTRE >::Data</a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01867.html\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase< B, V, NTRE >::LocalFunctionBase</a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01875.html\">Dune::Functions::DiscreteGlobalBasisFunction< B, V, NTRE, R ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A grid function induced by a global basis and a coefficient vector. <a href=\"a01875.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01879.html\">Dune::Functions::DiscreteGlobalBasisFunction< B, V, NTRE, R >::LocalFunction</a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01871.html\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative< DGBF ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Derivative of a <code><a class=\"el\" href=\"a01875.html\" title=\"A grid function induced by a global basis and a coefficient vector.\">DiscreteGlobalBasisFunction</a></code> <a href=\"a01871.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01883.html\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative< DGBF >::LocalFunction</a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">local function evaluating the derivative in reference coordinates <a href=\"a01883.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01239.html\">Dune::Functions::PolymorphicType< Interface ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Base class with polymorphic type boiler plate code. <a href=\"a01239.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a00230\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00230.html\">Dune::Functions::ImplDoc</a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-</table><table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n-Functions</h2></td></tr>\n-<tr class=\"memitem:ga9f1a8d6ac1558adad6150feb9b4e3168\"><td class=\"memTemplParams\" colspan=\"2\">template<typename R , typename B , typename V > </td></tr>\n-<tr class=\"memitem:ga9f1a8d6ac1558adad6150feb9b4e3168\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00209.html#ga9f1a8d6ac1558adad6150feb9b4e3168\">Dune::Functions::makeDiscreteGlobalBasisFunction</a> (B &&basis, V &&vector)</td></tr>\n-<tr class=\"memdesc:ga9f1a8d6ac1558adad6150feb9b4e3168\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Generate a <a class=\"el\" href=\"a01875.html\" title=\"A grid function induced by a global basis and a coefficient vector.\">DiscreteGlobalBasisFunction</a>. <a href=\"a00209.html#ga9f1a8d6ac1558adad6150feb9b4e3168\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga9f1a8d6ac1558adad6150feb9b4e3168\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,61 +4,24 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * gridfunctions\n-Classes | Namespaces | Functions\n-discreteglobalbasisfunction.hh File Reference\n-#include <memory>\n-#include <optional>\n-#include <dune/common/typetraits.hh>\n-#include <dune/typetree/treecontainer.hh>\n-#include <dune/functions/functionspacebases/hierarchicnodetorangemap.hh>\n-#include <dune/functions/functionspacebases/flatvectorview.hh>\n-#include <dune/functions/gridfunctions/gridviewentityset.hh>\n-#include <dune/functions/gridfunctions/gridfunction.hh>\n-#include <dune/functions/backends/concepts.hh>\n-#include <dune/functions/backends/istlvectorbackend.hh>\n+ * common\n+Classes | Namespaces\n+interfaces.hh File Reference\n+#include <type_traits>\n Go_to_the_source_code_of_this_file.\n Classes\n- class \u00a0Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase<_B,_V,_NTRE\n- >\n-\u00a0\n-struct \u00a0Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase<_B,_V,_NTRE\n- >::Data\n-\u00a0\n- class \u00a0Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase<_B,_V,_NTRE\n- >::LocalFunctionBase\n-\u00a0\n- class \u00a0Dune::Functions::DiscreteGlobalBasisFunction<_B,_V,_NTRE,_R_>\n-\u00a0 A grid function induced by a global basis and a coefficient vector.\n- More...\n-\u00a0\n- class \u00a0Dune::Functions::DiscreteGlobalBasisFunction<_B,_V,_NTRE,_R_>::\n- LocalFunction\n-\u00a0\n- class \u00a0Dune::Functions::DiscreteGlobalBasisFunctionDerivative<_DGBF_>\n-\u00a0 Derivative of a DiscreteGlobalBasisFunction More...\n-\u00a0\n- class \u00a0Dune::Functions::DiscreteGlobalBasisFunctionDerivative<_DGBF_>::\n- LocalFunction\n-\u00a0 local function evaluating the derivative in reference coordinates\n- More...\n+class \u00a0Dune::Functions::PolymorphicType<_Interface_>\n+\u00a0 Base class with polymorphic type boiler plate code. More...\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n-namespace \u00a0Dune::Functions::ImplDoc\n-\u00a0\n- Functions\n-template<typename R , typename B , typename V >\n-auto\u00a0Dune::Functions::makeDiscreteGlobalBasisFunction (B &&basis, V &&vector)\n-\u00a0 Generate a DiscreteGlobalBasisFunction. More...\n-\u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00026_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00026_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: discreteglobalbasisfunction.hh Source File</title>\n+<title>dune-functions: interfaces.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,597 +58,60 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">discreteglobalbasisfunction.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">interfaces.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00026.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_DISCRETEGLOBALBASISFUNCTIONS_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_GRIDFUNCTIONS_DISCRETEGLOBALBASISFUNCTIONS_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_INTERFACES_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_INTERFACES_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <memory></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <optional></span></div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <type_traits></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span> </div>\n <div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/common/typetraits.hh></span></div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span> </div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/typetree/treecontainer.hh></span></div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n <div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00164.html\">dune/functions/functionspacebases/hierarchicnodetorangemap.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00128.html\">dune/functions/functionspacebases/flatvectorview.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00023.html\">dune/functions/gridfunctions/gridviewentityset.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00017.html\">dune/functions/gridfunctions/gridfunction.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a02873.html\">dune/functions/backends/concepts.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00011.html\">dune/functions/backends/istlvectorbackend.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> </div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span> </div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00230.html\"> 24</a></span><span class=\"keyword\">namespace </span>ImplDoc {</div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> </div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> B, <span class=\"keyword\">typename</span> V, <span class=\"keyword\">typename</span> NTRE></div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html\"> 27</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01859.html\">DiscreteGlobalBasisFunctionBase</a></div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span>{</div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html#a3692f2d61e9901fcc190337eb0c8d2c3\"> 30</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01859.html#a3692f2d61e9901fcc190337eb0c8d2c3\">Basis</a> = B;</div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html#a4f1c5b75cd112f7524b65de9e68c6f4c\"> 31</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01859.html#a4f1c5b75cd112f7524b65de9e68c6f4c\">Vector</a> = V;</div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> </div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> <span class=\"comment\">// In order to make the cache work for proxy-references</span></div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> <span class=\"comment\">// we have to use AutonomousValue<T> instead of std::decay_t<T></span></div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html#ad8324d107176745d5db37c17e160fb51\"> 35</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01859.html#ad8324d107176745d5db37c17e160fb51\">Coefficient</a> = Dune::AutonomousValue<decltype(std::declval<Vector>()[std::declval<typename Basis::MultiIndex>()])>;</div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> </div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html#a94980a3da72955394fdf377b328aa6cd\"> 37</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01859.html#a94980a3da72955394fdf377b328aa6cd\">GridView</a> = <span class=\"keyword\">typename</span> Basis::GridView;</div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html#aa0f3fc49504b54be8b78cb443b447747\"> 38</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01919.html\">EntitySet</a> = <a class=\"code hl_class\" href=\"a01919.html\">GridViewEntitySet<GridView, 0></a>;</div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html#a3a7684473e5977409b31ad9954d60b17\"> 39</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01859.html#a3a7684473e5977409b31ad9954d60b17\">Tree</a> = <span class=\"keyword\">typename</span> Basis::LocalView::Tree;</div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html#a919c73d3602d7770ab2aa6ec9beaa2df\"> 40</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01859.html#a919c73d3602d7770ab2aa6ec9beaa2df\">NodeToRangeEntry</a> = NTRE;</div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Interface></div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01239.html\"> 24</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01239.html\">PolymorphicType</a></div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span>{</div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> </div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01239.html#ae65ec09f3c0f320f0e5890c3e028fa2a\"> 29</a></span> <span class=\"keyword\">virtual</span> <a class=\"code hl_function\" href=\"a01239.html#ae65ec09f3c0f320f0e5890c3e028fa2a\">~PolymorphicType</a>()</div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> {}</div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> </div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01239.html#a56439d136ed112196bb2bf1a7aca42e7\"> 40</a></span> <span class=\"keyword\">virtual</span> Interface* <a class=\"code hl_function\" href=\"a01239.html#a56439d136ed112196bb2bf1a7aca42e7\">clone</a>() <span class=\"keyword\">const</span> = 0;</div>\n <div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> </div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html#ac531ebbef4d77df5dd685f2f26024f95\"> 42</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01859.html#ac531ebbef4d77df5dd685f2f26024f95\">Domain</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01919.html#ac4e3d0188467b4be3d195c9f5729e629\">EntitySet::GlobalCoordinate</a>;</div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> </div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html#a778a8d51295ab8988578c8ec5c80f15a\"> 44</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01859.html#a778a8d51295ab8988578c8ec5c80f15a\">LocalDomain</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01919.html#aa4368ad66f18ba8279f20ab7a794069d\">EntitySet::LocalCoordinate</a>;</div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html#a7669d95a17a5a94621074923290978b7\"> 45</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01859.html#a7669d95a17a5a94621074923290978b7\">Element</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01919.html#a1d5eaf3facd0219b2e150d964a664752\">EntitySet::Element</a>;</div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> </div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span><span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> </div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> <span class=\"comment\">// This collects all data that is shared by all related</span></div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> <span class=\"comment\">// global and local functions. This way we don't need to</span></div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> <span class=\"comment\">// keep track of it individually.</span></div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01863.html\"> 52</a></span> <span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01863.html\">Data</a></div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> {</div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01863.html#a869d1890dea002afea9673d30bf7a6f9\"> 54</a></span> <a class=\"code hl_class\" href=\"a01919.html\">EntitySet</a> <a class=\"code hl_variable\" href=\"a01863.html#a869d1890dea002afea9673d30bf7a6f9\">entitySet</a>;</div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01863.html#aa8af2b92d6781bed52269bfaf15a03d7\"> 55</a></span> std::shared_ptr<const Basis> <a class=\"code hl_variable\" href=\"a01863.html#aa8af2b92d6781bed52269bfaf15a03d7\">basis</a>;</div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01863.html#ab0ba9b881560f475ebfbc8245e898f06\"> 56</a></span> std::shared_ptr<const Vector> <a class=\"code hl_variable\" href=\"a01863.html#ab0ba9b881560f475ebfbc8245e898f06\">coefficients</a>;</div>\n-<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01863.html#a8806af774b27a785e8a4eb0d58df560c\"> 57</a></span> std::shared_ptr<const NodeToRangeEntry> <a class=\"code hl_variable\" href=\"a01863.html#a8806af774b27a785e8a4eb0d58df560c\">nodeToRangeEntry</a>;</div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> };</div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> </div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01867.html\"> 61</a></span> <span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01867.html\">LocalFunctionBase</a></div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> {</div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> <span class=\"keyword\">using </span>LocalView = <span class=\"keyword\">typename</span> Basis::LocalView;</div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> <span class=\"keyword\">using </span>size_type = <span class=\"keyword\">typename</span> Tree::size_type;</div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01239.html#a342f459670ff8ac9ef58314a95ca972d\"> 51</a></span> <span class=\"keyword\">virtual</span> Interface* <a class=\"code hl_function\" href=\"a01239.html#a342f459670ff8ac9ef58314a95ca972d\">clone</a>(<span class=\"keywordtype\">void</span>* buffer) <span class=\"keyword\">const</span> = 0;</div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> </div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01239.html#a937e58884f58dfac27f85c80024be57c\"> 62</a></span> <span class=\"keyword\">virtual</span> Interface* <a class=\"code hl_function\" href=\"a01239.html#a937e58884f58dfac27f85c80024be57c\">move</a>(<span class=\"keywordtype\">void</span>* buffer) = 0;</div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span>};</div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> </div>\n <div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> </div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> <span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01867.html#aed06cdee2f1095692d99f2b70b9e08cf\"> 67</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01867.html#aed06cdee2f1095692d99f2b70b9e08cf\">Domain</a> = <a class=\"code hl_typedef\" href=\"a01859.html#a778a8d51295ab8988578c8ec5c80f15a\">LocalDomain</a>;</div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01867.html#a8d6caba81e31526ba3a7d66b1ab299a3\"> 68</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01867.html#a8d6caba81e31526ba3a7d66b1ab299a3\">Element</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01919.html#a1d5eaf3facd0219b2e150d964a664752\">EntitySet::Element</a>;</div>\n-<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> </div>\n-<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> <span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01867.html#afabe7cb22621b6a62e3b2f58b2ce9a96\"> 71</a></span> <a class=\"code hl_function\" href=\"a01867.html#afabe7cb22621b6a62e3b2f58b2ce9a96\">LocalFunctionBase</a>(<span class=\"keyword\">const</span> std::shared_ptr<const Data>& data)</div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> : <a class=\"code hl_variable\" href=\"a01867.html#ac19ebafe7e6f57872bf25b9c91718487\">data_</a>(data)</div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> , <a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>(<a class=\"code hl_variable\" href=\"a01867.html#ac19ebafe7e6f57872bf25b9c91718487\">data_</a>-><a class=\"code hl_function\" href=\"a01859.html#a99bd572882384ae95a30297f0797d769\">basis</a>->localView())</div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> {</div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> <a class=\"code hl_variable\" href=\"a01867.html#aa62fc9b9cfde610dea2e5fedfc5c6f83\">localDoFs_</a>.reserve(<a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>.maxSize());</div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> }</div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> </div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01867.html#aa33d4463ef895fc15aba8b8eaedf3506\"> 84</a></span> <a class=\"code hl_function\" href=\"a01867.html#aa33d4463ef895fc15aba8b8eaedf3506\">LocalFunctionBase</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01867.html\">LocalFunctionBase</a>& other)</div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> : <a class=\"code hl_variable\" href=\"a01867.html#ac19ebafe7e6f57872bf25b9c91718487\">data_</a>(other.<a class=\"code hl_variable\" href=\"a01867.html#ac19ebafe7e6f57872bf25b9c91718487\">data_</a>)</div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> , <a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>(other.<a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>)</div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> {</div>\n-<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> <a class=\"code hl_variable\" href=\"a01867.html#aa62fc9b9cfde610dea2e5fedfc5c6f83\">localDoFs_</a>.reserve(<a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>.maxSize());</div>\n-<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> <span class=\"keywordflow\">if</span> (<a class=\"code hl_function\" href=\"a01867.html#a28431fd8e25a148fc8c203a0b8394ac5\">bound</a>())</div>\n-<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> <a class=\"code hl_variable\" href=\"a01867.html#aa62fc9b9cfde610dea2e5fedfc5c6f83\">localDoFs_</a> = other.<a class=\"code hl_variable\" href=\"a01867.html#aa62fc9b9cfde610dea2e5fedfc5c6f83\">localDoFs_</a>;</div>\n-<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> }</div>\n-<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> </div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01867.html#a253e2dcc1809bca0e981c132e6d4770c\"> 100</a></span> <a class=\"code hl_class\" href=\"a01867.html\">LocalFunctionBase</a>& <a class=\"code hl_function\" href=\"a01867.html#a253e2dcc1809bca0e981c132e6d4770c\">operator=</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01867.html\">LocalFunctionBase</a>& other)</div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> {</div>\n-<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> <a class=\"code hl_variable\" href=\"a01867.html#ac19ebafe7e6f57872bf25b9c91718487\">data_</a> = other.<a class=\"code hl_variable\" href=\"a01867.html#ac19ebafe7e6f57872bf25b9c91718487\">data_</a>;</div>\n-<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> <a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a> = other.<a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>;</div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> <span class=\"keywordflow\">if</span> (<a class=\"code hl_function\" href=\"a01867.html#a28431fd8e25a148fc8c203a0b8394ac5\">bound</a>())</div>\n-<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> <a class=\"code hl_variable\" href=\"a01867.html#aa62fc9b9cfde610dea2e5fedfc5c6f83\">localDoFs_</a> = other.<a class=\"code hl_variable\" href=\"a01867.html#aa62fc9b9cfde610dea2e5fedfc5c6f83\">localDoFs_</a>;</div>\n-<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>;</div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> }</div>\n-<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> </div>\n-<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> <span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01867.html#a67e646a96343c7f80528fe2f82a7ee54\"> 116</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01867.html#a67e646a96343c7f80528fe2f82a7ee54\">bind</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01867.html#a8d6caba81e31526ba3a7d66b1ab299a3\">Element</a>& element)</div>\n-<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> {</div>\n-<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> <a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>.bind(element);</div>\n-<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> <span class=\"comment\">// Use cache of full local view size. For a subspace basis,</span></div>\n-<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> <span class=\"comment\">// this may be larger than the number of local DOFs in the</span></div>\n-<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> <span class=\"comment\">// tree. In this case only cache entries associated to local</span></div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> <span class=\"comment\">// DOFs in the subspace are filled. Cache entries associated</span></div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> <span class=\"comment\">// to local DOFs which are not contained in the subspace will</span></div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> <span class=\"comment\">// not be touched.</span></div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> <span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> <span class=\"comment\">// Alternatively one could use a cache that exactly fits</span></div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> <span class=\"comment\">// the size of the tree. However, this would require to</span></div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> <span class=\"comment\">// subtract an offset from localIndex(i) on each cache</span></div>\n-<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> <span class=\"comment\">// access in operator().</span></div>\n-<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> <a class=\"code hl_variable\" href=\"a01867.html#aa62fc9b9cfde610dea2e5fedfc5c6f83\">localDoFs_</a>.resize(<a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>.size());</div>\n-<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& <a class=\"code hl_function\" href=\"a01859.html#a185c69d8397b09a1b74eb56cf62f40c6\">dofs</a> = *<a class=\"code hl_variable\" href=\"a01867.html#ac19ebafe7e6f57872bf25b9c91718487\">data_</a>->coefficients;</div>\n-<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> <span class=\"keywordflow\">for</span> (size_type i = 0; i < <a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>.tree().size(); ++i)</div>\n-<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> {</div>\n-<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> <span class=\"comment\">// For a subspace basis the index-within-tree i</span></div>\n-<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> <span class=\"comment\">// is not the same as the localIndex within the</span></div>\n-<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> <span class=\"comment\">// full local view.</span></div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> <span class=\"keywordtype\">size_t</span> localIndex = <a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>.tree().localIndex(i);</div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> <a class=\"code hl_variable\" href=\"a01867.html#aa62fc9b9cfde610dea2e5fedfc5c6f83\">localDoFs_</a>[localIndex] = <a class=\"code hl_function\" href=\"a01859.html#a185c69d8397b09a1b74eb56cf62f40c6\">dofs</a>[<a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>.index(localIndex)];</div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> }</div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> }</div>\n-<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> </div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01867.html#ae5b6f77f23f1f5f28db616390dfa5d95\"> 143</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01867.html#ae5b6f77f23f1f5f28db616390dfa5d95\">unbind</a>()</div>\n-<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> {</div>\n-<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> <a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>.unbind();</div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> }</div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> </div>\n-<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01867.html#a28431fd8e25a148fc8c203a0b8394ac5\"> 149</a></span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a01867.html#a28431fd8e25a148fc8c203a0b8394ac5\">bound</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>.bound();</div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> }</div>\n-<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> </div>\n-<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01867.html#a8daa49aa0c6c0d333460ebe354c3988b\"> 155</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01867.html#a8d6caba81e31526ba3a7d66b1ab299a3\">Element</a>& <a class=\"code hl_function\" href=\"a01867.html#a8daa49aa0c6c0d333460ebe354c3988b\">localContext</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>.element();</div>\n-<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> }</div>\n-<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> </div>\n-<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> <span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> </div>\n-<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> To, <span class=\"keyword\">class</span> From></div>\n-<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01867.html#abf8dc20ea65b2fd88df03377f9a703dc\"> 163</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01867.html#abf8dc20ea65b2fd88df03377f9a703dc\">assignWith</a>(To& to, <span class=\"keyword\">const</span> From& from)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> <span class=\"keyword\">auto</span> from_flat = <a class=\"code hl_function\" href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\">flatVectorView</a>(from);</div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> <span class=\"keyword\">auto</span> to_flat = <a class=\"code hl_function\" href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\">flatVectorView</a>(to);</div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> assert(from_flat.size() == to_flat.size());</div>\n-<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> <span class=\"keywordflow\">for</span> (size_type i = 0; i < to_flat.size(); ++i)</div>\n-<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> to_flat[i] = from_flat[i];</div>\n-<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> }</div>\n-<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> </div>\n-<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Node, <span class=\"keyword\">class</span> TreePath, <span class=\"keyword\">class</span> Range></div>\n-<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01867.html#ac929b2a99a94dc5e5c5f4bd1404716c5\"> 173</a></span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <a class=\"code hl_function\" href=\"a01867.html#ac929b2a99a94dc5e5c5f4bd1404716c5\">nodeToRangeEntry</a>(<span class=\"keyword\">const</span> Node& node, <span class=\"keyword\">const</span> TreePath& treePath, Range& y) <span class=\"keyword\">const</span></div>\n-<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> {</div>\n-<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> <span class=\"keywordflow\">return</span> (*<a class=\"code hl_variable\" href=\"a01867.html#ac19ebafe7e6f57872bf25b9c91718487\">data_</a>->nodeToRangeEntry)(node, treePath, y);</div>\n-<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> }</div>\n-<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> </div>\n-<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01867.html#ac19ebafe7e6f57872bf25b9c91718487\"> 178</a></span> std::shared_ptr<const Data> <a class=\"code hl_variable\" href=\"a01867.html#ac19ebafe7e6f57872bf25b9c91718487\">data_</a>;</div>\n-<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\"> 179</a></span> LocalView <a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>;</div>\n-<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01867.html#aa62fc9b9cfde610dea2e5fedfc5c6f83\"> 180</a></span> std::vector<Coefficient> <a class=\"code hl_variable\" href=\"a01867.html#aa62fc9b9cfde610dea2e5fedfc5c6f83\">localDoFs_</a>;</div>\n-<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> };</div>\n-<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> </div>\n-<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span><span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html#a91a8cf0d245095a4c91615f42ffb4f4c\"> 184</a></span> <a class=\"code hl_function\" href=\"a01859.html#a91a8cf0d245095a4c91615f42ffb4f4c\">DiscreteGlobalBasisFunctionBase</a>(<span class=\"keyword\">const</span> std::shared_ptr<const Data>& data)</div>\n-<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> : <a class=\"code hl_variable\" href=\"a01859.html#a0251d9a5ba7ae012993ed75089870604\">data_</a>(data)</div>\n-<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> {</div>\n-<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> <span class=\"comment\">/* Nothing. */</span></div>\n-<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> }</div>\n-<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> </div>\n-<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> </div>\n-<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html#a99bd572882384ae95a30297f0797d769\"> 193</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01859.html#a3692f2d61e9901fcc190337eb0c8d2c3\">Basis</a>& <a class=\"code hl_function\" href=\"a01859.html#a99bd572882384ae95a30297f0797d769\">basis</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> <span class=\"keywordflow\">return</span> *<a class=\"code hl_variable\" href=\"a01859.html#a0251d9a5ba7ae012993ed75089870604\">data_</a>->basis;</div>\n-<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> }</div>\n-<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> </div>\n-<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html#a185c69d8397b09a1b74eb56cf62f40c6\"> 199</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01859.html#a4f1c5b75cd112f7524b65de9e68c6f4c\">Vector</a>& <a class=\"code hl_function\" href=\"a01859.html#a185c69d8397b09a1b74eb56cf62f40c6\">dofs</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> <span class=\"keywordflow\">return</span> *<a class=\"code hl_variable\" href=\"a01859.html#a0251d9a5ba7ae012993ed75089870604\">data_</a>->coefficients;</div>\n-<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> }</div>\n-<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> </div>\n-<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html#a8b079bb398dc95ba48399e66e05aa0fa\"> 205</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01859.html#a919c73d3602d7770ab2aa6ec9beaa2df\">NodeToRangeEntry</a>& <a class=\"code hl_function\" href=\"a01859.html#a8b079bb398dc95ba48399e66e05aa0fa\">nodeToRangeEntry</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> <span class=\"keywordflow\">return</span> *<a class=\"code hl_variable\" href=\"a01859.html#a0251d9a5ba7ae012993ed75089870604\">data_</a>->nodeToRangeEntry;</div>\n-<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span> }</div>\n-<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> </div>\n-<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html#ab0e59b1504a825f12634528b132a1448\"> 211</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01919.html\">EntitySet</a>& <a class=\"code hl_function\" href=\"a01859.html#ab0e59b1504a825f12634528b132a1448\">entitySet</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"> 212</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01859.html#a0251d9a5ba7ae012993ed75089870604\">data_</a>->entitySet;</div>\n-<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> }</div>\n-<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> </div>\n-<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span><span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html#a0251d9a5ba7ae012993ed75089870604\"> 217</a></span> std::shared_ptr<const Data> <a class=\"code hl_variable\" href=\"a01859.html#a0251d9a5ba7ae012993ed75089870604\">data_</a>;</div>\n-<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span>};</div>\n-<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> </div>\n-<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span>} <span class=\"comment\">// namespace ImplDoc</span></div>\n-<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> </div>\n-<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span> </div>\n-<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> </div>\n-<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> DGBF></div>\n-<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01871.html\">DiscreteGlobalBasisFunctionDerivative</a>;</div>\n-<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> </div>\n-<div class=\"line\"><a id=\"l00264\" name=\"l00264\"></a><span class=\"lineno\"> 264</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> B, <span class=\"keyword\">typename</span> V,</div>\n-<div class=\"line\"><a id=\"l00265\" name=\"l00265\"></a><span class=\"lineno\"> 265</span> <span class=\"keyword\">typename</span> NTRE = <a class=\"code hl_struct\" href=\"a01627.html\">HierarchicNodeToRangeMap</a>,</div>\n-<div class=\"line\"><a id=\"l00266\" name=\"l00266\"></a><span class=\"lineno\"> 266</span> <span class=\"keyword\">typename</span> R = <span class=\"keyword\">typename</span> V::value_type></div>\n-<div class=\"line\"><a id=\"l00267\" name=\"l00267\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01875.html\"> 267</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01875.html\">DiscreteGlobalBasisFunction</a></div>\n-<div class=\"line\"><a id=\"l00268\" name=\"l00268\"></a><span class=\"lineno\"> 268</span> : <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01859.html\">ImplDoc::DiscreteGlobalBasisFunctionBase</a><B, V, NTRE></div>\n-<div class=\"line\"><a id=\"l00269\" name=\"l00269\"></a><span class=\"lineno\"> 269</span>{</div>\n-<div class=\"line\"><a id=\"l00270\" name=\"l00270\"></a><span class=\"lineno\"> 270</span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01859.html\">Base</a> = <a class=\"code hl_class\" href=\"a01859.html\">ImplDoc::DiscreteGlobalBasisFunctionBase<B, V, NTRE></a>;</div>\n-<div class=\"line\"><a id=\"l00271\" name=\"l00271\"></a><span class=\"lineno\"> 271</span> <span class=\"keyword\">using </span>Data = <span class=\"keyword\">typename</span> <a class=\"code hl_struct\" href=\"a01863.html\">Base::Data</a>;</div>\n-<div class=\"line\"><a id=\"l00272\" name=\"l00272\"></a><span class=\"lineno\"> 272</span> </div>\n-<div class=\"line\"><a id=\"l00273\" name=\"l00273\"></a><span class=\"lineno\"> 273</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00274\" name=\"l00274\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01875.html#a762b42975185ccea60c8197341862cca\"> 274</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01875.html#a762b42975185ccea60c8197341862cca\">Basis</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01859.html#a3692f2d61e9901fcc190337eb0c8d2c3\">Base::Basis</a>;</div>\n-<div class=\"line\"><a id=\"l00275\" name=\"l00275\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01875.html#ace9d1aac90e09365577516e06fb148a4\"> 275</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01875.html#ace9d1aac90e09365577516e06fb148a4\">Vector</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01859.html#a4f1c5b75cd112f7524b65de9e68c6f4c\">Base::Vector</a>;</div>\n-<div class=\"line\"><a id=\"l00276\" name=\"l00276\"></a><span class=\"lineno\"> 276</span> </div>\n-<div class=\"line\"><a id=\"l00277\" name=\"l00277\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01875.html#aeb0a34de4cd353524e324cc57591a432\"> 277</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01875.html#aeb0a34de4cd353524e324cc57591a432\">Domain</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01859.html#ac531ebbef4d77df5dd685f2f26024f95\">Base::Domain</a>;</div>\n-<div class=\"line\"><a id=\"l00278\" name=\"l00278\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01875.html#aca6beda0ac337eb862bd6540f71f7d29\"> 278</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01875.html#aca6beda0ac337eb862bd6540f71f7d29\">Range</a> = R;</div>\n-<div class=\"line\"><a id=\"l00279\" name=\"l00279\"></a><span class=\"lineno\"> 279</span> </div>\n-<div class=\"line\"><a id=\"l00280\" name=\"l00280\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01875.html#ab308263b7fd188c267709c7bc0b47568\"> 280</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01875.html#ab308263b7fd188c267709c7bc0b47568\">Traits</a> = Imp::GridFunctionTraits<<a class=\"code hl_typedef\" href=\"a01875.html#aca6beda0ac337eb862bd6540f71f7d29\">Range</a>(<a class=\"code hl_typedef\" href=\"a01875.html#aeb0a34de4cd353524e324cc57591a432\">Domain</a>), <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01859.html#aa0f3fc49504b54be8b78cb443b447747\">Base::EntitySet</a>, <a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a>, 16>;</div>\n-<div class=\"line\"><a id=\"l00281\" name=\"l00281\"></a><span class=\"lineno\"> 281</span> </div>\n-<div class=\"line\"><a id=\"l00282\" name=\"l00282\"></a><span class=\"lineno\"> 282</span><span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00283\" name=\"l00283\"></a><span class=\"lineno\"> 283</span> </div>\n-<div class=\"line\"><a id=\"l00284\" name=\"l00284\"></a><span class=\"lineno\"> 284</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Node></div>\n-<div class=\"line\"><a id=\"l00285\" name=\"l00285\"></a><span class=\"lineno\"> 285</span> <span class=\"keyword\">using </span>LocalBasisRange = <span class=\"keyword\">typename</span> Node::FiniteElement::Traits::LocalBasisType::Traits::RangeType;</div>\n-<div class=\"line\"><a id=\"l00286\" name=\"l00286\"></a><span class=\"lineno\"> 286</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Node></div>\n-<div class=\"line\"><a id=\"l00287\" name=\"l00287\"></a><span class=\"lineno\"> 287</span> <span class=\"keyword\">using </span>NodeData = <span class=\"keyword\">typename</span> std::vector<LocalBasisRange<Node>>;</div>\n-<div class=\"line\"><a id=\"l00288\" name=\"l00288\"></a><span class=\"lineno\"> 288</span> <span class=\"keyword\">using </span>PerNodeEvaluationBuffer = <span class=\"keyword\">typename</span> TypeTree::TreeContainer<NodeData, typename Base::Tree>;</div>\n-<div class=\"line\"><a id=\"l00289\" name=\"l00289\"></a><span class=\"lineno\"> 289</span> </div>\n-<div class=\"line\"><a id=\"l00290\" name=\"l00290\"></a><span class=\"lineno\"> 290</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00291\" name=\"l00291\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01879.html\"> 291</a></span> <span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01879.html\">LocalFunction</a></div>\n-<div class=\"line\"><a id=\"l00292\" name=\"l00292\"></a><span class=\"lineno\"> 292</span> : <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01867.html\">Base::LocalFunctionBase</a></div>\n-<div class=\"line\"><a id=\"l00293\" name=\"l00293\"></a><span class=\"lineno\"> 293</span> {</div>\n-<div class=\"line\"><a id=\"l00294\" name=\"l00294\"></a><span class=\"lineno\"> 294</span> <span class=\"keyword\">using </span>LocalBase = <span class=\"keyword\">typename</span> <a class=\"code hl_class\" href=\"a01867.html\">Base::LocalFunctionBase</a>;</div>\n-<div class=\"line\"><a id=\"l00295\" name=\"l00295\"></a><span class=\"lineno\"> 295</span> <span class=\"keyword\">using </span>size_type = <span class=\"keyword\">typename</span> Base::Tree::size_type;</div>\n-<div class=\"line\"><a id=\"l00296\" name=\"l00296\"></a><span class=\"lineno\"> 296</span> <span class=\"keyword\">using </span>LocalBase::nodeToRangeEntry;</div>\n-<div class=\"line\"><a id=\"l00297\" name=\"l00297\"></a><span class=\"lineno\"> 297</span> </div>\n-<div class=\"line\"><a id=\"l00298\" name=\"l00298\"></a><span class=\"lineno\"> 298</span> <span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00299\" name=\"l00299\"></a><span class=\"lineno\"> 299</span> </div>\n-<div class=\"line\"><a id=\"l00300\" name=\"l00300\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01879.html#ad174c6153326476457e6f51bca4a282d\"> 300</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01875.html\">GlobalFunction</a> = <a class=\"code hl_function\" href=\"a01875.html#a51960f49c44a04d5381bbe370a8d6faf\">DiscreteGlobalBasisFunction</a>;</div>\n-<div class=\"line\"><a id=\"l00301\" name=\"l00301\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01879.html#aa94028ce59c8f84dd0fd0b9681af6b90\"> 301</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01867.html#aed06cdee2f1095692d99f2b70b9e08cf\">Domain</a> = <span class=\"keyword\">typename</span> LocalBase::Domain;</div>\n-<div class=\"line\"><a id=\"l00302\" name=\"l00302\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01879.html#a8b339405cc5358cfdac2d3775c590acd\"> 302</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01879.html#a8b339405cc5358cfdac2d3775c590acd\">Range</a> = <a class=\"code hl_typedef\" href=\"a01875.html#aca6beda0ac337eb862bd6540f71f7d29\">GlobalFunction::Range</a>;</div>\n-<div class=\"line\"><a id=\"l00303\" name=\"l00303\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01879.html#aeee5259672e13f6a96cc80af2179a49b\"> 303</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01867.html#a8d6caba81e31526ba3a7d66b1ab299a3\">Element</a> = <span class=\"keyword\">typename</span> LocalBase::Element;</div>\n-<div class=\"line\"><a id=\"l00304\" name=\"l00304\"></a><span class=\"lineno\"> 304</span> </div>\n-<div class=\"line\"><a id=\"l00306\" name=\"l00306\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01879.html#ab5ae226004affb757598beabae1ff888\"> 306</a></span> <a class=\"code hl_function\" href=\"a01879.html#ab5ae226004affb757598beabae1ff888\">LocalFunction</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01875.html\">DiscreteGlobalBasisFunction</a>& globalFunction)</div>\n-<div class=\"line\"><a id=\"l00307\" name=\"l00307\"></a><span class=\"lineno\"> 307</span> : LocalBase(globalFunction.<a class=\"code hl_variable\" href=\"a01867.html#ac19ebafe7e6f57872bf25b9c91718487\">data_</a>)</div>\n-<div class=\"line\"><a id=\"l00308\" name=\"l00308\"></a><span class=\"lineno\"> 308</span> , evaluationBuffer_(this-><a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>.tree())</div>\n-<div class=\"line\"><a id=\"l00309\" name=\"l00309\"></a><span class=\"lineno\"> 309</span> {</div>\n-<div class=\"line\"><a id=\"l00310\" name=\"l00310\"></a><span class=\"lineno\"> 310</span> <span class=\"comment\">/* Nothing. */</span></div>\n-<div class=\"line\"><a id=\"l00311\" name=\"l00311\"></a><span class=\"lineno\"> 311</span> }</div>\n-<div class=\"line\"><a id=\"l00312\" name=\"l00312\"></a><span class=\"lineno\"> 312</span> </div>\n-<div class=\"line\"><a id=\"l00322\" name=\"l00322\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01879.html#adb064f66b447712a2c36534c2256c357\"> 322</a></span> <a class=\"code hl_typedef\" href=\"a01879.html#a8b339405cc5358cfdac2d3775c590acd\">Range</a> <a class=\"code hl_function\" href=\"a01879.html#adb064f66b447712a2c36534c2256c357\">operator()</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01867.html#aed06cdee2f1095692d99f2b70b9e08cf\">Domain</a>& x)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00323\" name=\"l00323\"></a><span class=\"lineno\"> 323</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00324\" name=\"l00324\"></a><span class=\"lineno\"> 324</span> <a class=\"code hl_typedef\" href=\"a01879.html#a8b339405cc5358cfdac2d3775c590acd\">Range</a> y;</div>\n-<div class=\"line\"><a id=\"l00325\" name=\"l00325\"></a><span class=\"lineno\"> 325</span> <a class=\"code hl_function\" href=\"a00214.html#gae5b9f62f85e3d638423142695a74d056\">istlVectorBackend</a>(y) = 0;</div>\n-<div class=\"line\"><a id=\"l00326\" name=\"l00326\"></a><span class=\"lineno\"> 326</span> </div>\n-<div class=\"line\"><a id=\"l00327\" name=\"l00327\"></a><span class=\"lineno\"> 327</span> TypeTree::forEachLeafNode(this-><a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>.tree(), [&](<span class=\"keyword\">auto</span>&& node, <span class=\"keyword\">auto</span>&& treePath) {</div>\n-<div class=\"line\"><a id=\"l00328\" name=\"l00328\"></a><span class=\"lineno\"> 328</span> const auto& fe = node.finiteElement();</div>\n-<div class=\"line\"><a id=\"l00329\" name=\"l00329\"></a><span class=\"lineno\"> 329</span> const auto& localBasis = fe.localBasis();</div>\n-<div class=\"line\"><a id=\"l00330\" name=\"l00330\"></a><span class=\"lineno\"> 330</span> auto& shapeFunctionValues = evaluationBuffer_[treePath];</div>\n-<div class=\"line\"><a id=\"l00331\" name=\"l00331\"></a><span class=\"lineno\"> 331</span> </div>\n-<div class=\"line\"><a id=\"l00332\" name=\"l00332\"></a><span class=\"lineno\"> 332</span> localBasis.evaluateFunction(x, shapeFunctionValues);</div>\n-<div class=\"line\"><a id=\"l00333\" name=\"l00333\"></a><span class=\"lineno\"> 333</span> </div>\n-<div class=\"line\"><a id=\"l00334\" name=\"l00334\"></a><span class=\"lineno\"> 334</span> <span class=\"comment\">// Compute linear combinations of basis function jacobian.</span></div>\n-<div class=\"line\"><a id=\"l00335\" name=\"l00335\"></a><span class=\"lineno\"> 335</span> <span class=\"comment\">// Non-scalar coefficients of dimension coeffDim are handled by</span></div>\n-<div class=\"line\"><a id=\"l00336\" name=\"l00336\"></a><span class=\"lineno\"> 336</span> <span class=\"comment\">// processing the coeffDim linear combinations independently</span></div>\n-<div class=\"line\"><a id=\"l00337\" name=\"l00337\"></a><span class=\"lineno\"> 337</span> <span class=\"comment\">// and storing them as entries of an array.</span></div>\n-<div class=\"line\"><a id=\"l00338\" name=\"l00338\"></a><span class=\"lineno\"> 338</span> using Value = LocalBasisRange< std::decay_t<decltype(node)> >;</div>\n-<div class=\"line\"><a id=\"l00339\" name=\"l00339\"></a><span class=\"lineno\"> 339</span> static constexpr auto coeffDim = decltype(flatVectorView(this->localDoFs_[node.localIndex(0)]).size())::value;</div>\n-<div class=\"line\"><a id=\"l00340\" name=\"l00340\"></a><span class=\"lineno\"> 340</span> auto values = std::array<Value, coeffDim>{};</div>\n-<div class=\"line\"><a id=\"l00341\" name=\"l00341\"></a><span class=\"lineno\"> 341</span> <a class=\"code hl_function\" href=\"a00214.html#gae5b9f62f85e3d638423142695a74d056\">istlVectorBackend</a>(values) = 0;</div>\n-<div class=\"line\"><a id=\"l00342\" name=\"l00342\"></a><span class=\"lineno\"> 342</span> <span class=\"keywordflow\">for</span> (size_type i = 0; i < localBasis.size(); ++i)</div>\n-<div class=\"line\"><a id=\"l00343\" name=\"l00343\"></a><span class=\"lineno\"> 343</span> {</div>\n-<div class=\"line\"><a id=\"l00344\" name=\"l00344\"></a><span class=\"lineno\"> 344</span> <span class=\"keyword\">auto</span> c = <a class=\"code hl_function\" href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\">flatVectorView</a>(this-><a class=\"code hl_variable\" href=\"a01867.html#aa62fc9b9cfde610dea2e5fedfc5c6f83\">localDoFs_</a>[node.localIndex(i)]);</div>\n-<div class=\"line\"><a id=\"l00345\" name=\"l00345\"></a><span class=\"lineno\"> 345</span> <span class=\"keywordflow\">for</span> (std::size_t j = 0; j < coeffDim; ++j)</div>\n-<div class=\"line\"><a id=\"l00346\" name=\"l00346\"></a><span class=\"lineno\"> 346</span> values[j].axpy(c[j], shapeFunctionValues[i]);</div>\n-<div class=\"line\"><a id=\"l00347\" name=\"l00347\"></a><span class=\"lineno\"> 347</span> }</div>\n-<div class=\"line\"><a id=\"l00348\" name=\"l00348\"></a><span class=\"lineno\"> 348</span> </div>\n-<div class=\"line\"><a id=\"l00349\" name=\"l00349\"></a><span class=\"lineno\"> 349</span> <span class=\"comment\">// Assign computed values to node entry of range.</span></div>\n-<div class=\"line\"><a id=\"l00350\" name=\"l00350\"></a><span class=\"lineno\"> 350</span> <span class=\"comment\">// Types are matched using the lexicographic ordering provided by flatVectorView.</span></div>\n-<div class=\"line\"><a id=\"l00351\" name=\"l00351\"></a><span class=\"lineno\"> 351</span> LocalBase::assignWith(<a class=\"code hl_function\" href=\"a01867.html#ac929b2a99a94dc5e5c5f4bd1404716c5\">nodeToRangeEntry</a>(node, treePath, y), values);</div>\n-<div class=\"line\"><a id=\"l00352\" name=\"l00352\"></a><span class=\"lineno\"> 352</span> });</div>\n-<div class=\"line\"><a id=\"l00353\" name=\"l00353\"></a><span class=\"lineno\"> 353</span> </div>\n-<div class=\"line\"><a id=\"l00354\" name=\"l00354\"></a><span class=\"lineno\"> 354</span> <span class=\"keywordflow\">return</span> y;</div>\n-<div class=\"line\"><a id=\"l00355\" name=\"l00355\"></a><span class=\"lineno\"> 355</span> }</div>\n-<div class=\"line\"><a id=\"l00356\" name=\"l00356\"></a><span class=\"lineno\"> 356</span> </div>\n-<div class=\"line\"><a id=\"l00358\" name=\"l00358\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01879.html#abcf8db8c634fdb5cfd2a6af1767b6445\"> 358</a></span> <span class=\"keyword\">friend</span> <span class=\"keyword\">typename</span> <a class=\"code hl_class\" href=\"a01883.html\">DiscreteGlobalBasisFunctionDerivative<DiscreteGlobalBasisFunction>::LocalFunction</a> <a class=\"code hl_friend\" href=\"a01879.html#abcf8db8c634fdb5cfd2a6af1767b6445\">derivative</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01879.html\">LocalFunction</a>& lf)</div>\n-<div class=\"line\"><a id=\"l00359\" name=\"l00359\"></a><span class=\"lineno\"> 359</span> {</div>\n-<div class=\"line\"><a id=\"l00360\" name=\"l00360\"></a><span class=\"lineno\"> 360</span> <span class=\"keyword\">auto</span> dlf = <a class=\"code hl_friend\" href=\"a01875.html#a5f39570268385d3bfc1e3b5565e9bd9f\">localFunction</a>(<a class=\"code hl_class\" href=\"a01871.html\">DiscreteGlobalBasisFunctionDerivative<DiscreteGlobalBasisFunction></a>(lf.<a class=\"code hl_variable\" href=\"a01867.html#ac19ebafe7e6f57872bf25b9c91718487\">data_</a>));</div>\n-<div class=\"line\"><a id=\"l00361\" name=\"l00361\"></a><span class=\"lineno\"> 361</span> <span class=\"keywordflow\">if</span> (lf.<a class=\"code hl_function\" href=\"a01867.html#a28431fd8e25a148fc8c203a0b8394ac5\">bound</a>())</div>\n-<div class=\"line\"><a id=\"l00362\" name=\"l00362\"></a><span class=\"lineno\"> 362</span> dlf.bind(lf.<a class=\"code hl_function\" href=\"a01867.html#a8daa49aa0c6c0d333460ebe354c3988b\">localContext</a>());</div>\n-<div class=\"line\"><a id=\"l00363\" name=\"l00363\"></a><span class=\"lineno\"> 363</span> <span class=\"keywordflow\">return</span> dlf;</div>\n-<div class=\"line\"><a id=\"l00364\" name=\"l00364\"></a><span class=\"lineno\"> 364</span> }</div>\n-<div class=\"line\"><a id=\"l00365\" name=\"l00365\"></a><span class=\"lineno\"> 365</span> </div>\n-<div class=\"line\"><a id=\"l00366\" name=\"l00366\"></a><span class=\"lineno\"> 366</span> <span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00367\" name=\"l00367\"></a><span class=\"lineno\"> 367</span> <span class=\"keyword\">mutable</span> PerNodeEvaluationBuffer evaluationBuffer_;</div>\n-<div class=\"line\"><a id=\"l00368\" name=\"l00368\"></a><span class=\"lineno\"> 368</span> };</div>\n-<div class=\"line\"><a id=\"l00369\" name=\"l00369\"></a><span class=\"lineno\"> 369</span> </div>\n-<div class=\"line\"><a id=\"l00371\" name=\"l00371\"></a><span class=\"lineno\"> 371</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> B_T, <span class=\"keyword\">class</span> V_T, <span class=\"keyword\">class</span> NTRE_T></div>\n-<div class=\"line\"><a id=\"l00372\" name=\"l00372\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01875.html#a51960f49c44a04d5381bbe370a8d6faf\"> 372</a></span> <a class=\"code hl_function\" href=\"a01875.html#a51960f49c44a04d5381bbe370a8d6faf\">DiscreteGlobalBasisFunction</a>(B_T && basis, V_T && coefficients, NTRE_T&& nodeToRangeEntry)</div>\n-<div class=\"line\"><a id=\"l00373\" name=\"l00373\"></a><span class=\"lineno\"> 373</span> : <a class=\"code hl_class\" href=\"a01859.html\">Base</a>(std::make_shared<Data>(Data{{basis.gridView()}, wrap_or_move(std::forward<B_T>(basis)), wrap_or_move(std::forward<V_T>(coefficients)), wrap_or_move(std::forward<NTRE_T>(nodeToRangeEntry))}))</div>\n-<div class=\"line\"><a id=\"l00374\" name=\"l00374\"></a><span class=\"lineno\"> 374</span> {}</div>\n-<div class=\"line\"><a id=\"l00375\" name=\"l00375\"></a><span class=\"lineno\"> 375</span> </div>\n-<div class=\"line\"><a id=\"l00377\" name=\"l00377\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01875.html#a580dd72665826b508e6c5b64c3f36276\"> 377</a></span> <a class=\"code hl_function\" href=\"a01875.html#a580dd72665826b508e6c5b64c3f36276\">DiscreteGlobalBasisFunction</a>(std::shared_ptr<const Basis> basis, std::shared_ptr<const V> coefficients, std::shared_ptr<const typename Base::NodeToRangeEntry> nodeToRangeEntry)</div>\n-<div class=\"line\"><a id=\"l00378\" name=\"l00378\"></a><span class=\"lineno\"> 378</span> : <a class=\"code hl_class\" href=\"a01859.html\">Base</a>(std::make_shared<Data>(Data{{basis->gridView()}, basis, coefficients, nodeToRangeEntry}))</div>\n-<div class=\"line\"><a id=\"l00379\" name=\"l00379\"></a><span class=\"lineno\"> 379</span> {}</div>\n-<div class=\"line\"><a id=\"l00380\" name=\"l00380\"></a><span class=\"lineno\"> 380</span> </div>\n-<div class=\"line\"><a id=\"l00382\" name=\"l00382\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01875.html#a928de73988d7dc811a4ec30a300b9695\"> 382</a></span> <a class=\"code hl_typedef\" href=\"a01875.html#aca6beda0ac337eb862bd6540f71f7d29\">Range</a> operator() (<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01875.html#aeb0a34de4cd353524e324cc57591a432\">Domain</a>& x)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00383\" name=\"l00383\"></a><span class=\"lineno\"> 383</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00384\" name=\"l00384\"></a><span class=\"lineno\"> 384</span> <span class=\"comment\">// TODO: Implement this using hierarchic search</span></div>\n-<div class=\"line\"><a id=\"l00385\" name=\"l00385\"></a><span class=\"lineno\"> 385</span> DUNE_THROW(NotImplemented,<span class=\"stringliteral\">"not implemented"</span>);</div>\n-<div class=\"line\"><a id=\"l00386\" name=\"l00386\"></a><span class=\"lineno\"> 386</span> }</div>\n-<div class=\"line\"><a id=\"l00387\" name=\"l00387\"></a><span class=\"lineno\"> 387</span> </div>\n-<div class=\"line\"><a id=\"l00389\" name=\"l00389\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01875.html#a0566ab696496e9dc76efb16d8434c49a\"> 389</a></span> <span class=\"keyword\">friend</span> <a class=\"code hl_class\" href=\"a01871.html\">DiscreteGlobalBasisFunctionDerivative<DiscreteGlobalBasisFunction></a> <a class=\"code hl_friend\" href=\"a01875.html#a0566ab696496e9dc76efb16d8434c49a\">derivative</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01875.html\">DiscreteGlobalBasisFunction</a>& f)</div>\n-<div class=\"line\"><a id=\"l00390\" name=\"l00390\"></a><span class=\"lineno\"> 390</span> {</div>\n-<div class=\"line\"><a id=\"l00391\" name=\"l00391\"></a><span class=\"lineno\"> 391</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01871.html\">DiscreteGlobalBasisFunctionDerivative<DiscreteGlobalBasisFunction></a>(f.<a class=\"code hl_variable\" href=\"a01859.html#a0251d9a5ba7ae012993ed75089870604\">data_</a>);</div>\n-<div class=\"line\"><a id=\"l00392\" name=\"l00392\"></a><span class=\"lineno\"> 392</span> }</div>\n-<div class=\"line\"><a id=\"l00393\" name=\"l00393\"></a><span class=\"lineno\"> 393</span> </div>\n-<div class=\"line\"><a id=\"l00402\" name=\"l00402\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01875.html#a5f39570268385d3bfc1e3b5565e9bd9f\"> 402</a></span> <span class=\"keyword\">friend</span> <a class=\"code hl_class\" href=\"a01879.html\">LocalFunction</a> <a class=\"code hl_friend\" href=\"a01875.html#a5f39570268385d3bfc1e3b5565e9bd9f\">localFunction</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01875.html\">DiscreteGlobalBasisFunction</a>& t)</div>\n-<div class=\"line\"><a id=\"l00403\" name=\"l00403\"></a><span class=\"lineno\"> 403</span> {</div>\n-<div class=\"line\"><a id=\"l00404\" name=\"l00404\"></a><span class=\"lineno\"> 404</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01879.html\">LocalFunction</a>(t);</div>\n-<div class=\"line\"><a id=\"l00405\" name=\"l00405\"></a><span class=\"lineno\"> 405</span> }</div>\n-<div class=\"line\"><a id=\"l00406\" name=\"l00406\"></a><span class=\"lineno\"> 406</span>};</div>\n-<div class=\"line\"><a id=\"l00407\" name=\"l00407\"></a><span class=\"lineno\"> 407</span> </div>\n-<div class=\"line\"><a id=\"l00408\" name=\"l00408\"></a><span class=\"lineno\"> 408</span> </div>\n-<div class=\"line\"><a id=\"l00431\" name=\"l00431\"></a><span class=\"lineno\"> 431</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> R, <span class=\"keyword\">typename</span> B, <span class=\"keyword\">typename</span> V></div>\n-<div class=\"line\"><a id=\"l00432\" name=\"l00432\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00209.html#ga9f1a8d6ac1558adad6150feb9b4e3168\"> 432</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00209.html#ga9f1a8d6ac1558adad6150feb9b4e3168\">makeDiscreteGlobalBasisFunction</a>(B&& basis, V&& vector)</div>\n-<div class=\"line\"><a id=\"l00433\" name=\"l00433\"></a><span class=\"lineno\"> 433</span>{</div>\n-<div class=\"line\"><a id=\"l00434\" name=\"l00434\"></a><span class=\"lineno\"> 434</span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01875.html#a762b42975185ccea60c8197341862cca\">Basis</a> = std::decay_t<B>;</div>\n-<div class=\"line\"><a id=\"l00435\" name=\"l00435\"></a><span class=\"lineno\"> 435</span> <span class=\"keyword\">using </span>NTREM = <a class=\"code hl_struct\" href=\"a01627.html\">HierarchicNodeToRangeMap</a>;</div>\n-<div class=\"line\"><a id=\"l00436\" name=\"l00436\"></a><span class=\"lineno\"> 436</span> </div>\n-<div class=\"line\"><a id=\"l00437\" name=\"l00437\"></a><span class=\"lineno\"> 437</span> <span class=\"comment\">// Small helper functions to wrap vectors using istlVectorBackend</span></div>\n-<div class=\"line\"><a id=\"l00438\" name=\"l00438\"></a><span class=\"lineno\"> 438</span> <span class=\"comment\">// if they do not already satisfy the VectorBackend interface.</span></div>\n-<div class=\"line\"><a id=\"l00439\" name=\"l00439\"></a><span class=\"lineno\"> 439</span> <span class=\"keyword\">auto</span> toConstVectorBackend = [&](<span class=\"keyword\">auto</span>&& v) -> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) {</div>\n-<div class=\"line\"><a id=\"l00440\" name=\"l00440\"></a><span class=\"lineno\"> 440</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> (models<Concept::ConstVectorBackend<Basis>, <span class=\"keyword\">decltype</span>(v)>()) {</div>\n-<div class=\"line\"><a id=\"l00441\" name=\"l00441\"></a><span class=\"lineno\"> 441</span> <span class=\"keywordflow\">return</span> std::forward<decltype(v)>(v);</div>\n-<div class=\"line\"><a id=\"l00442\" name=\"l00442\"></a><span class=\"lineno\"> 442</span> } <span class=\"keywordflow\">else</span> {</div>\n-<div class=\"line\"><a id=\"l00443\" name=\"l00443\"></a><span class=\"lineno\"> 443</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00214.html#gae5b9f62f85e3d638423142695a74d056\">istlVectorBackend</a>(v);</div>\n-<div class=\"line\"><a id=\"l00444\" name=\"l00444\"></a><span class=\"lineno\"> 444</span> }</div>\n-<div class=\"line\"><a id=\"l00445\" name=\"l00445\"></a><span class=\"lineno\"> 445</span> };</div>\n-<div class=\"line\"><a id=\"l00446\" name=\"l00446\"></a><span class=\"lineno\"> 446</span> </div>\n-<div class=\"line\"><a id=\"l00447\" name=\"l00447\"></a><span class=\"lineno\"> 447</span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01875.html#ace9d1aac90e09365577516e06fb148a4\">Vector</a> = std::decay_t<decltype(toConstVectorBackend(std::forward<V>(vector)))>;</div>\n-<div class=\"line\"><a id=\"l00448\" name=\"l00448\"></a><span class=\"lineno\"> 448</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01875.html\">DiscreteGlobalBasisFunction<Basis, Vector, NTREM, R></a>(</div>\n-<div class=\"line\"><a id=\"l00449\" name=\"l00449\"></a><span class=\"lineno\"> 449</span> std::forward<B>(basis),</div>\n-<div class=\"line\"><a id=\"l00450\" name=\"l00450\"></a><span class=\"lineno\"> 450</span> toConstVectorBackend(std::forward<V>(vector)),</div>\n-<div class=\"line\"><a id=\"l00451\" name=\"l00451\"></a><span class=\"lineno\"> 451</span> <a class=\"code hl_struct\" href=\"a01627.html\">HierarchicNodeToRangeMap</a>());</div>\n-<div class=\"line\"><a id=\"l00452\" name=\"l00452\"></a><span class=\"lineno\"> 452</span>}</div>\n-<div class=\"line\"><a id=\"l00453\" name=\"l00453\"></a><span class=\"lineno\"> 453</span> </div>\n-<div class=\"line\"><a id=\"l00454\" name=\"l00454\"></a><span class=\"lineno\"> 454</span> </div>\n-<div class=\"line\"><a id=\"l00469\" name=\"l00469\"></a><span class=\"lineno\"> 469</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> DGBF></div>\n-<div class=\"line\"><a id=\"l00470\" name=\"l00470\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01871.html\"> 470</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01871.html\">DiscreteGlobalBasisFunctionDerivative</a></div>\n-<div class=\"line\"><a id=\"l00471\" name=\"l00471\"></a><span class=\"lineno\"> 471</span> : <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01859.html\">ImplDoc::DiscreteGlobalBasisFunctionBase</a><typename DGBF::Basis, typename DGBF::Vector, typename DGBF::NodeToRangeEntry></div>\n-<div class=\"line\"><a id=\"l00472\" name=\"l00472\"></a><span class=\"lineno\"> 472</span>{</div>\n-<div class=\"line\"><a id=\"l00473\" name=\"l00473\"></a><span class=\"lineno\"> 473</span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01859.html\">Base</a> = <a class=\"code hl_class\" href=\"a01859.html\">ImplDoc::DiscreteGlobalBasisFunctionBase<typename DGBF::Basis, typename DGBF::Vector, typename DGBF::NodeToRangeEntry></a>;</div>\n-<div class=\"line\"><a id=\"l00474\" name=\"l00474\"></a><span class=\"lineno\"> 474</span> <span class=\"keyword\">using </span>Data = <span class=\"keyword\">typename</span> <a class=\"code hl_struct\" href=\"a01863.html\">Base::Data</a>;</div>\n-<div class=\"line\"><a id=\"l00475\" name=\"l00475\"></a><span class=\"lineno\"> 475</span> </div>\n-<div class=\"line\"><a id=\"l00476\" name=\"l00476\"></a><span class=\"lineno\"> 476</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00477\" name=\"l00477\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01871.html#ae3ccd2cccb1c2c5df855692f5c73469f\"> 477</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01871.html#ae3ccd2cccb1c2c5df855692f5c73469f\">DiscreteGlobalBasisFunction</a> = DGBF;</div>\n-<div class=\"line\"><a id=\"l00478\" name=\"l00478\"></a><span class=\"lineno\"> 478</span> </div>\n-<div class=\"line\"><a id=\"l00479\" name=\"l00479\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01871.html#a25856bf0d4e67d51b5d57675696a76d0\"> 479</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01871.html#a25856bf0d4e67d51b5d57675696a76d0\">Basis</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01859.html#a3692f2d61e9901fcc190337eb0c8d2c3\">Base::Basis</a>;</div>\n-<div class=\"line\"><a id=\"l00480\" name=\"l00480\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01871.html#aef7bc40b43c4903d146c539075a00ca1\"> 480</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01871.html#aef7bc40b43c4903d146c539075a00ca1\">Vector</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01859.html#a4f1c5b75cd112f7524b65de9e68c6f4c\">Base::Vector</a>;</div>\n-<div class=\"line\"><a id=\"l00481\" name=\"l00481\"></a><span class=\"lineno\"> 481</span> </div>\n-<div class=\"line\"><a id=\"l00482\" name=\"l00482\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01871.html#afeaec17adccaddbd723f29af94cbf898\"> 482</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01871.html#afeaec17adccaddbd723f29af94cbf898\">Domain</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01859.html#ac531ebbef4d77df5dd685f2f26024f95\">Base::Domain</a>;</div>\n-<div class=\"line\"><a id=\"l00483\" name=\"l00483\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01871.html#a85ee067d6e6eac54a36fff9cc40202a2\"> 483</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01871.html#a85ee067d6e6eac54a36fff9cc40202a2\">Range</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_struct\" href=\"a01291.html\">SignatureTraits<typename DiscreteGlobalBasisFunction::Traits::DerivativeInterface>::Range</a>;</div>\n-<div class=\"line\"><a id=\"l00484\" name=\"l00484\"></a><span class=\"lineno\"> 484</span> </div>\n-<div class=\"line\"><a id=\"l00485\" name=\"l00485\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01871.html#af59af75dbcd31f48108a932e508007d7\"> 485</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01871.html#af59af75dbcd31f48108a932e508007d7\">Traits</a> = Imp::GridFunctionTraits<<a class=\"code hl_typedef\" href=\"a01871.html#a85ee067d6e6eac54a36fff9cc40202a2\">Range</a>(<a class=\"code hl_typedef\" href=\"a01871.html#afeaec17adccaddbd723f29af94cbf898\">Domain</a>), <span class=\"keyword\">typename</span> <a class=\"code hl_class\" href=\"a01919.html\">Base::EntitySet</a>, <a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a>, 16>;</div>\n-<div class=\"line\"><a id=\"l00486\" name=\"l00486\"></a><span class=\"lineno\"> 486</span> </div>\n-<div class=\"line\"><a id=\"l00487\" name=\"l00487\"></a><span class=\"lineno\"> 487</span><span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00488\" name=\"l00488\"></a><span class=\"lineno\"> 488</span> </div>\n-<div class=\"line\"><a id=\"l00489\" name=\"l00489\"></a><span class=\"lineno\"> 489</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Node></div>\n-<div class=\"line\"><a id=\"l00490\" name=\"l00490\"></a><span class=\"lineno\"> 490</span> <span class=\"keyword\">using </span>LocalBasisRange = <span class=\"keyword\">typename</span> Node::FiniteElement::Traits::LocalBasisType::Traits::JacobianType;</div>\n-<div class=\"line\"><a id=\"l00491\" name=\"l00491\"></a><span class=\"lineno\"> 491</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Node></div>\n-<div class=\"line\"><a id=\"l00492\" name=\"l00492\"></a><span class=\"lineno\"> 492</span> <span class=\"keyword\">using </span>NodeData = <span class=\"keyword\">typename</span> std::vector< LocalBasisRange<Node> >;</div>\n-<div class=\"line\"><a id=\"l00493\" name=\"l00493\"></a><span class=\"lineno\"> 493</span> <span class=\"keyword\">using </span>PerNodeEvaluationBuffer = <span class=\"keyword\">typename</span> TypeTree::TreeContainer<NodeData, typename Base::Tree>;</div>\n-<div class=\"line\"><a id=\"l00494\" name=\"l00494\"></a><span class=\"lineno\"> 494</span> </div>\n-<div class=\"line\"><a id=\"l00495\" name=\"l00495\"></a><span class=\"lineno\"> 495</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00496\" name=\"l00496\"></a><span class=\"lineno\"> 496</span> </div>\n-<div class=\"line\"><a id=\"l00504\" name=\"l00504\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01883.html\"> 504</a></span> <span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01883.html\">LocalFunction</a></div>\n-<div class=\"line\"><a id=\"l00505\" name=\"l00505\"></a><span class=\"lineno\"> 505</span> : <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01867.html\">Base::LocalFunctionBase</a></div>\n-<div class=\"line\"><a id=\"l00506\" name=\"l00506\"></a><span class=\"lineno\"> 506</span> {</div>\n-<div class=\"line\"><a id=\"l00507\" name=\"l00507\"></a><span class=\"lineno\"> 507</span> <span class=\"keyword\">using </span>LocalBase = <span class=\"keyword\">typename</span> <a class=\"code hl_class\" href=\"a01867.html\">Base::LocalFunctionBase</a>;</div>\n-<div class=\"line\"><a id=\"l00508\" name=\"l00508\"></a><span class=\"lineno\"> 508</span> <span class=\"keyword\">using </span>size_type = <span class=\"keyword\">typename</span> Base::Tree::size_type;</div>\n-<div class=\"line\"><a id=\"l00509\" name=\"l00509\"></a><span class=\"lineno\"> 509</span> <span class=\"keyword\">using </span>LocalBase::nodeToRangeEntry;</div>\n-<div class=\"line\"><a id=\"l00510\" name=\"l00510\"></a><span class=\"lineno\"> 510</span> </div>\n-<div class=\"line\"><a id=\"l00511\" name=\"l00511\"></a><span class=\"lineno\"> 511</span> <span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00512\" name=\"l00512\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01883.html#a60cd1e169fafbaa6358528872dc0c3eb\"> 512</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01871.html\">GlobalFunction</a> = <a class=\"code hl_class\" href=\"a01871.html\">DiscreteGlobalBasisFunctionDerivative</a>;</div>\n-<div class=\"line\"><a id=\"l00513\" name=\"l00513\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01883.html#a2cc94a65279680f034d5573218151371\"> 513</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01867.html#aed06cdee2f1095692d99f2b70b9e08cf\">Domain</a> = <span class=\"keyword\">typename</span> LocalBase::Domain;</div>\n-<div class=\"line\"><a id=\"l00514\" name=\"l00514\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01883.html#abf2deb819d532ec2dfd8e170ddfd72b5\"> 514</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01883.html#abf2deb819d532ec2dfd8e170ddfd72b5\">Range</a> = <a class=\"code hl_typedef\" href=\"a01871.html#a85ee067d6e6eac54a36fff9cc40202a2\">GlobalFunction::Range</a>;</div>\n-<div class=\"line\"><a id=\"l00515\" name=\"l00515\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01883.html#a3e0c5a37c885a648ecf3f126019db963\"> 515</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01867.html#a8d6caba81e31526ba3a7d66b1ab299a3\">Element</a> = <span class=\"keyword\">typename</span> LocalBase::Element;</div>\n-<div class=\"line\"><a id=\"l00516\" name=\"l00516\"></a><span class=\"lineno\"> 516</span> </div>\n-<div class=\"line\"><a id=\"l00518\" name=\"l00518\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01883.html#adaccfd098d6b105540eea45ea37a6ab4\"> 518</a></span> <a class=\"code hl_function\" href=\"a01883.html#adaccfd098d6b105540eea45ea37a6ab4\">LocalFunction</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01871.html\">GlobalFunction</a>& globalFunction)</div>\n-<div class=\"line\"><a id=\"l00519\" name=\"l00519\"></a><span class=\"lineno\"> 519</span> : LocalBase(globalFunction.data_)</div>\n-<div class=\"line\"><a id=\"l00520\" name=\"l00520\"></a><span class=\"lineno\"> 520</span> , evaluationBuffer_(this->localView_.tree())</div>\n-<div class=\"line\"><a id=\"l00521\" name=\"l00521\"></a><span class=\"lineno\"> 521</span> {</div>\n-<div class=\"line\"><a id=\"l00522\" name=\"l00522\"></a><span class=\"lineno\"> 522</span> <span class=\"comment\">/* Nothing. */</span></div>\n-<div class=\"line\"><a id=\"l00523\" name=\"l00523\"></a><span class=\"lineno\"> 523</span> }</div>\n-<div class=\"line\"><a id=\"l00524\" name=\"l00524\"></a><span class=\"lineno\"> 524</span> </div>\n-<div class=\"line\"><a id=\"l00531\" name=\"l00531\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01883.html#af79e06905942ca8abcde986e2a042b1d\"> 531</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01883.html#af79e06905942ca8abcde986e2a042b1d\">bind</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01867.html#a8d6caba81e31526ba3a7d66b1ab299a3\">Element</a>& element)</div>\n-<div class=\"line\"><a id=\"l00532\" name=\"l00532\"></a><span class=\"lineno\"> 532</span> {</div>\n-<div class=\"line\"><a id=\"l00533\" name=\"l00533\"></a><span class=\"lineno\"> 533</span> LocalBase::bind(element);</div>\n-<div class=\"line\"><a id=\"l00534\" name=\"l00534\"></a><span class=\"lineno\"> 534</span> geometry_.emplace(element.geometry());</div>\n-<div class=\"line\"><a id=\"l00535\" name=\"l00535\"></a><span class=\"lineno\"> 535</span> }</div>\n-<div class=\"line\"><a id=\"l00536\" name=\"l00536\"></a><span class=\"lineno\"> 536</span> </div>\n-<div class=\"line\"><a id=\"l00538\" name=\"l00538\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01883.html#ac5b7ff05f3dae3dc85eae5712a5d1e3c\"> 538</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01883.html#ac5b7ff05f3dae3dc85eae5712a5d1e3c\">unbind</a>()</div>\n-<div class=\"line\"><a id=\"l00539\" name=\"l00539\"></a><span class=\"lineno\"> 539</span> {</div>\n-<div class=\"line\"><a id=\"l00540\" name=\"l00540\"></a><span class=\"lineno\"> 540</span> geometry_.reset();</div>\n-<div class=\"line\"><a id=\"l00541\" name=\"l00541\"></a><span class=\"lineno\"> 541</span> LocalBase::unbind();</div>\n-<div class=\"line\"><a id=\"l00542\" name=\"l00542\"></a><span class=\"lineno\"> 542</span> }</div>\n-<div class=\"line\"><a id=\"l00543\" name=\"l00543\"></a><span class=\"lineno\"> 543</span> </div>\n-<div class=\"line\"><a id=\"l00557\" name=\"l00557\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01883.html#a1f6a443d0aca3f3cb532e2c81b4017d2\"> 557</a></span> <a class=\"code hl_typedef\" href=\"a01883.html#abf2deb819d532ec2dfd8e170ddfd72b5\">Range</a> <a class=\"code hl_function\" href=\"a01883.html#a1f6a443d0aca3f3cb532e2c81b4017d2\">operator()</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01867.html#aed06cdee2f1095692d99f2b70b9e08cf\">Domain</a>& x)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00558\" name=\"l00558\"></a><span class=\"lineno\"> 558</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00559\" name=\"l00559\"></a><span class=\"lineno\"> 559</span> <a class=\"code hl_typedef\" href=\"a01883.html#abf2deb819d532ec2dfd8e170ddfd72b5\">Range</a> y;</div>\n-<div class=\"line\"><a id=\"l00560\" name=\"l00560\"></a><span class=\"lineno\"> 560</span> <a class=\"code hl_function\" href=\"a00214.html#gae5b9f62f85e3d638423142695a74d056\">istlVectorBackend</a>(y) = 0;</div>\n-<div class=\"line\"><a id=\"l00561\" name=\"l00561\"></a><span class=\"lineno\"> 561</span> </div>\n-<div class=\"line\"><a id=\"l00562\" name=\"l00562\"></a><span class=\"lineno\"> 562</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& jacobianInverse = geometry_->jacobianInverse(x);</div>\n-<div class=\"line\"><a id=\"l00563\" name=\"l00563\"></a><span class=\"lineno\"> 563</span> </div>\n-<div class=\"line\"><a id=\"l00564\" name=\"l00564\"></a><span class=\"lineno\"> 564</span> TypeTree::forEachLeafNode(this->localView_.tree(), [&](<span class=\"keyword\">auto</span>&& node, <span class=\"keyword\">auto</span>&& treePath) {</div>\n-<div class=\"line\"><a id=\"l00565\" name=\"l00565\"></a><span class=\"lineno\"> 565</span> const auto& fe = node.finiteElement();</div>\n-<div class=\"line\"><a id=\"l00566\" name=\"l00566\"></a><span class=\"lineno\"> 566</span> const auto& localBasis = fe.localBasis();</div>\n-<div class=\"line\"><a id=\"l00567\" name=\"l00567\"></a><span class=\"lineno\"> 567</span> auto& shapeFunctionJacobians = evaluationBuffer_[treePath];</div>\n-<div class=\"line\"><a id=\"l00568\" name=\"l00568\"></a><span class=\"lineno\"> 568</span> </div>\n-<div class=\"line\"><a id=\"l00569\" name=\"l00569\"></a><span class=\"lineno\"> 569</span> localBasis.evaluateJacobian(x, shapeFunctionJacobians);</div>\n-<div class=\"line\"><a id=\"l00570\" name=\"l00570\"></a><span class=\"lineno\"> 570</span> </div>\n-<div class=\"line\"><a id=\"l00571\" name=\"l00571\"></a><span class=\"lineno\"> 571</span> <span class=\"comment\">// Compute linear combinations of basis function jacobian.</span></div>\n-<div class=\"line\"><a id=\"l00572\" name=\"l00572\"></a><span class=\"lineno\"> 572</span> <span class=\"comment\">// Non-scalar coefficients of dimension coeffDim are handled by</span></div>\n-<div class=\"line\"><a id=\"l00573\" name=\"l00573\"></a><span class=\"lineno\"> 573</span> <span class=\"comment\">// processing the coeffDim linear combinations independently</span></div>\n-<div class=\"line\"><a id=\"l00574\" name=\"l00574\"></a><span class=\"lineno\"> 574</span> <span class=\"comment\">// and storing them as entries of an array.</span></div>\n-<div class=\"line\"><a id=\"l00575\" name=\"l00575\"></a><span class=\"lineno\"> 575</span> using RefJacobian = LocalBasisRange< std::decay_t<decltype(node)> >;</div>\n-<div class=\"line\"><a id=\"l00576\" name=\"l00576\"></a><span class=\"lineno\"> 576</span> static constexpr auto coeffDim = decltype(flatVectorView(this->localDoFs_[node.localIndex(0)]).size())::value;</div>\n-<div class=\"line\"><a id=\"l00577\" name=\"l00577\"></a><span class=\"lineno\"> 577</span> auto refJacobians = std::array<RefJacobian, coeffDim>{};</div>\n-<div class=\"line\"><a id=\"l00578\" name=\"l00578\"></a><span class=\"lineno\"> 578</span> <a class=\"code hl_function\" href=\"a00214.html#gae5b9f62f85e3d638423142695a74d056\">istlVectorBackend</a>(refJacobians) = 0;</div>\n-<div class=\"line\"><a id=\"l00579\" name=\"l00579\"></a><span class=\"lineno\"> 579</span> <span class=\"keywordflow\">for</span> (size_type i = 0; i < localBasis.size(); ++i)</div>\n-<div class=\"line\"><a id=\"l00580\" name=\"l00580\"></a><span class=\"lineno\"> 580</span> {</div>\n-<div class=\"line\"><a id=\"l00581\" name=\"l00581\"></a><span class=\"lineno\"> 581</span> <span class=\"keyword\">auto</span> c = <a class=\"code hl_function\" href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\">flatVectorView</a>(this->localDoFs_[node.localIndex(i)]);</div>\n-<div class=\"line\"><a id=\"l00582\" name=\"l00582\"></a><span class=\"lineno\"> 582</span> <span class=\"keywordflow\">for</span> (std::size_t j = 0; j < coeffDim; ++j)</div>\n-<div class=\"line\"><a id=\"l00583\" name=\"l00583\"></a><span class=\"lineno\"> 583</span> refJacobians[j].axpy(c[j], shapeFunctionJacobians[i]);</div>\n-<div class=\"line\"><a id=\"l00584\" name=\"l00584\"></a><span class=\"lineno\"> 584</span> }</div>\n-<div class=\"line\"><a id=\"l00585\" name=\"l00585\"></a><span class=\"lineno\"> 585</span> </div>\n-<div class=\"line\"><a id=\"l00586\" name=\"l00586\"></a><span class=\"lineno\"> 586</span> <span class=\"comment\">// Transform Jacobians form local to global coordinates.</span></div>\n-<div class=\"line\"><a id=\"l00587\" name=\"l00587\"></a><span class=\"lineno\"> 587</span> <span class=\"keyword\">using </span>Jacobian = <span class=\"keyword\">decltype</span>(refJacobians[0] * jacobianInverse);</div>\n-<div class=\"line\"><a id=\"l00588\" name=\"l00588\"></a><span class=\"lineno\"> 588</span> <span class=\"keyword\">auto</span> jacobians = std::array<Jacobian, coeffDim>{};</div>\n-<div class=\"line\"><a id=\"l00589\" name=\"l00589\"></a><span class=\"lineno\"> 589</span> std::transform(</div>\n-<div class=\"line\"><a id=\"l00590\" name=\"l00590\"></a><span class=\"lineno\"> 590</span> refJacobians.begin(), refJacobians.end(), jacobians.begin(),</div>\n-<div class=\"line\"><a id=\"l00591\" name=\"l00591\"></a><span class=\"lineno\"> 591</span> [&](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& refJacobian) { return refJacobian * jacobianInverse; });</div>\n-<div class=\"line\"><a id=\"l00592\" name=\"l00592\"></a><span class=\"lineno\"> 592</span> </div>\n-<div class=\"line\"><a id=\"l00593\" name=\"l00593\"></a><span class=\"lineno\"> 593</span> <span class=\"comment\">// Assign computed Jacobians to node entry of range.</span></div>\n-<div class=\"line\"><a id=\"l00594\" name=\"l00594\"></a><span class=\"lineno\"> 594</span> <span class=\"comment\">// Types are matched using the lexicographic ordering provided by flatVectorView.</span></div>\n-<div class=\"line\"><a id=\"l00595\" name=\"l00595\"></a><span class=\"lineno\"> 595</span> LocalBase::assignWith(nodeToRangeEntry(node, treePath, y), jacobians);</div>\n-<div class=\"line\"><a id=\"l00596\" name=\"l00596\"></a><span class=\"lineno\"> 596</span> });</div>\n-<div class=\"line\"><a id=\"l00597\" name=\"l00597\"></a><span class=\"lineno\"> 597</span> </div>\n-<div class=\"line\"><a id=\"l00598\" name=\"l00598\"></a><span class=\"lineno\"> 598</span> <span class=\"keywordflow\">return</span> y;</div>\n-<div class=\"line\"><a id=\"l00599\" name=\"l00599\"></a><span class=\"lineno\"> 599</span> }</div>\n-<div class=\"line\"><a id=\"l00600\" name=\"l00600\"></a><span class=\"lineno\"> 600</span> </div>\n-<div class=\"line\"><a id=\"l00602\" name=\"l00602\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01883.html#a5b92fef6586d83fc88f3c2efdacfd220\"> 602</a></span> <span class=\"keyword\">friend</span> <span class=\"keyword\">typename</span> <a class=\"code hl_class\" href=\"a01895.html\">Traits::LocalFunctionTraits::DerivativeInterface</a> <a class=\"code hl_friend\" href=\"a01883.html#a5b92fef6586d83fc88f3c2efdacfd220\">derivative</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01883.html\">LocalFunction</a>&)</div>\n-<div class=\"line\"><a id=\"l00603\" name=\"l00603\"></a><span class=\"lineno\"> 603</span> {</div>\n-<div class=\"line\"><a id=\"l00604\" name=\"l00604\"></a><span class=\"lineno\"> 604</span> DUNE_THROW(NotImplemented, <span class=\"stringliteral\">"derivative of derivative is not implemented"</span>);</div>\n-<div class=\"line\"><a id=\"l00605\" name=\"l00605\"></a><span class=\"lineno\"> 605</span> }</div>\n-<div class=\"line\"><a id=\"l00606\" name=\"l00606\"></a><span class=\"lineno\"> 606</span> </div>\n-<div class=\"line\"><a id=\"l00607\" name=\"l00607\"></a><span class=\"lineno\"> 607</span> <span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00608\" name=\"l00608\"></a><span class=\"lineno\"> 608</span> <span class=\"keyword\">mutable</span> PerNodeEvaluationBuffer evaluationBuffer_;</div>\n-<div class=\"line\"><a id=\"l00609\" name=\"l00609\"></a><span class=\"lineno\"> 609</span> std::optional<typename Element::Geometry> geometry_;</div>\n-<div class=\"line\"><a id=\"l00610\" name=\"l00610\"></a><span class=\"lineno\"> 610</span> };</div>\n-<div class=\"line\"><a id=\"l00611\" name=\"l00611\"></a><span class=\"lineno\"> 611</span> </div>\n-<div class=\"line\"><a id=\"l00618\" name=\"l00618\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01871.html#ad90743b77c57a28fca8afebce901fe9c\"> 618</a></span> <a class=\"code hl_function\" href=\"a01871.html#ad90743b77c57a28fca8afebce901fe9c\">DiscreteGlobalBasisFunctionDerivative</a>(<span class=\"keyword\">const</span> std::shared_ptr<const Data>& data)</div>\n-<div class=\"line\"><a id=\"l00619\" name=\"l00619\"></a><span class=\"lineno\"> 619</span> : <a class=\"code hl_class\" href=\"a01859.html\">Base</a>(data)</div>\n-<div class=\"line\"><a id=\"l00620\" name=\"l00620\"></a><span class=\"lineno\"> 620</span> {</div>\n-<div class=\"line\"><a id=\"l00621\" name=\"l00621\"></a><span class=\"lineno\"> 621</span> <span class=\"comment\">/* Nothing. */</span></div>\n-<div class=\"line\"><a id=\"l00622\" name=\"l00622\"></a><span class=\"lineno\"> 622</span> }</div>\n-<div class=\"line\"><a id=\"l00623\" name=\"l00623\"></a><span class=\"lineno\"> 623</span> </div>\n-<div class=\"line\"><a id=\"l00625\" name=\"l00625\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01871.html#a750aa57a27e3866ba5327228de065834\"> 625</a></span> <a class=\"code hl_typedef\" href=\"a01871.html#a85ee067d6e6eac54a36fff9cc40202a2\">Range</a> <a class=\"code hl_function\" href=\"a01871.html#a750aa57a27e3866ba5327228de065834\">operator()</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01871.html#afeaec17adccaddbd723f29af94cbf898\">Domain</a>& x)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00626\" name=\"l00626\"></a><span class=\"lineno\"> 626</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00627\" name=\"l00627\"></a><span class=\"lineno\"> 627</span> <span class=\"comment\">// TODO: Implement this using hierarchic search</span></div>\n-<div class=\"line\"><a id=\"l00628\" name=\"l00628\"></a><span class=\"lineno\"> 628</span> DUNE_THROW(NotImplemented,<span class=\"stringliteral\">"not implemented"</span>);</div>\n-<div class=\"line\"><a id=\"l00629\" name=\"l00629\"></a><span class=\"lineno\"> 629</span> }</div>\n-<div class=\"line\"><a id=\"l00630\" name=\"l00630\"></a><span class=\"lineno\"> 630</span> </div>\n-<div class=\"line\"><a id=\"l00631\" name=\"l00631\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01871.html#a40e13d696d1b295a5310636c13f191b1\"> 631</a></span> <span class=\"keyword\">friend</span> <span class=\"keyword\">typename</span> <a class=\"code hl_class\" href=\"a01895.html\">Traits::DerivativeInterface</a> <a class=\"code hl_friend\" href=\"a01871.html#a40e13d696d1b295a5310636c13f191b1\">derivative</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01871.html\">DiscreteGlobalBasisFunctionDerivative</a>& f)</div>\n-<div class=\"line\"><a id=\"l00632\" name=\"l00632\"></a><span class=\"lineno\"> 632</span> {</div>\n-<div class=\"line\"><a id=\"l00633\" name=\"l00633\"></a><span class=\"lineno\"> 633</span> DUNE_THROW(NotImplemented, <span class=\"stringliteral\">"derivative of derivative is not implemented"</span>);</div>\n-<div class=\"line\"><a id=\"l00634\" name=\"l00634\"></a><span class=\"lineno\"> 634</span> }</div>\n-<div class=\"line\"><a id=\"l00635\" name=\"l00635\"></a><span class=\"lineno\"> 635</span> </div>\n-<div class=\"line\"><a id=\"l00637\" name=\"l00637\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01871.html#ad4951a7b1941d2d6314695f8d2ae5267\"> 637</a></span> <span class=\"keyword\">friend</span> <a class=\"code hl_class\" href=\"a01883.html\">LocalFunction</a> <a class=\"code hl_friend\" href=\"a01871.html#ad4951a7b1941d2d6314695f8d2ae5267\">localFunction</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01871.html\">DiscreteGlobalBasisFunctionDerivative</a>& f)</div>\n-<div class=\"line\"><a id=\"l00638\" name=\"l00638\"></a><span class=\"lineno\"> 638</span> {</div>\n-<div class=\"line\"><a id=\"l00639\" name=\"l00639\"></a><span class=\"lineno\"> 639</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01883.html\">LocalFunction</a>(f);</div>\n-<div class=\"line\"><a id=\"l00640\" name=\"l00640\"></a><span class=\"lineno\"> 640</span> }</div>\n-<div class=\"line\"><a id=\"l00641\" name=\"l00641\"></a><span class=\"lineno\"> 641</span>};</div>\n-<div class=\"line\"><a id=\"l00642\" name=\"l00642\"></a><span class=\"lineno\"> 642</span> </div>\n-<div class=\"line\"><a id=\"l00643\" name=\"l00643\"></a><span class=\"lineno\"> 643</span> </div>\n-<div class=\"line\"><a id=\"l00644\" name=\"l00644\"></a><span class=\"lineno\"> 644</span>} <span class=\"comment\">// namespace Functions</span></div>\n-<div class=\"line\"><a id=\"l00645\" name=\"l00645\"></a><span class=\"lineno\"> 645</span>} <span class=\"comment\">// namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00646\" name=\"l00646\"></a><span class=\"lineno\"> 646</span> </div>\n-<div class=\"line\"><a id=\"l00647\" name=\"l00647\"></a><span class=\"lineno\"> 647</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_GRIDFUNCTIONS_DISCRETEGLOBALBASISFUNCTIONS_HH</span></div>\n-<div class=\"ttc\" id=\"aa00011_html\"><div class=\"ttname\"><a href=\"a00011.html\">istlvectorbackend.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00017_html\"><div class=\"ttname\"><a href=\"a00017.html\">gridfunction.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00023_html\"><div class=\"ttname\"><a href=\"a00023.html\">gridviewentityset.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00128_html\"><div class=\"ttname\"><a href=\"a00128.html\">flatvectorview.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00164_html\"><div class=\"ttname\"><a href=\"a00164.html\">hierarchicnodetorangemap.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00209_html_ga9f1a8d6ac1558adad6150feb9b4e3168\"><div class=\"ttname\"><a href=\"a00209.html#ga9f1a8d6ac1558adad6150feb9b4e3168\">Dune::Functions::DiscreteGlobalBasisFunction::makeDiscreteGlobalBasisFunction</a></div><div class=\"ttdeci\">auto makeDiscreteGlobalBasisFunction(B &&basis, V &&vector)</div><div class=\"ttdoc\">Generate a DiscreteGlobalBasisFunction.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:432</div></div>\n-<div class=\"ttc\" id=\"aa00214_html_gae5b9f62f85e3d638423142695a74d056\"><div class=\"ttname\"><a href=\"a00214.html#gae5b9f62f85e3d638423142695a74d056\">Dune::Functions::istlVectorBackend</a></div><div class=\"ttdeci\">auto istlVectorBackend(Vector &v)</div><div class=\"ttdoc\">Return a vector backend wrapping non-const ISTL like containers.</div><div class=\"ttdef\"><b>Definition:</b> istlvectorbackend.hh:346</div></div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> </div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span>}} <span class=\"comment\">// namespace Dune::Functions</span></div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> </div>\n+<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_EXTENDED_CLONEABLE_HH</span></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa00219_html_ad98b265d97ebd619e7732df6a8d1f7da\"><div class=\"ttname\"><a href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\">Dune::Functions::flatVectorView</a></div><div class=\"ttdeci\">auto flatVectorView(T &t)</div><div class=\"ttdoc\">Create flat vector view of passed mutable container.</div><div class=\"ttdef\"><b>Definition:</b> flatvectorview.hh:179</div></div>\n-<div class=\"ttc\" id=\"aa01075_html\"><div class=\"ttname\"><a href=\"a01075.html\">Dune::Functions::DefaultDerivativeTraits</a></div><div class=\"ttdoc\">Default implementation for derivative traits.</div><div class=\"ttdef\"><b>Definition:</b> defaultderivativetraits.hh:37</div></div>\n-<div class=\"ttc\" id=\"aa01291_html\"><div class=\"ttname\"><a href=\"a01291.html\">Dune::Functions::SignatureTraits</a></div><div class=\"ttdoc\">Helper class to deduce the signature of a callable.</div><div class=\"ttdef\"><b>Definition:</b> signature.hh:56</div></div>\n-<div class=\"ttc\" id=\"aa01627_html\"><div class=\"ttname\"><a href=\"a01627.html\">Dune::Functions::HierarchicNodeToRangeMap</a></div><div class=\"ttdoc\">A simple node to range map using the nested tree indices.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicnodetorangemap.hh:30</div></div>\n-<div class=\"ttc\" id=\"aa01859_html\"><div class=\"ttname\"><a href=\"a01859.html\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase</a></div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:28</div></div>\n-<div class=\"ttc\" id=\"aa01859_html_a0251d9a5ba7ae012993ed75089870604\"><div class=\"ttname\"><a href=\"a01859.html#a0251d9a5ba7ae012993ed75089870604\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::data_</a></div><div class=\"ttdeci\">std::shared_ptr< const Data > data_</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:217</div></div>\n-<div class=\"ttc\" id=\"aa01859_html_a185c69d8397b09a1b74eb56cf62f40c6\"><div class=\"ttname\"><a href=\"a01859.html#a185c69d8397b09a1b74eb56cf62f40c6\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::dofs</a></div><div class=\"ttdeci\">const Vector & dofs() const</div><div class=\"ttdoc\">Return the coefficients of this discrete function by reference.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:199</div></div>\n-<div class=\"ttc\" id=\"aa01859_html_a3692f2d61e9901fcc190337eb0c8d2c3\"><div class=\"ttname\"><a href=\"a01859.html#a3692f2d61e9901fcc190337eb0c8d2c3\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Basis</a></div><div class=\"ttdeci\">B Basis</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:30</div></div>\n-<div class=\"ttc\" id=\"aa01859_html_a3a7684473e5977409b31ad9954d60b17\"><div class=\"ttname\"><a href=\"a01859.html#a3a7684473e5977409b31ad9954d60b17\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Tree</a></div><div class=\"ttdeci\">typename Basis::LocalView::Tree Tree</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:39</div></div>\n-<div class=\"ttc\" id=\"aa01859_html_a4f1c5b75cd112f7524b65de9e68c6f4c\"><div class=\"ttname\"><a href=\"a01859.html#a4f1c5b75cd112f7524b65de9e68c6f4c\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Vector</a></div><div class=\"ttdeci\">V Vector</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:31</div></div>\n-<div class=\"ttc\" id=\"aa01859_html_a7669d95a17a5a94621074923290978b7\"><div class=\"ttname\"><a href=\"a01859.html#a7669d95a17a5a94621074923290978b7\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Element</a></div><div class=\"ttdeci\">typename EntitySet::Element Element</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:45</div></div>\n-<div class=\"ttc\" id=\"aa01859_html_a778a8d51295ab8988578c8ec5c80f15a\"><div class=\"ttname\"><a href=\"a01859.html#a778a8d51295ab8988578c8ec5c80f15a\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalDomain</a></div><div class=\"ttdeci\">typename EntitySet::LocalCoordinate LocalDomain</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:44</div></div>\n-<div class=\"ttc\" id=\"aa01859_html_a8b079bb398dc95ba48399e66e05aa0fa\"><div class=\"ttname\"><a href=\"a01859.html#a8b079bb398dc95ba48399e66e05aa0fa\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::nodeToRangeEntry</a></div><div class=\"ttdeci\">const NodeToRangeEntry & nodeToRangeEntry() const</div><div class=\"ttdoc\">Return the stored node-to-range map.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:205</div></div>\n-<div class=\"ttc\" id=\"aa01859_html_a919c73d3602d7770ab2aa6ec9beaa2df\"><div class=\"ttname\"><a href=\"a01859.html#a919c73d3602d7770ab2aa6ec9beaa2df\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::NodeToRangeEntry</a></div><div class=\"ttdeci\">NTRE NodeToRangeEntry</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:40</div></div>\n-<div class=\"ttc\" id=\"aa01859_html_a91a8cf0d245095a4c91615f42ffb4f4c\"><div class=\"ttname\"><a href=\"a01859.html#a91a8cf0d245095a4c91615f42ffb4f4c\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::DiscreteGlobalBasisFunctionBase</a></div><div class=\"ttdeci\">DiscreteGlobalBasisFunctionBase(const std::shared_ptr< const Data > &data)</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:184</div></div>\n-<div class=\"ttc\" id=\"aa01859_html_a94980a3da72955394fdf377b328aa6cd\"><div class=\"ttname\"><a href=\"a01859.html#a94980a3da72955394fdf377b328aa6cd\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::GridView</a></div><div class=\"ttdeci\">typename Basis::GridView GridView</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:37</div></div>\n-<div class=\"ttc\" id=\"aa01859_html_a99bd572882384ae95a30297f0797d769\"><div class=\"ttname\"><a href=\"a01859.html#a99bd572882384ae95a30297f0797d769\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::basis</a></div><div class=\"ttdeci\">const Basis & basis() const</div><div class=\"ttdoc\">Return a const reference to the stored basis.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:193</div></div>\n-<div class=\"ttc\" id=\"aa01859_html_aa0f3fc49504b54be8b78cb443b447747\"><div class=\"ttname\"><a href=\"a01859.html#aa0f3fc49504b54be8b78cb443b447747\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::EntitySet</a></div><div class=\"ttdeci\">GridViewEntitySet< GridView, 0 > EntitySet</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:38</div></div>\n-<div class=\"ttc\" id=\"aa01859_html_ab0e59b1504a825f12634528b132a1448\"><div class=\"ttname\"><a href=\"a01859.html#ab0e59b1504a825f12634528b132a1448\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::entitySet</a></div><div class=\"ttdeci\">const EntitySet & entitySet() const</div><div class=\"ttdoc\">Get associated set of entities the local-function can be bound to.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:211</div></div>\n-<div class=\"ttc\" id=\"aa01859_html_ac531ebbef4d77df5dd685f2f26024f95\"><div class=\"ttname\"><a href=\"a01859.html#ac531ebbef4d77df5dd685f2f26024f95\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Domain</a></div><div class=\"ttdeci\">typename EntitySet::GlobalCoordinate Domain</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:42</div></div>\n-<div class=\"ttc\" id=\"aa01859_html_ad8324d107176745d5db37c17e160fb51\"><div class=\"ttname\"><a href=\"a01859.html#ad8324d107176745d5db37c17e160fb51\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Coefficient</a></div><div class=\"ttdeci\">Dune::AutonomousValue< decltype(std::declval< Vector >()[std::declval< typename Basis::MultiIndex >()])> Coefficient</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:35</div></div>\n-<div class=\"ttc\" id=\"aa01863_html\"><div class=\"ttname\"><a href=\"a01863.html\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Data</a></div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:53</div></div>\n-<div class=\"ttc\" id=\"aa01863_html_a869d1890dea002afea9673d30bf7a6f9\"><div class=\"ttname\"><a href=\"a01863.html#a869d1890dea002afea9673d30bf7a6f9\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Data::entitySet</a></div><div class=\"ttdeci\">EntitySet entitySet</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:54</div></div>\n-<div class=\"ttc\" id=\"aa01863_html_a8806af774b27a785e8a4eb0d58df560c\"><div class=\"ttname\"><a href=\"a01863.html#a8806af774b27a785e8a4eb0d58df560c\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Data::nodeToRangeEntry</a></div><div class=\"ttdeci\">std::shared_ptr< const NodeToRangeEntry > nodeToRangeEntry</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:57</div></div>\n-<div class=\"ttc\" id=\"aa01863_html_aa8af2b92d6781bed52269bfaf15a03d7\"><div class=\"ttname\"><a href=\"a01863.html#aa8af2b92d6781bed52269bfaf15a03d7\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Data::basis</a></div><div class=\"ttdeci\">std::shared_ptr< const Basis > basis</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:55</div></div>\n-<div class=\"ttc\" id=\"aa01863_html_ab0ba9b881560f475ebfbc8245e898f06\"><div class=\"ttname\"><a href=\"a01863.html#ab0ba9b881560f475ebfbc8245e898f06\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Data::coefficients</a></div><div class=\"ttdeci\">std::shared_ptr< const Vector > coefficients</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:56</div></div>\n-<div class=\"ttc\" id=\"aa01867_html\"><div class=\"ttname\"><a href=\"a01867.html\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase</a></div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:62</div></div>\n-<div class=\"ttc\" id=\"aa01867_html_a253e2dcc1809bca0e981c132e6d4770c\"><div class=\"ttname\"><a href=\"a01867.html#a253e2dcc1809bca0e981c132e6d4770c\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::operator=</a></div><div class=\"ttdeci\">LocalFunctionBase & operator=(const LocalFunctionBase &other)</div><div class=\"ttdoc\">Copy-assignment of the local-function.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:100</div></div>\n-<div class=\"ttc\" id=\"aa01867_html_a28431fd8e25a148fc8c203a0b8394ac5\"><div class=\"ttname\"><a href=\"a01867.html#a28431fd8e25a148fc8c203a0b8394ac5\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::bound</a></div><div class=\"ttdeci\">bool bound() const</div><div class=\"ttdoc\">Check if LocalFunction is already bound to an element.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:149</div></div>\n-<div class=\"ttc\" id=\"aa01867_html_a67e646a96343c7f80528fe2f82a7ee54\"><div class=\"ttname\"><a href=\"a01867.html#a67e646a96343c7f80528fe2f82a7ee54\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::bind</a></div><div class=\"ttdeci\">void bind(const Element &element)</div><div class=\"ttdoc\">Bind LocalFunction to grid element.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:116</div></div>\n-<div class=\"ttc\" id=\"aa01867_html_a8d6caba81e31526ba3a7d66b1ab299a3\"><div class=\"ttname\"><a href=\"a01867.html#a8d6caba81e31526ba3a7d66b1ab299a3\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::Element</a></div><div class=\"ttdeci\">typename EntitySet::Element Element</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:68</div></div>\n-<div class=\"ttc\" id=\"aa01867_html_a8daa49aa0c6c0d333460ebe354c3988b\"><div class=\"ttname\"><a href=\"a01867.html#a8daa49aa0c6c0d333460ebe354c3988b\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::localContext</a></div><div class=\"ttdeci\">const Element & localContext() const</div><div class=\"ttdoc\">Return the element the local-function is bound to.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:155</div></div>\n-<div class=\"ttc\" id=\"aa01867_html_aa33d4463ef895fc15aba8b8eaedf3506\"><div class=\"ttname\"><a href=\"a01867.html#aa33d4463ef895fc15aba8b8eaedf3506\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::LocalFunctionBase</a></div><div class=\"ttdeci\">LocalFunctionBase(const LocalFunctionBase &other)</div><div class=\"ttdoc\">Copy-construct the local-function.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:84</div></div>\n-<div class=\"ttc\" id=\"aa01867_html_aa62fc9b9cfde610dea2e5fedfc5c6f83\"><div class=\"ttname\"><a href=\"a01867.html#aa62fc9b9cfde610dea2e5fedfc5c6f83\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::localDoFs_</a></div><div class=\"ttdeci\">std::vector< Coefficient > localDoFs_</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:180</div></div>\n-<div class=\"ttc\" id=\"aa01867_html_abf8dc20ea65b2fd88df03377f9a703dc\"><div class=\"ttname\"><a href=\"a01867.html#abf8dc20ea65b2fd88df03377f9a703dc\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::assignWith</a></div><div class=\"ttdeci\">void assignWith(To &to, const From &from) const</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:163</div></div>\n-<div class=\"ttc\" id=\"aa01867_html_ac19ebafe7e6f57872bf25b9c91718487\"><div class=\"ttname\"><a href=\"a01867.html#ac19ebafe7e6f57872bf25b9c91718487\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::data_</a></div><div class=\"ttdeci\">std::shared_ptr< const Data > data_</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:178</div></div>\n-<div class=\"ttc\" id=\"aa01867_html_ac929b2a99a94dc5e5c5f4bd1404716c5\"><div class=\"ttname\"><a href=\"a01867.html#ac929b2a99a94dc5e5c5f4bd1404716c5\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::nodeToRangeEntry</a></div><div class=\"ttdeci\">decltype(auto) nodeToRangeEntry(const Node &node, const TreePath &treePath, Range &y) const</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:173</div></div>\n-<div class=\"ttc\" id=\"aa01867_html_ac95fafaea79e1434ea5d9a8092e5945b\"><div class=\"ttname\"><a href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::localView_</a></div><div class=\"ttdeci\">LocalView localView_</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:179</div></div>\n-<div class=\"ttc\" id=\"aa01867_html_ae5b6f77f23f1f5f28db616390dfa5d95\"><div class=\"ttname\"><a href=\"a01867.html#ae5b6f77f23f1f5f28db616390dfa5d95\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::unbind</a></div><div class=\"ttdeci\">void unbind()</div><div class=\"ttdoc\">Unbind the local-function.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:143</div></div>\n-<div class=\"ttc\" id=\"aa01867_html_aed06cdee2f1095692d99f2b70b9e08cf\"><div class=\"ttname\"><a href=\"a01867.html#aed06cdee2f1095692d99f2b70b9e08cf\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::Domain</a></div><div class=\"ttdeci\">LocalDomain Domain</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:67</div></div>\n-<div class=\"ttc\" id=\"aa01867_html_afabe7cb22621b6a62e3b2f58b2ce9a96\"><div class=\"ttname\"><a href=\"a01867.html#afabe7cb22621b6a62e3b2f58b2ce9a96\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::LocalFunctionBase</a></div><div class=\"ttdeci\">LocalFunctionBase(const std::shared_ptr< const Data > &data)</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:71</div></div>\n-<div class=\"ttc\" id=\"aa01871_html\"><div class=\"ttname\"><a href=\"a01871.html\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative</a></div><div class=\"ttdoc\">Derivative of a DiscreteGlobalBasisFunction</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:472</div></div>\n-<div class=\"ttc\" id=\"aa01871_html_a25856bf0d4e67d51b5d57675696a76d0\"><div class=\"ttname\"><a href=\"a01871.html#a25856bf0d4e67d51b5d57675696a76d0\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::Basis</a></div><div class=\"ttdeci\">typename Base::Basis Basis</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:479</div></div>\n-<div class=\"ttc\" id=\"aa01871_html_a40e13d696d1b295a5310636c13f191b1\"><div class=\"ttname\"><a href=\"a01871.html#a40e13d696d1b295a5310636c13f191b1\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::derivative</a></div><div class=\"ttdeci\">friend Traits::DerivativeInterface derivative(const DiscreteGlobalBasisFunctionDerivative &f)</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:631</div></div>\n-<div class=\"ttc\" id=\"aa01871_html_a750aa57a27e3866ba5327228de065834\"><div class=\"ttname\"><a href=\"a01871.html#a750aa57a27e3866ba5327228de065834\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::operator()</a></div><div class=\"ttdeci\">Range operator()(const Domain &x) const</div><div class=\"ttdoc\">Not implemented.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:625</div></div>\n-<div class=\"ttc\" id=\"aa01871_html_a85ee067d6e6eac54a36fff9cc40202a2\"><div class=\"ttname\"><a href=\"a01871.html#a85ee067d6e6eac54a36fff9cc40202a2\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::Range</a></div><div class=\"ttdeci\">typename SignatureTraits< typename DiscreteGlobalBasisFunction::Traits::DerivativeInterface >::Range Range</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:483</div></div>\n-<div class=\"ttc\" id=\"aa01871_html_ad4951a7b1941d2d6314695f8d2ae5267\"><div class=\"ttname\"><a href=\"a01871.html#ad4951a7b1941d2d6314695f8d2ae5267\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::localFunction</a></div><div class=\"ttdeci\">friend LocalFunction localFunction(const DiscreteGlobalBasisFunctionDerivative &f)</div><div class=\"ttdoc\">Construct local function from a DiscreteGlobalBasisFunctionDerivative</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:637</div></div>\n-<div class=\"ttc\" id=\"aa01871_html_ad90743b77c57a28fca8afebce901fe9c\"><div class=\"ttname\"><a href=\"a01871.html#ad90743b77c57a28fca8afebce901fe9c\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::DiscreteGlobalBasisFunctionDerivative</a></div><div class=\"ttdeci\">DiscreteGlobalBasisFunctionDerivative(const std::shared_ptr< const Data > &data)</div><div class=\"ttdoc\">create object from DiscreateGlobalBasisFunction data</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:618</div></div>\n-<div class=\"ttc\" id=\"aa01871_html_ae3ccd2cccb1c2c5df855692f5c73469f\"><div class=\"ttname\"><a href=\"a01871.html#ae3ccd2cccb1c2c5df855692f5c73469f\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::DiscreteGlobalBasisFunction</a></div><div class=\"ttdeci\">DGBF DiscreteGlobalBasisFunction</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:477</div></div>\n-<div class=\"ttc\" id=\"aa01871_html_aef7bc40b43c4903d146c539075a00ca1\"><div class=\"ttname\"><a href=\"a01871.html#aef7bc40b43c4903d146c539075a00ca1\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::Vector</a></div><div class=\"ttdeci\">typename Base::Vector Vector</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:480</div></div>\n-<div class=\"ttc\" id=\"aa01871_html_af59af75dbcd31f48108a932e508007d7\"><div class=\"ttname\"><a href=\"a01871.html#af59af75dbcd31f48108a932e508007d7\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::Traits</a></div><div class=\"ttdeci\">Imp::GridFunctionTraits< Range(Domain), typename Base::EntitySet, DefaultDerivativeTraits, 16 > Traits</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:485</div></div>\n-<div class=\"ttc\" id=\"aa01871_html_afeaec17adccaddbd723f29af94cbf898\"><div class=\"ttname\"><a href=\"a01871.html#afeaec17adccaddbd723f29af94cbf898\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::Domain</a></div><div class=\"ttdeci\">typename Base::Domain Domain</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:482</div></div>\n-<div class=\"ttc\" id=\"aa01875_html\"><div class=\"ttname\"><a href=\"a01875.html\">Dune::Functions::DiscreteGlobalBasisFunction</a></div><div class=\"ttdoc\">A grid function induced by a global basis and a coefficient vector.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:269</div></div>\n-<div class=\"ttc\" id=\"aa01875_html_a0566ab696496e9dc76efb16d8434c49a\"><div class=\"ttname\"><a href=\"a01875.html#a0566ab696496e9dc76efb16d8434c49a\">Dune::Functions::DiscreteGlobalBasisFunction::derivative</a></div><div class=\"ttdeci\">friend DiscreteGlobalBasisFunctionDerivative< DiscreteGlobalBasisFunction > derivative(const DiscreteGlobalBasisFunction &f)</div><div class=\"ttdoc\">Derivative of the DiscreteGlobalBasisFunction</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:389</div></div>\n-<div class=\"ttc\" id=\"aa01875_html_a51960f49c44a04d5381bbe370a8d6faf\"><div class=\"ttname\"><a href=\"a01875.html#a51960f49c44a04d5381bbe370a8d6faf\">Dune::Functions::DiscreteGlobalBasisFunction::DiscreteGlobalBasisFunction</a></div><div class=\"ttdeci\">DiscreteGlobalBasisFunction(B_T &&basis, V_T &&coefficients, NTRE_T &&nodeToRangeEntry)</div><div class=\"ttdoc\">Create a grid-function, by wrapping the arguments in std::shared_ptr.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:372</div></div>\n-<div class=\"ttc\" id=\"aa01875_html_a580dd72665826b508e6c5b64c3f36276\"><div class=\"ttname\"><a href=\"a01875.html#a580dd72665826b508e6c5b64c3f36276\">Dune::Functions::DiscreteGlobalBasisFunction::DiscreteGlobalBasisFunction</a></div><div class=\"ttdeci\">DiscreteGlobalBasisFunction(std::shared_ptr< const Basis > basis, std::shared_ptr< const V > coefficients, std::shared_ptr< const typename Base::NodeToRangeEntry > nodeToRangeEntry)</div><div class=\"ttdoc\">Create a grid-function, by moving the arguments in std::shared_ptr.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:377</div></div>\n-<div class=\"ttc\" id=\"aa01875_html_a5f39570268385d3bfc1e3b5565e9bd9f\"><div class=\"ttname\"><a href=\"a01875.html#a5f39570268385d3bfc1e3b5565e9bd9f\">Dune::Functions::DiscreteGlobalBasisFunction::localFunction</a></div><div class=\"ttdeci\">friend LocalFunction localFunction(const DiscreteGlobalBasisFunction &t)</div><div class=\"ttdoc\">Construct local function from a DiscreteGlobalBasisFunction.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:402</div></div>\n-<div class=\"ttc\" id=\"aa01875_html_a762b42975185ccea60c8197341862cca\"><div class=\"ttname\"><a href=\"a01875.html#a762b42975185ccea60c8197341862cca\">Dune::Functions::DiscreteGlobalBasisFunction::Basis</a></div><div class=\"ttdeci\">typename Base::Basis Basis</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:274</div></div>\n-<div class=\"ttc\" id=\"aa01875_html_ab308263b7fd188c267709c7bc0b47568\"><div class=\"ttname\"><a href=\"a01875.html#ab308263b7fd188c267709c7bc0b47568\">Dune::Functions::DiscreteGlobalBasisFunction::Traits</a></div><div class=\"ttdeci\">Imp::GridFunctionTraits< Range(Domain), typename Base::EntitySet, DefaultDerivativeTraits, 16 > Traits</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:280</div></div>\n-<div class=\"ttc\" id=\"aa01875_html_aca6beda0ac337eb862bd6540f71f7d29\"><div class=\"ttname\"><a href=\"a01875.html#aca6beda0ac337eb862bd6540f71f7d29\">Dune::Functions::DiscreteGlobalBasisFunction::Range</a></div><div class=\"ttdeci\">R Range</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:278</div></div>\n-<div class=\"ttc\" id=\"aa01875_html_ace9d1aac90e09365577516e06fb148a4\"><div class=\"ttname\"><a href=\"a01875.html#ace9d1aac90e09365577516e06fb148a4\">Dune::Functions::DiscreteGlobalBasisFunction::Vector</a></div><div class=\"ttdeci\">typename Base::Vector Vector</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:275</div></div>\n-<div class=\"ttc\" id=\"aa01875_html_aeb0a34de4cd353524e324cc57591a432\"><div class=\"ttname\"><a href=\"a01875.html#aeb0a34de4cd353524e324cc57591a432\">Dune::Functions::DiscreteGlobalBasisFunction::Domain</a></div><div class=\"ttdeci\">typename Base::Domain Domain</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:277</div></div>\n-<div class=\"ttc\" id=\"aa01879_html\"><div class=\"ttname\"><a href=\"a01879.html\">Dune::Functions::DiscreteGlobalBasisFunction::LocalFunction</a></div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:293</div></div>\n-<div class=\"ttc\" id=\"aa01879_html_a8b339405cc5358cfdac2d3775c590acd\"><div class=\"ttname\"><a href=\"a01879.html#a8b339405cc5358cfdac2d3775c590acd\">Dune::Functions::DiscreteGlobalBasisFunction::LocalFunction::Range</a></div><div class=\"ttdeci\">GlobalFunction::Range Range</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:302</div></div>\n-<div class=\"ttc\" id=\"aa01879_html_ab5ae226004affb757598beabae1ff888\"><div class=\"ttname\"><a href=\"a01879.html#ab5ae226004affb757598beabae1ff888\">Dune::Functions::DiscreteGlobalBasisFunction::LocalFunction::LocalFunction</a></div><div class=\"ttdeci\">LocalFunction(const DiscreteGlobalBasisFunction &globalFunction)</div><div class=\"ttdoc\">Create a local-function from the associated grid-function.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:306</div></div>\n-<div class=\"ttc\" id=\"aa01879_html_abcf8db8c634fdb5cfd2a6af1767b6445\"><div class=\"ttname\"><a href=\"a01879.html#abcf8db8c634fdb5cfd2a6af1767b6445\">Dune::Functions::DiscreteGlobalBasisFunction::LocalFunction::derivative</a></div><div class=\"ttdeci\">friend DiscreteGlobalBasisFunctionDerivative< DiscreteGlobalBasisFunction >::LocalFunction derivative(const LocalFunction &lf)</div><div class=\"ttdoc\">Local function of the derivative.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:358</div></div>\n-<div class=\"ttc\" id=\"aa01879_html_adb064f66b447712a2c36534c2256c357\"><div class=\"ttname\"><a href=\"a01879.html#adb064f66b447712a2c36534c2256c357\">Dune::Functions::DiscreteGlobalBasisFunction::LocalFunction::operator()</a></div><div class=\"ttdeci\">Range operator()(const Domain &x) const</div><div class=\"ttdoc\">Evaluate this local-function in coordinates x in the bound element.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:322</div></div>\n-<div class=\"ttc\" id=\"aa01883_html\"><div class=\"ttname\"><a href=\"a01883.html\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::LocalFunction</a></div><div class=\"ttdoc\">local function evaluating the derivative in reference coordinates</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:506</div></div>\n-<div class=\"ttc\" id=\"aa01883_html_a1f6a443d0aca3f3cb532e2c81b4017d2\"><div class=\"ttname\"><a href=\"a01883.html#a1f6a443d0aca3f3cb532e2c81b4017d2\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::LocalFunction::operator()</a></div><div class=\"ttdeci\">Range operator()(const Domain &x) const</div><div class=\"ttdoc\">Evaluate this local-function in coordinates x in the bound element.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:557</div></div>\n-<div class=\"ttc\" id=\"aa01883_html_a5b92fef6586d83fc88f3c2efdacfd220\"><div class=\"ttname\"><a href=\"a01883.html#a5b92fef6586d83fc88f3c2efdacfd220\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::LocalFunction::derivative</a></div><div class=\"ttdeci\">friend Traits::LocalFunctionTraits::DerivativeInterface derivative(const LocalFunction &)</div><div class=\"ttdoc\">Not implemented.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:602</div></div>\n-<div class=\"ttc\" id=\"aa01883_html_abf2deb819d532ec2dfd8e170ddfd72b5\"><div class=\"ttname\"><a href=\"a01883.html#abf2deb819d532ec2dfd8e170ddfd72b5\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::LocalFunction::Range</a></div><div class=\"ttdeci\">GlobalFunction::Range Range</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:514</div></div>\n-<div class=\"ttc\" id=\"aa01883_html_ac5b7ff05f3dae3dc85eae5712a5d1e3c\"><div class=\"ttname\"><a href=\"a01883.html#ac5b7ff05f3dae3dc85eae5712a5d1e3c\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::LocalFunction::unbind</a></div><div class=\"ttdeci\">void unbind()</div><div class=\"ttdoc\">Unbind the local-function.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:538</div></div>\n-<div class=\"ttc\" id=\"aa01883_html_adaccfd098d6b105540eea45ea37a6ab4\"><div class=\"ttname\"><a href=\"a01883.html#adaccfd098d6b105540eea45ea37a6ab4\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::LocalFunction::LocalFunction</a></div><div class=\"ttdeci\">LocalFunction(const GlobalFunction &globalFunction)</div><div class=\"ttdoc\">Create a local function from the associated grid function.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:518</div></div>\n-<div class=\"ttc\" id=\"aa01883_html_af79e06905942ca8abcde986e2a042b1d\"><div class=\"ttname\"><a href=\"a01883.html#af79e06905942ca8abcde986e2a042b1d\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::LocalFunction::bind</a></div><div class=\"ttdeci\">void bind(const Element &element)</div><div class=\"ttdoc\">Bind LocalFunction to grid element.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:531</div></div>\n-<div class=\"ttc\" id=\"aa01895_html\"><div class=\"ttname\"><a href=\"a01895.html\">Dune::Functions::GridFunction</a></div><div class=\"ttdef\"><b>Definition:</b> gridfunction.hh:32</div></div>\n-<div class=\"ttc\" id=\"aa01919_html\"><div class=\"ttname\"><a href=\"a01919.html\">Dune::Functions::GridViewEntitySet< GridView, 0 ></a></div></div>\n-<div class=\"ttc\" id=\"aa01919_html_a1d5eaf3facd0219b2e150d964a664752\"><div class=\"ttname\"><a href=\"a01919.html#a1d5eaf3facd0219b2e150d964a664752\">Dune::Functions::GridViewEntitySet< GridView, 0 >::Element</a></div><div class=\"ttdeci\">GridView::template Codim< codim >::Entity Element</div><div class=\"ttdoc\">Type of Elements contained in this EntitySet.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:32</div></div>\n-<div class=\"ttc\" id=\"aa01919_html_aa4368ad66f18ba8279f20ab7a794069d\"><div class=\"ttname\"><a href=\"a01919.html#aa4368ad66f18ba8279f20ab7a794069d\">Dune::Functions::GridViewEntitySet< GridView, 0 >::LocalCoordinate</a></div><div class=\"ttdeci\">Element::Geometry::LocalCoordinate LocalCoordinate</div><div class=\"ttdoc\">Type of local coordinates with respect to the Element.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:35</div></div>\n-<div class=\"ttc\" id=\"aa01919_html_ac4e3d0188467b4be3d195c9f5729e629\"><div class=\"ttname\"><a href=\"a01919.html#ac4e3d0188467b4be3d195c9f5729e629\">Dune::Functions::GridViewEntitySet< GridView, 0 >::GlobalCoordinate</a></div><div class=\"ttdeci\">Element::Geometry::GlobalCoordinate GlobalCoordinate</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:36</div></div>\n-<div class=\"ttc\" id=\"aa02873_html\"><div class=\"ttname\"><a href=\"a02873.html\">concepts.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa01239_html\"><div class=\"ttname\"><a href=\"a01239.html\">Dune::Functions::PolymorphicType</a></div><div class=\"ttdoc\">Base class with polymorphic type boiler plate code.</div><div class=\"ttdef\"><b>Definition:</b> interfaces.hh:25</div></div>\n+<div class=\"ttc\" id=\"aa01239_html_a342f459670ff8ac9ef58314a95ca972d\"><div class=\"ttname\"><a href=\"a01239.html#a342f459670ff8ac9ef58314a95ca972d\">Dune::Functions::PolymorphicType::clone</a></div><div class=\"ttdeci\">virtual Interface * clone(void *buffer) const =0</div><div class=\"ttdoc\">Clones the object into buffer.</div></div>\n+<div class=\"ttc\" id=\"aa01239_html_a56439d136ed112196bb2bf1a7aca42e7\"><div class=\"ttname\"><a href=\"a01239.html#a56439d136ed112196bb2bf1a7aca42e7\">Dune::Functions::PolymorphicType::clone</a></div><div class=\"ttdeci\">virtual Interface * clone() const =0</div><div class=\"ttdoc\">Clones the object.</div></div>\n+<div class=\"ttc\" id=\"aa01239_html_a937e58884f58dfac27f85c80024be57c\"><div class=\"ttname\"><a href=\"a01239.html#a937e58884f58dfac27f85c80024be57c\">Dune::Functions::PolymorphicType::move</a></div><div class=\"ttdeci\">virtual Interface * move(void *buffer)=0</div><div class=\"ttdoc\">Move object into buffer.</div></div>\n+<div class=\"ttc\" id=\"aa01239_html_ae65ec09f3c0f320f0e5890c3e028fa2a\"><div class=\"ttname\"><a href=\"a01239.html#ae65ec09f3c0f320f0e5890c3e028fa2a\">Dune::Functions::PolymorphicType::~PolymorphicType</a></div><div class=\"ttdeci\">virtual ~PolymorphicType()</div><div class=\"ttdoc\">Destructor.</div><div class=\"ttdef\"><b>Definition:</b> interfaces.hh:29</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,843 +4,64 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * gridfunctions\n-discreteglobalbasisfunction.hh\n+ * common\n+interfaces.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_DISCRETEGLOBALBASISFUNCTIONS_HH\n- 4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_DISCRETEGLOBALBASISFUNCTIONS_HH\n+ 3#ifndef DUNE_FUNCTIONS_COMMON_INTERFACES_HH\n+ 4#define DUNE_FUNCTIONS_COMMON_INTERFACES_HH\n 5\n- 6#include <memory>\n- 7#include <optional>\n+ 6#include <type_traits>\n+ 7\n 8\n- 9#include <dune/common/typetraits.hh>\n- 10\n- 11#include <dune/typetree/treecontainer.hh>\n+ 9namespace Dune {\n+ 10namespace Functions {\n+ 11\n 12\n- 13#include <dune/functions/functionspacebases/hierarchicnodetorangemap.hh>\n- 14#include <dune/functions/functionspacebases/flatvectorview.hh>\n- 15#include <dune/functions/gridfunctions/gridviewentityset.hh>\n- 16#include <dune/functions/gridfunctions/gridfunction.hh>\n- 17#include <dune/functions/backends/concepts.hh>\n- 18#include <dune/functions/backends/istlvectorbackend.hh>\n- 19\n- 20namespace Dune {\n- 21namespace Functions {\n- 22\n- 23\n-24namespace ImplDoc {\n- 25\n- 26template<typename B, typename V, typename NTRE>\n-27class DiscreteGlobalBasisFunctionBase\n- 28{\n- 29public:\n-30 using Basis = B;\n-31 using Vector = V;\n- 32\n- 33 // In order to make the cache work for proxy-references\n- 34 // we have to use AutonomousValue<T> instead of std::decay_t<T>\n-35 using Coefficient = Dune::AutonomousValue<decltype(std::declval<Vector>()\n-[std::declval<typename Basis::MultiIndex>()])>;\n- 36\n-37 using GridView = typename Basis::GridView;\n-38 using EntitySet = GridViewEntitySet<GridView,_0>;\n-39 using Tree = typename Basis::LocalView::Tree;\n-40 using NodeToRangeEntry = NTRE;\n+ 13\n+ 23template<class Interface>\n+24class PolymorphicType\n+ 25{\n+ 26public:\n+ 27\n+29 virtual ~PolymorphicType()\n+ 30 {}\n+ 31\n+40 virtual Interface* clone() const = 0;\n 41\n-42 using Domain = typename EntitySet::GlobalCoordinate;\n- 43\n-44 using LocalDomain = typename EntitySet::LocalCoordinate;\n-45 using Element = typename EntitySet::Element;\n- 46\n- 47protected:\n- 48\n- 49 // This collects all data that is shared by all related\n- 50 // global and local functions. This way we don't need to\n- 51 // keep track of it individually.\n-52 struct Data\n- 53 {\n-54 EntitySet entitySet;\n-55 std::shared_ptr<const Basis> basis;\n-56 std::shared_ptr<const Vector> coefficients;\n-57 std::shared_ptr<const NodeToRangeEntry> nodeToRangeEntry;\n- 58 };\n- 59\n- 60public:\n-61 class LocalFunctionBase\n- 62 {\n- 63 using LocalView = typename Basis::LocalView;\n- 64 using size_type = typename Tree::size_type;\n+51 virtual Interface* clone(void* buffer) const = 0;\n+ 52\n+62 virtual Interface* move(void* buffer) = 0;\n+ 63};\n+ 64\n 65\n- 66 public:\n-67 using Domain = LocalDomain;\n-68 using Element = typename EntitySet::Element;\n- 69\n- 70 protected:\n-71 LocalFunctionBase(const std::shared_ptr<const Data>& data)\n- 72 : data_(data)\n- 73 , localView_(data_->basis->localView())\n- 74 {\n- 75 localDoFs_.reserve(localView_.maxSize());\n- 76 }\n- 77\n-84 LocalFunctionBase(const LocalFunctionBase& other)\n- 85 : data_(other.data_)\n- 86 , localView_(other.localView_)\n- 87 {\n- 88 localDoFs_.reserve(localView_.maxSize());\n- 89 if (bound())\n- 90 localDoFs_ = other.localDoFs_;\n- 91 }\n- 92\n-100 LocalFunctionBase& operator=(const LocalFunctionBase& other)\n- 101 {\n- 102 data_ = other.data_;\n- 103 localView_ = other.localView_;\n- 104 if (bound())\n- 105 localDoFs_ = other.localDoFs_;\n- 106 return *this;\n- 107 }\n- 108\n- 109 public:\n-116 void bind(const Element& element)\n- 117 {\n- 118 localView_.bind(element);\n- 119 // Use cache of full local view size. For a subspace basis,\n- 120 // this may be larger than the number of local DOFs in the\n- 121 // tree. In this case only cache entries associated to local\n- 122 // DOFs in the subspace are filled. Cache entries associated\n- 123 // to local DOFs which are not contained in the subspace will\n- 124 // not be touched.\n- 125 //\n- 126 // Alternatively one could use a cache that exactly fits\n- 127 // the size of the tree. However, this would require to\n- 128 // subtract an offset from localIndex(i) on each cache\n- 129 // access in operator().\n- 130 localDoFs_.resize(localView_.size());\n- 131 const auto& dofs = *data_->coefficients;\n- 132 for (size_type i = 0; i < localView_.tree().size(); ++i)\n- 133 {\n- 134 // For a subspace basis the index-within-tree i\n- 135 // is not the same as the localIndex within the\n- 136 // full local view.\n- 137 size_t localIndex = localView_.tree().localIndex(i);\n- 138 localDoFs_[localIndex] = dofs[localView_.index(localIndex)];\n- 139 }\n- 140 }\n- 141\n-143 void unbind()\n- 144 {\n- 145 localView_.unbind();\n- 146 }\n- 147\n-149 bool bound() const\n- 150 {\n- 151 return localView_.bound();\n- 152 }\n- 153\n-155 const Element& localContext() const\n- 156 {\n- 157 return localView_.element();\n- 158 }\n- 159\n- 160 protected:\n- 161\n- 162 template<class To, class From>\n-163 void assignWith(To& to, const From& from) const\n- 164 {\n- 165 auto from_flat = flatVectorView(from);\n- 166 auto to_flat = flatVectorView(to);\n- 167 assert(from_flat.size() == to_flat.size());\n- 168 for (size_type i = 0; i < to_flat.size(); ++i)\n- 169 to_flat[i] = from_flat[i];\n- 170 }\n- 171\n- 172 template<class Node, class TreePath, class Range>\n-173 decltype(auto) nodeToRangeEntry(const Node& node, const TreePath& treePath,\n-Range& y) const\n- 174 {\n- 175 return (*data_->nodeToRangeEntry)(node, treePath, y);\n- 176 }\n- 177\n-178 std::shared_ptr<const Data> data_;\n-179 LocalView localView_;\n-180 std::vector<Coefficient> localDoFs_;\n- 181 };\n- 182\n- 183protected:\n-184 DiscreteGlobalBasisFunctionBase(const std::shared_ptr<const Data>& data)\n- 185 : data_(data)\n- 186 {\n- 187 /* Nothing. */\n- 188 }\n- 189\n- 190public:\n- 191\n-193 const Basis& basis() const\n- 194 {\n- 195 return *data_->basis;\n- 196 }\n- 197\n-199 const Vector& dofs() const\n- 200 {\n- 201 return *data_->coefficients;\n- 202 }\n- 203\n-205 const NodeToRangeEntry& nodeToRangeEntry() const\n- 206 {\n- 207 return *data_->nodeToRangeEntry;\n- 208 }\n- 209\n-211 const EntitySet& entitySet() const\n- 212 {\n- 213 return data_->entitySet;\n- 214 }\n- 215\n- 216protected:\n-217 std::shared_ptr<const Data> data_;\n- 218};\n- 219\n- 220} // namespace ImplDoc\n- 221\n- 222\n- 223\n- 224template<typename DGBF>\n- 225class DiscreteGlobalBasisFunctionDerivative;\n- 226\n- 264template<typename B, typename V,\n- 265 typename NTRE = HierarchicNodeToRangeMap,\n- 266 typename R = typename V::value_type>\n-267class DiscreteGlobalBasisFunction\n- 268 : public ImplDoc::DiscreteGlobalBasisFunctionBase<B, V, NTRE>\n- 269{\n- 270 using Base = ImplDoc::DiscreteGlobalBasisFunctionBase<B,_V,_NTRE>;\n- 271 using Data = typename Base::Data;\n- 272\n- 273public:\n-274 using Basis = typename Base::Basis;\n-275 using Vector = typename Base::Vector;\n- 276\n-277 using Domain = typename Base::Domain;\n-278 using Range = R;\n- 279\n-280 using Traits = Imp::GridFunctionTraits<Range(Domain), typename Base::\n-EntitySet, DefaultDerivativeTraits, 16>;\n- 281\n- 282private:\n- 283\n- 284 template<class Node>\n- 285 using LocalBasisRange = typename Node::FiniteElement::Traits::\n-LocalBasisType::Traits::RangeType;\n- 286 template<class Node>\n- 287 using NodeData = typename std::vector<LocalBasisRange<Node>>;\n- 288 using PerNodeEvaluationBuffer = typename TypeTree::TreeContainer<NodeData,\n-typename Base::Tree>;\n- 289\n- 290public:\n-291 class LocalFunction\n- 292 : public Base::LocalFunctionBase\n- 293 {\n- 294 using LocalBase = typename Base::LocalFunctionBase;\n- 295 using size_type = typename Base::Tree::size_type;\n- 296 using LocalBase::nodeToRangeEntry;\n- 297\n- 298 public:\n- 299\n-300 using GlobalFunction = DiscreteGlobalBasisFunction;\n-301 using Domain = typename LocalBase::Domain;\n-302 using Range = GlobalFunction::Range;\n-303 using Element = typename LocalBase::Element;\n- 304\n-306 LocalFunction(const DiscreteGlobalBasisFunction& globalFunction)\n- 307 : LocalBase(globalFunction.data_)\n- 308 , evaluationBuffer_(this->localView_.tree())\n- 309 {\n- 310 /* Nothing. */\n- 311 }\n- 312\n-322 Range operator()(const Domain& x) const\n- 323 {\n- 324 Range y;\n- 325 istlVectorBackend(y) = 0;\n- 326\n- 327 TypeTree::forEachLeafNode(this->localView_.tree(), [&](auto&& node, auto&&\n-treePath) {\n- 328 const auto& fe = node.finiteElement();\n- 329 const auto& localBasis = fe.localBasis();\n- 330 auto& shapeFunctionValues = evaluationBuffer_[treePath];\n- 331\n- 332 localBasis.evaluateFunction(x, shapeFunctionValues);\n- 333\n- 334 // Compute linear combinations of basis function jacobian.\n- 335 // Non-scalar coefficients of dimension coeffDim are handled by\n- 336 // processing the coeffDim linear combinations independently\n- 337 // and storing them as entries of an array.\n- 338 using Value = LocalBasisRange< std::decay_t<decltype(node)> >;\n- 339 static constexpr auto coeffDim = decltype(flatVectorView(this->localDoFs_\n-[node.localIndex(0)]).size())::value;\n- 340 auto values = std::array<Value, coeffDim>{};\n- 341 istlVectorBackend(values) = 0;\n- 342 for (size_type i = 0; i < localBasis.size(); ++i)\n- 343 {\n- 344 auto c = flatVectorView(this->localDoFs_[node.localIndex(i)]);\n- 345 for (std::size_t j = 0; j < coeffDim; ++j)\n- 346 values[j].axpy(c[j], shapeFunctionValues[i]);\n- 347 }\n- 348\n- 349 // Assign computed values to node entry of range.\n- 350 // Types are matched using the lexicographic ordering provided by\n-flatVectorView.\n- 351 LocalBase::assignWith(nodeToRangeEntry(node, treePath, y), values);\n- 352 });\n- 353\n- 354 return y;\n- 355 }\n- 356\n-358 friend typename\n-DiscreteGlobalBasisFunctionDerivative<DiscreteGlobalBasisFunction>::\n-LocalFunction derivative(const LocalFunction& lf)\n- 359 {\n- 360 auto dlf = localFunction\n-(DiscreteGlobalBasisFunctionDerivative<DiscreteGlobalBasisFunction>(lf.data_));\n- 361 if (lf.bound())\n- 362 dlf.bind(lf.localContext());\n- 363 return dlf;\n- 364 }\n- 365\n- 366 private:\n- 367 mutable PerNodeEvaluationBuffer evaluationBuffer_;\n- 368 };\n- 369\n- 371 template<class B_T, class V_T, class NTRE_T>\n-372 DiscreteGlobalBasisFunction(B_T && basis, V_T && coefficients, NTRE_T&&\n-nodeToRangeEntry)\n- 373 : Base(std::make_shared<Data>(Data{{basis.gridView()}, wrap_or_move(std::\n-forward<B_T>(basis)), wrap_or_move(std::forward<V_T>(coefficients)),\n-wrap_or_move(std::forward<NTRE_T>(nodeToRangeEntry))}))\n- 374 {}\n- 375\n-377 DiscreteGlobalBasisFunction(std::shared_ptr<const Basis> basis, std::\n-shared_ptr<const V> coefficients, std::shared_ptr<const typename Base::\n-NodeToRangeEntry> nodeToRangeEntry)\n- 378 : Base(std::make_shared<Data>(Data{{basis->gridView()}, basis,\n-coefficients, nodeToRangeEntry}))\n- 379 {}\n- 380\n-382 Range operator() (const Domain& x) const\n- 383 {\n- 384 // TODO: Implement this using hierarchic search\n- 385 DUNE_THROW(NotImplemented,\"not implemented\");\n- 386 }\n- 387\n-389 friend DiscreteGlobalBasisFunctionDerivative<DiscreteGlobalBasisFunction>\n-derivative(const DiscreteGlobalBasisFunction& f)\n- 390 {\n- 391 return DiscreteGlobalBasisFunctionDerivative<DiscreteGlobalBasisFunction>\n-(f.data_);\n- 392 }\n- 393\n-402 friend LocalFunction localFunction(const DiscreteGlobalBasisFunction& t)\n- 403 {\n- 404 return LocalFunction(t);\n- 405 }\n- 406};\n- 407\n- 408\n- 431template<typename R, typename B, typename V>\n-432auto makeDiscreteGlobalBasisFunction(B&& basis, V&& vector)\n- 433{\n- 434 using Basis = std::decay_t<B>;\n- 435 using NTREM = HierarchicNodeToRangeMap;\n- 436\n- 437 // Small helper functions to wrap vectors using istlVectorBackend\n- 438 // if they do not already satisfy the VectorBackend interface.\n- 439 auto toConstVectorBackend = [&](auto&& v) -> decltype(auto) {\n- 440 if constexpr (models<Concept::ConstVectorBackend<Basis>, decltype(v)>()) {\n- 441 return std::forward<decltype(v)>(v);\n- 442 } else {\n- 443 return istlVectorBackend(v);\n- 444 }\n- 445 };\n- 446\n- 447 using Vector = std::decay_t<decltype(toConstVectorBackend(std::forward<V>\n-(vector)))>;\n- 448 return DiscreteGlobalBasisFunction<Basis,_Vector,_NTREM,_R>(\n- 449 std::forward<B>(basis),\n- 450 toConstVectorBackend(std::forward<V>(vector)),\n- 451 HierarchicNodeToRangeMap());\n- 452}\n- 453\n- 454\n- 469template<typename DGBF>\n-470class DiscreteGlobalBasisFunctionDerivative\n- 471 : public ImplDoc::DiscreteGlobalBasisFunctionBase<typename DGBF::Basis,\n-typename DGBF::Vector, typename DGBF::NodeToRangeEntry>\n- 472{\n- 473 using Base = ImplDoc::DiscreteGlobalBasisFunctionBase<typename_DGBF::\n-Basis,_typename_DGBF::Vector,_typename_DGBF::NodeToRangeEntry>;\n- 474 using Data = typename Base::Data;\n- 475\n- 476public:\n-477 using DiscreteGlobalBasisFunction = DGBF;\n- 478\n-479 using Basis = typename Base::Basis;\n-480 using Vector = typename Base::Vector;\n- 481\n-482 using Domain = typename Base::Domain;\n-483 using Range = typename SignatureTraits<typename\n-DiscreteGlobalBasisFunction::Traits::DerivativeInterface>::Range;\n- 484\n-485 using Traits = Imp::GridFunctionTraits<Range(Domain), typename Base::\n-EntitySet, DefaultDerivativeTraits, 16>;\n- 486\n- 487private:\n- 488\n- 489 template<class Node>\n- 490 using LocalBasisRange = typename Node::FiniteElement::Traits::\n-LocalBasisType::Traits::JacobianType;\n- 491 template<class Node>\n- 492 using NodeData = typename std::vector< LocalBasisRange<Node> >;\n- 493 using PerNodeEvaluationBuffer = typename TypeTree::TreeContainer<NodeData,\n-typename Base::Tree>;\n- 494\n- 495public:\n- 496\n-504 class LocalFunction\n- 505 : public Base::LocalFunctionBase\n- 506 {\n- 507 using LocalBase = typename Base::LocalFunctionBase;\n- 508 using size_type = typename Base::Tree::size_type;\n- 509 using LocalBase::nodeToRangeEntry;\n- 510\n- 511 public:\n-512 using GlobalFunction = DiscreteGlobalBasisFunctionDerivative;\n-513 using Domain = typename LocalBase::Domain;\n-514 using Range = GlobalFunction::Range;\n-515 using Element = typename LocalBase::Element;\n- 516\n-518 LocalFunction(const GlobalFunction& globalFunction)\n- 519 : LocalBase(globalFunction.data_)\n- 520 , evaluationBuffer_(this->localView_.tree())\n- 521 {\n- 522 /* Nothing. */\n- 523 }\n- 524\n-531 void bind(const Element& element)\n- 532 {\n- 533 LocalBase::bind(element);\n- 534 geometry_.emplace(element.geometry());\n- 535 }\n- 536\n-538 void unbind()\n- 539 {\n- 540 geometry_.reset();\n- 541 LocalBase::unbind();\n- 542 }\n- 543\n-557 Range operator()(const Domain& x) const\n- 558 {\n- 559 Range y;\n- 560 istlVectorBackend(y) = 0;\n- 561\n- 562 const auto& jacobianInverse = geometry_->jacobianInverse(x);\n- 563\n- 564 TypeTree::forEachLeafNode(this->localView_.tree(), [&](auto&& node, auto&&\n-treePath) {\n- 565 const auto& fe = node.finiteElement();\n- 566 const auto& localBasis = fe.localBasis();\n- 567 auto& shapeFunctionJacobians = evaluationBuffer_[treePath];\n- 568\n- 569 localBasis.evaluateJacobian(x, shapeFunctionJacobians);\n- 570\n- 571 // Compute linear combinations of basis function jacobian.\n- 572 // Non-scalar coefficients of dimension coeffDim are handled by\n- 573 // processing the coeffDim linear combinations independently\n- 574 // and storing them as entries of an array.\n- 575 using RefJacobian = LocalBasisRange< std::decay_t<decltype(node)> >;\n- 576 static constexpr auto coeffDim = decltype(flatVectorView(this->localDoFs_\n-[node.localIndex(0)]).size())::value;\n- 577 auto refJacobians = std::array<RefJacobian, coeffDim>{};\n- 578 istlVectorBackend(refJacobians) = 0;\n- 579 for (size_type i = 0; i < localBasis.size(); ++i)\n- 580 {\n- 581 auto c = flatVectorView(this->localDoFs_[node.localIndex(i)]);\n- 582 for (std::size_t j = 0; j < coeffDim; ++j)\n- 583 refJacobians[j].axpy(c[j], shapeFunctionJacobians[i]);\n- 584 }\n- 585\n- 586 // Transform Jacobians form local to global coordinates.\n- 587 using Jacobian = decltype(refJacobians[0] * jacobianInverse);\n- 588 auto jacobians = std::array<Jacobian, coeffDim>{};\n- 589 std::transform(\n- 590 refJacobians.begin(), refJacobians.end(), jacobians.begin(),\n- 591 [&](const auto& refJacobian) { return refJacobian * jacobianInverse; });\n- 592\n- 593 // Assign computed Jacobians to node entry of range.\n- 594 // Types are matched using the lexicographic ordering provided by\n-flatVectorView.\n- 595 LocalBase::assignWith(nodeToRangeEntry(node, treePath, y), jacobians);\n- 596 });\n- 597\n- 598 return y;\n- 599 }\n- 600\n-602 friend typename Traits::LocalFunctionTraits::DerivativeInterface derivative\n-(const LocalFunction&)\n- 603 {\n- 604 DUNE_THROW(NotImplemented, \"derivative of derivative is not implemented\");\n- 605 }\n- 606\n- 607 private:\n- 608 mutable PerNodeEvaluationBuffer evaluationBuffer_;\n- 609 std::optional<typename Element::Geometry> geometry_;\n- 610 };\n- 611\n-618 DiscreteGlobalBasisFunctionDerivative(const std::shared_ptr<const Data>&\n-data)\n- 619 : Base(data)\n- 620 {\n- 621 /* Nothing. */\n- 622 }\n- 623\n-625 Range operator()(const Domain& x) const\n- 626 {\n- 627 // TODO: Implement this using hierarchic search\n- 628 DUNE_THROW(NotImplemented,\"not implemented\");\n- 629 }\n- 630\n-631 friend typename Traits::DerivativeInterface derivative(const\n-DiscreteGlobalBasisFunctionDerivative& f)\n- 632 {\n- 633 DUNE_THROW(NotImplemented, \"derivative of derivative is not implemented\");\n- 634 }\n- 635\n-637 friend LocalFunction localFunction(const\n-DiscreteGlobalBasisFunctionDerivative& f)\n- 638 {\n- 639 return LocalFunction(f);\n- 640 }\n- 641};\n- 642\n- 643\n- 644} // namespace Functions\n- 645} // namespace Dune\n- 646\n- 647#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_DISCRETEGLOBALBASISFUNCTIONS_HH\n-istlvectorbackend.hh\n-gridfunction.hh\n-gridviewentityset.hh\n-flatvectorview.hh\n-hierarchicnodetorangemap.hh\n-Dune::Functions::DiscreteGlobalBasisFunction::makeDiscreteGlobalBasisFunction\n-auto makeDiscreteGlobalBasisFunction(B &&basis, V &&vector)\n-Generate a DiscreteGlobalBasisFunction.\n-Definition: discreteglobalbasisfunction.hh:432\n-Dune::Functions::istlVectorBackend\n-auto istlVectorBackend(Vector &v)\n-Return a vector backend wrapping non-const ISTL like containers.\n-Definition: istlvectorbackend.hh:346\n+ 66\n+ 67}} // namespace Dune::Functions\n+ 68\n+ 69#endif // DUNE_FUNCTIONS_COMMON_EXTENDED_CLONEABLE_HH\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::flatVectorView\n-auto flatVectorView(T &t)\n-Create flat vector view of passed mutable container.\n-Definition: flatvectorview.hh:179\n-Dune::Functions::DefaultDerivativeTraits\n-Default implementation for derivative traits.\n-Definition: defaultderivativetraits.hh:37\n-Dune::Functions::SignatureTraits\n-Helper class to deduce the signature of a callable.\n-Definition: signature.hh:56\n-Dune::Functions::HierarchicNodeToRangeMap\n-A simple node to range map using the nested tree indices.\n-Definition: hierarchicnodetorangemap.hh:30\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase\n-Definition: discreteglobalbasisfunction.hh:28\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::data_\n-std::shared_ptr< const Data > data_\n-Definition: discreteglobalbasisfunction.hh:217\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::dofs\n-const Vector & dofs() const\n-Return the coefficients of this discrete function by reference.\n-Definition: discreteglobalbasisfunction.hh:199\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Basis\n-B Basis\n-Definition: discreteglobalbasisfunction.hh:30\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Tree\n-typename Basis::LocalView::Tree Tree\n-Definition: discreteglobalbasisfunction.hh:39\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Vector\n-V Vector\n-Definition: discreteglobalbasisfunction.hh:31\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Element\n-typename EntitySet::Element Element\n-Definition: discreteglobalbasisfunction.hh:45\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalDomain\n-typename EntitySet::LocalCoordinate LocalDomain\n-Definition: discreteglobalbasisfunction.hh:44\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::nodeToRangeEntry\n-const NodeToRangeEntry & nodeToRangeEntry() const\n-Return the stored node-to-range map.\n-Definition: discreteglobalbasisfunction.hh:205\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::NodeToRangeEntry\n-NTRE NodeToRangeEntry\n-Definition: discreteglobalbasisfunction.hh:40\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::\n-DiscreteGlobalBasisFunctionBase\n-DiscreteGlobalBasisFunctionBase(const std::shared_ptr< const Data > &data)\n-Definition: discreteglobalbasisfunction.hh:184\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::GridView\n-typename Basis::GridView GridView\n-Definition: discreteglobalbasisfunction.hh:37\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::basis\n-const Basis & basis() const\n-Return a const reference to the stored basis.\n-Definition: discreteglobalbasisfunction.hh:193\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::EntitySet\n-GridViewEntitySet< GridView, 0 > EntitySet\n-Definition: discreteglobalbasisfunction.hh:38\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::entitySet\n-const EntitySet & entitySet() const\n-Get associated set of entities the local-function can be bound to.\n-Definition: discreteglobalbasisfunction.hh:211\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Domain\n-typename EntitySet::GlobalCoordinate Domain\n-Definition: discreteglobalbasisfunction.hh:42\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Coefficient\n-Dune::AutonomousValue< decltype(std::declval< Vector >()[std::declval< typename\n-Basis::MultiIndex >()])> Coefficient\n-Definition: discreteglobalbasisfunction.hh:35\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Data\n-Definition: discreteglobalbasisfunction.hh:53\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Data::entitySet\n-EntitySet entitySet\n-Definition: discreteglobalbasisfunction.hh:54\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Data::\n-nodeToRangeEntry\n-std::shared_ptr< const NodeToRangeEntry > nodeToRangeEntry\n-Definition: discreteglobalbasisfunction.hh:57\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Data::basis\n-std::shared_ptr< const Basis > basis\n-Definition: discreteglobalbasisfunction.hh:55\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Data::coefficients\n-std::shared_ptr< const Vector > coefficients\n-Definition: discreteglobalbasisfunction.hh:56\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase\n-Definition: discreteglobalbasisfunction.hh:62\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::\n-operator=\n-LocalFunctionBase & operator=(const LocalFunctionBase &other)\n-Copy-assignment of the local-function.\n-Definition: discreteglobalbasisfunction.hh:100\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::\n-bound\n-bool bound() const\n-Check if LocalFunction is already bound to an element.\n-Definition: discreteglobalbasisfunction.hh:149\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::\n-bind\n-void bind(const Element &element)\n-Bind LocalFunction to grid element.\n-Definition: discreteglobalbasisfunction.hh:116\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::\n-Element\n-typename EntitySet::Element Element\n-Definition: discreteglobalbasisfunction.hh:68\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::\n-localContext\n-const Element & localContext() const\n-Return the element the local-function is bound to.\n-Definition: discreteglobalbasisfunction.hh:155\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::\n-LocalFunctionBase\n-LocalFunctionBase(const LocalFunctionBase &other)\n-Copy-construct the local-function.\n-Definition: discreteglobalbasisfunction.hh:84\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::\n-localDoFs_\n-std::vector< Coefficient > localDoFs_\n-Definition: discreteglobalbasisfunction.hh:180\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::\n-assignWith\n-void assignWith(To &to, const From &from) const\n-Definition: discreteglobalbasisfunction.hh:163\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::\n-data_\n-std::shared_ptr< const Data > data_\n-Definition: discreteglobalbasisfunction.hh:178\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::\n-nodeToRangeEntry\n-decltype(auto) nodeToRangeEntry(const Node &node, const TreePath &treePath,\n-Range &y) const\n-Definition: discreteglobalbasisfunction.hh:173\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::\n-localView_\n-LocalView localView_\n-Definition: discreteglobalbasisfunction.hh:179\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::\n-unbind\n-void unbind()\n-Unbind the local-function.\n-Definition: discreteglobalbasisfunction.hh:143\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::\n-Domain\n-LocalDomain Domain\n-Definition: discreteglobalbasisfunction.hh:67\n-Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::\n-LocalFunctionBase\n-LocalFunctionBase(const std::shared_ptr< const Data > &data)\n-Definition: discreteglobalbasisfunction.hh:71\n-Dune::Functions::DiscreteGlobalBasisFunctionDerivative\n-Derivative of a DiscreteGlobalBasisFunction\n-Definition: discreteglobalbasisfunction.hh:472\n-Dune::Functions::DiscreteGlobalBasisFunctionDerivative::Basis\n-typename Base::Basis Basis\n-Definition: discreteglobalbasisfunction.hh:479\n-Dune::Functions::DiscreteGlobalBasisFunctionDerivative::derivative\n-friend Traits::DerivativeInterface derivative(const\n-DiscreteGlobalBasisFunctionDerivative &f)\n-Definition: discreteglobalbasisfunction.hh:631\n-Dune::Functions::DiscreteGlobalBasisFunctionDerivative::operator()\n-Range operator()(const Domain &x) const\n-Not implemented.\n-Definition: discreteglobalbasisfunction.hh:625\n-Dune::Functions::DiscreteGlobalBasisFunctionDerivative::Range\n-typename SignatureTraits< typename DiscreteGlobalBasisFunction::Traits::\n-DerivativeInterface >::Range Range\n-Definition: discreteglobalbasisfunction.hh:483\n-Dune::Functions::DiscreteGlobalBasisFunctionDerivative::localFunction\n-friend LocalFunction localFunction(const DiscreteGlobalBasisFunctionDerivative\n-&f)\n-Construct local function from a DiscreteGlobalBasisFunctionDerivative\n-Definition: discreteglobalbasisfunction.hh:637\n-Dune::Functions::DiscreteGlobalBasisFunctionDerivative::\n-DiscreteGlobalBasisFunctionDerivative\n-DiscreteGlobalBasisFunctionDerivative(const std::shared_ptr< const Data >\n-&data)\n-create object from DiscreateGlobalBasisFunction data\n-Definition: discreteglobalbasisfunction.hh:618\n-Dune::Functions::DiscreteGlobalBasisFunctionDerivative::\n-DiscreteGlobalBasisFunction\n-DGBF DiscreteGlobalBasisFunction\n-Definition: discreteglobalbasisfunction.hh:477\n-Dune::Functions::DiscreteGlobalBasisFunctionDerivative::Vector\n-typename Base::Vector Vector\n-Definition: discreteglobalbasisfunction.hh:480\n-Dune::Functions::DiscreteGlobalBasisFunctionDerivative::Traits\n-Imp::GridFunctionTraits< Range(Domain), typename Base::EntitySet,\n-DefaultDerivativeTraits, 16 > Traits\n-Definition: discreteglobalbasisfunction.hh:485\n-Dune::Functions::DiscreteGlobalBasisFunctionDerivative::Domain\n-typename Base::Domain Domain\n-Definition: discreteglobalbasisfunction.hh:482\n-Dune::Functions::DiscreteGlobalBasisFunction\n-A grid function induced by a global basis and a coefficient vector.\n-Definition: discreteglobalbasisfunction.hh:269\n-Dune::Functions::DiscreteGlobalBasisFunction::derivative\n-friend DiscreteGlobalBasisFunctionDerivative< DiscreteGlobalBasisFunction >\n-derivative(const DiscreteGlobalBasisFunction &f)\n-Derivative of the DiscreteGlobalBasisFunction\n-Definition: discreteglobalbasisfunction.hh:389\n-Dune::Functions::DiscreteGlobalBasisFunction::DiscreteGlobalBasisFunction\n-DiscreteGlobalBasisFunction(B_T &&basis, V_T &&coefficients, NTRE_T\n-&&nodeToRangeEntry)\n-Create a grid-function, by wrapping the arguments in std::shared_ptr.\n-Definition: discreteglobalbasisfunction.hh:372\n-Dune::Functions::DiscreteGlobalBasisFunction::DiscreteGlobalBasisFunction\n-DiscreteGlobalBasisFunction(std::shared_ptr< const Basis > basis, std::\n-shared_ptr< const V > coefficients, std::shared_ptr< const typename Base::\n-NodeToRangeEntry > nodeToRangeEntry)\n-Create a grid-function, by moving the arguments in std::shared_ptr.\n-Definition: discreteglobalbasisfunction.hh:377\n-Dune::Functions::DiscreteGlobalBasisFunction::localFunction\n-friend LocalFunction localFunction(const DiscreteGlobalBasisFunction &t)\n-Construct local function from a DiscreteGlobalBasisFunction.\n-Definition: discreteglobalbasisfunction.hh:402\n-Dune::Functions::DiscreteGlobalBasisFunction::Basis\n-typename Base::Basis Basis\n-Definition: discreteglobalbasisfunction.hh:274\n-Dune::Functions::DiscreteGlobalBasisFunction::Traits\n-Imp::GridFunctionTraits< Range(Domain), typename Base::EntitySet,\n-DefaultDerivativeTraits, 16 > Traits\n-Definition: discreteglobalbasisfunction.hh:280\n-Dune::Functions::DiscreteGlobalBasisFunction::Range\n-R Range\n-Definition: discreteglobalbasisfunction.hh:278\n-Dune::Functions::DiscreteGlobalBasisFunction::Vector\n-typename Base::Vector Vector\n-Definition: discreteglobalbasisfunction.hh:275\n-Dune::Functions::DiscreteGlobalBasisFunction::Domain\n-typename Base::Domain Domain\n-Definition: discreteglobalbasisfunction.hh:277\n-Dune::Functions::DiscreteGlobalBasisFunction::LocalFunction\n-Definition: discreteglobalbasisfunction.hh:293\n-Dune::Functions::DiscreteGlobalBasisFunction::LocalFunction::Range\n-GlobalFunction::Range Range\n-Definition: discreteglobalbasisfunction.hh:302\n-Dune::Functions::DiscreteGlobalBasisFunction::LocalFunction::LocalFunction\n-LocalFunction(const DiscreteGlobalBasisFunction &globalFunction)\n-Create a local-function from the associated grid-function.\n-Definition: discreteglobalbasisfunction.hh:306\n-Dune::Functions::DiscreteGlobalBasisFunction::LocalFunction::derivative\n-friend DiscreteGlobalBasisFunctionDerivative< DiscreteGlobalBasisFunction >::\n-LocalFunction derivative(const LocalFunction &lf)\n-Local function of the derivative.\n-Definition: discreteglobalbasisfunction.hh:358\n-Dune::Functions::DiscreteGlobalBasisFunction::LocalFunction::operator()\n-Range operator()(const Domain &x) const\n-Evaluate this local-function in coordinates x in the bound element.\n-Definition: discreteglobalbasisfunction.hh:322\n-Dune::Functions::DiscreteGlobalBasisFunctionDerivative::LocalFunction\n-local function evaluating the derivative in reference coordinates\n-Definition: discreteglobalbasisfunction.hh:506\n-Dune::Functions::DiscreteGlobalBasisFunctionDerivative::LocalFunction::operator\n-()\n-Range operator()(const Domain &x) const\n-Evaluate this local-function in coordinates x in the bound element.\n-Definition: discreteglobalbasisfunction.hh:557\n-Dune::Functions::DiscreteGlobalBasisFunctionDerivative::LocalFunction::\n-derivative\n-friend Traits::LocalFunctionTraits::DerivativeInterface derivative(const\n-LocalFunction &)\n-Not implemented.\n-Definition: discreteglobalbasisfunction.hh:602\n-Dune::Functions::DiscreteGlobalBasisFunctionDerivative::LocalFunction::Range\n-GlobalFunction::Range Range\n-Definition: discreteglobalbasisfunction.hh:514\n-Dune::Functions::DiscreteGlobalBasisFunctionDerivative::LocalFunction::unbind\n-void unbind()\n-Unbind the local-function.\n-Definition: discreteglobalbasisfunction.hh:538\n-Dune::Functions::DiscreteGlobalBasisFunctionDerivative::LocalFunction::\n-LocalFunction\n-LocalFunction(const GlobalFunction &globalFunction)\n-Create a local function from the associated grid function.\n-Definition: discreteglobalbasisfunction.hh:518\n-Dune::Functions::DiscreteGlobalBasisFunctionDerivative::LocalFunction::bind\n-void bind(const Element &element)\n-Bind LocalFunction to grid element.\n-Definition: discreteglobalbasisfunction.hh:531\n-Dune::Functions::GridFunction\n-Definition: gridfunction.hh:32\n-Dune::Functions::GridViewEntitySet<_GridView,_0_>\n-Dune::Functions::GridViewEntitySet<_GridView,_0_>::Element\n-GridView::template Codim< codim >::Entity Element\n-Type of Elements contained in this EntitySet.\n-Definition: gridviewentityset.hh:32\n-Dune::Functions::GridViewEntitySet<_GridView,_0_>::LocalCoordinate\n-Element::Geometry::LocalCoordinate LocalCoordinate\n-Type of local coordinates with respect to the Element.\n-Definition: gridviewentityset.hh:35\n-Dune::Functions::GridViewEntitySet<_GridView,_0_>::GlobalCoordinate\n-Element::Geometry::GlobalCoordinate GlobalCoordinate\n-Definition: gridviewentityset.hh:36\n-concepts.hh\n+Dune::Functions::PolymorphicType\n+Base class with polymorphic type boiler plate code.\n+Definition: interfaces.hh:25\n+Dune::Functions::PolymorphicType::clone\n+virtual Interface * clone(void *buffer) const =0\n+Clones the object into buffer.\n+Dune::Functions::PolymorphicType::clone\n+virtual Interface * clone() const =0\n+Clones the object.\n+Dune::Functions::PolymorphicType::move\n+virtual Interface * move(void *buffer)=0\n+Move object into buffer.\n+Dune::Functions::PolymorphicType::~PolymorphicType\n+virtual ~PolymorphicType()\n+Destructor.\n+Definition: interfaces.hh:29\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00029.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00029.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: localderivativetraits.hh File Reference</title>\n+<title>dune-functions: type_traits.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,44 +58,52 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n-<a href=\"#namespaces\">Namespaces</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">localderivativetraits.hh File Reference</div></div>\n+<a href=\"#namespaces\">Namespaces</a> |\n+<a href=\"#typedef-members\">Typedefs</a> </div>\n+ <div class=\"headertitle\"><div class=\"title\">type_traits.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <<a class=\"el\" href=\"a00080_source.html\">dune/functions/common/defaultderivativetraits.hh</a>></code><br />\n+<div class=\"textblock\"><code>#include <type_traits></code><br />\n+<code>#include <dune/common/typeutilities.hh></code><br />\n </div>\n <p><a href=\"a00029_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01931.html\">Dune::Functions::LocalDerivativeTraits< EntitySet, DerivativeTraits ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Derivative traits for local functions. <a href=\"a01931.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01331.html\">Dune::Functions::HasStaticSize< T ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Check if type is a statically sized container. <a href=\"a01331.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01935.html\">Dune::Functions::LocalDerivativeTraits< EntitySet, DerivativeTraits >::Traits< Signature ></a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01939.html\">Dune::Functions::LocalDerivativeTraits< EntitySet, DerivativeTraits >::Traits< R(LocalDomain)></a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01335.html\">Dune::Functions::StaticSize< T ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Obtain size of statically sized container. <a href=\"a01335.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+</table><table class=\"memberdecls\">\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"typedef-members\" name=\"typedef-members\"></a>\n+Typedefs</h2></td></tr>\n+<tr class=\"memitem:ga673247dd74bcdd9e5acfc7735faf8a5b\"><td class=\"memTemplParams\" colspan=\"2\">template<class T , class... Args> </td></tr>\n+<tr class=\"memitem:ga673247dd74bcdd9e5acfc7735faf8a5b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00215.html#ga673247dd74bcdd9e5acfc7735faf8a5b\">Dune::Functions::enableIfConstructible</a> = typename std::enable_if< std::is_constructible< T, Args... >::value, int >::type</td></tr>\n+<tr class=\"memdesc:ga673247dd74bcdd9e5acfc7735faf8a5b\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Helper to constrain forwarding constructors. <a href=\"a00215.html#ga673247dd74bcdd9e5acfc7735faf8a5b\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga673247dd74bcdd9e5acfc7735faf8a5b\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,30 +4,34 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * gridfunctions\n-Classes | Namespaces\n-localderivativetraits.hh File Reference\n-#include <dune/functions/common/defaultderivativetraits.hh>\n+ * common\n+Classes | Namespaces | Typedefs\n+type_traits.hh File Reference\n+#include <type_traits>\n+#include <dune/common/typeutilities.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-struct \u00a0Dune::Functions::LocalDerivativeTraits<_EntitySet,_DerivativeTraits_>\n-\u00a0 Derivative traits for local functions. More...\n+struct \u00a0Dune::Functions::HasStaticSize<_T_>\n+\u00a0 Check if type is a statically sized container. More...\n \u00a0\n-struct \u00a0Dune::Functions::LocalDerivativeTraits<_EntitySet,_DerivativeTraits\n- >::Traits<_Signature_>\n-\u00a0\n-struct \u00a0Dune::Functions::LocalDerivativeTraits<_EntitySet,_DerivativeTraits\n- >::Traits<_R(LocalDomain)>\n+struct \u00a0Dune::Functions::StaticSize<_T_>\n+\u00a0 Obtain size of statically sized container. More...\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n+ Typedefs\n+template<class T , class... Args>\n+using\u00a0Dune::Functions::enableIfConstructible = typename std::enable_if< std::\n+ is_constructible< T, Args... >::value, int >::type\n+\u00a0 Helper to constrain forwarding constructors. More...\n+\u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00029_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00029_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: localderivativetraits.hh Source File</title>\n+<title>dune-functions: type_traits.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,66 +58,104 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">localderivativetraits.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">type_traits.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00029.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_TYPE_TRAITS_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_TYPE_TRAITS_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span> </div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00080.html\">dune/functions/common/defaultderivativetraits.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <type_traits></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span> </div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <dune/common/typeutilities.hh></span></div>\n <div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n <div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n <div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"keyword\">namespace </span>Functions {</div>\n <div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n <div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> EntitySet, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits=DefaultDerivativeTraits></div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01931.html\"> 27</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01931.html\">LocalDerivativeTraits</a></div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span>{</div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01931.html#a2dc0b1d49311457bb686a04972f8aee4\"> 29</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01931.html#a2dc0b1d49311457bb686a04972f8aee4\">LocalDomain</a> = <span class=\"keyword\">typename</span> EntitySet::LocalCoordinate;</div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01931.html#a0339d22fe9243285caf3a79a286912b5\"> 30</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01931.html#a0339d22fe9243285caf3a79a286912b5\">Domain</a> = <span class=\"keyword\">typename</span> EntitySet::GlobalCoordinate;</div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>T, <span class=\"keyword\">class</span>... Args></div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00215.html#ga673247dd74bcdd9e5acfc7735faf8a5b\"> 25</a></span><span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a00215.html#ga673247dd74bcdd9e5acfc7735faf8a5b\">enableIfConstructible</a> = <span class=\"keyword\">typename</span> std::enable_if<</div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> std::is_constructible<T, Args...>::value, <span class=\"keywordtype\">int</span>>::type;</div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> </div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> </div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span> </div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span><span class=\"keyword\">namespace </span>Imp {</div>\n <div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> </div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature></div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01935.html\"> 33</a></span> <span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01935.html\">Traits</a></div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> {</div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01935.html#ab37a5c5f4de2d44c5334bab2b33cf8a0\"> 35</a></span> <span class=\"keyword\">typedef</span> <a class=\"code hl_class\" href=\"a01071.html\">InvalidRange</a> <a class=\"code hl_typedef\" href=\"a01935.html#ab37a5c5f4de2d44c5334bab2b33cf8a0\">Range</a>;</div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> };</div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> </div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> R></div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01939.html\"> 39</a></span> <span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01935.html\">Traits</a><R(<a class=\"code hl_typedef\" href=\"a01931.html#a2dc0b1d49311457bb686a04972f8aee4\">LocalDomain</a>)></div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> {</div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01939.html#a80a14d6e3599853298641c023ff34acd\"> 41</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01939.html#a80a14d6e3599853298641c023ff34acd\">Range</a> = <span class=\"keyword\">typename</span> DerivativeTraits<R(<a class=\"code hl_typedef\" href=\"a01931.html#a0339d22fe9243285caf3a79a286912b5\">Domain</a>)><a class=\"code hl_typedef\" href=\"a01935.html#ab37a5c5f4de2d44c5334bab2b33cf8a0\">::Range</a>;</div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> };</div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span>};</div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> </div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> </div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span>}} <span class=\"comment\">// namespace Dune::Functions</span></div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> <span class=\"comment\">// As a last resort try if there's a static constexpr size()</span></div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">auto</span> staticSize(<span class=\"keyword\">const</span> T*, <span class=\"keyword\">const</span> PriorityTag<0>&)</div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> -> <span class=\"keyword\">decltype</span>(std::integral_constant<std::size_t,T::size()>())</div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> {</div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> <span class=\"keywordflow\">return</span> {};</div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> }</div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> </div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> <span class=\"comment\">// Try if class has constexpr default constructor and size method</span></div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">auto</span> staticSize(<span class=\"keyword\">const</span> T*, <span class=\"keyword\">const</span> PriorityTag<1>&)</div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> -> <span class=\"keyword\">decltype</span>(std::integral_constant<std::size_t,T().size()>())</div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> {</div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> <span class=\"keywordflow\">return</span> {};</div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> }</div>\n <div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH</span></div>\n-<div class=\"ttc\" id=\"aa00080_html\"><div class=\"ttname\"><a href=\"a00080.html\">defaultderivativetraits.hh</a></div></div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> <span class=\"comment\">// Try if tuple_size is implemented for class</span></div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">auto</span> staticSize(<span class=\"keyword\">const</span> T*, <span class=\"keyword\">const</span> PriorityTag<2>&)</div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> -> <span class=\"keyword\">decltype</span>(std::integral_constant<std::size_t,std::tuple_size<T>::value>())</div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> {</div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> <span class=\"keywordflow\">return</span> {};</div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> }</div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> </div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n+<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> <span class=\"keyword\">constexpr</span> std::false_type hasStaticSize(<span class=\"keyword\">const</span> T* t, <span class=\"keyword\">const</span> PriorityTag<0>& p)</div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> {</div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> <span class=\"keywordflow\">return</span> {};</div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> }</div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> </div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">auto</span> hasStaticSize(<span class=\"keyword\">const</span> T* t, <span class=\"keyword\">const</span> PriorityTag<1>& p)</div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> -> <span class=\"keyword\">decltype</span>(staticSize(t ,PriorityTag<42>()), std::true_type())</div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> {</div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> <span class=\"keywordflow\">return</span> {};</div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> }</div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> </div>\n+<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span>}</div>\n+<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> </div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> </div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> </div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01331.html\"> 81</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01331.html\">HasStaticSize</a> :</div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> <span class=\"keyword\">public</span> decltype(Imp::hasStaticSize((typename std::decay<T>::type*)(nullptr), PriorityTag<42>()))</div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span>{};</div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> </div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> </div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> </div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n+<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01335.html\"> 95</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01335.html\">StaticSize</a> :</div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> <span class=\"keyword\">public</span> decltype(Imp::staticSize((typename std::decay<T>::type*)(nullptr), PriorityTag<42>()))</div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span>{};</div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> </div>\n+<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> </div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> </div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span>}} <span class=\"comment\">// namespace Dune::Functions</span></div>\n+<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> </div>\n+<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_TYPE_TRAITS_HH</span></div>\n+<div class=\"ttc\" id=\"aa00215_html_ga673247dd74bcdd9e5acfc7735faf8a5b\"><div class=\"ttname\"><a href=\"a00215.html#ga673247dd74bcdd9e5acfc7735faf8a5b\">Dune::Functions::enableIfConstructible</a></div><div class=\"ttdeci\">typename std::enable_if< std::is_constructible< T, Args... >::value, int >::type enableIfConstructible</div><div class=\"ttdoc\">Helper to constrain forwarding constructors.</div><div class=\"ttdef\"><b>Definition:</b> type_traits.hh:26</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa01071_html\"><div class=\"ttname\"><a href=\"a01071.html\">Dune::Functions::InvalidRange</a></div><div class=\"ttdoc\">Dummy range class to be used if no proper type is available.</div><div class=\"ttdef\"><b>Definition:</b> defaultderivativetraits.hh:23</div></div>\n-<div class=\"ttc\" id=\"aa01931_html\"><div class=\"ttname\"><a href=\"a01931.html\">Dune::Functions::LocalDerivativeTraits</a></div><div class=\"ttdoc\">Derivative traits for local functions.</div><div class=\"ttdef\"><b>Definition:</b> localderivativetraits.hh:28</div></div>\n-<div class=\"ttc\" id=\"aa01931_html_a0339d22fe9243285caf3a79a286912b5\"><div class=\"ttname\"><a href=\"a01931.html#a0339d22fe9243285caf3a79a286912b5\">Dune::Functions::LocalDerivativeTraits::Domain</a></div><div class=\"ttdeci\">typename EntitySet::GlobalCoordinate Domain</div><div class=\"ttdef\"><b>Definition:</b> localderivativetraits.hh:30</div></div>\n-<div class=\"ttc\" id=\"aa01931_html_a2dc0b1d49311457bb686a04972f8aee4\"><div class=\"ttname\"><a href=\"a01931.html#a2dc0b1d49311457bb686a04972f8aee4\">Dune::Functions::LocalDerivativeTraits::LocalDomain</a></div><div class=\"ttdeci\">typename EntitySet::LocalCoordinate LocalDomain</div><div class=\"ttdef\"><b>Definition:</b> localderivativetraits.hh:29</div></div>\n-<div class=\"ttc\" id=\"aa01935_html\"><div class=\"ttname\"><a href=\"a01935.html\">Dune::Functions::LocalDerivativeTraits::Traits</a></div><div class=\"ttdef\"><b>Definition:</b> localderivativetraits.hh:34</div></div>\n-<div class=\"ttc\" id=\"aa01935_html_ab37a5c5f4de2d44c5334bab2b33cf8a0\"><div class=\"ttname\"><a href=\"a01935.html#ab37a5c5f4de2d44c5334bab2b33cf8a0\">Dune::Functions::LocalDerivativeTraits::Traits::Range</a></div><div class=\"ttdeci\">InvalidRange Range</div><div class=\"ttdef\"><b>Definition:</b> localderivativetraits.hh:35</div></div>\n-<div class=\"ttc\" id=\"aa01939_html_a80a14d6e3599853298641c023ff34acd\"><div class=\"ttname\"><a href=\"a01939.html#a80a14d6e3599853298641c023ff34acd\">Dune::Functions::LocalDerivativeTraits::Traits< R(LocalDomain)>::Range</a></div><div class=\"ttdeci\">typename DerivativeTraits< R(Domain)>::Range Range</div><div class=\"ttdef\"><b>Definition:</b> localderivativetraits.hh:41</div></div>\n+<div class=\"ttc\" id=\"aa01331_html\"><div class=\"ttname\"><a href=\"a01331.html\">Dune::Functions::HasStaticSize</a></div><div class=\"ttdoc\">Check if type is a statically sized container.</div><div class=\"ttdef\"><b>Definition:</b> type_traits.hh:83</div></div>\n+<div class=\"ttc\" id=\"aa01335_html\"><div class=\"ttname\"><a href=\"a01335.html\">Dune::Functions::StaticSize</a></div><div class=\"ttdoc\">Obtain size of statically sized container.</div><div class=\"ttdef\"><b>Definition:</b> type_traits.hh:97</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,73 +4,109 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * gridfunctions\n-localderivativetraits.hh\n+ * common\n+type_traits.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH\n- 4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH\n+ 3#ifndef DUNE_FUNCTIONS_COMMON_TYPE_TRAITS_HH\n+ 4#define DUNE_FUNCTIONS_COMMON_TYPE_TRAITS_HH\n 5\n- 6\n- 7#include <dune/functions/common/defaultderivativetraits.hh>\n- 8\n+ 6#include <type_traits>\n+ 7\n+ 8#include <dune/common/typeutilities.hh>\n 9\n 10namespace Dune {\n 11namespace Functions {\n 12\n 13\n- 26template<class EntitySet, template<class> class\n-DerivativeTraits=DefaultDerivativeTraits>\n-27struct LocalDerivativeTraits\n- 28{\n-29 using LocalDomain = typename EntitySet::LocalCoordinate;\n-30 using Domain = typename EntitySet::GlobalCoordinate;\n+ 24template<class T, class... Args>\n+25using enableIfConstructible = typename std::enable_if<\n+ 26 std::is_constructible<T, Args...>::value, int>::type;\n+ 27\n+ 28\n+ 29\n+ 30namespace Imp {\n 31\n- 32 template<class Signature>\n-33 struct Traits\n- 34 {\n-35 typedef InvalidRange Range;\n- 36 };\n- 37\n- 38 template<class R>\n-39 struct Traits<R(LocalDomain)>\n- 40 {\n-41 using Range = typename DerivativeTraits<R(Domain)>::Range;\n- 42 };\n- 43};\n- 44\n- 45\n- 46}} // namespace Dune::Functions\n+ 32 // As a last resort try if there's a static constexpr size()\n+ 33 template<class T>\n+ 34 constexpr auto staticSize(const T*, const PriorityTag<0>&)\n+ 35 -> decltype(std::integral_constant<std::size_t,T::size()>())\n+ 36 {\n+ 37 return {};\n+ 38 }\n+ 39\n+ 40 // Try if class has constexpr default constructor and size method\n+ 41 template<class T>\n+ 42 constexpr auto staticSize(const T*, const PriorityTag<1>&)\n+ 43 -> decltype(std::integral_constant<std::size_t,T().size()>())\n+ 44 {\n+ 45 return {};\n+ 46 }\n 47\n- 48#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH\n-defaultderivativetraits.hh\n+ 48 // Try if tuple_size is implemented for class\n+ 49 template<class T>\n+ 50 constexpr auto staticSize(const T*, const PriorityTag<2>&)\n+ 51 -> decltype(std::integral_constant<std::size_t,std::tuple_size<T>::value>\n+())\n+ 52 {\n+ 53 return {};\n+ 54 }\n+ 55\n+ 56 template<class T>\n+ 57 constexpr std::false_type hasStaticSize(const T* t, const PriorityTag<0>&\n+p)\n+ 58 {\n+ 59 return {};\n+ 60 }\n+ 61\n+ 62 template<class T>\n+ 63 constexpr auto hasStaticSize(const T* t, const PriorityTag<1>& p)\n+ 64 -> decltype(staticSize(t ,PriorityTag<42>()), std::true_type())\n+ 65 {\n+ 66 return {};\n+ 67 }\n+ 68\n+ 69}\n+ 70\n+ 71\n+ 72\n+ 80template<class T>\n+81struct HasStaticSize :\n+ 82 public decltype(Imp::hasStaticSize((typename std::decay<T>::type*)\n+(nullptr), PriorityTag<42>()))\n+ 83{};\n+ 84\n+ 85\n+ 86\n+ 94template<class T>\n+95struct StaticSize :\n+ 96 public decltype(Imp::staticSize((typename std::decay<T>::type*)(nullptr),\n+PriorityTag<42>()))\n+ 97{};\n+ 98\n+ 99\n+ 100\n+ 101}} // namespace Dune::Functions\n+ 102\n+ 103#endif // DUNE_FUNCTIONS_COMMON_TYPE_TRAITS_HH\n+Dune::Functions::enableIfConstructible\n+typename std::enable_if< std::is_constructible< T, Args... >::value, int >::\n+type enableIfConstructible\n+Helper to constrain forwarding constructors.\n+Definition: type_traits.hh:26\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::InvalidRange\n-Dummy range class to be used if no proper type is available.\n-Definition: defaultderivativetraits.hh:23\n-Dune::Functions::LocalDerivativeTraits\n-Derivative traits for local functions.\n-Definition: localderivativetraits.hh:28\n-Dune::Functions::LocalDerivativeTraits::Domain\n-typename EntitySet::GlobalCoordinate Domain\n-Definition: localderivativetraits.hh:30\n-Dune::Functions::LocalDerivativeTraits::LocalDomain\n-typename EntitySet::LocalCoordinate LocalDomain\n-Definition: localderivativetraits.hh:29\n-Dune::Functions::LocalDerivativeTraits::Traits\n-Definition: localderivativetraits.hh:34\n-Dune::Functions::LocalDerivativeTraits::Traits::Range\n-InvalidRange Range\n-Definition: localderivativetraits.hh:35\n-Dune::Functions::LocalDerivativeTraits::Traits<_R(LocalDomain)>::Range\n-typename DerivativeTraits< R(Domain)>::Range Range\n-Definition: localderivativetraits.hh:41\n+Dune::Functions::HasStaticSize\n+Check if type is a statically sized container.\n+Definition: type_traits.hh:83\n+Dune::Functions::StaticSize\n+Obtain size of statically sized container.\n+Definition: type_traits.hh:97\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00032.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00032.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: gridfunction_imp.hh File Reference</title>\n+<title>dune-functions: multiindex.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,35 +58,55 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n-<a href=\"#namespaces\">Namespaces</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">gridfunction_imp.hh File Reference</div></div>\n+<a href=\"#nested-classes\">Classes</a> |\n+<a href=\"#namespaces\">Namespaces</a> |\n+<a href=\"#func-members\">Functions</a> </div>\n+ <div class=\"headertitle\"><div class=\"title\">multiindex.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <<a class=\"el\" href=\"a00092_source.html\">dune/functions/common/type_traits.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00095_source.html\">dune/functions/common/interfaces.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00098_source.html\">dune/functions/common/differentiablefunction_imp.hh</a>></code><br />\n+<div class=\"textblock\"><code>#include <cstddef></code><br />\n+<code>#include <array></code><br />\n+<code>#include <iostream></code><br />\n+<code>#include <dune/common/hash.hh></code><br />\n </div>\n <p><a href=\"a00032_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n+Classes</h2></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01263.html\">Dune::Functions::StaticMultiIndex< size_type, n ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A statically sized MultiIndex type. <a href=\"a01263.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01267.html\">Dune::Functions::StaticMultiIndex< size_type, 1 ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A statically sized MultiIndex type. <a href=\"a01267.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01271.html\">std::tuple_size< Dune::Functions::StaticMultiIndex< size_type, n > ></a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+</table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+</table><table class=\"memberdecls\">\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n+Functions</h2></td></tr>\n+<tr class=\"memitem:af1c4bfbe0c688f745e4731c519db55dd\"><td class=\"memTemplParams\" colspan=\"2\">template<typename Stream , class size_type , std::size_t n> </td></tr>\n+<tr class=\"memitem:af1c4bfbe0c688f745e4731c519db55dd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Stream & </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#af1c4bfbe0c688f745e4731c519db55dd\">Dune::Functions::operator<<</a> (Stream &stream, const StaticMultiIndex< size_type, n > &c)</td></tr>\n+<tr class=\"separator:af1c4bfbe0c688f745e4731c519db55dd\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,22 +4,37 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * gridfunctions\n-Namespaces\n-gridfunction_imp.hh File Reference\n-#include <dune/functions/common/type_traits.hh>\n-#include <dune/functions/common/interfaces.hh>\n-#include <dune/functions/common/differentiablefunction_imp.hh>\n+ * common\n+Classes | Namespaces | Functions\n+multiindex.hh File Reference\n+#include <cstddef>\n+#include <array>\n+#include <iostream>\n+#include <dune/common/hash.hh>\n Go_to_the_source_code_of_this_file.\n+ Classes\n+ class \u00a0Dune::Functions::StaticMultiIndex<_size_type,_n_>\n+\u00a0 A statically sized MultiIndex type. More...\n+\u00a0\n+ class \u00a0Dune::Functions::StaticMultiIndex<_size_type,_1_>\n+\u00a0 A statically sized MultiIndex type. More...\n+\u00a0\n+struct \u00a0std::tuple_size<_Dune::Functions::StaticMultiIndex<_size_type,_n_>_>\n+\u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n+ Functions\n+template<typename Stream , class size_type , std::size_t n>\n+Stream &\u00a0Dune::Functions::operator<< (Stream &stream, const StaticMultiIndex<\n+ size_type, n > &c)\n+\u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00032_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00032_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: gridfunction_imp.hh Source File</title>\n+<title>dune-functions: multiindex.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,92 +58,102 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">gridfunction_imp.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">multiindex.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00032.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00092.html\">dune/functions/common/type_traits.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00095.html\">dune/functions/common/interfaces.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00098.html\">dune/functions/common/differentiablefunction_imp.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <cstddef></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <array></span></div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <iostream></span></div>\n <div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span> </div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/hash.hh></span></div>\n <div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"keyword\">namespace </span>Imp {</div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00219.html\">Dune::Functions</a> {</div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n <div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"keyword\">struct </span>HasFreeLocalFunction</div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span>{</div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F></div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> <span class=\"keyword\">auto</span> require(F&& f) -> <span class=\"keyword\">decltype</span>(</div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span> localFunction(f)</div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> );</div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span>};</div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> </div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> </div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> <span class=\"keywordtype\">size_t</span>ype, std::<span class=\"keywordtype\">size_t</span> n></div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01263.html\"> 23</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01263.html\">StaticMultiIndex</a> :</div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> <span class=\"keyword\">public</span> std::array<size_type, n></div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span>{</div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01263.html#a447f3574395ba840fdca4ce12586caa0\"> 27</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> std::size_t <a class=\"code hl_function\" href=\"a01263.html#a447f3574395ba840fdca4ce12586caa0\">size</a>() { <span class=\"keywordflow\">return</span> n; }</div>\n <div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> </div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span><span class=\"comment\">// Interface of type erasure wrapper</span></div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span><span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span><span class=\"comment\">// Notice that the basic interface of polymorphic classes (destructor, clone, ...)</span></div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span><span class=\"comment\">// will be added by the type erasure foundation classes.</span></div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> DerivativeInterface, <span class=\"keyword\">class</span> LocalFunctionInterface, <span class=\"keyword\">class</span> EntitySet></div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span><span class=\"keyword\">class </span>GridFunctionWrapperInterface :</div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> <span class=\"keyword\">public</span> DifferentiableFunctionWrapperInterface<Signature, DerivativeInterface></div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span>{</div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> <span class=\"keyword\">virtual</span> LocalFunctionInterface wrappedLocalFunction() <span class=\"keyword\">const</span> = 0;</div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> </div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> <span class=\"keyword\">virtual</span> <span class=\"keyword\">const</span> EntitySet& wrappedEntitySet() <span class=\"keyword\">const</span> = 0;</div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span>};</div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> </div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> </div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span><span class=\"comment\">// Implementation of type erasure wrapper</span></div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> DerivativeInterface, <span class=\"keyword\">class</span> LocalFunctionInterface, <span class=\"keyword\">class</span> EntitySet, <span class=\"keyword\">class</span> B></div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span><span class=\"keyword\">class </span>GridFunctionWrapperImplementation :</div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> <span class=\"keyword\">public</span> DifferentiableFunctionWrapperImplementation<Signature, DerivativeInterface, B></div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span>{</div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> <span class=\"keyword\">using </span>Base = DifferentiableFunctionWrapperImplementation<Signature, DerivativeInterface, B>;</div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01263.html#ae2acb6d4f8e9af393eea105ef6220119\"> 29</a></span> <span class=\"keyword\">inline</span> <span class=\"keyword\">friend</span> std::size_t <a class=\"code hl_friend\" href=\"a01263.html#ae2acb6d4f8e9af393eea105ef6220119\">hash_value</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01263.html\">StaticMultiIndex</a>& v) <span class=\"keyword\">noexcept</span> {</div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> <span class=\"keywordflow\">return</span> hash_range(v.begin(), v.end());</div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> }</div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> </div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span>};</div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> </div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> </div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> </div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> <span class=\"keywordtype\">size_t</span>ype></div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01267.html\"> 47</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01263.html\">StaticMultiIndex</a><size_type,1> :</div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> <span class=\"keyword\">public</span> std::array<size_type, 1></div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span>{</div>\n <div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> <span class=\"keyword\">using </span>Base::Base;</div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> </div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> <span class=\"keyword\">virtual</span> LocalFunctionInterface wrappedLocalFunction()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> <span class=\"keywordflow\">return</span> localFunction(this->get());</div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> </div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01267.html#a4d9eba5c2afef532845eb32f3c92fddb\"> 52</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> std::size_t <a class=\"code hl_function\" href=\"a01267.html#a4d9eba5c2afef532845eb32f3c92fddb\">size</a>() { <span class=\"keywordflow\">return</span> 1; }</div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> </div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01267.html#a04d0165dfe084b48e67ee75b72a4c046\"> 54</a></span> <span class=\"keyword\">operator</span> <span class=\"keyword\">const</span> size_type& () <span class=\"keyword\">const</span> {</div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> <span class=\"keywordflow\">return</span> (*<span class=\"keyword\">this</span>)[0];</div>\n <div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> }</div>\n <div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> </div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> <span class=\"keyword\">virtual</span> <span class=\"keyword\">const</span> EntitySet& wrappedEntitySet()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> <span class=\"keywordflow\">return</span> this->get().entitySet();</div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> }</div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span>};</div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> </div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> </div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01267.html#ae2acb6d4f8e9af393eea105ef6220119\"> 58</a></span> <span class=\"keyword\">inline</span> <span class=\"keyword\">friend</span> std::size_t <a class=\"code hl_friend\" href=\"a01267.html#ae2acb6d4f8e9af393eea105ef6220119\">hash_value</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01263.html\">StaticMultiIndex</a>& v) <span class=\"keyword\">noexcept</span> {</div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> <span class=\"keywordflow\">return</span> hash_range(v.begin(), v.end());</div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> }</div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> </div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01267.html#a43e775f6e3306b3479e3c35b6b8c2dd2\"> 62</a></span> <span class=\"keyword\">operator</span> size_type& () {</div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> <span class=\"keywordflow\">return</span> (*<span class=\"keyword\">this</span>)[0];</div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> }</div>\n <div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> </div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span>}}} <span class=\"comment\">// namespace Dune::Functions::Imp</span></div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span>};</div>\n <div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> </div>\n <div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> </div>\n <div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> </div>\n-<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH</span></div>\n-<div class=\"ttc\" id=\"aa00092_html\"><div class=\"ttname\"><a href=\"a00092.html\">type_traits.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00095_html\"><div class=\"ttname\"><a href=\"a00095.html\">interfaces.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00098_html\"><div class=\"ttname\"><a href=\"a00098.html\">differentiablefunction_imp.hh</a></div></div>\n+<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Stream, <span class=\"keyword\">class</span> <span class=\"keywordtype\">size_t</span>ype, std::<span class=\"keywordtype\">size_t</span> n></div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#af1c4bfbe0c688f745e4731c519db55dd\"> 71</a></span><span class=\"keyword\">inline</span> Stream& <a class=\"code hl_function\" href=\"a00219.html#af1c4bfbe0c688f745e4731c519db55dd\">operator<<</a>(Stream& stream, <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01263.html\">StaticMultiIndex<size_type,n></a>& c) {</div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> <span class=\"keywordflow\">for</span> (<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& ci : c)</div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> stream << ci << <span class=\"stringliteral\">" "</span>;</div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> <span class=\"keywordflow\">return</span> stream;</div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span>}</div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> </div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> </div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> </div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span>} <span class=\"comment\">// namespace Dune::Functions</span></div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> </div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> <span class=\"keywordtype\">size_t</span>ype, std::<span class=\"keywordtype\">size_t</span> n></div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01271.html\"> 82</a></span><span class=\"keyword\">struct </span>std::tuple_size< <a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a>::Functions::StaticMultiIndex<size_type,n> ></div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> : std::integral_constant<std::size_t, n> { };</div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> </div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span>DUNE_DEFINE_HASH(DUNE_HASH_TEMPLATE_ARGS(<span class=\"keyword\">typename</span> size_type, std::size_t n),DUNE_HASH_TYPE(<a class=\"code hl_class\" href=\"a01263.html\">Dune::Functions::StaticMultiIndex<size_type,n></a>))</div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> </div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH</span></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n+<div class=\"ttc\" id=\"aa00219_html\"><div class=\"ttname\"><a href=\"a00219.html\">Dune::Functions</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:11</div></div>\n+<div class=\"ttc\" id=\"aa00219_html_af1c4bfbe0c688f745e4731c519db55dd\"><div class=\"ttname\"><a href=\"a00219.html#af1c4bfbe0c688f745e4731c519db55dd\">Dune::Functions::operator<<</a></div><div class=\"ttdeci\">Stream & operator<<(Stream &stream, const StaticMultiIndex< size_type, n > &c)</div><div class=\"ttdef\"><b>Definition:</b> multiindex.hh:71</div></div>\n+<div class=\"ttc\" id=\"aa01263_html\"><div class=\"ttname\"><a href=\"a01263.html\">Dune::Functions::StaticMultiIndex</a></div><div class=\"ttdoc\">A statically sized MultiIndex type.</div><div class=\"ttdef\"><b>Definition:</b> multiindex.hh:25</div></div>\n+<div class=\"ttc\" id=\"aa01263_html_a447f3574395ba840fdca4ce12586caa0\"><div class=\"ttname\"><a href=\"a01263.html#a447f3574395ba840fdca4ce12586caa0\">Dune::Functions::StaticMultiIndex::size</a></div><div class=\"ttdeci\">static constexpr std::size_t size()</div><div class=\"ttdef\"><b>Definition:</b> multiindex.hh:27</div></div>\n+<div class=\"ttc\" id=\"aa01263_html_ae2acb6d4f8e9af393eea105ef6220119\"><div class=\"ttname\"><a href=\"a01263.html#ae2acb6d4f8e9af393eea105ef6220119\">Dune::Functions::StaticMultiIndex::hash_value</a></div><div class=\"ttdeci\">friend std::size_t hash_value(const StaticMultiIndex &v) noexcept</div><div class=\"ttdef\"><b>Definition:</b> multiindex.hh:29</div></div>\n+<div class=\"ttc\" id=\"aa01267_html_a4d9eba5c2afef532845eb32f3c92fddb\"><div class=\"ttname\"><a href=\"a01267.html#a4d9eba5c2afef532845eb32f3c92fddb\">Dune::Functions::StaticMultiIndex< size_type, 1 >::size</a></div><div class=\"ttdeci\">static constexpr std::size_t size()</div><div class=\"ttdef\"><b>Definition:</b> multiindex.hh:52</div></div>\n+<div class=\"ttc\" id=\"aa01267_html_ae2acb6d4f8e9af393eea105ef6220119\"><div class=\"ttname\"><a href=\"a01267.html#ae2acb6d4f8e9af393eea105ef6220119\">Dune::Functions::StaticMultiIndex< size_type, 1 >::hash_value</a></div><div class=\"ttdeci\">friend std::size_t hash_value(const StaticMultiIndex &v) noexcept</div><div class=\"ttdef\"><b>Definition:</b> multiindex.hh:58</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,91 +4,110 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * gridfunctions\n-gridfunction_imp.hh\n+ * common\n+multiindex.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH\n- 4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH\n+ 3#ifndef DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH\n+ 4#define DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH\n 5\n- 6#include <dune/functions/common/type_traits.hh>\n- 7#include <dune/functions/common/interfaces.hh>\n- 8#include <dune/functions/common/differentiablefunction_imp.hh>\n+ 6#include <cstddef>\n+ 7#include <array>\n+ 8#include <iostream>\n 9\n- 10\n+ 10#include <dune/common/hash.hh>\n 11\n- 12namespace Dune {\n- 13namespace Functions {\n- 14namespace Imp {\n+ 12\n+ 13namespace Dune::Functions {\n+ 14\n 15\n- 19struct HasFreeLocalFunction\n- 20{\n- 21 template<class F>\n- 22 auto require(F&& f) -> decltype(\n- 23 localFunction(f)\n- 24 );\n- 25};\n- 26\n- 27\n+ 16\n+ 22template<class size_type, std::size_t n>\n+23class StaticMultiIndex :\n+ 24 public std::array<size_type, n>\n+ 25{\n+ 26public:\n+27 static constexpr std::size_t size() { return n; }\n 28\n- 29// Interface of type erasure wrapper\n- 30//\n- 31// Notice that the basic interface of polymorphic classes (destructor,\n-clone, ...)\n- 32// will be added by the type erasure foundation classes.\n- 33template<class Signature, class DerivativeInterface, class\n-LocalFunctionInterface, class EntitySet>\n- 34class GridFunctionWrapperInterface :\n- 35 public DifferentiableFunctionWrapperInterface<Signature,\n-DerivativeInterface>\n- 36{\n- 37public:\n- 38 virtual LocalFunctionInterface wrappedLocalFunction() const = 0;\n- 39\n- 40 virtual const EntitySet& wrappedEntitySet() const = 0;\n- 41};\n- 42\n- 43\n- 44// Implementation of type erasure wrapper\n- 45template<class Signature, class DerivativeInterface, class\n-LocalFunctionInterface, class EntitySet, class B>\n- 46class GridFunctionWrapperImplementation :\n- 47 public DifferentiableFunctionWrapperImplementation<Signature,\n-DerivativeInterface, B>\n- 48{\n- 49 using Base = DifferentiableFunctionWrapperImplementation<Signature,\n-DerivativeInterface, B>;\n+29 inline friend std::size_t hash_value(const StaticMultiIndex& v) noexcept {\n+ 30 return hash_range(v.begin(), v.end());\n+ 31 }\n+ 32\n+ 33};\n+ 34\n+ 35\n+ 36\n+ 46template<class size_type>\n+47class StaticMultiIndex<size_type,1> :\n+ 48 public std::array<size_type, 1>\n+ 49{\n 50public:\n- 51 using Base::Base;\n- 52\n- 53 virtual LocalFunctionInterface wrappedLocalFunction() const\n- 54 {\n- 55 return localFunction(this->get());\n+ 51\n+52 static constexpr std::size_t size() { return 1; }\n+ 53\n+54 operator const size_type& () const {\n+ 55 return (*this)[0];\n 56 }\n 57\n- 58 virtual const EntitySet& wrappedEntitySet() const\n- 59 {\n- 60 return this->get().entitySet();\n- 61 }\n- 62};\n- 63\n- 64\n+58 inline friend std::size_t hash_value(const StaticMultiIndex& v) noexcept {\n+ 59 return hash_range(v.begin(), v.end());\n+ 60 }\n+ 61\n+62 operator size_type& () {\n+ 63 return (*this)[0];\n+ 64 }\n 65\n- 66}}} // namespace Dune::Functions::Imp\n+ 66};\n 67\n 68\n 69\n- 70#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH\n-type_traits.hh\n-interfaces.hh\n-differentiablefunction_imp.hh\n+ 70template<typename Stream, class size_type, std::size_t n>\n+71inline Stream& operator<<(Stream& stream, const\n+StaticMultiIndex<size_type,n>& c) {\n+ 72 for (const auto& ci : c)\n+ 73 stream << ci << \" \";\n+ 74 return stream;\n+ 75}\n+ 76\n+ 77\n+ 78\n+ 79} // namespace Dune::Functions\n+ 80\n+ 81template<class size_type, std::size_t n>\n+82struct std::tuple_size< Dune::Functions::StaticMultiIndex<size_type,n> >\n+ 83 : std::integral_constant<std::size_t, n> { };\n+ 84\n+ 85DUNE_DEFINE_HASH(DUNE_HASH_TEMPLATE_ARGS(typename size_type, std::size_t\n+n),DUNE_HASH_TYPE(Dune::Functions::StaticMultiIndex<size_type,n>))\n+ 86\n+ 87#endif // DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH\n Dune\n Definition: polynomial.hh:10\n+Dune::Functions\n+Definition: polynomial.hh:11\n+Dune::Functions::operator<<\n+Stream & operator<<(Stream &stream, const StaticMultiIndex< size_type, n > &c)\n+Definition: multiindex.hh:71\n+Dune::Functions::StaticMultiIndex\n+A statically sized MultiIndex type.\n+Definition: multiindex.hh:25\n+Dune::Functions::StaticMultiIndex::size\n+static constexpr std::size_t size()\n+Definition: multiindex.hh:27\n+Dune::Functions::StaticMultiIndex::hash_value\n+friend std::size_t hash_value(const StaticMultiIndex &v) noexcept\n+Definition: multiindex.hh:29\n+Dune::Functions::StaticMultiIndex<_size_type,_1_>::size\n+static constexpr std::size_t size()\n+Definition: multiindex.hh:52\n+Dune::Functions::StaticMultiIndex<_size_type,_1_>::hash_value\n+friend std::size_t hash_value(const StaticMultiIndex &v) noexcept\n+Definition: multiindex.hh:58\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00035.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00035.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: facenormalgridfunction.hh File Reference</title>\n+<title>dune-functions: defaultderivativetraits.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,39 +58,50 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">facenormalgridfunction.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">defaultderivativetraits.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <div class=\"textblock\"><code>#include <type_traits></code><br />\n-<code>#include <optional></code><br />\n-<code>#include <dune/common/exceptions.hh></code><br />\n-<code>#include <dune/common/typeutilities.hh></code><br />\n-<code>#include <dune/common/rangeutilities.hh></code><br />\n-<code>#include <dune/geometry/referenceelements.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00017_source.html\">dune/functions/gridfunctions/gridfunction.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00023_source.html\">dune/functions/gridfunctions/gridviewentityset.hh</a>></code><br />\n+<code>#include <utility></code><br />\n+<code>#include <dune/common/fvector.hh></code><br />\n+<code>#include <dune/common/fmatrix.hh></code><br />\n </div>\n <p><a href=\"a00035_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01887.html\">Dune::Functions::FaceNormalGridFunction< GV ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Grid function implementing the piecewise element face normal. <a href=\"a01887.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01071.html\">Dune::Functions::InvalidRange</a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Dummy range class to be used if no proper type is available. <a href=\"a01071.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01075.html\">Dune::Functions::DefaultDerivativeTraits< Signature ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Default implementation for derivative traits. <a href=\"a01075.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01079.html\">Dune::Functions::DefaultDerivativeTraits< double(double) ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Default implementation for derivative traits. <a href=\"a01079.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01083.html\">Dune::Functions::DefaultDerivativeTraits< K(FieldVector< K, n >)></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Default implementation for derivative traits. <a href=\"a01083.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01087.html\">Dune::Functions::DefaultDerivativeTraits< FieldVector< K, m >(FieldVector< K, n >)></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Default implementation for derivative traits. <a href=\"a01087.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01091.html\">Dune::Functions::DefaultDerivativeTraits< FieldMatrix< K, 1, m >(FieldVector< K, n >)></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Default implementation for derivative traits. <a href=\"a01091.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,29 +4,42 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * gridfunctions\n+ * common\n Classes | Namespaces\n-facenormalgridfunction.hh File Reference\n+defaultderivativetraits.hh File Reference\n #include <type_traits>\n-#include <optional>\n-#include <dune/common/exceptions.hh>\n-#include <dune/common/typeutilities.hh>\n-#include <dune/common/rangeutilities.hh>\n-#include <dune/geometry/referenceelements.hh>\n-#include <dune/functions/gridfunctions/gridfunction.hh>\n-#include <dune/functions/gridfunctions/gridviewentityset.hh>\n+#include <utility>\n+#include <dune/common/fvector.hh>\n+#include <dune/common/fmatrix.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-class \u00a0Dune::Functions::FaceNormalGridFunction<_GV_>\n-\u00a0 Grid function implementing the piecewise element face normal. More...\n+ class \u00a0Dune::Functions::InvalidRange\n+\u00a0 Dummy range class to be used if no proper type is available. More...\n+\u00a0\n+struct \u00a0Dune::Functions::DefaultDerivativeTraits<_Signature_>\n+\u00a0 Default implementation for derivative traits. More...\n+\u00a0\n+struct \u00a0Dune::Functions::DefaultDerivativeTraits<_double(double)_>\n+\u00a0 Default implementation for derivative traits. More...\n+\u00a0\n+struct \u00a0Dune::Functions::DefaultDerivativeTraits<_K(FieldVector<_K,_n_>)>\n+\u00a0 Default implementation for derivative traits. More...\n+\u00a0\n+struct \u00a0Dune::Functions::DefaultDerivativeTraits<_FieldVector<_K,_m_>\n+ (FieldVector<_K,_n_>)>\n+\u00a0 Default implementation for derivative traits. More...\n+\u00a0\n+struct \u00a0Dune::Functions::DefaultDerivativeTraits<_FieldMatrix<_K,_1,_m_>\n+ (FieldVector<_K,_n_>)>\n+\u00a0 Default implementation for derivative traits. More...\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n \n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00035_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00035_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: facenormalgridfunction.hh Source File</title>\n+<title>dune-functions: defaultderivativetraits.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,195 +58,85 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">facenormalgridfunction.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">defaultderivativetraits.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00035.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n <div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <type_traits></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <optional></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <utility></span></div>\n <div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/common/exceptions.hh></span></div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/typeutilities.hh></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/common/rangeutilities.hh></span></div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <dune/geometry/referenceelements.hh></span></div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00017.html\">dune/functions/gridfunctions/gridfunction.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00023.html\">dune/functions/gridfunctions/gridviewentityset.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/common/fvector.hh></span></div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/fmatrix.hh></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n <div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00219.html\">Dune::Functions</a> {</div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"keyword\">namespace </span>Impl {</div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> </div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"comment\">// Compute closest face to point</span></div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> ReferenceElement, <span class=\"keyword\">class</span> Coordinate></div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"keyword\">auto</span> closestFaceIndex(<span class=\"keyword\">const</span> ReferenceElement& re, <span class=\"keyword\">const</span> Coordinate& x)</div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span>{</div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> <span class=\"keyword\">auto</span> closestFaceIndex = <span class=\"keyword\">decltype</span>(re.subEntity(0,1,0,1)){};</div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> <span class=\"keywordtype\">double</span> closestFaceDistance = std::numeric_limits<double>::max();</div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">auto</span>&& faceIndex : Dune::range(re.size(1)))</div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span> {</div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> <span class=\"comment\">// For a face unit outer normal consider the orthogonal projection</span></div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> <span class=\"comment\">// Px = x + <c-x,n>*n into the face. Then the distance to the face</span></div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> <span class=\"comment\">// is given by |x-Px| = |<c-x,n>||n| = <c-x,n>.</span></div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> <span class=\"keyword\">auto</span> normal = re.integrationOuterNormal(faceIndex);</div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> normal /= normal.two_norm();</div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> <span class=\"keyword\">auto</span> c = re.position(faceIndex,1);</div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> c -= x;</div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> <span class=\"keyword\">auto</span> faceDistance = (c*normal);</div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> <span class=\"keywordflow\">if</span> (faceDistance<closestFaceDistance)</div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> {</div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> closestFaceDistance = faceDistance;</div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> closestFaceIndex = faceIndex;</div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> }</div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> }</div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> <span class=\"keywordflow\">return</span> closestFaceIndex;</div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span>}</div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> </div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span>} <span class=\"comment\">// end namespace Impl</span></div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> </div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> </div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> </div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> </div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> GV></div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01887.html\"> 65</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01887.html\">FaceNormalGridFunction</a></div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span>{</div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01887.html#a83c9500a49fbf25de2f8aaf04e422011\"> 68</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01887.html#a83c9500a49fbf25de2f8aaf04e422011\">GridView</a> = GV;</div>\n-<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01887.html#a0c37b830a7bbba309a4df30441de8b8e\"> 69</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01919.html\">EntitySet</a> = <a class=\"code hl_class\" href=\"a01919.html\">GridViewEntitySet<GridView, 0></a>;</div>\n-<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01887.html#abdec4f718f342e7b6ad20f26cc52a928\"> 70</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01887.html#abdec4f718f342e7b6ad20f26cc52a928\">Element</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01919.html#a1d5eaf3facd0219b2e150d964a664752\">EntitySet::Element</a>;</div>\n-<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> </div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01887.html#a219d5fdf7e937595a134a106bab1cefa\"> 72</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01887.html#a219d5fdf7e937595a134a106bab1cefa\">LocalDomain</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01919.html#aa4368ad66f18ba8279f20ab7a794069d\">EntitySet::LocalCoordinate</a>;</div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01887.html#a35676aaf895f54191ad4dda5ed0bcfdd\"> 73</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01887.html#a35676aaf895f54191ad4dda5ed0bcfdd\">Domain</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01919.html#ac4e3d0188467b4be3d195c9f5729e629\">EntitySet::GlobalCoordinate</a>;</div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01887.html#a4d72e8da655bc11d728782fbd85b45f6\"> 74</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01887.html#a4d72e8da655bc11d728782fbd85b45f6\">Range</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01919.html#ac4e3d0188467b4be3d195c9f5729e629\">EntitySet::GlobalCoordinate</a>;</div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> </div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span><span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> </div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> <span class=\"keyword\">using </span>Traits = Imp::GridFunctionTraits<<a class=\"code hl_typedef\" href=\"a01887.html#a4d72e8da655bc11d728782fbd85b45f6\">Range</a>(<a class=\"code hl_typedef\" href=\"a01887.html#a35676aaf895f54191ad4dda5ed0bcfdd\">Domain</a>), <a class=\"code hl_typedef\" href=\"a01887.html#a0c37b830a7bbba309a4df30441de8b8e\">EntitySet</a>, <a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a>, 16>;</div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> </div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> <span class=\"keyword\">class </span>LocalFunction</div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> {</div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> <span class=\"keyword\">using </span>Geometry = <span class=\"keyword\">typename</span> Element::Geometry;</div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dimension = GV::dimension;</div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> <span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> </div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> <span class=\"keywordtype\">void</span> bind(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01887.html#abdec4f718f342e7b6ad20f26cc52a928\">Element</a>& element)</div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> {</div>\n-<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> element_ = element;</div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> geometry_.emplace(element_.geometry());</div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> }</div>\n-<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> </div>\n-<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> <span class=\"keywordtype\">void</span> unbind()</div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> {</div>\n-<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> geometry_.reset();</div>\n-<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> }</div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01071.html\"> 22</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01071.html\">InvalidRange</a></div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span>{};</div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> </div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> </div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature></div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01075.html\"> 36</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a></div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span>{</div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01075.html#a3f8978146cb9b334705b651d84194b98\"> 39</a></span> <span class=\"keyword\">typedef</span> <a class=\"code hl_class\" href=\"a01071.html\">InvalidRange</a> <a class=\"code hl_typedef\" href=\"a01075.html#a3f8978146cb9b334705b651d84194b98\">Range</a>;</div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span>};</div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> </div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> </div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span><span class=\"keyword\">template</span><></div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01079.html\"> 51</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a>< double(double) ></div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span>{</div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01079.html#a801e37f182d8c16ba1cfd72de1f17688\"> 54</a></span> <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span> <a class=\"code hl_typedef\" href=\"a01079.html#a801e37f182d8c16ba1cfd72de1f17688\">Range</a>;</div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span>};</div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> </div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> K, <span class=\"keywordtype\">int</span> n></div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01083.html\"> 67</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a><K(FieldVector<K,n>)></div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span>{</div>\n+<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01083.html#ad1603332ee1c64f89c0fc18a8ee273d6\"> 70</a></span> <span class=\"keyword\">typedef</span> FieldVector<K,n> <a class=\"code hl_typedef\" href=\"a01083.html#ad1603332ee1c64f89c0fc18a8ee273d6\">Range</a>;</div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span>};</div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> </div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> K, <span class=\"keywordtype\">int</span> n, <span class=\"keywordtype\">int</span> m></div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01087.html\"> 83</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a><FieldVector<K,m>(FieldVector<K,n>)></div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span>{</div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01087.html#ace3fbe5caed8c848072466ff723e82ab\"> 86</a></span> <span class=\"keyword\">typedef</span> FieldMatrix<K,m,n> <a class=\"code hl_typedef\" href=\"a01087.html#ace3fbe5caed8c848072466ff723e82ab\">Range</a>;</div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span>};</div>\n+<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> </div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> K, <span class=\"keywordtype\">int</span> n, <span class=\"keywordtype\">int</span> m></div>\n+<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01091.html\"> 99</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a><FieldMatrix<K,1,m>(FieldVector<K,n>)></div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span>{</div>\n+<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01091.html#a5379bc605e79658f7a54ec17e3946e9b\"> 102</a></span> <span class=\"keyword\">typedef</span> FieldMatrix<K,m,n> <a class=\"code hl_typedef\" href=\"a01091.html#a5379bc605e79658f7a54ec17e3946e9b\">Range</a>;</div>\n+<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span>};</div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> </div>\n+<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> </div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span>}} <span class=\"comment\">// namespace Dune::Functions</span></div>\n <div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> </div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> <span class=\"keywordtype\">bool</span> bound()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> <span class=\"keywordflow\">return</span> <span class=\"keyword\">static_cast<</span><span class=\"keywordtype\">bool</span><span class=\"keyword\">></span>(geometry_);</div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> }</div>\n-<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> </div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> <a class=\"code hl_typedef\" href=\"a01887.html#a4d72e8da655bc11d728782fbd85b45f6\">Range</a> <a class=\"code hl_function\" href=\"a01887.html#ac26dc0cc3ed5d93a8c8b9590f68d18c1\">operator()</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01887.html#a219d5fdf7e937595a134a106bab1cefa\">LocalDomain</a>& x)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> <span class=\"keyword\">auto</span>&& re = Dune::referenceElement(*geometry_);</div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> <span class=\"comment\">// Compute reference normal of closest face to given point</span></div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> <span class=\"keyword\">auto</span> face = Impl::closestFaceIndex(re, x);</div>\n-<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> <span class=\"keyword\">auto</span> localNormal = re.integrationOuterNormal(face);</div>\n-<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> </div>\n-<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> <span class=\"comment\">// Transform reference normal into global unit outer normal using</span></div>\n-<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> <span class=\"comment\">// covariant Piola transformation</span></div>\n-<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> <span class=\"keyword\">auto</span> normal = <a class=\"code hl_typedef\" href=\"a01887.html#a4d72e8da655bc11d728782fbd85b45f6\">Range</a>{};</div>\n-<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> geometry_->jacobianInverseTransposed(x).mv(localNormal, normal);</div>\n-<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> normal /= normal.two_norm();</div>\n-<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> <span class=\"keywordflow\">return</span> normal;</div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> }</div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> </div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01887.html#abdec4f718f342e7b6ad20f26cc52a928\">Element</a>& localContext()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> <span class=\"keywordflow\">return</span> element_;</div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> }</div>\n-<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> </div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> <span class=\"keyword\">friend</span> <span class=\"keyword\">typename</span> <a class=\"code hl_class\" href=\"a01895.html\">Traits::LocalFunctionTraits::DerivativeInterface</a> <a class=\"code hl_friend\" href=\"a01887.html#a77ece9d9cda9194701c9275f96c35be1\">derivative</a>(<span class=\"keyword\">const</span> LocalFunction& t)</div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> {</div>\n-<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> DUNE_THROW(NotImplemented,<span class=\"stringliteral\">"not implemented"</span>);</div>\n-<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> }</div>\n-<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> </div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> <span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> std::optional<Geometry> geometry_;</div>\n-<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> <a class=\"code hl_typedef\" href=\"a01887.html#abdec4f718f342e7b6ad20f26cc52a928\">Element</a> element_;</div>\n-<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> };</div>\n-<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> </div>\n-<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01887.html#abc9d21b72e064c153dd02be2cce2f01c\"> 158</a></span> <a class=\"code hl_function\" href=\"a01887.html#abc9d21b72e064c153dd02be2cce2f01c\">FaceNormalGridFunction</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01887.html#a83c9500a49fbf25de2f8aaf04e422011\">GridView</a>& gridView) :</div>\n-<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> entitySet_(gridView)</div>\n-<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> {}</div>\n-<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> </div>\n-<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01887.html#ac26dc0cc3ed5d93a8c8b9590f68d18c1\"> 163</a></span> <a class=\"code hl_typedef\" href=\"a01887.html#a4d72e8da655bc11d728782fbd85b45f6\">Range</a> <a class=\"code hl_function\" href=\"a01887.html#ac26dc0cc3ed5d93a8c8b9590f68d18c1\">operator()</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01887.html#a35676aaf895f54191ad4dda5ed0bcfdd\">Domain</a>& x)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> DUNE_THROW(NotImplemented,<span class=\"stringliteral\">"not implemented"</span>);</div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> }</div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> </div>\n-<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01887.html#a77ece9d9cda9194701c9275f96c35be1\"> 169</a></span> <span class=\"keyword\">friend</span> <span class=\"keyword\">typename</span> <a class=\"code hl_class\" href=\"a01895.html\">Traits::DerivativeInterface</a> <a class=\"code hl_friend\" href=\"a01887.html#a77ece9d9cda9194701c9275f96c35be1\">derivative</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01887.html\">FaceNormalGridFunction</a>& t)</div>\n-<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> {</div>\n-<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> DUNE_THROW(NotImplemented,<span class=\"stringliteral\">"not implemented"</span>);</div>\n-<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> }</div>\n-<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> </div>\n-<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01887.html#ab4fe4a7e812cce916c62f77fd3235d5f\"> 175</a></span> <span class=\"keyword\">friend</span> LocalFunction <a class=\"code hl_friend\" href=\"a01887.html#ab4fe4a7e812cce916c62f77fd3235d5f\">localFunction</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01887.html\">FaceNormalGridFunction</a>& t)</div>\n-<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> {</div>\n-<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> <span class=\"keywordflow\">return</span> LocalFunction{};</div>\n-<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> }</div>\n-<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> </div>\n-<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01887.html#a6636ed4196fbc511a307c222533bd8c2\"> 181</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01919.html\">EntitySet</a>& <a class=\"code hl_function\" href=\"a01887.html#a6636ed4196fbc511a307c222533bd8c2\">entitySet</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span> <span class=\"keywordflow\">return</span> entitySet_;</div>\n-<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span> }</div>\n-<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> </div>\n-<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span><span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> <a class=\"code hl_typedef\" href=\"a01887.html#a0c37b830a7bbba309a4df30441de8b8e\">EntitySet</a> entitySet_;</div>\n-<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span>};</div>\n-<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> </div>\n-<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span> </div>\n-<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> </div>\n-<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span>} <span class=\"comment\">// namespace Dune::Functions</span></div>\n-<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> </div>\n-<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH</span></div>\n-<div class=\"ttc\" id=\"aa00017_html\"><div class=\"ttname\"><a href=\"a00017.html\">gridfunction.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00023_html\"><div class=\"ttname\"><a href=\"a00023.html\">gridviewentityset.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00219_html\"><div class=\"ttname\"><a href=\"a00219.html\">Dune::Functions</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:11</div></div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> </div>\n+<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH</span></div>\n+<div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n+<div class=\"ttc\" id=\"aa01071_html\"><div class=\"ttname\"><a href=\"a01071.html\">Dune::Functions::InvalidRange</a></div><div class=\"ttdoc\">Dummy range class to be used if no proper type is available.</div><div class=\"ttdef\"><b>Definition:</b> defaultderivativetraits.hh:23</div></div>\n <div class=\"ttc\" id=\"aa01075_html\"><div class=\"ttname\"><a href=\"a01075.html\">Dune::Functions::DefaultDerivativeTraits</a></div><div class=\"ttdoc\">Default implementation for derivative traits.</div><div class=\"ttdef\"><b>Definition:</b> defaultderivativetraits.hh:37</div></div>\n-<div class=\"ttc\" id=\"aa01887_html\"><div class=\"ttname\"><a href=\"a01887.html\">Dune::Functions::FaceNormalGridFunction</a></div><div class=\"ttdoc\">Grid function implementing the piecewise element face normal.</div><div class=\"ttdef\"><b>Definition:</b> facenormalgridfunction.hh:66</div></div>\n-<div class=\"ttc\" id=\"aa01887_html_a0c37b830a7bbba309a4df30441de8b8e\"><div class=\"ttname\"><a href=\"a01887.html#a0c37b830a7bbba309a4df30441de8b8e\">Dune::Functions::FaceNormalGridFunction::EntitySet</a></div><div class=\"ttdeci\">GridViewEntitySet< GridView, 0 > EntitySet</div><div class=\"ttdef\"><b>Definition:</b> facenormalgridfunction.hh:69</div></div>\n-<div class=\"ttc\" id=\"aa01887_html_a219d5fdf7e937595a134a106bab1cefa\"><div class=\"ttname\"><a href=\"a01887.html#a219d5fdf7e937595a134a106bab1cefa\">Dune::Functions::FaceNormalGridFunction::LocalDomain</a></div><div class=\"ttdeci\">typename EntitySet::LocalCoordinate LocalDomain</div><div class=\"ttdef\"><b>Definition:</b> facenormalgridfunction.hh:72</div></div>\n-<div class=\"ttc\" id=\"aa01887_html_a35676aaf895f54191ad4dda5ed0bcfdd\"><div class=\"ttname\"><a href=\"a01887.html#a35676aaf895f54191ad4dda5ed0bcfdd\">Dune::Functions::FaceNormalGridFunction::Domain</a></div><div class=\"ttdeci\">typename EntitySet::GlobalCoordinate Domain</div><div class=\"ttdef\"><b>Definition:</b> facenormalgridfunction.hh:73</div></div>\n-<div class=\"ttc\" id=\"aa01887_html_a4d72e8da655bc11d728782fbd85b45f6\"><div class=\"ttname\"><a href=\"a01887.html#a4d72e8da655bc11d728782fbd85b45f6\">Dune::Functions::FaceNormalGridFunction::Range</a></div><div class=\"ttdeci\">typename EntitySet::GlobalCoordinate Range</div><div class=\"ttdef\"><b>Definition:</b> facenormalgridfunction.hh:74</div></div>\n-<div class=\"ttc\" id=\"aa01887_html_a6636ed4196fbc511a307c222533bd8c2\"><div class=\"ttname\"><a href=\"a01887.html#a6636ed4196fbc511a307c222533bd8c2\">Dune::Functions::FaceNormalGridFunction::entitySet</a></div><div class=\"ttdeci\">const EntitySet & entitySet() const</div><div class=\"ttdoc\">Return the stored GridViewEntitySet.</div><div class=\"ttdef\"><b>Definition:</b> facenormalgridfunction.hh:181</div></div>\n-<div class=\"ttc\" id=\"aa01887_html_a77ece9d9cda9194701c9275f96c35be1\"><div class=\"ttname\"><a href=\"a01887.html#a77ece9d9cda9194701c9275f96c35be1\">Dune::Functions::FaceNormalGridFunction::derivative</a></div><div class=\"ttdeci\">friend Traits::DerivativeInterface derivative(const FaceNormalGridFunction &t)</div><div class=\"ttdoc\">Not implemented.</div><div class=\"ttdef\"><b>Definition:</b> facenormalgridfunction.hh:169</div></div>\n-<div class=\"ttc\" id=\"aa01887_html_a83c9500a49fbf25de2f8aaf04e422011\"><div class=\"ttname\"><a href=\"a01887.html#a83c9500a49fbf25de2f8aaf04e422011\">Dune::Functions::FaceNormalGridFunction::GridView</a></div><div class=\"ttdeci\">GV GridView</div><div class=\"ttdef\"><b>Definition:</b> facenormalgridfunction.hh:68</div></div>\n-<div class=\"ttc\" id=\"aa01887_html_ab4fe4a7e812cce916c62f77fd3235d5f\"><div class=\"ttname\"><a href=\"a01887.html#ab4fe4a7e812cce916c62f77fd3235d5f\">Dune::Functions::FaceNormalGridFunction::localFunction</a></div><div class=\"ttdeci\">friend LocalFunction localFunction(const FaceNormalGridFunction &t)</div><div class=\"ttdoc\">Return a local-function associated to FaceNormalGridFunction.</div><div class=\"ttdef\"><b>Definition:</b> facenormalgridfunction.hh:175</div></div>\n-<div class=\"ttc\" id=\"aa01887_html_abc9d21b72e064c153dd02be2cce2f01c\"><div class=\"ttname\"><a href=\"a01887.html#abc9d21b72e064c153dd02be2cce2f01c\">Dune::Functions::FaceNormalGridFunction::FaceNormalGridFunction</a></div><div class=\"ttdeci\">FaceNormalGridFunction(const GridView &gridView)</div><div class=\"ttdoc\">Construct the FaceNormalGridFunction.</div><div class=\"ttdef\"><b>Definition:</b> facenormalgridfunction.hh:158</div></div>\n-<div class=\"ttc\" id=\"aa01887_html_abdec4f718f342e7b6ad20f26cc52a928\"><div class=\"ttname\"><a href=\"a01887.html#abdec4f718f342e7b6ad20f26cc52a928\">Dune::Functions::FaceNormalGridFunction::Element</a></div><div class=\"ttdeci\">typename EntitySet::Element Element</div><div class=\"ttdef\"><b>Definition:</b> facenormalgridfunction.hh:70</div></div>\n-<div class=\"ttc\" id=\"aa01887_html_ac26dc0cc3ed5d93a8c8b9590f68d18c1\"><div class=\"ttname\"><a href=\"a01887.html#ac26dc0cc3ed5d93a8c8b9590f68d18c1\">Dune::Functions::FaceNormalGridFunction::operator()</a></div><div class=\"ttdeci\">Range operator()(const Domain &x) const</div><div class=\"ttdoc\">Not implemented.</div><div class=\"ttdef\"><b>Definition:</b> facenormalgridfunction.hh:163</div></div>\n-<div class=\"ttc\" id=\"aa01895_html\"><div class=\"ttname\"><a href=\"a01895.html\">Dune::Functions::GridFunction</a></div><div class=\"ttdef\"><b>Definition:</b> gridfunction.hh:32</div></div>\n-<div class=\"ttc\" id=\"aa01919_html\"><div class=\"ttname\"><a href=\"a01919.html\">Dune::Functions::GridViewEntitySet< GridView, 0 ></a></div></div>\n-<div class=\"ttc\" id=\"aa01919_html_a1d5eaf3facd0219b2e150d964a664752\"><div class=\"ttname\"><a href=\"a01919.html#a1d5eaf3facd0219b2e150d964a664752\">Dune::Functions::GridViewEntitySet< GridView, 0 >::Element</a></div><div class=\"ttdeci\">GridView::template Codim< codim >::Entity Element</div><div class=\"ttdoc\">Type of Elements contained in this EntitySet.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:32</div></div>\n-<div class=\"ttc\" id=\"aa01919_html_aa4368ad66f18ba8279f20ab7a794069d\"><div class=\"ttname\"><a href=\"a01919.html#aa4368ad66f18ba8279f20ab7a794069d\">Dune::Functions::GridViewEntitySet< GridView, 0 >::LocalCoordinate</a></div><div class=\"ttdeci\">Element::Geometry::LocalCoordinate LocalCoordinate</div><div class=\"ttdoc\">Type of local coordinates with respect to the Element.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:35</div></div>\n-<div class=\"ttc\" id=\"aa01919_html_ac4e3d0188467b4be3d195c9f5729e629\"><div class=\"ttname\"><a href=\"a01919.html#ac4e3d0188467b4be3d195c9f5729e629\">Dune::Functions::GridViewEntitySet< GridView, 0 >::GlobalCoordinate</a></div><div class=\"ttdeci\">Element::Geometry::GlobalCoordinate GlobalCoordinate</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:36</div></div>\n+<div class=\"ttc\" id=\"aa01075_html_a3f8978146cb9b334705b651d84194b98\"><div class=\"ttname\"><a href=\"a01075.html#a3f8978146cb9b334705b651d84194b98\">Dune::Functions::DefaultDerivativeTraits::Range</a></div><div class=\"ttdeci\">InvalidRange Range</div><div class=\"ttdoc\">Range of derivative for function with given signature.</div><div class=\"ttdef\"><b>Definition:</b> defaultderivativetraits.hh:39</div></div>\n+<div class=\"ttc\" id=\"aa01079_html_a801e37f182d8c16ba1cfd72de1f17688\"><div class=\"ttname\"><a href=\"a01079.html#a801e37f182d8c16ba1cfd72de1f17688\">Dune::Functions::DefaultDerivativeTraits< double(double) >::Range</a></div><div class=\"ttdeci\">double Range</div><div class=\"ttdoc\">Range of derivative for function with given signature.</div><div class=\"ttdef\"><b>Definition:</b> defaultderivativetraits.hh:54</div></div>\n+<div class=\"ttc\" id=\"aa01083_html_ad1603332ee1c64f89c0fc18a8ee273d6\"><div class=\"ttname\"><a href=\"a01083.html#ad1603332ee1c64f89c0fc18a8ee273d6\">Dune::Functions::DefaultDerivativeTraits< K(FieldVector< K, n >)>::Range</a></div><div class=\"ttdeci\">FieldVector< K, n > Range</div><div class=\"ttdoc\">Range of derivative for function with given signature.</div><div class=\"ttdef\"><b>Definition:</b> defaultderivativetraits.hh:70</div></div>\n+<div class=\"ttc\" id=\"aa01087_html_ace3fbe5caed8c848072466ff723e82ab\"><div class=\"ttname\"><a href=\"a01087.html#ace3fbe5caed8c848072466ff723e82ab\">Dune::Functions::DefaultDerivativeTraits< FieldVector< K, m >(FieldVector< K, n >)>::Range</a></div><div class=\"ttdeci\">FieldMatrix< K, m, n > Range</div><div class=\"ttdoc\">Range of derivative for function with given signature.</div><div class=\"ttdef\"><b>Definition:</b> defaultderivativetraits.hh:86</div></div>\n+<div class=\"ttc\" id=\"aa01091_html_a5379bc605e79658f7a54ec17e3946e9b\"><div class=\"ttname\"><a href=\"a01091.html#a5379bc605e79658f7a54ec17e3946e9b\">Dune::Functions::DefaultDerivativeTraits< FieldMatrix< K, 1, m >(FieldVector< K, n >)>::Range</a></div><div class=\"ttdeci\">FieldMatrix< K, m, n > Range</div><div class=\"ttdoc\">Range of derivative for function with given signature.</div><div class=\"ttdef\"><b>Definition:</b> defaultderivativetraits.hh:102</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,231 +4,99 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * gridfunctions\n-facenormalgridfunction.hh\n+ * common\n+defaultderivativetraits.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH\n- 4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH\n+ 3#ifndef DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH\n+ 4#define DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH\n 5\n 6#include <type_traits>\n- 7#include <optional>\n+ 7#include <utility>\n 8\n- 9#include <dune/common/exceptions.hh>\n- 10#include <dune/common/typeutilities.hh>\n- 11#include <dune/common/rangeutilities.hh>\n- 12#include <dune/geometry/referenceelements.hh>\n- 13\n- 14#include <dune/functions/gridfunctions/gridfunction.hh>\n- 15#include <dune/functions/gridfunctions/gridviewentityset.hh>\n+ 9#include <dune/common/fvector.hh>\n+ 10#include <dune/common/fmatrix.hh>\n+ 11\n+ 12namespace Dune {\n+ 13namespace Functions {\n+ 14\n+ 15\n 16\n- 17\n- 18namespace Dune::Functions {\n- 19\n- 20namespace Impl {\n- 21\n- 22// Compute closest face to point\n- 23template<class ReferenceElement, class Coordinate>\n- 24auto closestFaceIndex(const ReferenceElement& re, const Coordinate& x)\n- 25{\n- 26 auto closestFaceIndex = decltype(re.subEntity(0,1,0,1)){};\n- 27 double closestFaceDistance = std::numeric_limits<double>::max();\n- 28 for(auto&& faceIndex : Dune::range(re.size(1)))\n- 29 {\n- 30 // For a face unit outer normal consider the orthogonal projection\n- 31 // Px = x + <c-x,n>*n into the face. Then the distance to the face\n- 32 // is given by |x-Px| = |<c-x,n>||n| = <c-x,n>.\n- 33 auto normal = re.integrationOuterNormal(faceIndex);\n- 34 normal /= normal.two_norm();\n- 35 auto c = re.position(faceIndex,1);\n- 36 c -= x;\n- 37 auto faceDistance = (c*normal);\n- 38 if (faceDistance<closestFaceDistance)\n- 39 {\n- 40 closestFaceDistance = faceDistance;\n- 41 closestFaceIndex = faceIndex;\n- 42 }\n- 43 }\n- 44 return closestFaceIndex;\n- 45}\n- 46\n- 47} // end namespace Impl\n- 48\n- 49\n- 50\n- 51\n- 64template<class GV>\n-65class FaceNormalGridFunction\n- 66{\n- 67public:\n-68 using GridView = GV;\n-69 using EntitySet = GridViewEntitySet<GridView,_0>;\n-70 using Element = typename EntitySet::Element;\n- 71\n-72 using LocalDomain = typename EntitySet::LocalCoordinate;\n-73 using Domain = typename EntitySet::GlobalCoordinate;\n-74 using Range = typename EntitySet::GlobalCoordinate;\n- 75\n- 76private:\n- 77\n- 78 using Traits = Imp::GridFunctionTraits<Range(Domain), EntitySet,\n-DefaultDerivativeTraits, 16>;\n- 79\n- 80 class LocalFunction\n- 81 {\n- 82 using Geometry = typename Element::Geometry;\n- 83 static const int dimension = GV::dimension;\n- 84 public:\n- 85\n- 97 void bind(const Element& element)\n- 98 {\n- 99 element_ = element;\n- 100 geometry_.emplace(element_.geometry());\n- 101 }\n- 102\n- 103 void unbind()\n- 104 {\n- 105 geometry_.reset();\n- 106 }\n+22class InvalidRange\n+ 23{};\n+ 24\n+ 25\n+ 35template<class Signature>\n+36struct DefaultDerivativeTraits\n+ 37{\n+39 typedef InvalidRange Range;\n+ 40};\n+ 41\n+ 42\n+ 50template<>\n+51struct DefaultDerivativeTraits< double(double) >\n+ 52{\n+54 typedef double Range;\n+ 55};\n+ 56\n+ 66template<typename K, int n>\n+67struct DefaultDerivativeTraits<K(FieldVector<K,n>)>\n+ 68{\n+70 typedef FieldVector<K,n> Range;\n+ 71};\n+ 72\n+ 82template<typename K, int n, int m>\n+83struct DefaultDerivativeTraits<FieldVector<K,m>(FieldVector<K,n>)>\n+ 84{\n+86 typedef FieldMatrix<K,m,n> Range;\n+ 87};\n+ 88\n+ 98template<typename K, int n, int m>\n+99struct DefaultDerivativeTraits<FieldMatrix<K,1,m>(FieldVector<K,n>)>\n+ 100{\n+102 typedef FieldMatrix<K,m,n> Range;\n+ 103};\n+ 104\n+ 105\n+ 106}} // namespace Dune::Functions\n 107\n- 110 bool bound() const\n- 111 {\n- 112 return static_cast<bool>(geometry_);\n- 113 }\n- 114\n- 124 Range operator()(const LocalDomain& x) const\n- 125 {\n- 126 auto&& re = Dune::referenceElement(*geometry_);\n- 127 // Compute reference normal of closest face to given point\n- 128 auto face = Impl::closestFaceIndex(re, x);\n- 129 auto localNormal = re.integrationOuterNormal(face);\n- 130\n- 131 // Transform reference normal into global unit outer normal using\n- 132 // covariant Piola transformation\n- 133 auto normal = Range{};\n- 134 geometry_->jacobianInverseTransposed(x).mv(localNormal, normal);\n- 135 normal /= normal.two_norm();\n- 136 return normal;\n- 137 }\n- 138\n- 140 const Element& localContext() const\n- 141 {\n- 142 return element_;\n- 143 }\n- 144\n- 146 friend typename Traits::LocalFunctionTraits::DerivativeInterface\n-derivative(const LocalFunction& t)\n- 147 {\n- 148 DUNE_THROW(NotImplemented,\"not implemented\");\n- 149 }\n- 150\n- 151 private:\n- 152 std::optional<Geometry> geometry_;\n- 153 Element element_;\n- 154 };\n- 155\n- 156public:\n-158 FaceNormalGridFunction(const GridView& gridView) :\n- 159 entitySet_(gridView)\n- 160 {}\n- 161\n-163 Range operator()(const Domain& x) const\n- 164 {\n- 165 DUNE_THROW(NotImplemented,\"not implemented\");\n- 166 }\n- 167\n-169 friend typename Traits::DerivativeInterface derivative(const\n-FaceNormalGridFunction& t)\n- 170 {\n- 171 DUNE_THROW(NotImplemented,\"not implemented\");\n- 172 }\n- 173\n-175 friend LocalFunction localFunction(const FaceNormalGridFunction& t)\n- 176 {\n- 177 return LocalFunction{};\n- 178 }\n- 179\n-181 const EntitySet& entitySet() const\n- 182 {\n- 183 return entitySet_;\n- 184 }\n- 185\n- 186private:\n- 187 EntitySet entitySet_;\n- 188};\n- 189\n- 190\n- 191\n- 192} // namespace Dune::Functions\n- 193\n- 194#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH\n-gridfunction.hh\n-gridviewentityset.hh\n-Dune::Functions\n-Definition: polynomial.hh:11\n+ 108\n+ 109#endif // DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH\n+Dune\n+Definition: polynomial.hh:10\n+Dune::Functions::InvalidRange\n+Dummy range class to be used if no proper type is available.\n+Definition: defaultderivativetraits.hh:23\n Dune::Functions::DefaultDerivativeTraits\n Default implementation for derivative traits.\n Definition: defaultderivativetraits.hh:37\n-Dune::Functions::FaceNormalGridFunction\n-Grid function implementing the piecewise element face normal.\n-Definition: facenormalgridfunction.hh:66\n-Dune::Functions::FaceNormalGridFunction::EntitySet\n-GridViewEntitySet< GridView, 0 > EntitySet\n-Definition: facenormalgridfunction.hh:69\n-Dune::Functions::FaceNormalGridFunction::LocalDomain\n-typename EntitySet::LocalCoordinate LocalDomain\n-Definition: facenormalgridfunction.hh:72\n-Dune::Functions::FaceNormalGridFunction::Domain\n-typename EntitySet::GlobalCoordinate Domain\n-Definition: facenormalgridfunction.hh:73\n-Dune::Functions::FaceNormalGridFunction::Range\n-typename EntitySet::GlobalCoordinate Range\n-Definition: facenormalgridfunction.hh:74\n-Dune::Functions::FaceNormalGridFunction::entitySet\n-const EntitySet & entitySet() const\n-Return the stored GridViewEntitySet.\n-Definition: facenormalgridfunction.hh:181\n-Dune::Functions::FaceNormalGridFunction::derivative\n-friend Traits::DerivativeInterface derivative(const FaceNormalGridFunction &t)\n-Not implemented.\n-Definition: facenormalgridfunction.hh:169\n-Dune::Functions::FaceNormalGridFunction::GridView\n-GV GridView\n-Definition: facenormalgridfunction.hh:68\n-Dune::Functions::FaceNormalGridFunction::localFunction\n-friend LocalFunction localFunction(const FaceNormalGridFunction &t)\n-Return a local-function associated to FaceNormalGridFunction.\n-Definition: facenormalgridfunction.hh:175\n-Dune::Functions::FaceNormalGridFunction::FaceNormalGridFunction\n-FaceNormalGridFunction(const GridView &gridView)\n-Construct the FaceNormalGridFunction.\n-Definition: facenormalgridfunction.hh:158\n-Dune::Functions::FaceNormalGridFunction::Element\n-typename EntitySet::Element Element\n-Definition: facenormalgridfunction.hh:70\n-Dune::Functions::FaceNormalGridFunction::operator()\n-Range operator()(const Domain &x) const\n-Not implemented.\n-Definition: facenormalgridfunction.hh:163\n-Dune::Functions::GridFunction\n-Definition: gridfunction.hh:32\n-Dune::Functions::GridViewEntitySet<_GridView,_0_>\n-Dune::Functions::GridViewEntitySet<_GridView,_0_>::Element\n-GridView::template Codim< codim >::Entity Element\n-Type of Elements contained in this EntitySet.\n-Definition: gridviewentityset.hh:32\n-Dune::Functions::GridViewEntitySet<_GridView,_0_>::LocalCoordinate\n-Element::Geometry::LocalCoordinate LocalCoordinate\n-Type of local coordinates with respect to the Element.\n-Definition: gridviewentityset.hh:35\n-Dune::Functions::GridViewEntitySet<_GridView,_0_>::GlobalCoordinate\n-Element::Geometry::GlobalCoordinate GlobalCoordinate\n-Definition: gridviewentityset.hh:36\n+Dune::Functions::DefaultDerivativeTraits::Range\n+InvalidRange Range\n+Range of derivative for function with given signature.\n+Definition: defaultderivativetraits.hh:39\n+Dune::Functions::DefaultDerivativeTraits<_double(double)_>::Range\n+double Range\n+Range of derivative for function with given signature.\n+Definition: defaultderivativetraits.hh:54\n+Dune::Functions::DefaultDerivativeTraits<_K(FieldVector<_K,_n_>)>::Range\n+FieldVector< K, n > Range\n+Range of derivative for function with given signature.\n+Definition: defaultderivativetraits.hh:70\n+Dune::Functions::DefaultDerivativeTraits<_FieldVector<_K,_m_>(FieldVector<_K,_n\n+>)>::Range\n+FieldMatrix< K, m, n > Range\n+Range of derivative for function with given signature.\n+Definition: defaultderivativetraits.hh:86\n+Dune::Functions::DefaultDerivativeTraits<_FieldMatrix<_K,_1,_m_>(FieldVector<\n+K,_n_>)>::Range\n+FieldMatrix< K, m, n > Range\n+Range of derivative for function with given signature.\n+Definition: defaultderivativetraits.hh:102\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00038.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00038.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: gridviewfunction.hh File Reference</title>\n+<title>dune-functions: referencehelper.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,58 +58,58 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n-<a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> |\n-<a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">gridviewfunction.hh File Reference</div></div>\n+<a href=\"#typedef-members\">Typedefs</a> |\n+<a href=\"#func-members\">Functions</a> |\n+<a href=\"#var-members\">Variables</a> </div>\n+ <div class=\"headertitle\"><div class=\"title\">referencehelper.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <memory></code><br />\n-<code>#include <dune/common/concept.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00017_source.html\">dune/functions/gridfunctions/gridfunction.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00023_source.html\">dune/functions/gridfunctions/gridviewentityset.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00014_source.html\">dune/functions/gridfunctions/analyticgridviewfunction.hh</a>></code><br />\n+<div class=\"textblock\"><code>#include <type_traits></code><br />\n+<code>#include <dune/common/referencehelper.hh></code><br />\n </div>\n <p><a href=\"a00038_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n-Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01923.html\">Dune::Functions::GridViewFunction< Signature, GridView, DerivativeTraits, bufferSize ></a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01927.html\">Dune::Functions::GridViewFunction< Range(Domain), GV, DerivativeTraits, bufferSize ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Wrapper class for functions defined on a GridView. <a href=\"a01927.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-</table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"typedef-members\" name=\"typedef-members\"></a>\n+Typedefs</h2></td></tr>\n+<tr class=\"memitem:a51755a2fa6d9e5737a8e2b32cbe3cc15\"><td class=\"memTemplParams\" colspan=\"2\">template<class T > </td></tr>\n+<tr class=\"memitem:a51755a2fa6d9e5737a8e2b32cbe3cc15\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a51755a2fa6d9e5737a8e2b32cbe3cc15\">Dune::Functions::ResolveRef_t</a> = Dune::ResolveRef_t< T ></td></tr>\n+<tr class=\"memdesc:a51755a2fa6d9e5737a8e2b32cbe3cc15\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">This is an alias for Dune::ResolveRef_t. <a href=\"a00219.html#a51755a2fa6d9e5737a8e2b32cbe3cc15\">More...</a><br /></td></tr>\n+<tr class=\"separator:a51755a2fa6d9e5737a8e2b32cbe3cc15\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+</table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n Functions</h2></td></tr>\n-<tr class=\"memitem:ab31121faf1c753f425b7360cedeb9a6a\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class GridView , typename std::enable_if< models< Imp::HasFreeLocalFunction, F >(), int >::type = 0> </td></tr>\n-<tr class=\"memitem:ab31121faf1c753f425b7360cedeb9a6a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">std::decay< F >::type </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#ab31121faf1c753f425b7360cedeb9a6a\">Dune::Functions::makeGridViewFunction</a> (F &&f, const GridView &gridView)</td></tr>\n-<tr class=\"memdesc:ab31121faf1c753f425b7360cedeb9a6a\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Construct a function modeling <a class=\"el\" href=\"a01923.html\">GridViewFunction</a> from function and grid view. <a href=\"a00219.html#ab31121faf1c753f425b7360cedeb9a6a\">More...</a><br /></td></tr>\n-<tr class=\"separator:ab31121faf1c753f425b7360cedeb9a6a\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a34f2d140a1fed46862286f68d26c9975\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class GridView , typename std::enable_if< not(models< Imp::HasFreeLocalFunction, F >()), int >::type = 0> </td></tr>\n-<tr class=\"memitem:a34f2d140a1fed46862286f68d26c9975\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a34f2d140a1fed46862286f68d26c9975\">Dune::Functions::makeGridViewFunction</a> (F &&f, const GridView &gridView) -> decltype(<a class=\"el\" href=\"a00209.html#gafe8f06fb6d4027bfaf39e0971d8eb3c6\">makeAnalyticGridViewFunction</a>(std::forward< F >(f), gridView))</td></tr>\n-<tr class=\"memdesc:a34f2d140a1fed46862286f68d26c9975\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Construct a function modeling <a class=\"el\" href=\"a01923.html\">GridViewFunction</a> from function and grid view. <a href=\"a00219.html#a34f2d140a1fed46862286f68d26c9975\">More...</a><br /></td></tr>\n-<tr class=\"separator:a34f2d140a1fed46862286f68d26c9975\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:acd448ecd78521f983720ec5a6f3e7698\"><td class=\"memTemplParams\" colspan=\"2\">template<class T > </td></tr>\n+<tr class=\"memitem:acd448ecd78521f983720ec5a6f3e7698\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">decltype(auto) </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#acd448ecd78521f983720ec5a6f3e7698\">Dune::Functions::resolveRef</a> (T &&t)</td></tr>\n+<tr class=\"memdesc:acd448ecd78521f983720ec5a6f3e7698\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">This is an alias for Dune::resolveRef. <a href=\"a00219.html#acd448ecd78521f983720ec5a6f3e7698\">More...</a><br /></td></tr>\n+<tr class=\"separator:acd448ecd78521f983720ec5a6f3e7698\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+</table><table class=\"memberdecls\">\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"var-members\" name=\"var-members\"></a>\n+Variables</h2></td></tr>\n+<tr class=\"memitem:a432dd9531e141b59ba6b90a6104f2cb7\"><td class=\"memTemplParams\" colspan=\"2\">template<class T > </td></tr>\n+<tr class=\"memitem:a432dd9531e141b59ba6b90a6104f2cb7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">constexpr bool </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a432dd9531e141b59ba6b90a6104f2cb7\">Dune::Functions::IsReferenceWrapper_v</a> = Dune::IsReferenceWrapper_v<T></td></tr>\n+<tr class=\"memdesc:a432dd9531e141b59ba6b90a6104f2cb7\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">This is an alias for Dune::IsReferenceWrapper_v. <a href=\"a00219.html#a432dd9531e141b59ba6b90a6104f2cb7\">More...</a><br /></td></tr>\n+<tr class=\"separator:a432dd9531e141b59ba6b90a6104f2cb7\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,49 +4,37 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * gridfunctions\n-Classes | Namespaces | Functions\n-gridviewfunction.hh File Reference\n-#include <memory>\n-#include <dune/common/concept.hh>\n-#include <dune/functions/gridfunctions/gridfunction.hh>\n-#include <dune/functions/gridfunctions/gridviewentityset.hh>\n-#include <dune/functions/gridfunctions/analyticgridviewfunction.hh>\n+ * common\n+Namespaces | Typedefs | Functions | Variables\n+referencehelper.hh File Reference\n+#include <type_traits>\n+#include <dune/common/referencehelper.hh>\n Go_to_the_source_code_of_this_file.\n- Classes\n-class \u00a0Dune::Functions::GridViewFunction<_Signature,_GridView,\n- DerivativeTraits,_bufferSize_>\n-\u00a0\n-class \u00a0Dune::Functions::GridViewFunction<_Range(Domain),_GV,_DerivativeTraits,\n- bufferSize_>\n-\u00a0 Wrapper class for functions defined on a GridView. More...\n-\u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n- Functions\n-template<class F , class GridView , typename std::enable_if< models< Imp::\n-HasFreeLocalFunction, F >(), int >::type = 0>\n-std::decay< F >::type\u00a0Dune::Functions::makeGridViewFunction (F &&f, const\n- GridView &gridView)\n-\u00a0 Construct a function modeling GridViewFunction from\n- function and grid view. More...\n+ Typedefs\n+template<class T >\n+using\u00a0Dune::Functions::ResolveRef_t = Dune::ResolveRef_t< T >\n+\u00a0 This is an alias for Dune::ResolveRef_t. More...\n \u00a0\n-template<class F , class GridView , typename std::enable_if< not(models< Imp::\n-HasFreeLocalFunction, F >()), int >::type = 0>\n- auto\u00a0Dune::Functions::makeGridViewFunction (F &&f, const\n- GridView &gridView) -> decltype\n- (makeAnalyticGridViewFunction(std::forward< F >(f),\n- gridView))\n-\u00a0 Construct a function modeling GridViewFunction from\n- function and grid view. More...\n+ Functions\n+template<class T >\n+decltype(auto)\u00a0Dune::Functions::resolveRef (T &&t)\n+\u00a0 This is an alias for Dune::resolveRef. More...\n+\u00a0\n+ Variables\n+template<class T >\n+constexpr bool\u00a0Dune::Functions::IsReferenceWrapper_v = Dune::\n+ IsReferenceWrapper_v<T>\n+\u00a0 This is an alias for Dune::IsReferenceWrapper_v. More...\n \u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00038_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00038_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: gridviewfunction.hh Source File</title>\n+<title>dune-functions: referencehelper.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,95 +58,69 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">gridviewfunction.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">referencehelper.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00038.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_REFERENCE_HELPER_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_REFERENCE_HELPER_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <memory></span></div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#warning The header dune/functions/common/referencehelper.hh is deprecated and will be removed after release 2.9. Include dune/common/referencehelper.hh instead.</span></div>\n <div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span> </div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <dune/common/concept.hh></span></div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <type_traits></span></div>\n <div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00017.html\">dune/functions/gridfunctions/gridfunction.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00023.html\">dune/functions/gridfunctions/gridviewentityset.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00014.html\">dune/functions/gridfunctions/analyticgridviewfunction.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/referencehelper.hh></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n <div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n <div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n <div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n <div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"keyword\">namespace </span>Functions {</div>\n <div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n <div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> Gr<span class=\"keywordtype\">id</span>View, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits=DefaultDerivativeTraits, <span class=\"keywordtype\">size_t</span> bufferSize=56></div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01923.html\"> 21</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01923.html\">GridViewFunction</a></div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span>{};</div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span> </div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> </div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> </div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">class</span> GV, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits, <span class=\"keywordtype\">size_t</span> bufferSize></div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01927.html\"> 41</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01923.html\">GridViewFunction</a><Range(Domain), GV, DerivativeTraits, bufferSize> :</div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01895.html\">GridFunction</a><Range(Domain), GridViewEntitySet<GV, 0>, DerivativeTraits, bufferSize></div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span>{</div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01895.html\">Base</a> = <a class=\"code hl_class\" href=\"a01895.html\">GridFunction</a><Range(Domain), <a class=\"code hl_class\" href=\"a01919.html\">GridViewEntitySet<GV, 0></a>, DerivativeTraits, bufferSize>;</div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01927.html#a9bd9a49e5cf7ebebfa78433dbe8e7de5\"> 46</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01927.html#a9bd9a49e5cf7ebebfa78433dbe8e7de5\">GridView</a> = GV;</div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> <span class=\"keyword\">using </span>Base::Base;</div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span>};</div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span>[[deprecated(<span class=\"stringliteral\">"Use Dune::IsReferenceWrapper_v instead. Will be removed after release 2.9."</span>)]]</div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span><span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span></div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a432dd9531e141b59ba6b90a6104f2cb7\"> 26</a></span><a class=\"code hl_variable\" href=\"a00219.html#a432dd9531e141b59ba6b90a6104f2cb7\">IsReferenceWrapper_v</a> = Dune::IsReferenceWrapper_v<T>;</div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> </div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> </div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span><span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>)</div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#acd448ecd78521f983720ec5a6f3e7698\"> 35</a></span><a class=\"code hl_function\" href=\"a00219.html#acd448ecd78521f983720ec5a6f3e7698\">resolveRef</a></div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span>[[deprecated(<span class=\"stringliteral\">"Use Dune::resolveRef instead. Will be removed after release 2.9."</span>)]]</div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span>(T&& t)</div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span>{</div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00219.html#acd448ecd78521f983720ec5a6f3e7698\">Dune::resolveRef</a>(std::forward<T>(t));</div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span>}</div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> </div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a51755a2fa6d9e5737a8e2b32cbe3cc15\"> 47</a></span><span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a00219.html#a51755a2fa6d9e5737a8e2b32cbe3cc15\">ResolveRef_t</a></div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span>[[deprecated(<span class=\"stringliteral\">"Use Dune::ResolveRef_t instead. Will be removed after release 2.9."</span>)]]</div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> = Dune::ResolveRef_t<T>;</div>\n <div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> </div>\n <div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> </div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> </div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>F, <span class=\"keyword\">class </span>GridView,</div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> <span class=\"keyword\">typename</span> std::enable_if<</div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> models< Imp::HasFreeLocalFunction, F>() , <span class=\"keywordtype\">int</span>>::type = 0></div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span><span class=\"keyword\">typename</span> std::decay<F>::type</div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#ab31121faf1c753f425b7360cedeb9a6a\"> 68</a></span> <a class=\"code hl_function\" href=\"a00219.html#ab31121faf1c753f425b7360cedeb9a6a\">makeGridViewFunction</a>(F&& f, <span class=\"keyword\">const</span> GridView& gridView)</div>\n-<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span>{</div>\n-<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> <span class=\"keywordflow\">return</span> std::forward<F>(f);</div>\n-<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span>}</div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> </div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> </div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> </div>\n-<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>F, <span class=\"keyword\">class </span>GridView,</div>\n-<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> <span class=\"keyword\">typename</span> std::enable_if<</div>\n-<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> not(models< Imp::HasFreeLocalFunction, F>()) , <span class=\"keywordtype\">int</span>>::type = 0></div>\n-<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a34f2d140a1fed46862286f68d26c9975\"> 93</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00219.html#ab31121faf1c753f425b7360cedeb9a6a\">makeGridViewFunction</a>(F&& f, <span class=\"keyword\">const</span> GridView& gridView)</div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> -> <span class=\"keyword\">decltype</span>(<a class=\"code hl_function\" href=\"a00209.html#gafe8f06fb6d4027bfaf39e0971d8eb3c6\">makeAnalyticGridViewFunction</a>(std::forward<F>(f), gridView))</div>\n-<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span>{</div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00209.html#gafe8f06fb6d4027bfaf39e0971d8eb3c6\">makeAnalyticGridViewFunction</a>(std::forward<F>(f), gridView);</div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span>}</div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> </div>\n-<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> </div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> </div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span>} <span class=\"comment\">// end of namespace Dune::Functions</span></div>\n-<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span>} <span class=\"comment\">// end of namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> </div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH</span></div>\n-<div class=\"ttc\" id=\"aa00014_html\"><div class=\"ttname\"><a href=\"a00014.html\">analyticgridviewfunction.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00017_html\"><div class=\"ttname\"><a href=\"a00017.html\">gridfunction.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00023_html\"><div class=\"ttname\"><a href=\"a00023.html\">gridviewentityset.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00209_html_gafe8f06fb6d4027bfaf39e0971d8eb3c6\"><div class=\"ttname\"><a href=\"a00209.html#gafe8f06fb6d4027bfaf39e0971d8eb3c6\">Dune::Functions::makeAnalyticGridViewFunction</a></div><div class=\"ttdeci\">AnalyticGridViewFunction< typename std::invoke_result< F, typename GridView::template Codim< 0 >::Geometry::GlobalCoordinate >::type(typename GridView::template Codim< 0 >::Geometry::GlobalCoordinate), GridView, typename std::decay< F >::type > makeAnalyticGridViewFunction(F &&f, const GridView &gridView)</div><div class=\"ttdoc\">Create an AnalyticGridViewFunction from a function and a grid view.</div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:230</div></div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span>}} <span class=\"comment\">// namespace Dune::Functions</span></div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> </div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> </div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> </div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_REFERENCE_HELPER_HH</span></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa00219_html_ab31121faf1c753f425b7360cedeb9a6a\"><div class=\"ttname\"><a href=\"a00219.html#ab31121faf1c753f425b7360cedeb9a6a\">Dune::Functions::makeGridViewFunction</a></div><div class=\"ttdeci\">std::decay< F >::type makeGridViewFunction(F &&f, const GridView &gridView)</div><div class=\"ttdoc\">Construct a function modeling GridViewFunction from function and grid view.</div><div class=\"ttdef\"><b>Definition:</b> gridviewfunction.hh:68</div></div>\n-<div class=\"ttc\" id=\"aa01895_html\"><div class=\"ttname\"><a href=\"a01895.html\">Dune::Functions::GridFunction</a></div><div class=\"ttdef\"><b>Definition:</b> gridfunction.hh:32</div></div>\n-<div class=\"ttc\" id=\"aa01919_html\"><div class=\"ttname\"><a href=\"a01919.html\">Dune::Functions::GridViewEntitySet</a></div><div class=\"ttdoc\">An entity set for all entities of given codim in a grid view.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:23</div></div>\n-<div class=\"ttc\" id=\"aa01923_html\"><div class=\"ttname\"><a href=\"a01923.html\">Dune::Functions::GridViewFunction</a></div><div class=\"ttdef\"><b>Definition:</b> gridviewfunction.hh:22</div></div>\n-<div class=\"ttc\" id=\"aa01927_html_a9bd9a49e5cf7ebebfa78433dbe8e7de5\"><div class=\"ttname\"><a href=\"a01927.html#a9bd9a49e5cf7ebebfa78433dbe8e7de5\">Dune::Functions::GridViewFunction< Range(Domain), GV, DerivativeTraits, bufferSize >::GridView</a></div><div class=\"ttdeci\">GV GridView</div><div class=\"ttdef\"><b>Definition:</b> gridviewfunction.hh:46</div></div>\n+<div class=\"ttc\" id=\"aa00219_html_a432dd9531e141b59ba6b90a6104f2cb7\"><div class=\"ttname\"><a href=\"a00219.html#a432dd9531e141b59ba6b90a6104f2cb7\">Dune::Functions::IsReferenceWrapper_v</a></div><div class=\"ttdeci\">constexpr bool IsReferenceWrapper_v</div><div class=\"ttdoc\">This is an alias for Dune::IsReferenceWrapper_v.</div><div class=\"ttdef\"><b>Definition:</b> referencehelper.hh:26</div></div>\n+<div class=\"ttc\" id=\"aa00219_html_a51755a2fa6d9e5737a8e2b32cbe3cc15\"><div class=\"ttname\"><a href=\"a00219.html#a51755a2fa6d9e5737a8e2b32cbe3cc15\">Dune::Functions::ResolveRef_t</a></div><div class=\"ttdeci\">Dune::ResolveRef_t< T > ResolveRef_t</div><div class=\"ttdoc\">This is an alias for Dune::ResolveRef_t.</div><div class=\"ttdef\"><b>Definition:</b> referencehelper.hh:49</div></div>\n+<div class=\"ttc\" id=\"aa00219_html_acd448ecd78521f983720ec5a6f3e7698\"><div class=\"ttname\"><a href=\"a00219.html#acd448ecd78521f983720ec5a6f3e7698\">Dune::Functions::resolveRef</a></div><div class=\"ttdeci\">decltype(auto) resolveRef(T &&t)</div><div class=\"ttdoc\">This is an alias for Dune::resolveRef.</div><div class=\"ttdef\"><b>Definition:</b> referencehelper.hh:37</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,109 +4,76 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * gridfunctions\n-gridviewfunction.hh\n+ * common\n+referencehelper.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH\n- 4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH\n+ 3#ifndef DUNE_FUNCTIONS_COMMON_REFERENCE_HELPER_HH\n+ 4#define DUNE_FUNCTIONS_COMMON_REFERENCE_HELPER_HH\n 5\n- 6#include <memory>\n+ 6#warning The header dune/functions/common/referencehelper.hh is deprecated\n+and will be removed after release 2.9. Include dune/common/referencehelper.hh\n+instead.\n 7\n- 8#include <dune/common/concept.hh>\n+ 8#include <type_traits>\n 9\n- 10#include <dune/functions/gridfunctions/gridfunction.hh>\n- 11#include <dune/functions/gridfunctions/gridviewentityset.hh>\n- 12#include <dune/functions/gridfunctions/analyticgridviewfunction.hh>\n+ 10#include <dune/common/referencehelper.hh>\n+ 11\n+ 12\n 13\n 14\n 15namespace Dune {\n 16namespace Functions {\n 17\n 18\n- 19\n- 20template<class Signature, class GridView, template<class> class\n-DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>\n-21class GridViewFunction\n- 22{};\n- 23\n- 24\n- 25\n- 40template<class Range, class Domain, class GV, template<class> class\n-DerivativeTraits, size_t bufferSize>\n-41class GridViewFunction<Range(Domain), GV, DerivativeTraits, bufferSize> :\n- 42 public GridFunction<Range(Domain), GridViewEntitySet<GV, 0>,\n-DerivativeTraits, bufferSize>\n- 43{\n- 44 using Base = GridFunction<Range(Domain), GridViewEntitySet<GV,_0>,\n-DerivativeTraits, bufferSize>;\n- 45public:\n-46 using GridView = GV;\n- 47\n- 48 using Base::Base;\n- 49};\n+ 23template<class T>\n+ 24[[deprecated(\"Use Dune::IsReferenceWrapper_v instead. Will be removed after\n+release 2.9.\")]]\n+ 25constexpr bool\n+26IsReferenceWrapper_v = Dune::IsReferenceWrapper_v<T>;\n+ 27\n+ 28\n+ 33template<class T>\n+ 34decltype(auto)\n+35resolveRef\n+ 36[[deprecated(\"Use Dune::resolveRef instead. Will be removed after release\n+2.9.\")]]\n+ 37(T&& t)\n+ 38{\n+ 39 return Dune::resolveRef(std::forward<T>(t));\n+ 40}\n+ 41\n+ 46template<class T>\n+47using ResolveRef_t\n+ 48[[deprecated(\"Use Dune::ResolveRef_t instead. Will be removed after release\n+2.9.\")]]\n+ 49 = Dune::ResolveRef_t<T>;\n 50\n 51\n- 52\n- 64template<class F, class GridView,\n- 65 typename std::enable_if<\n- 66 models< Imp::HasFreeLocalFunction, F>() , int>::type = 0>\n- 67typename std::decay<F>::type\n-68 makeGridViewFunction(F&& f, const GridView& gridView)\n- 69{\n- 70 return std::forward<F>(f);\n- 71}\n- 72\n- 73\n- 74\n- 90template<class F, class GridView,\n- 91 typename std::enable_if<\n- 92 not(models< Imp::HasFreeLocalFunction, F>()) , int>::type = 0>\n-93auto makeGridViewFunction(F&& f, const GridView& gridView)\n- 94 -> decltype(makeAnalyticGridViewFunction(std::forward<F>(f), gridView))\n- 95{\n- 96 return makeAnalyticGridViewFunction(std::forward<F>(f), gridView);\n- 97}\n- 98\n- 99\n- 100\n- 101} // end of namespace Dune::Functions\n- 102} // end of namespace Dune\n- 103\n- 104#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH\n-analyticgridviewfunction.hh\n-gridfunction.hh\n-gridviewentityset.hh\n-Dune::Functions::makeAnalyticGridViewFunction\n-AnalyticGridViewFunction< typename std::invoke_result< F, typename GridView::\n-template Codim< 0 >::Geometry::GlobalCoordinate >::type(typename GridView::\n-template Codim< 0 >::Geometry::GlobalCoordinate), GridView, typename std::\n-decay< F >::type > makeAnalyticGridViewFunction(F &&f, const GridView\n-&gridView)\n-Create an AnalyticGridViewFunction from a function and a grid view.\n-Definition: analyticgridviewfunction.hh:230\n+ 52}} // namespace Dune::Functions\n+ 53\n+ 54\n+ 55\n+ 56#endif // DUNE_FUNCTIONS_COMMON_REFERENCE_HELPER_HH\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::makeGridViewFunction\n-std::decay< F >::type makeGridViewFunction(F &&f, const GridView &gridView)\n-Construct a function modeling GridViewFunction from function and grid view.\n-Definition: gridviewfunction.hh:68\n-Dune::Functions::GridFunction\n-Definition: gridfunction.hh:32\n-Dune::Functions::GridViewEntitySet\n-An entity set for all entities of given codim in a grid view.\n-Definition: gridviewentityset.hh:23\n-Dune::Functions::GridViewFunction\n-Definition: gridviewfunction.hh:22\n-Dune::Functions::GridViewFunction<_Range(Domain),_GV,_DerivativeTraits,\n-bufferSize_>::GridView\n-GV GridView\n-Definition: gridviewfunction.hh:46\n+Dune::Functions::IsReferenceWrapper_v\n+constexpr bool IsReferenceWrapper_v\n+This is an alias for Dune::IsReferenceWrapper_v.\n+Definition: referencehelper.hh:26\n+Dune::Functions::ResolveRef_t\n+Dune::ResolveRef_t< T > ResolveRef_t\n+This is an alias for Dune::ResolveRef_t.\n+Definition: referencehelper.hh:49\n+Dune::Functions::resolveRef\n+decltype(auto) resolveRef(T &&t)\n+This is an alias for Dune::resolveRef.\n+Definition: referencehelper.hh:37\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00041.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00041.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: indexaccess.hh File Reference</title>\n+<title>dune-functions: utility.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -63,61 +63,92 @@\n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n+<a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> |\n+<a href=\"#typedef-members\">Typedefs</a> |\n <a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">indexaccess.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">utility.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <div class=\"textblock\"><code>#include <utility></code><br />\n <code>#include <type_traits></code><br />\n-<code>#include <dune/common/typetraits.hh></code><br />\n-<code>#include <dune/common/concept.hh></code><br />\n-<code>#include <dune/common/hybridutilities.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00050_source.html\">dune/functions/common/utility.hh</a>></code><br />\n+<code>#include <dune/common/overloadset.hh></code><br />\n+<code>#include <dune/common/indices.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00020_source.html\">dune/functions/common/functionconcepts.hh</a>></code><br />\n </div>\n <p><a href=\"a00041_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n+Classes</h2></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01383.html\">Dune::Functions::LastType< T ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Get last entry of type list. <a href=\"a01383.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01395.html\">Dune::Functions::RotateTuple< T ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Rotate type list by one, such that last entry is moved to first position. <a href=\"a01395.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+</table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"typedef-members\" name=\"typedef-members\"></a>\n+Typedefs</h2></td></tr>\n+<tr class=\"memitem:ga047a2180b455bfa030fba76eb6270952\"><td class=\"memTemplParams\" colspan=\"2\">template<template< class... > class T, class ArgTuple > </td></tr>\n+<tr class=\"memitem:ga047a2180b455bfa030fba76eb6270952\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00215.html#ga047a2180b455bfa030fba76eb6270952\">Dune::Functions::ExpandTuple</a> = typename Imp::ExpandTupleHelper< T, ArgTuple >::Type</td></tr>\n+<tr class=\"memdesc:ga047a2180b455bfa030fba76eb6270952\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Expand tuple arguments as template arguments. <a href=\"a00215.html#ga047a2180b455bfa030fba76eb6270952\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga047a2180b455bfa030fba76eb6270952\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga1ce77345fbee606e5ac22aeef7d109d6\"><td class=\"memTemplParams\" colspan=\"2\">template<template< class... > class F, class... Tuples> </td></tr>\n+<tr class=\"memitem:ga1ce77345fbee606e5ac22aeef7d109d6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00215.html#ga1ce77345fbee606e5ac22aeef7d109d6\">Dune::Functions::TransformTuple</a> = typename Imp::TransformTupleHelper< F, Tuples... >::Type</td></tr>\n+<tr class=\"memdesc:ga1ce77345fbee606e5ac22aeef7d109d6\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Transform tuple types argument using type-functor. <a href=\"a00215.html#ga1ce77345fbee606e5ac22aeef7d109d6\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga1ce77345fbee606e5ac22aeef7d109d6\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ad7adaea3a8e209aef72602f07a6988b3\"><td class=\"memTemplParams\" colspan=\"2\">template<class IntegerSequence > </td></tr>\n+<tr class=\"memitem:ad7adaea3a8e209aef72602f07a6988b3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#ad7adaea3a8e209aef72602f07a6988b3\">Dune::Functions::IntegerSequenceTuple</a> = typename Imp::IntegerSequenceTupleHelper< IntegerSequence >::Type</td></tr>\n+<tr class=\"memdesc:ad7adaea3a8e209aef72602f07a6988b3\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Transform integer_sequence<I,k...> to tuple<integral_constant<I,k>...> <a href=\"a00219.html#ad7adaea3a8e209aef72602f07a6988b3\">More...</a><br /></td></tr>\n+<tr class=\"separator:ad7adaea3a8e209aef72602f07a6988b3\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+</table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n Functions</h2></td></tr>\n-<tr class=\"memitem:ga2226fe3a86eb176df27c9801a98a10ae\"><td class=\"memTemplParams\" colspan=\"2\">template<class C , class I , class F , typename std::enable_if< Dune::models< Imp::Concept::HasDynamicIndexAccess< I >, C >(), int >::type = 0> </td></tr>\n-<tr class=\"memitem:ga2226fe3a86eb176df27c9801a98a10ae\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00215.html#ga2226fe3a86eb176df27c9801a98a10ae\">Dune::Functions::hybridIndexAccess</a> (C &&c, const I &i, F &&f) -> decltype(f(c[i]))</td></tr>\n-<tr class=\"memdesc:ga2226fe3a86eb176df27c9801a98a10ae\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Provide operator[] index-access for containers. <a href=\"a00215.html#ga2226fe3a86eb176df27c9801a98a10ae\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga2226fe3a86eb176df27c9801a98a10ae\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:ga2226fe3a86eb176df27c9801a98a10ae\"><td class=\"memTemplParams\" colspan=\"2\">template<class C , class I , class F , typename std::enable_if< not Dune::models< Imp::Concept::HasDynamicIndexAccess< I >, C >(), int >::type = 0> </td></tr>\n-<tr class=\"memitem:ga2226fe3a86eb176df27c9801a98a10ae\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">decltype(auto) </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#ga2226fe3a86eb176df27c9801a98a10ae\">Dune::Functions::hybridIndexAccess</a> (C &&c, const I &i, F &&f)</td></tr>\n-<tr class=\"memdesc:ga2226fe3a86eb176df27c9801a98a10ae\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Provide operator[] index-access for containers. <a href=\"a00219.html#ga2226fe3a86eb176df27c9801a98a10ae\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga2226fe3a86eb176df27c9801a98a10ae\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:gabd5106817636cc5542dc4e9a1817551b\"><td class=\"memTemplParams\" colspan=\"2\">template<class Result , class C , class MultiIndex > </td></tr>\n-<tr class=\"memitem:gabd5106817636cc5542dc4e9a1817551b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Result </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00215.html#gabd5106817636cc5542dc4e9a1817551b\">Dune::Functions::hybridMultiIndexAccess</a> (C &&c, const MultiIndex &index)</td></tr>\n-<tr class=\"memdesc:gabd5106817636cc5542dc4e9a1817551b\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Provide multi-index access by chaining operator[]. <a href=\"a00215.html#gabd5106817636cc5542dc4e9a1817551b\">More...</a><br /></td></tr>\n-<tr class=\"separator:gabd5106817636cc5542dc4e9a1817551b\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:ga9aaec884c080483fea267d1098f81590\"><td class=\"memTemplParams\" colspan=\"2\">template<class C , class MultiIndex , class IsFinal > </td></tr>\n-<tr class=\"memitem:ga9aaec884c080483fea267d1098f81590\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">constexpr decltype(auto) </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00215.html#ga9aaec884c080483fea267d1098f81590\">Dune::Functions::resolveDynamicMultiIndex</a> (C &&c, const MultiIndex &multiIndex, const IsFinal &isFinal)</td></tr>\n-<tr class=\"memdesc:ga9aaec884c080483fea267d1098f81590\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Provide multi-index access by chaining operator[]. <a href=\"a00215.html#ga9aaec884c080483fea267d1098f81590\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga9aaec884c080483fea267d1098f81590\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:ga89fbdd009241b14e86b4fff7ba208a04\"><td class=\"memTemplParams\" colspan=\"2\">template<class C , class MultiIndex > </td></tr>\n-<tr class=\"memitem:ga89fbdd009241b14e86b4fff7ba208a04\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">constexpr decltype(auto) </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00215.html#ga89fbdd009241b14e86b4fff7ba208a04\">Dune::Functions::resolveDynamicMultiIndex</a> (C &&c, const MultiIndex &multiIndex)</td></tr>\n-<tr class=\"memdesc:ga89fbdd009241b14e86b4fff7ba208a04\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Provide multi-index access by chaining operator[]. <a href=\"a00215.html#ga89fbdd009241b14e86b4fff7ba208a04\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga89fbdd009241b14e86b4fff7ba208a04\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:ga4cc6af2842348271c242c048e0411637\"><td class=\"memTemplParams\" colspan=\"2\">template<class C , class MultiIndex > </td></tr>\n-<tr class=\"memitem:ga4cc6af2842348271c242c048e0411637\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">constexpr decltype(auto) </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00215.html#ga4cc6af2842348271c242c048e0411637\">Dune::Functions::resolveStaticMultiIndex</a> (C &&c, const MultiIndex &multiIndex)</td></tr>\n-<tr class=\"memdesc:ga4cc6af2842348271c242c048e0411637\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Provide multi-index access by chaining operator[]. <a href=\"a00215.html#ga4cc6af2842348271c242c048e0411637\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga4cc6af2842348271c242c048e0411637\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a84f8a9700ef8b12973e210ee4674c2b7\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class size_type , size_type firstValue, class... Args> </td></tr>\n+<tr class=\"memitem:a84f8a9700ef8b12973e210ee4674c2b7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a84f8a9700ef8b12973e210ee4674c2b7\">Dune::Functions::forwardAsStaticInteger</a> (std::integer_sequence< size_type, firstValue > values, const size_type &i, F &&f, Args &&... args) -> decltype(f(std::integral_constant< size_type, firstValue >(), std::forward< Args >(args)...))</td></tr>\n+<tr class=\"separator:a84f8a9700ef8b12973e210ee4674c2b7\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a4e975086fb37cbf3e33cc42a2b4ef1e2\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class size_type , size_type firstValue, size_type secondValue, size_type... otherValues, class... Args> </td></tr>\n+<tr class=\"memitem:a4e975086fb37cbf3e33cc42a2b4ef1e2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a4e975086fb37cbf3e33cc42a2b4ef1e2\">Dune::Functions::forwardAsStaticInteger</a> (std::integer_sequence< size_type, firstValue, secondValue, otherValues... > values, const size_type i, F &&f, Args &&... args) -> decltype(f(std::integral_constant< size_type, firstValue >(), std::forward< Args >(args)...))</td></tr>\n+<tr class=\"separator:a4e975086fb37cbf3e33cc42a2b4ef1e2\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:gac7d45de6c68fce943e6924403389d234\"><td class=\"memTemplParams\" colspan=\"2\">template<std::size_t end, class F , class size_type , class... Args> </td></tr>\n+<tr class=\"memitem:gac7d45de6c68fce943e6924403389d234\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00215.html#gac7d45de6c68fce943e6924403389d234\">Dune::Functions::forwardAsStaticIndex</a> (const size_type &i, F &&f, Args &&... args) -> decltype(f(Dune::Indices::_0, std::forward< Args >(args)...))</td></tr>\n+<tr class=\"memdesc:gac7d45de6c68fce943e6924403389d234\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Transform dynamic index to static index_constant. <a href=\"a00215.html#gac7d45de6c68fce943e6924403389d234\">More...</a><br /></td></tr>\n+<tr class=\"separator:gac7d45de6c68fce943e6924403389d234\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga4e5fbe8e1330cdfab9eddd5962682b4c\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class... T> </td></tr>\n+<tr class=\"memitem:ga4e5fbe8e1330cdfab9eddd5962682b4c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00215.html#ga4e5fbe8e1330cdfab9eddd5962682b4c\">Dune::Functions::transformTuple</a> (F &&f, const std::tuple< T... > &tuple) -> decltype(Imp::transformTupleHelper(std::forward< F >(f), tuple, std::index_sequence_for< T... >{}))</td></tr>\n+<tr class=\"memdesc:ga4e5fbe8e1330cdfab9eddd5962682b4c\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Transform tuple value using a functor. <a href=\"a00215.html#ga4e5fbe8e1330cdfab9eddd5962682b4c\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga4e5fbe8e1330cdfab9eddd5962682b4c\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:gae663a5bfd683c8a0844bb974807d8f52\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class... T1, class... T2> </td></tr>\n+<tr class=\"memitem:gae663a5bfd683c8a0844bb974807d8f52\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00215.html#gae663a5bfd683c8a0844bb974807d8f52\">Dune::Functions::transformTuple</a> (F &&f, const std::tuple< T1... > &tuple1, const std::tuple< T2... > &tuple2) -> decltype(Imp::transformTupleHelper(std::forward< F >(f), tuple1, tuple2, std::index_sequence_for< T1... >{}))</td></tr>\n+<tr class=\"memdesc:gae663a5bfd683c8a0844bb974807d8f52\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Transform tuple value using a binary functor. <a href=\"a00215.html#gae663a5bfd683c8a0844bb974807d8f52\">More...</a><br /></td></tr>\n+<tr class=\"separator:gae663a5bfd683c8a0844bb974807d8f52\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga7d55c56e78792c4b169c18d875a60935\"><td class=\"memTemplParams\" colspan=\"2\">template<class Expression > </td></tr>\n+<tr class=\"memitem:ga7d55c56e78792c4b169c18d875a60935\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00215.html#ga7d55c56e78792c4b169c18d875a60935\">Dune::Functions::callableCheck</a> (Expression f)</td></tr>\n+<tr class=\"memdesc:ga7d55c56e78792c4b169c18d875a60935\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a predicate for checking validity of expressions. <a href=\"a00215.html#ga7d55c56e78792c4b169c18d875a60935\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga7d55c56e78792c4b169c18d875a60935\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:gaed02f0c6f78e0d71e09d9bc6a29347c4\"><td class=\"memTemplParams\" colspan=\"2\">template<class Check > </td></tr>\n+<tr class=\"memitem:gaed02f0c6f78e0d71e09d9bc6a29347c4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00215.html#gaed02f0c6f78e0d71e09d9bc6a29347c4\">Dune::Functions::negatePredicate</a> (Check check)</td></tr>\n+<tr class=\"memdesc:gaed02f0c6f78e0d71e09d9bc6a29347c4\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Negate given predicate. <a href=\"a00215.html#gaed02f0c6f78e0d71e09d9bc6a29347c4\">More...</a><br /></td></tr>\n+<tr class=\"separator:gaed02f0c6f78e0d71e09d9bc6a29347c4\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a6bb3a351c2ab1b4eb46d4ba1ec3d95a0\"><td class=\"memTemplParams\" colspan=\"2\">template<class T > </td></tr>\n+<tr class=\"memitem:a6bb3a351c2ab1b4eb46d4ba1ec3d95a0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a6bb3a351c2ab1b4eb46d4ba1ec3d95a0\">Dune::Functions::forwardCapture</a> (T &&t)</td></tr>\n+<tr class=\"memdesc:a6bb3a351c2ab1b4eb46d4ba1ec3d95a0\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a capture object for perfect forwarding. <a href=\"a00219.html#a6bb3a351c2ab1b4eb46d4ba1ec3d95a0\">More...</a><br /></td></tr>\n+<tr class=\"separator:a6bb3a351c2ab1b4eb46d4ba1ec3d95a0\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,63 +5,94 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * common\n-Namespaces | Functions\n-indexaccess.hh File Reference\n+Classes | Namespaces | Typedefs | Functions\n+utility.hh File Reference\n #include <utility>\n #include <type_traits>\n-#include <dune/common/typetraits.hh>\n-#include <dune/common/concept.hh>\n-#include <dune/common/hybridutilities.hh>\n-#include <dune/functions/common/utility.hh>\n+#include <dune/common/overloadset.hh>\n+#include <dune/common/indices.hh>\n+#include <dune/functions/common/functionconcepts.hh>\n Go_to_the_source_code_of_this_file.\n+ Classes\n+struct \u00a0Dune::Functions::LastType<_T_>\n+\u00a0 Get last entry of type list. More...\n+\u00a0\n+struct \u00a0Dune::Functions::RotateTuple<_T_>\n+\u00a0 Rotate type list by one, such that last entry is moved to first\n+ position. More...\n+\u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n+ Typedefs\n+template<template< class... > class T, class ArgTuple >\n+using\u00a0Dune::Functions::ExpandTuple = typename Imp::ExpandTupleHelper< T,\n+ ArgTuple >::Type\n+\u00a0 Expand tuple arguments as template arguments. More...\n+\u00a0\n+template<template< class... > class F, class... Tuples>\n+using\u00a0Dune::Functions::TransformTuple = typename Imp::TransformTupleHelper< F,\n+ Tuples... >::Type\n+\u00a0 Transform tuple types argument using type-functor. More...\n+\u00a0\n+template<class IntegerSequence >\n+using\u00a0Dune::Functions::IntegerSequenceTuple = typename Imp::\n+ IntegerSequenceTupleHelper< IntegerSequence >::Type\n+\u00a0 Transform integer_sequence<I,k...> to tuple<integral_constant<I,k>...>\n+ More...\n+\u00a0\n Functions\n-template<class C , class I , class F , typename std::enable_if< Dune::models<\n-Imp::Concept::HasDynamicIndexAccess< I >, C >(), int >::type = 0>\n- auto\u00a0Dune::Functions::hybridIndexAccess (C &&c, const I\n- &i, F &&f) -> decltype(f(c[i]))\n-\u00a0 Provide operator[] index-access for containers.\n- More...\n-\u00a0\n-template<class C , class I , class F , typename std::enable_if< not Dune::\n-models< Imp::Concept::HasDynamicIndexAccess< I >, C >(), int >::type = 0>\n- decltype(auto)\u00a0Dune::Functions::hybridIndexAccess (C &&c, const I\n- &i, F &&f)\n-\u00a0 Provide operator[] index-access for containers.\n- More...\n-\u00a0\n-template<class Result , class C , class MultiIndex >\n- Result\u00a0Dune::Functions::hybridMultiIndexAccess (C &&c, const\n- MultiIndex &index)\n-\u00a0 Provide multi-index access by chaining operator[].\n- More...\n-\u00a0\n-template<class C , class MultiIndex , class IsFinal >\n-constexpr decltype(auto)\u00a0Dune::Functions::resolveDynamicMultiIndex (C &&c,\n- const MultiIndex &multiIndex, const IsFinal &isFinal)\n-\u00a0 Provide multi-index access by chaining operator[].\n- More...\n-\u00a0\n-template<class C , class MultiIndex >\n-constexpr decltype(auto)\u00a0Dune::Functions::resolveDynamicMultiIndex (C &&c,\n- const MultiIndex &multiIndex)\n-\u00a0 Provide multi-index access by chaining operator[].\n- More...\n-\u00a0\n-template<class C , class MultiIndex >\n-constexpr decltype(auto)\u00a0Dune::Functions::resolveStaticMultiIndex (C &&c,\n- const MultiIndex &multiIndex)\n-\u00a0 Provide multi-index access by chaining operator[].\n- More...\n+template<class F , class size_type , size_type firstValue, class... Args>\n+auto\u00a0Dune::Functions::forwardAsStaticInteger (std::integer_sequence<\n+ size_type, firstValue > values, const size_type &i, F &&f, Args &&...\n+ args) -> decltype(f(std::integral_constant< size_type, firstValue >(),\n+ std::forward< Args >(args)...))\n+\u00a0\n+template<class F , class size_type , size_type firstValue, size_type\n+secondValue, size_type... otherValues, class... Args>\n+auto\u00a0Dune::Functions::forwardAsStaticInteger (std::integer_sequence<\n+ size_type, firstValue, secondValue, otherValues... > values, const\n+ size_type i, F &&f, Args &&... args) -> decltype(f(std::\n+ integral_constant< size_type, firstValue >(), std::forward< Args >\n+ (args)...))\n+\u00a0\n+template<std::size_t end, class F , class size_type , class... Args>\n+auto\u00a0Dune::Functions::forwardAsStaticIndex (const size_type &i, F &&f, Args\n+ &&... args) -> decltype(f(Dune::Indices::_0, std::forward< Args >\n+ (args)...))\n+\u00a0 Transform dynamic index to static index_constant. More...\n+\u00a0\n+template<class F , class... T>\n+auto\u00a0Dune::Functions::transformTuple (F &&f, const std::tuple< T... > &tuple)\n+ -> decltype(Imp::transformTupleHelper(std::forward< F >(f), tuple, std::\n+ index_sequence_for< T... >{}))\n+\u00a0 Transform tuple value using a functor. More...\n+\u00a0\n+template<class F , class... T1, class... T2>\n+auto\u00a0Dune::Functions::transformTuple (F &&f, const std::tuple< T1... >\n+ &tuple1, const std::tuple< T2... > &tuple2) -> decltype(Imp::\n+ transformTupleHelper(std::forward< F >(f), tuple1, tuple2, std::\n+ index_sequence_for< T1... >{}))\n+\u00a0 Transform tuple value using a binary functor. More...\n+\u00a0\n+template<class Expression >\n+auto\u00a0Dune::Functions::callableCheck (Expression f)\n+\u00a0 Create a predicate for checking validity of expressions. More...\n+\u00a0\n+template<class Check >\n+auto\u00a0Dune::Functions::negatePredicate (Check check)\n+\u00a0 Negate given predicate. More...\n+\u00a0\n+template<class T >\n+auto\u00a0Dune::Functions::forwardCapture (T &&t)\n+\u00a0 Create a capture object for perfect forwarding. More...\n \u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00041_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00041_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: indexaccess.hh Source File</title>\n+<title>dune-functions: utility.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,313 +62,284 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">indexaccess.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">utility.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00041.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_UTILITY_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_UTILITY_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n <div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span> </div>\n <div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <utility></span></div>\n <div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <type_traits></span></div>\n <div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/typetraits.hh></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/common/concept.hh></span></div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <dune/common/hybridutilities.hh></span></div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00050.html\">dune/functions/common/utility.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/overloadset.hh></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/common/indices.hh></span></div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00020.html\">dune/functions/common/functionconcepts.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"keyword\">namespace </span>Functions {</div>\n <div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span> </div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> </div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"keyword\">namespace </span>Imp {</div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span> </div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"keyword\">namespace </span>Concept {</div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> </div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> <span class=\"keywordtype\">size_t</span>ype></div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span><span class=\"keyword\">struct </span>HasDynamicIndexAccess</div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span>{</div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C></div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> <span class=\"keyword\">auto</span> require(C&& c) -> <span class=\"keyword\">decltype</span>(</div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> c[std::declval<size_type>()]</div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> );</div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span>};</div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> </div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span><span class=\"keyword\">struct </span>HasStaticIndexAccess</div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span>{</div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C></div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> <span class=\"keyword\">auto</span> require(C&& c) -> <span class=\"keyword\">decltype</span>(</div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> c[Dune::Indices::_0]</div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> );</div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span>};</div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> </div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span>} <span class=\"comment\">// namespace Concept</span></div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> </div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span>} <span class=\"comment\">// namespace Imp</span></div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> </div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> </div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>C, <span class=\"keyword\">class </span>I, <span class=\"keyword\">class </span>F,</div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> <span class=\"keyword\">typename</span> std::enable_if< Dune::models<Imp::Concept::HasDynamicIndexAccess<I>, C>(), <span class=\"keywordtype\">int</span>>::type = 0></div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00215.html#ga2226fe3a86eb176df27c9801a98a10ae\"> 63</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00215.html#ga2226fe3a86eb176df27c9801a98a10ae\">hybridIndexAccess</a>(C&& c, <span class=\"keyword\">const</span> I& i, F&& f)</div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> -> <span class=\"keyword\">decltype</span>(f(c[i]))</div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span>{</div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> <span class=\"keywordflow\">return</span> f(c[i]);</div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span>}</div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> </div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>C, <span class=\"keyword\">class </span>I, <span class=\"keyword\">class </span>F,</div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> <span class=\"keyword\">typename</span> std::enable_if< not Dune::models<Imp::Concept::HasDynamicIndexAccess<I>, C>(), <span class=\"keywordtype\">int</span>>::type = 0></div>\n-<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#ga2226fe3a86eb176df27c9801a98a10ae\"> 88</a></span><span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <a class=\"code hl_function\" href=\"a00215.html#ga2226fe3a86eb176df27c9801a98a10ae\">hybridIndexAccess</a>(C&& c, <span class=\"keyword\">const</span> I& i, F&& f)</div>\n-<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span>{</div>\n-<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> <span class=\"keyword\">using </span>Size = <span class=\"keyword\">decltype</span>(Hybrid::size(c));</div>\n-<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> <span class=\"keywordflow\">return</span> Hybrid::switchCases(std::make_index_sequence<Size::value>(), i,</div>\n-<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> [&](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& ii) -> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>){</div>\n-<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> <span class=\"keywordflow\">return</span> f(c[ii]);</div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> }, [&]() -> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>){</div>\n-<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> <span class=\"keywordflow\">return</span> f(c[Dune::Indices::_0]);</div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> });</div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span>}</div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> </div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>F, <span class=\"keyword\">class </span>size_type, size_type firstValue, <span class=\"keyword\">class</span>... Args></div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a84f8a9700ef8b12973e210ee4674c2b7\"> 21</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00219.html#a84f8a9700ef8b12973e210ee4674c2b7\">forwardAsStaticInteger</a>(std::integer_sequence<size_type, firstValue> values, <span class=\"keyword\">const</span> size_type& i, F&& f, Args&&... args)</div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> ->decltype(f(std::integral_constant<size_type, firstValue>(), std::forward<Args>(args)...))</div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span>{</div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> <span class=\"keywordflow\">return</span> f(std::integral_constant<size_type, firstValue>(), std::forward<Args>(args)...);</div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span>}</div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> </div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>F, <span class=\"keyword\">class </span>size_type, size_type firstValue, size_type secondValue, size_type... otherValues, <span class=\"keyword\">class</span>... Args></div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a4e975086fb37cbf3e33cc42a2b4ef1e2\"> 28</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00219.html#a84f8a9700ef8b12973e210ee4674c2b7\">forwardAsStaticInteger</a>(std::integer_sequence<size_type, firstValue, secondValue, otherValues...> values, <span class=\"keyword\">const</span> size_type i, F&& f, Args&&... args)</div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span> ->decltype(f(std::integral_constant<size_type, firstValue>(), std::forward<Args>(args)...))</div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span>{</div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> <span class=\"keywordflow\">if</span> (i==firstValue)</div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> <span class=\"keywordflow\">return</span> f(std::integral_constant<size_type, firstValue>(), std::forward<Args>(args)...);</div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00219.html#a84f8a9700ef8b12973e210ee4674c2b7\">forwardAsStaticInteger</a>(std::integer_sequence<size_type, secondValue, otherValues...>(), i, std::forward<F>(f), std::forward<Args>(args)...);</div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span>}</div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> </div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> </div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> </div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span><span class=\"keyword\">template</span><std::size_t end, <span class=\"keyword\">class </span>F, <span class=\"keyword\">class </span>size_type, <span class=\"keyword\">class</span>... Args></div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00215.html#gac7d45de6c68fce943e6924403389d234\"> 60</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00215.html#gac7d45de6c68fce943e6924403389d234\">forwardAsStaticIndex</a>(<span class=\"keyword\">const</span> size_type& i, F&& f, Args&&... args)</div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> ->decltype(f(Dune::Indices::_0, std::forward<Args>(args)...))</div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span>{</div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00219.html#a84f8a9700ef8b12973e210ee4674c2b7\">forwardAsStaticInteger</a>(std::make_index_sequence<end>{}, i, std::forward<F>(f), std::forward<Args>(args)...);</div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span>}</div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> </div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> </div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> </div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span><span class=\"keyword\">namespace </span>Imp {</div>\n+<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> </div>\n+<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> <span class=\"keyword\">template</span><<span class=\"keyword\">template</span><<span class=\"keyword\">class</span>...> <span class=\"keyword\">class </span>T, <span class=\"keyword\">class </span>List></div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> <span class=\"keyword\">struct </span>ExpandTupleHelper</div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> {};</div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> </div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> <span class=\"keyword\">template</span><<span class=\"keyword\">template</span><<span class=\"keyword\">class</span>...> <span class=\"keyword\">class </span>T, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>...> <span class=\"keyword\">class </span>ListType, <span class=\"keyword\">class</span>... Args></div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> <span class=\"keyword\">struct </span>ExpandTupleHelper<T, ListType<Args...>></div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> {</div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> <span class=\"keyword\">using </span>Type = T<Args...>;</div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> };</div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> </div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span>} <span class=\"comment\">// end namespace Imp</span></div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> </div>\n+<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span><span class=\"keyword\">template</span><<span class=\"keyword\">template</span><<span class=\"keyword\">class</span>...> <span class=\"keyword\">class </span>T, <span class=\"keyword\">class </span>ArgTuple></div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00215.html#ga047a2180b455bfa030fba76eb6270952\"> 94</a></span><span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a00215.html#ga047a2180b455bfa030fba76eb6270952\">ExpandTuple</a> = <span class=\"keyword\">typename</span> Imp::ExpandTupleHelper<T, ArgTuple>::Type;</div>\n+<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> </div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> </div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> </div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span><span class=\"keyword\">namespace </span>Imp {</div>\n <div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> </div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span><span class=\"keyword\">namespace </span>Imp {</div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> </div>\n-<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Index, std::<span class=\"keywordtype\">size_t</span> offset=1></div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> <span class=\"keyword\">class </span>ShiftedDynamicMultiIndex</div>\n-<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> {</div>\n-<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> <span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> ShiftedDynamicMultiIndex(<span class=\"keyword\">const</span> Index& index) :</div>\n-<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> index_(index)</div>\n-<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> {}</div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> </div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> std::size_t operator[](std::size_t position)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> <span class=\"keywordflow\">if</span> (position<size())</div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> <span class=\"keywordflow\">return</span> index_[position+offset];</div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> <span class=\"keywordflow\">else</span></div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> <span class=\"keywordflow\">return</span> 0;</div>\n-<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> }</div>\n-<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> </div>\n-<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> ShiftedDynamicMultiIndex<Index, offset+1> pop()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> <span class=\"keywordflow\">return</span> {index_};</div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> }</div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> </div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> std::size_t size()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> <span class=\"keywordflow\">if</span> (offset < index_.size())</div>\n-<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> <span class=\"keywordflow\">return</span> index_.size() - offset;</div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> <span class=\"keywordflow\">else</span></div>\n-<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> <span class=\"keywordflow\">return</span> 0;</div>\n-<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> }</div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> </div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> <span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> <span class=\"keyword\">const</span> Index& index_;</div>\n-<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> };</div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> <span class=\"keyword\">template</span><<span class=\"keyword\">template</span><<span class=\"keyword\">class</span>...> <span class=\"keyword\">class </span>T, <span class=\"keyword\">class</span>... Tuple></div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> <span class=\"keyword\">struct </span>TransformTupleHelper</div>\n+<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> {};</div>\n+<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> </div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> <span class=\"keyword\">template</span><<span class=\"keyword\">template</span><<span class=\"keyword\">class</span>...> <span class=\"keyword\">class </span>T, <span class=\"keyword\">class</span>... Args1></div>\n+<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> <span class=\"keyword\">struct </span>TransformTupleHelper<T, typename std::tuple<Args1...>></div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> {</div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> <span class=\"keyword\">using </span>Type = std::tuple<T<Args1>...>;</div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> };</div>\n+<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> </div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> <span class=\"keyword\">template</span><<span class=\"keyword\">template</span><<span class=\"keyword\">class</span>...> <span class=\"keyword\">class </span>T, <span class=\"keyword\">class</span>... Args1, <span class=\"keyword\">class</span>... Args2></div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> <span class=\"keyword\">struct </span>TransformTupleHelper<T, typename std::tuple<Args1...>, typename std::tuple<Args2...>></div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> {</div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> <span class=\"keyword\">using </span>Type = std::tuple<T<Args1, Args2>...>;</div>\n+<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> };</div>\n+<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> </div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span>} <span class=\"comment\">// end namespace Imp</span></div>\n+<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> </div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span><span class=\"keyword\">template</span><<span class=\"keyword\">template</span><<span class=\"keyword\">class</span>...> <span class=\"keyword\">class </span>F, <span class=\"keyword\">class</span>... Tuples></div>\n+<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00215.html#ga1ce77345fbee606e5ac22aeef7d109d6\"> 131</a></span><span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a00215.html#ga1ce77345fbee606e5ac22aeef7d109d6\">TransformTuple</a> = <span class=\"keyword\">typename</span> Imp::TransformTupleHelper<F, Tuples...>::Type;</div>\n+<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> </div>\n+<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> </div>\n+<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> </div>\n+<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span><span class=\"keyword\">namespace </span>Imp {</div>\n+<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> </div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>F, <span class=\"keyword\">class</span>... T, std::size_t... k></div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> <span class=\"keyword\">auto</span> transformTupleHelper(F&& f, <span class=\"keyword\">const</span> std::tuple<T...>& tuple, std::index_sequence<k...>)</div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> -> <span class=\"keyword\">decltype</span>(std::make_tuple(f(std::get<k>(tuple))...))</div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> {</div>\n+<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> <span class=\"keywordflow\">return</span> std::make_tuple(f(std::get<k>(tuple))...);</div>\n+<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> }</div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> </div>\n+<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>F, <span class=\"keyword\">class</span>... T1, <span class=\"keyword\">class</span>...T2, std::size_t... k></div>\n+<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> <span class=\"keyword\">auto</span> transformTupleHelper(F&& f, <span class=\"keyword\">const</span> std::tuple<T1...>& tuple1, <span class=\"keyword\">const</span> std::tuple<T2...>& tuple2, std::index_sequence<k...>)</div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> -> <span class=\"keyword\">decltype</span>(std::make_tuple(f(std::get<k>(tuple1), std::get<k>(tuple2))...))</div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> {</div>\n+<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> <span class=\"keywordflow\">return</span> std::make_tuple(f(std::get<k>(tuple1), std::get<k>(tuple2))...);</div>\n+<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> }</div>\n <div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> </div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Index, std::<span class=\"keywordtype\">size_t</span> offset=1></div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> <span class=\"keyword\">class </span>ShiftedStaticMultiIndex</div>\n-<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> {</div>\n-<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> <span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> ShiftedStaticMultiIndex(<span class=\"keyword\">const</span> Index& index) :</div>\n-<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> index_(index)</div>\n-<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> {}</div>\n-<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> </div>\n-<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> <span class=\"keyword\">template</span><std::<span class=\"keywordtype\">size_t</span> i></div>\n-<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> <span class=\"keyword\">auto</span> operator[](Dune::index_constant<i>)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> (i<size()) {</div>\n-<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> <span class=\"keywordflow\">return</span> index_[Dune::index_constant<i+offset>{}];</div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> } <span class=\"keywordflow\">else</span> {</div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> <span class=\"keywordflow\">return</span> Dune::index_constant<0>{};</div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> }</div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> }</div>\n-<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> </div>\n-<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> ShiftedStaticMultiIndex<Index, offset+1> pop()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> <span class=\"keywordflow\">return</span> {index_};</div>\n-<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> }</div>\n-<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> </div>\n-<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> std::size_t size()</div>\n-<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> {</div>\n-<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> <span class=\"keyword\">auto</span> fullSize = <span class=\"keyword\">decltype</span>(Hybrid::size(std::declval<Index>()))::value;</div>\n-<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> <span class=\"keywordflow\">if</span> (offset < fullSize)</div>\n-<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> <span class=\"keywordflow\">return</span> fullSize - offset;</div>\n-<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> <span class=\"keywordflow\">else</span></div>\n-<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span> <span class=\"keywordflow\">return</span> 0;</div>\n-<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span> }</div>\n-<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> </div>\n-<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> <span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> <span class=\"keyword\">const</span> Index& index_;</div>\n-<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> };</div>\n-<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> </div>\n-<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> <span class=\"keyword\">template</span><std::<span class=\"keywordtype\">size_t</span> offset, <span class=\"keyword\">class</span> Index></div>\n-<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> ShiftedDynamicMultiIndex<Index, offset> shiftedDynamicMultiIndex(<span class=\"keyword\">const</span> Index& index)</div>\n-<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> {</div>\n-<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> <span class=\"keywordflow\">return</span> {index};</div>\n-<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> }</div>\n-<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> </div>\n-<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> <span class=\"keyword\">template</span><std::<span class=\"keywordtype\">size_t</span> offset, <span class=\"keyword\">class</span> Index></div>\n-<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> ShiftedStaticMultiIndex<Index, offset> shiftedStaticMultiIndex(<span class=\"keyword\">const</span> Index& index)</div>\n-<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> {</div>\n-<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> <span class=\"keywordflow\">return</span> {index};</div>\n-<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span> }</div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span>} <span class=\"comment\">// end namespace Imp</span></div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> </div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>F, <span class=\"keyword\">class</span>... T></div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00215.html#ga4e5fbe8e1330cdfab9eddd5962682b4c\"> 165</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00215.html#ga4e5fbe8e1330cdfab9eddd5962682b4c\">transformTuple</a>(F&& f, <span class=\"keyword\">const</span> std::tuple<T...>& tuple)</div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> -> <span class=\"keyword\">decltype</span>(Imp::transformTupleHelper(std::forward<F>(f), tuple, std::index_sequence_for<T...>{}))</div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span>{</div>\n+<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> <span class=\"keywordflow\">return</span> Imp::transformTupleHelper(std::forward<F>(f), tuple, std::index_sequence_for<T...>{});</div>\n+<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span>}</div>\n+<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> </div>\n+<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>F, <span class=\"keyword\">class</span>... T1, <span class=\"keyword\">class</span>... T2></div>\n+<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00215.html#gae663a5bfd683c8a0844bb974807d8f52\"> 185</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00215.html#ga4e5fbe8e1330cdfab9eddd5962682b4c\">transformTuple</a>(F&& f, <span class=\"keyword\">const</span> std::tuple<T1...>& tuple1, <span class=\"keyword\">const</span> std::tuple<T2...>& tuple2)</div>\n+<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> -> <span class=\"keyword\">decltype</span>(Imp::transformTupleHelper(std::forward<F>(f), tuple1, tuple2, std::index_sequence_for<T1...>{}))</div>\n+<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span>{</div>\n+<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> <span class=\"keywordflow\">return</span> Imp::transformTupleHelper(std::forward<F>(f), tuple1, tuple2, std::index_sequence_for<T1...>{});</div>\n+<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span>}</div>\n+<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span> </div>\n+<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> </div>\n+<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> </div>\n+<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span><span class=\"keyword\">namespace </span>Imp {</div>\n+<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> </div>\n+<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> IntegerSequence></div>\n+<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> <span class=\"keyword\">struct </span>IntegerSequenceTupleHelper</div>\n+<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> {};</div>\n+<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> </div>\n+<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>I, I... k></div>\n+<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> <span class=\"keyword\">struct </span>IntegerSequenceTupleHelper<std::integer_sequence<I, k...>></div>\n+<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> {</div>\n+<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> <span class=\"keyword\">using </span>Type = std::tuple<std::integral_constant<I, k>...>;</div>\n+<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> };</div>\n+<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> </div>\n+<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span>} <span class=\"comment\">// end namespace Imp</span></div>\n <div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> </div>\n-<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span>} <span class=\"comment\">// namespace Imp</span></div>\n-<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span> </div>\n-<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> </div>\n-<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> </div>\n-<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> </div>\n-<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"> 212</span><span class=\"keyword\">namespace </span>Imp {</div>\n+<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> IntegerSequence></div>\n+<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#ad7adaea3a8e209aef72602f07a6988b3\"> 211</a></span><span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a00219.html#ad7adaea3a8e209aef72602f07a6988b3\">IntegerSequenceTuple</a>= <span class=\"keyword\">typename</span> Imp::IntegerSequenceTupleHelper<IntegerSequence>::Type;</div>\n+<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"> 212</span> </div>\n <div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span> </div>\n-<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Result, <span class=\"keyword\">class</span> Index></div>\n-<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span><span class=\"keyword\">struct </span>MultiIndexResolver</div>\n-<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span>{</div>\n-<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> MultiIndexResolver(<span class=\"keyword\">const</span> Index& index) :</div>\n-<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> index_(index)</div>\n-<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> {}</div>\n-<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span> </div>\n-<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>C,</div>\n-<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span> <span class=\"keyword\">typename</span> std::enable_if<not std::is_convertible<C&, Result>::value, <span class=\"keywordtype\">int</span>>::type = 0></div>\n-<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> Result operator()(C&& c)</div>\n-<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> {</div>\n-<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span> <span class=\"keyword\">auto</span>&& subIndex = Imp::shiftedDynamicMultiIndex<1>(index_);</div>\n-<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> <span class=\"keyword\">auto</span>&& subIndexResolver = MultiIndexResolver<Result, decltype(subIndex)>(subIndex);</div>\n-<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> <span class=\"keywordflow\">return</span> (Result)(<a class=\"code hl_function\" href=\"a00215.html#ga2226fe3a86eb176df27c9801a98a10ae\">hybridIndexAccess</a>(c, index_[Dune::Indices::_0], subIndexResolver));</div>\n-<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> }</div>\n+<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> </div>\n+<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span>... T></div>\n+<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01383.html\"> 221</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01383.html\">LastType</a></div>\n+<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span>{</div>\n+<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01383.html#a45225c5413aac4fc372bc39124b6e4c5\"> 223</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01383.html#a45225c5413aac4fc372bc39124b6e4c5\">type</a> = <span class=\"keyword\">typename</span> std::tuple_element<<span class=\"keyword\">sizeof</span>...(T)-1, std::tuple<T...>><a class=\"code hl_typedef\" href=\"a01383.html#a45225c5413aac4fc372bc39124b6e4c5\">::type</a>;</div>\n+<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span>};</div>\n+<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span> </div>\n+<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> </div>\n+<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> </div>\n+<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span><span class=\"keyword\">namespace </span>Imp {</div>\n <div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> </div>\n-<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>C,</div>\n-<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span> <span class=\"keyword\">typename</span> std::enable_if<std::is_convertible<C&, Result>::value, <span class=\"keywordtype\">int</span>>::type = 0></div>\n-<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> Result operator()(C&& c)</div>\n-<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> {</div>\n-<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> <span class=\"keywordflow\">return</span> (Result)(std::forward<C>(c));</div>\n-<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> }</div>\n-<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span> </div>\n-<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span> <span class=\"keyword\">const</span> Index& index_;</div>\n-<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span>};</div>\n-<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span> </div>\n-<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"> 240</span>} <span class=\"comment\">// namespace Imp</span></div>\n+<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T, <span class=\"keyword\">class</span> I></div>\n+<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span><span class=\"keyword\">struct </span>RotateHelper;</div>\n+<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> </div>\n+<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span>... T, std::size_t... I></div>\n+<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span><span class=\"keyword\">struct </span>RotateHelper<std::tuple<T...>, std::index_sequence<I...> ></div>\n+<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span>{</div>\n+<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span> <span class=\"keyword\">using </span>type = <span class=\"keyword\">typename</span> std::tuple<<span class=\"keyword\">typename</span> <a class=\"code hl_struct\" href=\"a01383.html\">LastType</a><T...>::type, <span class=\"keyword\">typename</span> std::tuple_element<I,std::tuple<T...>>::type...>;</div>\n+<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span>};</div>\n+<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span> </div>\n+<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span>} <span class=\"comment\">// end namespace Imp</span></div>\n+<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"> 240</span> </div>\n <div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span> </div>\n-<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span> </div>\n-<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> </div>\n-<div class=\"line\"><a id=\"l00262\" name=\"l00262\"></a><span class=\"lineno\"> 262</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Result, <span class=\"keyword\">class</span> C, <span class=\"keyword\">class</span> MultiIndex></div>\n-<div class=\"line\"><a id=\"l00263\" name=\"l00263\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00215.html#gabd5106817636cc5542dc4e9a1817551b\"> 263</a></span>Result <a class=\"code hl_function\" href=\"a00215.html#gabd5106817636cc5542dc4e9a1817551b\">hybridMultiIndexAccess</a>(C&& c, <span class=\"keyword\">const</span> MultiIndex& index)</div>\n-<div class=\"line\"><a id=\"l00264\" name=\"l00264\"></a><span class=\"lineno\"> 264</span>{</div>\n-<div class=\"line\"><a id=\"l00265\" name=\"l00265\"></a><span class=\"lineno\"> 265</span> </div>\n-<div class=\"line\"><a id=\"l00266\" name=\"l00266\"></a><span class=\"lineno\"> 266</span> Imp::MultiIndexResolver<Result, MultiIndex> multiIndexResolver(index);</div>\n-<div class=\"line\"><a id=\"l00267\" name=\"l00267\"></a><span class=\"lineno\"> 267</span> <span class=\"keywordflow\">return</span> multiIndexResolver(c);</div>\n-<div class=\"line\"><a id=\"l00268\" name=\"l00268\"></a><span class=\"lineno\"> 268</span>}</div>\n-<div class=\"line\"><a id=\"l00269\" name=\"l00269\"></a><span class=\"lineno\"> 269</span> </div>\n-<div class=\"line\"><a id=\"l00270\" name=\"l00270\"></a><span class=\"lineno\"> 270</span> </div>\n-<div class=\"line\"><a id=\"l00271\" name=\"l00271\"></a><span class=\"lineno\"> 271</span> </div>\n-<div class=\"line\"><a id=\"l00272\" name=\"l00272\"></a><span class=\"lineno\"> 272</span> </div>\n-<div class=\"line\"><a id=\"l00273\" name=\"l00273\"></a><span class=\"lineno\"> 273</span> </div>\n-<div class=\"line\"><a id=\"l00274\" name=\"l00274\"></a><span class=\"lineno\"> 274</span> </div>\n-<div class=\"line\"><a id=\"l00275\" name=\"l00275\"></a><span class=\"lineno\"> 275</span><span class=\"keyword\">namespace </span>Imp {</div>\n-<div class=\"line\"><a id=\"l00276\" name=\"l00276\"></a><span class=\"lineno\"> 276</span> </div>\n-<div class=\"line\"><a id=\"l00277\" name=\"l00277\"></a><span class=\"lineno\"> 277</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C, <span class=\"keyword\">class</span> MultiIndex, <span class=\"keyword\">class</span> IsFinal></div>\n-<div class=\"line\"><a id=\"l00278\" name=\"l00278\"></a><span class=\"lineno\"> 278</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <a class=\"code hl_function\" href=\"a00215.html#ga9aaec884c080483fea267d1098f81590\">resolveDynamicMultiIndex</a>(C&& c, <span class=\"keyword\">const</span> MultiIndex& multiIndex, <span class=\"keyword\">const</span> IsFinal& isFinal)</div>\n-<div class=\"line\"><a id=\"l00279\" name=\"l00279\"></a><span class=\"lineno\"> 279</span> {</div>\n-<div class=\"line\"><a id=\"l00280\" name=\"l00280\"></a><span class=\"lineno\"> 280</span> <span class=\"comment\">// If c is already considered final simply return it,</span></div>\n-<div class=\"line\"><a id=\"l00281\" name=\"l00281\"></a><span class=\"lineno\"> 281</span> <span class=\"comment\">// else resolve the next multiIndex entry.</span></div>\n-<div class=\"line\"><a id=\"l00282\" name=\"l00282\"></a><span class=\"lineno\"> 282</span> <span class=\"keywordflow\">return</span> Hybrid::ifElse(isFinal(c), [&, c = <a class=\"code hl_function\" href=\"a00219.html#a6bb3a351c2ab1b4eb46d4ba1ec3d95a0\">forwardCapture</a>(std::forward<C>(c))](<span class=\"keyword\">auto</span>) -> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) {</div>\n-<div class=\"line\"><a id=\"l00283\" name=\"l00283\"></a><span class=\"lineno\"> 283</span> assert(multiIndex.size() == 0);</div>\n-<div class=\"line\"><a id=\"l00284\" name=\"l00284\"></a><span class=\"lineno\"> 284</span> <span class=\"keywordflow\">return</span> c.forward();</div>\n-<div class=\"line\"><a id=\"l00285\" name=\"l00285\"></a><span class=\"lineno\"> 285</span> }, [&](<span class=\"keyword\">auto</span>) -> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) {</div>\n-<div class=\"line\"><a id=\"l00286\" name=\"l00286\"></a><span class=\"lineno\"> 286</span> <span class=\"keyword\">auto</span> hasDynamicAccess = <a class=\"code hl_function\" href=\"a00215.html#ga7d55c56e78792c4b169c18d875a60935\">callableCheck</a>([](<span class=\"keyword\">auto</span>&& cc) -> std::void_t<<span class=\"keyword\">decltype</span>(cc[0])> {});</div>\n+<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span>... T></div>\n+<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01395.html\"> 250</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01395.html\">RotateTuple</a></div>\n+<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span>{</div>\n+<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01395.html#ad2aec0a7681d5138bc8738f98cb86c1f\"> 252</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01395.html#ad2aec0a7681d5138bc8738f98cb86c1f\">type</a> = <span class=\"keyword\">typename</span> Imp::RotateHelper<std::tuple<T...>, std::make_index_sequence<<span class=\"keyword\">sizeof</span>...(T)-1>><a class=\"code hl_typedef\" href=\"a01395.html#ad2aec0a7681d5138bc8738f98cb86c1f\">::type</a>;</div>\n+<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"> 253</span>};</div>\n+<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"> 254</span> </div>\n+<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span> </div>\n+<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"> 256</span> </div>\n+<div class=\"line\"><a id=\"l00278\" name=\"l00278\"></a><span class=\"lineno\"> 278</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Expression></div>\n+<div class=\"line\"><a id=\"l00279\" name=\"l00279\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00215.html#ga7d55c56e78792c4b169c18d875a60935\"> 279</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00215.html#ga7d55c56e78792c4b169c18d875a60935\">callableCheck</a>(Expression f)</div>\n+<div class=\"line\"><a id=\"l00280\" name=\"l00280\"></a><span class=\"lineno\"> 280</span>{</div>\n+<div class=\"line\"><a id=\"l00281\" name=\"l00281\"></a><span class=\"lineno\"> 281</span> <span class=\"keywordflow\">return</span> [f](<span class=\"keyword\">auto</span>&&... args){</div>\n+<div class=\"line\"><a id=\"l00282\" name=\"l00282\"></a><span class=\"lineno\"> 282</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00215.html#ga2bc5056bab5babdfa8a82409665f5a26\">Functions::Concept::isCallable</a>(f, std::forward<<span class=\"keyword\">decltype</span>(args)>(args)...);</div>\n+<div class=\"line\"><a id=\"l00283\" name=\"l00283\"></a><span class=\"lineno\"> 283</span> };</div>\n+<div class=\"line\"><a id=\"l00284\" name=\"l00284\"></a><span class=\"lineno\"> 284</span>}</div>\n+<div class=\"line\"><a id=\"l00285\" name=\"l00285\"></a><span class=\"lineno\"> 285</span> </div>\n+<div class=\"line\"><a id=\"l00286\" name=\"l00286\"></a><span class=\"lineno\"> 286</span> </div>\n <div class=\"line\"><a id=\"l00287\" name=\"l00287\"></a><span class=\"lineno\"> 287</span> </div>\n-<div class=\"line\"><a id=\"l00288\" name=\"l00288\"></a><span class=\"lineno\"> 288</span> <span class=\"comment\">// Split multiIndex into first entry and remaining ones.</span></div>\n-<div class=\"line\"><a id=\"l00289\" name=\"l00289\"></a><span class=\"lineno\"> 289</span> <span class=\"keyword\">auto</span> i = multiIndex[0];</div>\n-<div class=\"line\"><a id=\"l00290\" name=\"l00290\"></a><span class=\"lineno\"> 290</span> <span class=\"keyword\">auto</span> tail = multiIndex.pop();</div>\n-<div class=\"line\"><a id=\"l00291\" name=\"l00291\"></a><span class=\"lineno\"> 291</span> </div>\n-<div class=\"line\"><a id=\"l00292\" name=\"l00292\"></a><span class=\"lineno\"> 292</span> <span class=\"comment\">// Resolve first multiIndex entry by c[multiIndex[0]] and</span></div>\n-<div class=\"line\"><a id=\"l00293\" name=\"l00293\"></a><span class=\"lineno\"> 293</span> <span class=\"comment\">// continue resolving with the remaining remaining ones.</span></div>\n-<div class=\"line\"><a id=\"l00294\" name=\"l00294\"></a><span class=\"lineno\"> 294</span> <span class=\"comment\">// If c has a dynamic operator[] this is straight forward.</span></div>\n-<div class=\"line\"><a id=\"l00295\" name=\"l00295\"></a><span class=\"lineno\"> 295</span> <span class=\"comment\">// Else the dynamic multiIndex[0] has to be translated into</span></div>\n-<div class=\"line\"><a id=\"l00296\" name=\"l00296\"></a><span class=\"lineno\"> 296</span> <span class=\"comment\">// a static one using hybridIndexAccess.</span></div>\n-<div class=\"line\"><a id=\"l00297\" name=\"l00297\"></a><span class=\"lineno\"> 297</span> <span class=\"keywordflow\">return</span> Hybrid::ifElse(hasDynamicAccess(c), [&](<span class=\"keyword\">auto</span> <span class=\"keywordtype\">id</span>) -> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) {</div>\n-<div class=\"line\"><a id=\"l00298\" name=\"l00298\"></a><span class=\"lineno\"> 298</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00215.html#ga89fbdd009241b14e86b4fff7ba208a04\">Imp::resolveDynamicMultiIndex</a>(<span class=\"keywordtype\">id</span>(c)[i], tail, isFinal);</div>\n-<div class=\"line\"><a id=\"l00299\" name=\"l00299\"></a><span class=\"lineno\"> 299</span> }, [&](<span class=\"keyword\">auto</span> id) -> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) {</div>\n-<div class=\"line\"><a id=\"l00300\" name=\"l00300\"></a><span class=\"lineno\"> 300</span> <span class=\"comment\">// auto indexRange = range(Hybrid::size(id(c)));</span></div>\n-<div class=\"line\"><a id=\"l00301\" name=\"l00301\"></a><span class=\"lineno\"> 301</span> <span class=\"keyword\">auto</span> indexRange = <span class=\"keyword\">typename</span> <span class=\"keyword\">decltype</span>(range(Hybrid::size(<span class=\"keywordtype\">id</span>(c))))::integer_sequence();</div>\n-<div class=\"line\"><a id=\"l00302\" name=\"l00302\"></a><span class=\"lineno\"> 302</span> <span class=\"keywordflow\">return</span> Hybrid::switchCases(indexRange, i, [&](<span class=\"keyword\">auto</span> static_i) -> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>){</div>\n-<div class=\"line\"><a id=\"l00303\" name=\"l00303\"></a><span class=\"lineno\"> 303</span> <span class=\"comment\">// Do rescursion with static version of i</span></div>\n-<div class=\"line\"><a id=\"l00304\" name=\"l00304\"></a><span class=\"lineno\"> 304</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00215.html#ga89fbdd009241b14e86b4fff7ba208a04\">Imp::resolveDynamicMultiIndex</a>(<span class=\"keywordtype\">id</span>(c)[static_i], tail, isFinal);</div>\n-<div class=\"line\"><a id=\"l00305\" name=\"l00305\"></a><span class=\"lineno\"> 305</span> }, [&]() -> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>){</div>\n-<div class=\"line\"><a id=\"l00306\" name=\"l00306\"></a><span class=\"lineno\"> 306</span> <span class=\"comment\">// As fallback we use c[0] this is needed, because there must be one branch that matches.</span></div>\n-<div class=\"line\"><a id=\"l00307\" name=\"l00307\"></a><span class=\"lineno\"> 307</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00215.html#ga89fbdd009241b14e86b4fff7ba208a04\">Imp::resolveDynamicMultiIndex</a>(<span class=\"keywordtype\">id</span>(c)[Dune::Indices::_0], tail, isFinal);</div>\n-<div class=\"line\"><a id=\"l00308\" name=\"l00308\"></a><span class=\"lineno\"> 308</span> });</div>\n-<div class=\"line\"><a id=\"l00309\" name=\"l00309\"></a><span class=\"lineno\"> 309</span> });</div>\n-<div class=\"line\"><a id=\"l00310\" name=\"l00310\"></a><span class=\"lineno\"> 310</span> });</div>\n-<div class=\"line\"><a id=\"l00311\" name=\"l00311\"></a><span class=\"lineno\"> 311</span> }</div>\n-<div class=\"line\"><a id=\"l00312\" name=\"l00312\"></a><span class=\"lineno\"> 312</span> </div>\n-<div class=\"line\"><a id=\"l00313\" name=\"l00313\"></a><span class=\"lineno\"> 313</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C, <span class=\"keyword\">class</span> MultiIndex></div>\n-<div class=\"line\"><a id=\"l00314\" name=\"l00314\"></a><span class=\"lineno\"> 314</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <a class=\"code hl_function\" href=\"a00215.html#ga4cc6af2842348271c242c048e0411637\">resolveStaticMultiIndex</a>(C&& c, <span class=\"keyword\">const</span> MultiIndex& multiIndex)</div>\n-<div class=\"line\"><a id=\"l00315\" name=\"l00315\"></a><span class=\"lineno\"> 315</span> {</div>\n-<div class=\"line\"><a id=\"l00316\" name=\"l00316\"></a><span class=\"lineno\"> 316</span> <span class=\"keyword\">auto</span> isExhausted = Hybrid::equals(Hybrid::size(multiIndex), Dune::Indices::_0);</div>\n-<div class=\"line\"><a id=\"l00317\" name=\"l00317\"></a><span class=\"lineno\"> 317</span> <span class=\"keywordflow\">return</span> Hybrid::ifElse(isExhausted, [&, c = <a class=\"code hl_function\" href=\"a00219.html#a6bb3a351c2ab1b4eb46d4ba1ec3d95a0\">forwardCapture</a>(std::forward<C>(c))](<span class=\"keyword\">auto</span>) -> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) {</div>\n-<div class=\"line\"><a id=\"l00318\" name=\"l00318\"></a><span class=\"lineno\"> 318</span> <span class=\"keywordflow\">return</span> c.forward();</div>\n-<div class=\"line\"><a id=\"l00319\" name=\"l00319\"></a><span class=\"lineno\"> 319</span> }, [&](<span class=\"keyword\">auto</span> id) -> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) {</div>\n-<div class=\"line\"><a id=\"l00320\" name=\"l00320\"></a><span class=\"lineno\"> 320</span> <span class=\"keyword\">auto</span> head = multiIndex[Dune::Indices::_0];</div>\n-<div class=\"line\"><a id=\"l00321\" name=\"l00321\"></a><span class=\"lineno\"> 321</span> <span class=\"keyword\">auto</span> tail = multiIndex.pop();</div>\n+<div class=\"line\"><a id=\"l00303\" name=\"l00303\"></a><span class=\"lineno\"> 303</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Check></div>\n+<div class=\"line\"><a id=\"l00304\" name=\"l00304\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00215.html#gaed02f0c6f78e0d71e09d9bc6a29347c4\"> 304</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00215.html#gaed02f0c6f78e0d71e09d9bc6a29347c4\">negatePredicate</a>(Check check)</div>\n+<div class=\"line\"><a id=\"l00305\" name=\"l00305\"></a><span class=\"lineno\"> 305</span>{</div>\n+<div class=\"line\"><a id=\"l00306\" name=\"l00306\"></a><span class=\"lineno\"> 306</span> <span class=\"keywordflow\">return</span> [check](<span class=\"keyword\">auto</span>&&... args){</div>\n+<div class=\"line\"><a id=\"l00307\" name=\"l00307\"></a><span class=\"lineno\"> 307</span> <span class=\"keyword\">auto</span> negate = overload(</div>\n+<div class=\"line\"><a id=\"l00308\" name=\"l00308\"></a><span class=\"lineno\"> 308</span> [](std::true_type) { <span class=\"keywordflow\">return</span> std::false_type{};},</div>\n+<div class=\"line\"><a id=\"l00309\" name=\"l00309\"></a><span class=\"lineno\"> 309</span> [](std::false_type) { <span class=\"keywordflow\">return</span> std::true_type{};},</div>\n+<div class=\"line\"><a id=\"l00310\" name=\"l00310\"></a><span class=\"lineno\"> 310</span> [](<span class=\"keywordtype\">bool</span> v) { <span class=\"keywordflow\">return</span> not v;});</div>\n+<div class=\"line\"><a id=\"l00311\" name=\"l00311\"></a><span class=\"lineno\"> 311</span> <span class=\"keywordflow\">return</span> negate(check(std::forward<<span class=\"keyword\">decltype</span>(args)>(args)...));</div>\n+<div class=\"line\"><a id=\"l00312\" name=\"l00312\"></a><span class=\"lineno\"> 312</span> };</div>\n+<div class=\"line\"><a id=\"l00313\" name=\"l00313\"></a><span class=\"lineno\"> 313</span>}</div>\n+<div class=\"line\"><a id=\"l00314\" name=\"l00314\"></a><span class=\"lineno\"> 314</span> </div>\n+<div class=\"line\"><a id=\"l00315\" name=\"l00315\"></a><span class=\"lineno\"> 315</span> </div>\n+<div class=\"line\"><a id=\"l00316\" name=\"l00316\"></a><span class=\"lineno\"> 316</span><span class=\"keyword\">namespace </span>Impl {</div>\n+<div class=\"line\"><a id=\"l00317\" name=\"l00317\"></a><span class=\"lineno\"> 317</span> </div>\n+<div class=\"line\"><a id=\"l00318\" name=\"l00318\"></a><span class=\"lineno\"> 318</span> <span class=\"comment\">// Wrapper to capture values in a lambda for perfect forwarding.</span></div>\n+<div class=\"line\"><a id=\"l00319\" name=\"l00319\"></a><span class=\"lineno\"> 319</span> <span class=\"comment\">// This captures value types by value and reference types by reference.</span></div>\n+<div class=\"line\"><a id=\"l00320\" name=\"l00320\"></a><span class=\"lineno\"> 320</span> <span class=\"keyword\">template</span> <<span class=\"keyword\">typename</span> T></div>\n+<div class=\"line\"><a id=\"l00321\" name=\"l00321\"></a><span class=\"lineno\"> 321</span> <span class=\"keyword\">struct </span>ForwardCaptureWrapper;</div>\n <div class=\"line\"><a id=\"l00322\" name=\"l00322\"></a><span class=\"lineno\"> 322</span> </div>\n-<div class=\"line\"><a id=\"l00323\" name=\"l00323\"></a><span class=\"lineno\"> 323</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00215.html#ga4cc6af2842348271c242c048e0411637\">Imp::resolveStaticMultiIndex</a>(<span class=\"keywordtype\">id</span>(c)[head], tail);</div>\n-<div class=\"line\"><a id=\"l00324\" name=\"l00324\"></a><span class=\"lineno\"> 324</span> });</div>\n-<div class=\"line\"><a id=\"l00325\" name=\"l00325\"></a><span class=\"lineno\"> 325</span> }</div>\n-<div class=\"line\"><a id=\"l00326\" name=\"l00326\"></a><span class=\"lineno\"> 326</span> </div>\n-<div class=\"line\"><a id=\"l00327\" name=\"l00327\"></a><span class=\"lineno\"> 327</span>} <span class=\"comment\">// namespace Imp</span></div>\n+<div class=\"line\"><a id=\"l00323\" name=\"l00323\"></a><span class=\"lineno\"> 323</span> <span class=\"keyword\">template</span> <<span class=\"keyword\">typename</span> T></div>\n+<div class=\"line\"><a id=\"l00324\" name=\"l00324\"></a><span class=\"lineno\"> 324</span> <span class=\"keyword\">struct </span>ForwardCaptureWrapper</div>\n+<div class=\"line\"><a id=\"l00325\" name=\"l00325\"></a><span class=\"lineno\"> 325</span> {</div>\n+<div class=\"line\"><a id=\"l00326\" name=\"l00326\"></a><span class=\"lineno\"> 326</span> <span class=\"keyword\">template</span> <<span class=\"keyword\">typename</span> TT></div>\n+<div class=\"line\"><a id=\"l00327\" name=\"l00327\"></a><span class=\"lineno\"> 327</span> ForwardCaptureWrapper(TT&& t) : t_{std::forward<TT>(t)} {}</div>\n <div class=\"line\"><a id=\"l00328\" name=\"l00328\"></a><span class=\"lineno\"> 328</span> </div>\n-<div class=\"line\"><a id=\"l00329\" name=\"l00329\"></a><span class=\"lineno\"> 329</span> </div>\n+<div class=\"line\"><a id=\"l00329\" name=\"l00329\"></a><span class=\"lineno\"> 329</span> <span class=\"keyword\">auto</span> forward()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> std::move(t_); }</div>\n <div class=\"line\"><a id=\"l00330\" name=\"l00330\"></a><span class=\"lineno\"> 330</span> </div>\n-<div class=\"line\"><a id=\"l00353\" name=\"l00353\"></a><span class=\"lineno\"> 353</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C, <span class=\"keyword\">class</span> MultiIndex, <span class=\"keyword\">class</span> IsFinal></div>\n-<div class=\"line\"><a id=\"l00354\" name=\"l00354\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00215.html#ga9aaec884c080483fea267d1098f81590\"> 354</a></span><span class=\"keyword\">constexpr</span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <a class=\"code hl_function\" href=\"a00215.html#ga9aaec884c080483fea267d1098f81590\">resolveDynamicMultiIndex</a>(C&& c, <span class=\"keyword\">const</span> MultiIndex& multiIndex, <span class=\"keyword\">const</span> IsFinal& isFinal)</div>\n-<div class=\"line\"><a id=\"l00355\" name=\"l00355\"></a><span class=\"lineno\"> 355</span>{</div>\n-<div class=\"line\"><a id=\"l00356\" name=\"l00356\"></a><span class=\"lineno\"> 356</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00215.html#ga89fbdd009241b14e86b4fff7ba208a04\">Imp::resolveDynamicMultiIndex</a>(std::forward<C>(c), Imp::shiftedDynamicMultiIndex<0>(multiIndex), isFinal);</div>\n-<div class=\"line\"><a id=\"l00357\" name=\"l00357\"></a><span class=\"lineno\"> 357</span>}</div>\n-<div class=\"line\"><a id=\"l00358\" name=\"l00358\"></a><span class=\"lineno\"> 358</span> </div>\n-<div class=\"line\"><a id=\"l00375\" name=\"l00375\"></a><span class=\"lineno\"> 375</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C, <span class=\"keyword\">class</span> MultiIndex></div>\n-<div class=\"line\"><a id=\"l00376\" name=\"l00376\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00215.html#ga89fbdd009241b14e86b4fff7ba208a04\"> 376</a></span><span class=\"keyword\">constexpr</span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <a class=\"code hl_function\" href=\"a00215.html#ga9aaec884c080483fea267d1098f81590\">resolveDynamicMultiIndex</a>(C&& c, <span class=\"keyword\">const</span> MultiIndex& multiIndex)</div>\n-<div class=\"line\"><a id=\"l00377\" name=\"l00377\"></a><span class=\"lineno\"> 377</span>{</div>\n-<div class=\"line\"><a id=\"l00378\" name=\"l00378\"></a><span class=\"lineno\"> 378</span> <span class=\"keyword\">auto</span> hasNoIndexAccess = <a class=\"code hl_function\" href=\"a00215.html#gaed02f0c6f78e0d71e09d9bc6a29347c4\">negatePredicate</a>(<a class=\"code hl_function\" href=\"a00215.html#ga7d55c56e78792c4b169c18d875a60935\">callableCheck</a>([](<span class=\"keyword\">auto</span>&& cc) -> std::void_t<<span class=\"keyword\">decltype</span>(cc[Dune::Indices::_0])> {}));</div>\n-<div class=\"line\"><a id=\"l00379\" name=\"l00379\"></a><span class=\"lineno\"> 379</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00215.html#ga89fbdd009241b14e86b4fff7ba208a04\">Imp::resolveDynamicMultiIndex</a>(std::forward<C>(c), Imp::shiftedDynamicMultiIndex<0>(multiIndex), hasNoIndexAccess);</div>\n-<div class=\"line\"><a id=\"l00380\" name=\"l00380\"></a><span class=\"lineno\"> 380</span>}</div>\n+<div class=\"line\"><a id=\"l00331\" name=\"l00331\"></a><span class=\"lineno\"> 331</span> T t_;</div>\n+<div class=\"line\"><a id=\"l00332\" name=\"l00332\"></a><span class=\"lineno\"> 332</span> };</div>\n+<div class=\"line\"><a id=\"l00333\" name=\"l00333\"></a><span class=\"lineno\"> 333</span> </div>\n+<div class=\"line\"><a id=\"l00334\" name=\"l00334\"></a><span class=\"lineno\"> 334</span> <span class=\"keyword\">template</span> <<span class=\"keyword\">typename</span> T></div>\n+<div class=\"line\"><a id=\"l00335\" name=\"l00335\"></a><span class=\"lineno\"> 335</span> <span class=\"keyword\">struct </span>ForwardCaptureWrapper<T&></div>\n+<div class=\"line\"><a id=\"l00336\" name=\"l00336\"></a><span class=\"lineno\"> 336</span> {</div>\n+<div class=\"line\"><a id=\"l00337\" name=\"l00337\"></a><span class=\"lineno\"> 337</span> ForwardCaptureWrapper(T& t) : t_{t} {}</div>\n+<div class=\"line\"><a id=\"l00338\" name=\"l00338\"></a><span class=\"lineno\"> 338</span> </div>\n+<div class=\"line\"><a id=\"l00339\" name=\"l00339\"></a><span class=\"lineno\"> 339</span> T& forward()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> t_; };</div>\n+<div class=\"line\"><a id=\"l00340\" name=\"l00340\"></a><span class=\"lineno\"> 340</span> </div>\n+<div class=\"line\"><a id=\"l00341\" name=\"l00341\"></a><span class=\"lineno\"> 341</span> T& t_;</div>\n+<div class=\"line\"><a id=\"l00342\" name=\"l00342\"></a><span class=\"lineno\"> 342</span> };</div>\n+<div class=\"line\"><a id=\"l00343\" name=\"l00343\"></a><span class=\"lineno\"> 343</span> </div>\n+<div class=\"line\"><a id=\"l00344\" name=\"l00344\"></a><span class=\"lineno\"> 344</span> <span class=\"keyword\">template</span> <<span class=\"keyword\">typename</span> T></div>\n+<div class=\"line\"><a id=\"l00345\" name=\"l00345\"></a><span class=\"lineno\"> 345</span> <span class=\"keyword\">struct </span>ForwardCaptureWrapper<const T&></div>\n+<div class=\"line\"><a id=\"l00346\" name=\"l00346\"></a><span class=\"lineno\"> 346</span> {</div>\n+<div class=\"line\"><a id=\"l00347\" name=\"l00347\"></a><span class=\"lineno\"> 347</span> ForwardCaptureWrapper(<span class=\"keyword\">const</span> T& t) : t_{t} {}</div>\n+<div class=\"line\"><a id=\"l00348\" name=\"l00348\"></a><span class=\"lineno\"> 348</span> </div>\n+<div class=\"line\"><a id=\"l00349\" name=\"l00349\"></a><span class=\"lineno\"> 349</span> <span class=\"keyword\">const</span> T& forward()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> t_; };</div>\n+<div class=\"line\"><a id=\"l00350\" name=\"l00350\"></a><span class=\"lineno\"> 350</span> </div>\n+<div class=\"line\"><a id=\"l00351\" name=\"l00351\"></a><span class=\"lineno\"> 351</span> <span class=\"keyword\">const</span> T& t_;</div>\n+<div class=\"line\"><a id=\"l00352\" name=\"l00352\"></a><span class=\"lineno\"> 352</span> };</div>\n+<div class=\"line\"><a id=\"l00353\" name=\"l00353\"></a><span class=\"lineno\"> 353</span> </div>\n+<div class=\"line\"><a id=\"l00354\" name=\"l00354\"></a><span class=\"lineno\"> 354</span>} <span class=\"comment\">// end namespace Dune::Functions::Impl</span></div>\n+<div class=\"line\"><a id=\"l00355\" name=\"l00355\"></a><span class=\"lineno\"> 355</span> </div>\n+<div class=\"line\"><a id=\"l00356\" name=\"l00356\"></a><span class=\"lineno\"> 356</span> </div>\n+<div class=\"line\"><a id=\"l00357\" name=\"l00357\"></a><span class=\"lineno\"> 357</span> </div>\n+<div class=\"line\"><a id=\"l00371\" name=\"l00371\"></a><span class=\"lineno\"> 371</span><span class=\"keyword\">template</span> <<span class=\"keyword\">class</span> T></div>\n+<div class=\"line\"><a id=\"l00372\" name=\"l00372\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a6bb3a351c2ab1b4eb46d4ba1ec3d95a0\"> 372</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00219.html#a6bb3a351c2ab1b4eb46d4ba1ec3d95a0\">forwardCapture</a>(T&& t)</div>\n+<div class=\"line\"><a id=\"l00373\" name=\"l00373\"></a><span class=\"lineno\"> 373</span>{</div>\n+<div class=\"line\"><a id=\"l00374\" name=\"l00374\"></a><span class=\"lineno\"> 374</span> <span class=\"keywordflow\">return</span> Impl::ForwardCaptureWrapper<T>(std::forward<T>(t));</div>\n+<div class=\"line\"><a id=\"l00375\" name=\"l00375\"></a><span class=\"lineno\"> 375</span>}</div>\n+<div class=\"line\"><a id=\"l00376\" name=\"l00376\"></a><span class=\"lineno\"> 376</span> </div>\n+<div class=\"line\"><a id=\"l00377\" name=\"l00377\"></a><span class=\"lineno\"> 377</span> </div>\n+<div class=\"line\"><a id=\"l00378\" name=\"l00378\"></a><span class=\"lineno\"> 378</span> </div>\n+<div class=\"line\"><a id=\"l00379\" name=\"l00379\"></a><span class=\"lineno\"> 379</span>} <span class=\"comment\">// namespace Dune::Functions</span></div>\n+<div class=\"line\"><a id=\"l00380\" name=\"l00380\"></a><span class=\"lineno\"> 380</span>} <span class=\"comment\">// namespace Dune</span></div>\n <div class=\"line\"><a id=\"l00381\" name=\"l00381\"></a><span class=\"lineno\"> 381</span> </div>\n-<div class=\"line\"><a id=\"l00397\" name=\"l00397\"></a><span class=\"lineno\"> 397</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C, <span class=\"keyword\">class</span> MultiIndex></div>\n-<div class=\"line\"><a id=\"l00398\" name=\"l00398\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00215.html#ga4cc6af2842348271c242c048e0411637\"> 398</a></span><span class=\"keyword\">constexpr</span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <a class=\"code hl_function\" href=\"a00215.html#ga4cc6af2842348271c242c048e0411637\">resolveStaticMultiIndex</a>(C&& c, <span class=\"keyword\">const</span> MultiIndex& multiIndex)</div>\n-<div class=\"line\"><a id=\"l00399\" name=\"l00399\"></a><span class=\"lineno\"> 399</span>{</div>\n-<div class=\"line\"><a id=\"l00400\" name=\"l00400\"></a><span class=\"lineno\"> 400</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00215.html#ga4cc6af2842348271c242c048e0411637\">Imp::resolveStaticMultiIndex</a>(std::forward<C>(c), Imp::shiftedStaticMultiIndex<0>(multiIndex));</div>\n-<div class=\"line\"><a id=\"l00401\" name=\"l00401\"></a><span class=\"lineno\"> 401</span>}</div>\n-<div class=\"line\"><a id=\"l00402\" name=\"l00402\"></a><span class=\"lineno\"> 402</span> </div>\n-<div class=\"line\"><a id=\"l00403\" name=\"l00403\"></a><span class=\"lineno\"> 403</span> </div>\n-<div class=\"line\"><a id=\"l00404\" name=\"l00404\"></a><span class=\"lineno\"> 404</span> </div>\n-<div class=\"line\"><a id=\"l00405\" name=\"l00405\"></a><span class=\"lineno\"> 405</span>} <span class=\"comment\">// namespace Dune::Functions</span></div>\n-<div class=\"line\"><a id=\"l00406\" name=\"l00406\"></a><span class=\"lineno\"> 406</span>} <span class=\"comment\">// namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00407\" name=\"l00407\"></a><span class=\"lineno\"> 407</span> </div>\n-<div class=\"line\"><a id=\"l00408\" name=\"l00408\"></a><span class=\"lineno\"> 408</span> </div>\n-<div class=\"line\"><a id=\"l00409\" name=\"l00409\"></a><span class=\"lineno\"> 409</span> </div>\n-<div class=\"line\"><a id=\"l00410\" name=\"l00410\"></a><span class=\"lineno\"> 410</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH</span></div>\n-<div class=\"ttc\" id=\"aa00050_html\"><div class=\"ttname\"><a href=\"a00050.html\">utility.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00215_html_ga2226fe3a86eb176df27c9801a98a10ae\"><div class=\"ttname\"><a href=\"a00215.html#ga2226fe3a86eb176df27c9801a98a10ae\">Dune::Functions::hybridIndexAccess</a></div><div class=\"ttdeci\">auto hybridIndexAccess(C &&c, const I &i, F &&f) -> decltype(f(c[i]))</div><div class=\"ttdoc\">Provide operator[] index-access for containers.</div><div class=\"ttdef\"><b>Definition:</b> indexaccess.hh:63</div></div>\n-<div class=\"ttc\" id=\"aa00215_html_ga4cc6af2842348271c242c048e0411637\"><div class=\"ttname\"><a href=\"a00215.html#ga4cc6af2842348271c242c048e0411637\">Dune::Functions::resolveStaticMultiIndex</a></div><div class=\"ttdeci\">constexpr decltype(auto) resolveStaticMultiIndex(C &&c, const MultiIndex &multiIndex)</div><div class=\"ttdoc\">Provide multi-index access by chaining operator[].</div><div class=\"ttdef\"><b>Definition:</b> indexaccess.hh:398</div></div>\n+<div class=\"line\"><a id=\"l00382\" name=\"l00382\"></a><span class=\"lineno\"> 382</span> </div>\n+<div class=\"line\"><a id=\"l00383\" name=\"l00383\"></a><span class=\"lineno\"> 383</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_UTILITY_HH</span></div>\n+<div class=\"ttc\" id=\"aa00020_html\"><div class=\"ttname\"><a href=\"a00020.html\">functionconcepts.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00215_html_ga047a2180b455bfa030fba76eb6270952\"><div class=\"ttname\"><a href=\"a00215.html#ga047a2180b455bfa030fba76eb6270952\">Dune::Functions::ExpandTuple</a></div><div class=\"ttdeci\">typename Imp::ExpandTupleHelper< T, ArgTuple >::Type ExpandTuple</div><div class=\"ttdoc\">Expand tuple arguments as template arguments.</div><div class=\"ttdef\"><b>Definition:</b> utility.hh:94</div></div>\n+<div class=\"ttc\" id=\"aa00215_html_ga1ce77345fbee606e5ac22aeef7d109d6\"><div class=\"ttname\"><a href=\"a00215.html#ga1ce77345fbee606e5ac22aeef7d109d6\">Dune::Functions::TransformTuple</a></div><div class=\"ttdeci\">typename Imp::TransformTupleHelper< F, Tuples... >::Type TransformTuple</div><div class=\"ttdoc\">Transform tuple types argument using type-functor.</div><div class=\"ttdef\"><b>Definition:</b> utility.hh:131</div></div>\n+<div class=\"ttc\" id=\"aa00215_html_ga2bc5056bab5babdfa8a82409665f5a26\"><div class=\"ttname\"><a href=\"a00215.html#ga2bc5056bab5babdfa8a82409665f5a26\">Dune::Functions::Concept::isCallable</a></div><div class=\"ttdeci\">static constexpr auto isCallable()</div><div class=\"ttdoc\">Check if f is callable with given argument list.</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:47</div></div>\n+<div class=\"ttc\" id=\"aa00215_html_ga4e5fbe8e1330cdfab9eddd5962682b4c\"><div class=\"ttname\"><a href=\"a00215.html#ga4e5fbe8e1330cdfab9eddd5962682b4c\">Dune::Functions::transformTuple</a></div><div class=\"ttdeci\">auto transformTuple(F &&f, const std::tuple< T... > &tuple) -> decltype(Imp::transformTupleHelper(std::forward< F >(f), tuple, std::index_sequence_for< T... >{}))</div><div class=\"ttdoc\">Transform tuple value using a functor.</div><div class=\"ttdef\"><b>Definition:</b> utility.hh:165</div></div>\n <div class=\"ttc\" id=\"aa00215_html_ga7d55c56e78792c4b169c18d875a60935\"><div class=\"ttname\"><a href=\"a00215.html#ga7d55c56e78792c4b169c18d875a60935\">Dune::Functions::callableCheck</a></div><div class=\"ttdeci\">auto callableCheck(Expression f)</div><div class=\"ttdoc\">Create a predicate for checking validity of expressions.</div><div class=\"ttdef\"><b>Definition:</b> utility.hh:279</div></div>\n-<div class=\"ttc\" id=\"aa00215_html_ga89fbdd009241b14e86b4fff7ba208a04\"><div class=\"ttname\"><a href=\"a00215.html#ga89fbdd009241b14e86b4fff7ba208a04\">Dune::Functions::resolveDynamicMultiIndex</a></div><div class=\"ttdeci\">constexpr decltype(auto) resolveDynamicMultiIndex(C &&c, const MultiIndex &multiIndex)</div><div class=\"ttdoc\">Provide multi-index access by chaining operator[].</div><div class=\"ttdef\"><b>Definition:</b> indexaccess.hh:376</div></div>\n-<div class=\"ttc\" id=\"aa00215_html_ga9aaec884c080483fea267d1098f81590\"><div class=\"ttname\"><a href=\"a00215.html#ga9aaec884c080483fea267d1098f81590\">Dune::Functions::resolveDynamicMultiIndex</a></div><div class=\"ttdeci\">constexpr decltype(auto) resolveDynamicMultiIndex(C &&c, const MultiIndex &multiIndex, const IsFinal &isFinal)</div><div class=\"ttdoc\">Provide multi-index access by chaining operator[].</div><div class=\"ttdef\"><b>Definition:</b> indexaccess.hh:354</div></div>\n-<div class=\"ttc\" id=\"aa00215_html_gabd5106817636cc5542dc4e9a1817551b\"><div class=\"ttname\"><a href=\"a00215.html#gabd5106817636cc5542dc4e9a1817551b\">Dune::Functions::hybridMultiIndexAccess</a></div><div class=\"ttdeci\">Result hybridMultiIndexAccess(C &&c, const MultiIndex &index)</div><div class=\"ttdoc\">Provide multi-index access by chaining operator[].</div><div class=\"ttdef\"><b>Definition:</b> indexaccess.hh:263</div></div>\n+<div class=\"ttc\" id=\"aa00215_html_gac7d45de6c68fce943e6924403389d234\"><div class=\"ttname\"><a href=\"a00215.html#gac7d45de6c68fce943e6924403389d234\">Dune::Functions::forwardAsStaticIndex</a></div><div class=\"ttdeci\">auto forwardAsStaticIndex(const size_type &i, F &&f, Args &&... args) -> decltype(f(Dune::Indices::_0, std::forward< Args >(args)...))</div><div class=\"ttdoc\">Transform dynamic index to static index_constant.</div><div class=\"ttdef\"><b>Definition:</b> utility.hh:60</div></div>\n <div class=\"ttc\" id=\"aa00215_html_gaed02f0c6f78e0d71e09d9bc6a29347c4\"><div class=\"ttname\"><a href=\"a00215.html#gaed02f0c6f78e0d71e09d9bc6a29347c4\">Dune::Functions::negatePredicate</a></div><div class=\"ttdeci\">auto negatePredicate(Check check)</div><div class=\"ttdoc\">Negate given predicate.</div><div class=\"ttdef\"><b>Definition:</b> utility.hh:304</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n <div class=\"ttc\" id=\"aa00219_html_a6bb3a351c2ab1b4eb46d4ba1ec3d95a0\"><div class=\"ttname\"><a href=\"a00219.html#a6bb3a351c2ab1b4eb46d4ba1ec3d95a0\">Dune::Functions::forwardCapture</a></div><div class=\"ttdeci\">auto forwardCapture(T &&t)</div><div class=\"ttdoc\">Create a capture object for perfect forwarding.</div><div class=\"ttdef\"><b>Definition:</b> utility.hh:372</div></div>\n+<div class=\"ttc\" id=\"aa00219_html_a84f8a9700ef8b12973e210ee4674c2b7\"><div class=\"ttname\"><a href=\"a00219.html#a84f8a9700ef8b12973e210ee4674c2b7\">Dune::Functions::forwardAsStaticInteger</a></div><div class=\"ttdeci\">auto forwardAsStaticInteger(std::integer_sequence< size_type, firstValue > values, const size_type &i, F &&f, Args &&... args) -> decltype(f(std::integral_constant< size_type, firstValue >(), std::forward< Args >(args)...))</div><div class=\"ttdef\"><b>Definition:</b> utility.hh:21</div></div>\n+<div class=\"ttc\" id=\"aa00219_html_ad7adaea3a8e209aef72602f07a6988b3\"><div class=\"ttname\"><a href=\"a00219.html#ad7adaea3a8e209aef72602f07a6988b3\">Dune::Functions::IntegerSequenceTuple</a></div><div class=\"ttdeci\">typename Imp::IntegerSequenceTupleHelper< IntegerSequence >::Type IntegerSequenceTuple</div><div class=\"ttdoc\">Transform integer_sequence<I,k...> to tuple<integral_constant<I,k>...></div><div class=\"ttdef\"><b>Definition:</b> utility.hh:211</div></div>\n+<div class=\"ttc\" id=\"aa01383_html\"><div class=\"ttname\"><a href=\"a01383.html\">Dune::Functions::LastType</a></div><div class=\"ttdoc\">Get last entry of type list.</div><div class=\"ttdef\"><b>Definition:</b> utility.hh:222</div></div>\n+<div class=\"ttc\" id=\"aa01383_html_a45225c5413aac4fc372bc39124b6e4c5\"><div class=\"ttname\"><a href=\"a01383.html#a45225c5413aac4fc372bc39124b6e4c5\">Dune::Functions::LastType::type</a></div><div class=\"ttdeci\">typename std::tuple_element< sizeof...(T) -1, std::tuple< T... > >::type type</div><div class=\"ttdef\"><b>Definition:</b> utility.hh:223</div></div>\n+<div class=\"ttc\" id=\"aa01395_html\"><div class=\"ttname\"><a href=\"a01395.html\">Dune::Functions::RotateTuple</a></div><div class=\"ttdoc\">Rotate type list by one, such that last entry is moved to first position.</div><div class=\"ttdef\"><b>Definition:</b> utility.hh:251</div></div>\n+<div class=\"ttc\" id=\"aa01395_html_ad2aec0a7681d5138bc8738f98cb86c1f\"><div class=\"ttname\"><a href=\"a01395.html#ad2aec0a7681d5138bc8738f98cb86c1f\">Dune::Functions::RotateTuple::type</a></div><div class=\"ttdeci\">typename Imp::RotateHelper< std::tuple< T... >, std::make_index_sequence< sizeof...(T) -1 > >::type type</div><div class=\"ttdef\"><b>Definition:</b> utility.hh:252</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,362 +5,349 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * common\n-indexaccess.hh\n+utility.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH\n- 4#define DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH\n+ 3#ifndef DUNE_FUNCTIONS_COMMON_UTILITY_HH\n+ 4#define DUNE_FUNCTIONS_COMMON_UTILITY_HH\n 5\n 6\n 7#include <utility>\n 8#include <type_traits>\n 9\n- 10#include <dune/common/typetraits.hh>\n- 11#include <dune/common/concept.hh>\n- 12#include <dune/common/hybridutilities.hh>\n- 13\n- 14#include <dune/functions/common/utility.hh>\n- 15\n- 16\n+ 10#include <dune/common/overloadset.hh>\n+ 11#include <dune/common/indices.hh>\n+ 12\n+ 13#include <dune/functions/common/functionconcepts.hh>\n+ 14\n+ 15namespace Dune {\n+ 16namespace Functions {\n 17\n- 18namespace Dune {\n- 19namespace Functions {\n- 20\n- 21\n- 22namespace Imp {\n- 23\n- 24namespace Concept {\n- 25\n- 26template<class size_type>\n- 27struct HasDynamicIndexAccess\n- 28{\n- 29 template<class C>\n- 30 auto require(C&& c) -> decltype(\n- 31 c[std::declval<size_type>()]\n- 32 );\n- 33};\n- 34\n- 35struct HasStaticIndexAccess\n- 36{\n- 37 template<class C>\n- 38 auto require(C&& c) -> decltype(\n- 39 c[Dune::Indices::_0]\n- 40 );\n- 41};\n- 42\n- 43} // namespace Concept\n- 44\n- 45} // namespace Imp\n- 46\n- 47\n- 48\n- 61template<class C, class I, class F,\n- 62 typename std::enable_if< Dune::models<Imp::Concept::\n-HasDynamicIndexAccess<I>, C>(), int>::type = 0>\n-63auto hybridIndexAccess(C&& c, const I& i, F&& f)\n- 64 -> decltype(f(c[i]))\n- 65{\n- 66 return f(c[i]);\n- 67}\n- 68\n- 86template<class C, class I, class F,\n- 87 typename std::enable_if< not Dune::models<Imp::Concept::\n-HasDynamicIndexAccess<I>, C>(), int>::type = 0>\n-88decltype(auto) hybridIndexAccess(C&& c, const I& i, F&& f)\n- 89{\n- 90 using Size = decltype(Hybrid::size(c));\n- 91 return Hybrid::switchCases(std::make_index_sequence<Size::value>(), i,\n- 92 [&](const auto& ii) -> decltype(auto){\n- 93 return f(c[ii]);\n- 94 }, [&]() -> decltype(auto){\n- 95 return f(c[Dune::Indices::_0]);\n- 96 });\n- 97}\n- 98\n+ 18\n+ 19\n+ 20template<class F, class size_type, size_type firstValue, class... Args>\n+21auto forwardAsStaticInteger(std::integer_sequence<size_type, firstValue>\n+values, const size_type& i, F&& f, Args&&... args)\n+ 22 ->decltype(f(std::integral_constant<size_type, firstValue>(), std::\n+forward<Args>(args)...))\n+ 23{\n+ 24 return f(std::integral_constant<size_type, firstValue>(), std::\n+forward<Args>(args)...);\n+ 25}\n+ 26\n+ 27template<class F, class size_type, size_type firstValue, size_type\n+secondValue, size_type... otherValues, class... Args>\n+28auto forwardAsStaticInteger(std::integer_sequence<size_type, firstValue,\n+secondValue, otherValues...> values, const size_type i, F&& f, Args&&... args)\n+ 29 ->decltype(f(std::integral_constant<size_type, firstValue>(), std::\n+forward<Args>(args)...))\n+ 30{\n+ 31 if (i==firstValue)\n+ 32 return f(std::integral_constant<size_type, firstValue>(), std::\n+forward<Args>(args)...);\n+ 33 return forwardAsStaticInteger(std::integer_sequence<size_type, secondValue,\n+otherValues...>(), i, std::forward<F>(f), std::forward<Args>(args)...);\n+ 34}\n+ 35\n+ 36\n+ 37\n+ 59template<std::size_t end, class F, class size_type, class... Args>\n+60auto forwardAsStaticIndex(const size_type& i, F&& f, Args&&... args)\n+ 61 ->decltype(f(Dune::Indices::_0, std::forward<Args>(args)...))\n+ 62{\n+ 63 return forwardAsStaticInteger(std::make_index_sequence<end>{}, i, std::\n+forward<F>(f), std::forward<Args>(args)...);\n+ 64}\n+ 65\n+ 66\n+ 67\n+ 68namespace Imp {\n+ 69\n+ 70 template<template<class...> class T, class List>\n+ 71 struct ExpandTupleHelper\n+ 72 {};\n+ 73\n+ 74 template<template<class...> class T, template<class...> class ListType,\n+class... Args>\n+ 75 struct ExpandTupleHelper<T, ListType<Args...>>\n+ 76 {\n+ 77 using Type = T<Args...>;\n+ 78 };\n+ 79\n+ 80} // end namespace Imp\n+ 81\n+ 93template<template<class...> class T, class ArgTuple>\n+94using ExpandTuple = typename Imp::ExpandTupleHelper<T, ArgTuple>::Type;\n+ 95\n+ 96\n+ 97\n+ 98namespace Imp {\n 99\n- 100namespace Imp {\n- 101\n- 115 template<class Index, std::size_t offset=1>\n- 116 class ShiftedDynamicMultiIndex\n- 117 {\n- 118 public:\n- 119 ShiftedDynamicMultiIndex(const Index& index) :\n- 120 index_(index)\n- 121 {}\n- 122\n- 123 std::size_t operator[](std::size_t position) const\n- 124 {\n- 125 if (position<size())\n- 126 return index_[position+offset];\n- 127 else\n- 128 return 0;\n- 129 }\n- 130\n- 134 ShiftedDynamicMultiIndex<Index, offset+1> pop() const\n- 135 {\n- 136 return {index_};\n- 137 }\n- 138\n- 139 std::size_t size() const\n+ 100 template<template<class...> class T, class... Tuple>\n+ 101 struct TransformTupleHelper\n+ 102 {};\n+ 103\n+ 104 template<template<class...> class T, class... Args1>\n+ 105 struct TransformTupleHelper<T, typename std::tuple<Args1...>>\n+ 106 {\n+ 107 using Type = std::tuple<T<Args1>...>;\n+ 108 };\n+ 109\n+ 110 template<template<class...> class T, class... Args1, class... Args2>\n+ 111 struct TransformTupleHelper<T, typename std::tuple<Args1...>, typename\n+std::tuple<Args2...>>\n+ 112 {\n+ 113 using Type = std::tuple<T<Args1, Args2>...>;\n+ 114 };\n+ 115\n+ 116} // end namespace Imp\n+ 117\n+ 130template<template<class...> class F, class... Tuples>\n+131using TransformTuple = typename Imp::TransformTupleHelper<F, Tuples...>::\n+Type;\n+ 132\n+ 133\n+ 134\n+ 135namespace Imp {\n+ 136\n+ 137 template<class F, class... T, std::size_t... k>\n+ 138 auto transformTupleHelper(F&& f, const std::tuple<T...>& tuple, std::\n+index_sequence<k...>)\n+ 139 -> decltype(std::make_tuple(f(std::get<k>(tuple))...))\n 140 {\n- 141 if (offset < index_.size())\n- 142 return index_.size() - offset;\n- 143 else\n- 144 return 0;\n- 145 }\n- 146\n- 147 private:\n- 148 const Index& index_;\n- 149 };\n+ 141 return std::make_tuple(f(std::get<k>(tuple))...);\n+ 142 }\n+ 143\n+ 144 template<class F, class... T1, class...T2, std::size_t... k>\n+ 145 auto transformTupleHelper(F&& f, const std::tuple<T1...>& tuple1, const\n+std::tuple<T2...>& tuple2, std::index_sequence<k...>)\n+ 146 -> decltype(std::make_tuple(f(std::get<k>(tuple1), std::get<k>\n+(tuple2))...))\n+ 147 {\n+ 148 return std::make_tuple(f(std::get<k>(tuple1), std::get<k>(tuple2))...);\n+ 149 }\n 150\n- 151 template<class Index, std::size_t offset=1>\n- 152 class ShiftedStaticMultiIndex\n- 153 {\n- 154 public:\n- 155 ShiftedStaticMultiIndex(const Index& index) :\n- 156 index_(index)\n- 157 {}\n- 158\n- 159 template<std::size_t i>\n- 160 auto operator[](Dune::index_constant<i>) const\n- 161 {\n- 162 if constexpr (i<size()) {\n- 163 return index_[Dune::index_constant<i+offset>{}];\n- 164 } else {\n- 165 return Dune::index_constant<0>{};\n- 166 }\n- 167 }\n- 168\n- 172 ShiftedStaticMultiIndex<Index, offset+1> pop() const\n- 173 {\n- 174 return {index_};\n- 175 }\n- 176\n- 177 static constexpr std::size_t size()\n- 178 {\n- 179 auto fullSize = decltype(Hybrid::size(std::declval<Index>()))::value;\n- 180 if (offset < fullSize)\n- 181 return fullSize - offset;\n- 182 else\n- 183 return 0;\n- 184 }\n- 185\n- 186 private:\n- 187 const Index& index_;\n- 188 };\n- 189\n- 195 template<std::size_t offset, class Index>\n- 196 ShiftedDynamicMultiIndex<Index, offset> shiftedDynamicMultiIndex(const\n-Index& index)\n- 197 {\n- 198 return {index};\n- 199 }\n- 200\n- 201 template<std::size_t offset, class Index>\n- 202 ShiftedStaticMultiIndex<Index, offset> shiftedStaticMultiIndex(const\n-Index& index)\n- 203 {\n- 204 return {index};\n- 205 }\n+ 151} // end namespace Imp\n+ 152\n+ 164template<class F, class... T>\n+165auto transformTuple(F&& f, const std::tuple<T...>& tuple)\n+ 166 -> decltype(Imp::transformTupleHelper(std::forward<F>(f), tuple, std::\n+index_sequence_for<T...>{}))\n+ 167{\n+ 168 return Imp::transformTupleHelper(std::forward<F>(f), tuple, std::\n+index_sequence_for<T...>{});\n+ 169}\n+ 170\n+ 184template<class F, class... T1, class... T2>\n+185auto transformTuple(F&& f, const std::tuple<T1...>& tuple1, const std::\n+tuple<T2...>& tuple2)\n+ 186 -> decltype(Imp::transformTupleHelper(std::forward<F>(f), tuple1, tuple2,\n+std::index_sequence_for<T1...>{}))\n+ 187{\n+ 188 return Imp::transformTupleHelper(std::forward<F>(f), tuple1, tuple2, std::\n+index_sequence_for<T1...>{});\n+ 189}\n+ 190\n+ 191\n+ 192\n+ 193namespace Imp {\n+ 194\n+ 195 template<class IntegerSequence>\n+ 196 struct IntegerSequenceTupleHelper\n+ 197 {};\n+ 198\n+ 199 template<class I, I... k>\n+ 200 struct IntegerSequenceTupleHelper<std::integer_sequence<I, k...>>\n+ 201 {\n+ 202 using Type = std::tuple<std::integral_constant<I, k>...>;\n+ 203 };\n+ 204\n+ 205} // end namespace Imp\n 206\n- 207} // namespace Imp\n- 208\n- 209\n- 210\n- 211\n- 212namespace Imp {\n+ 210template<class IntegerSequence>\n+211using IntegerSequenceTuple= typename Imp::\n+IntegerSequenceTupleHelper<IntegerSequence>::Type;\n+ 212\n 213\n- 214template<class Result, class Index>\n- 215struct MultiIndexResolver\n- 216{\n- 217 MultiIndexResolver(const Index& index) :\n- 218 index_(index)\n- 219 {}\n- 220\n- 221 template<class C,\n- 222 typename std::enable_if<not std::is_convertible<C&, Result>::value, int>::\n-type = 0>\n- 223 Result operator()(C&& c)\n- 224 {\n- 225 auto&& subIndex = Imp::shiftedDynamicMultiIndex<1>(index_);\n- 226 auto&& subIndexResolver = MultiIndexResolver<Result, decltype(subIndex)>\n-(subIndex);\n- 227 return (Result)(hybridIndexAccess(c, index_[Dune::Indices::_0],\n-subIndexResolver));\n- 228 }\n+ 214\n+ 220template<class... T>\n+221struct LastType\n+ 222{\n+223 using type = typename std::tuple_element<sizeof...(T)-1, std::\n+tuple<T...>>::type;\n+ 224};\n+ 225\n+ 226\n+ 227\n+ 228namespace Imp {\n 229\n- 230 template<class C,\n- 231 typename std::enable_if<std::is_convertible<C&, Result>::value, int>::type\n-= 0>\n- 232 Result operator()(C&& c)\n- 233 {\n- 234 return (Result)(std::forward<C>(c));\n- 235 }\n- 236\n- 237 const Index& index_;\n- 238};\n- 239\n- 240} // namespace Imp\n+ 230template<class T, class I>\n+ 231struct RotateHelper;\n+ 232\n+ 233template<class... T, std::size_t... I>\n+ 234struct RotateHelper<std::tuple<T...>, std::index_sequence<I...> >\n+ 235{\n+ 236 using type = typename std::tuple<typename LastType<T...>::type, typename\n+std::tuple_element<I,std::tuple<T...>>::type...>;\n+ 237};\n+ 238\n+ 239} // end namespace Imp\n+ 240\n 241\n- 242\n- 243\n- 262template<class Result, class C, class MultiIndex>\n-263Result hybridMultiIndexAccess(C&& c, const MultiIndex& index)\n- 264{\n- 265\n- 266 Imp::MultiIndexResolver<Result, MultiIndex> multiIndexResolver(index);\n- 267 return multiIndexResolver(c);\n- 268}\n- 269\n- 270\n- 271\n- 272\n- 273\n- 274\n- 275namespace Imp {\n- 276\n- 277 template<class C, class MultiIndex, class IsFinal>\n- 278 constexpr decltype(auto) resolveDynamicMultiIndex(C&& c, const MultiIndex&\n-multiIndex, const IsFinal& isFinal)\n- 279 {\n- 280 // If c is already considered final simply return it,\n- 281 // else resolve the next multiIndex entry.\n- 282 return Hybrid::ifElse(isFinal(c), [&, c = forwardCapture(std::forward<C>\n-(c))](auto) -> decltype(auto) {\n- 283 assert(multiIndex.size() == 0);\n- 284 return c.forward();\n- 285 }, [&](auto) -> decltype(auto) {\n- 286 auto hasDynamicAccess = callableCheck([](auto&& cc) -> std::\n-void_t<decltype(cc[0])> {});\n+ 249template<class... T>\n+250struct RotateTuple\n+ 251{\n+252 using type = typename Imp::RotateHelper<std::tuple<T...>, std::\n+make_index_sequence<sizeof...(T)-1>>::type;\n+ 253};\n+ 254\n+ 255\n+ 256\n+ 278template<class Expression>\n+279auto callableCheck(Expression f)\n+ 280{\n+ 281 return [f](auto&&... args){\n+ 282 return Functions::Concept::isCallable(f, std::forward<decltype(args)>\n+(args)...);\n+ 283 };\n+ 284}\n+ 285\n+ 286\n 287\n- 288 // Split multiIndex into first entry and remaining ones.\n- 289 auto i = multiIndex[0];\n- 290 auto tail = multiIndex.pop();\n- 291\n- 292 // Resolve first multiIndex entry by c[multiIndex[0]] and\n- 293 // continue resolving with the remaining remaining ones.\n- 294 // If c has a dynamic operator[] this is straight forward.\n- 295 // Else the dynamic multiIndex[0] has to be translated into\n- 296 // a static one using hybridIndexAccess.\n- 297 return Hybrid::ifElse(hasDynamicAccess(c), [&](auto id) -> decltype(auto)\n-{\n- 298 return Imp::resolveDynamicMultiIndex(id(c)[i], tail, isFinal);\n- 299 }, [&](auto id) -> decltype(auto) {\n- 300 // auto indexRange = range(Hybrid::size(id(c)));\n- 301 auto indexRange = typename decltype(range(Hybrid::size(id(c))))::\n-integer_sequence();\n- 302 return Hybrid::switchCases(indexRange, i, [&](auto static_i) -> decltype\n-(auto){\n- 303 // Do rescursion with static version of i\n- 304 return Imp::resolveDynamicMultiIndex(id(c)[static_i], tail, isFinal);\n- 305 }, [&]() -> decltype(auto){\n- 306 // As fallback we use c[0] this is needed, because there must be one\n-branch that matches.\n- 307 return Imp::resolveDynamicMultiIndex(id(c)[Dune::Indices::_0], tail,\n-isFinal);\n- 308 });\n- 309 });\n- 310 });\n- 311 }\n- 312\n- 313 template<class C, class MultiIndex>\n- 314 constexpr decltype(auto) resolveStaticMultiIndex(C&& c, const MultiIndex&\n-multiIndex)\n- 315 {\n- 316 auto isExhausted = Hybrid::equals(Hybrid::size(multiIndex), Dune::\n-Indices::_0);\n- 317 return Hybrid::ifElse(isExhausted, [&, c = forwardCapture(std::forward<C>\n-(c))](auto) -> decltype(auto) {\n- 318 return c.forward();\n- 319 }, [&](auto id) -> decltype(auto) {\n- 320 auto head = multiIndex[Dune::Indices::_0];\n- 321 auto tail = multiIndex.pop();\n+ 303template<class Check>\n+304auto negatePredicate(Check check)\n+ 305{\n+ 306 return [check](auto&&... args){\n+ 307 auto negate = overload(\n+ 308 [](std::true_type) { return std::false_type{};},\n+ 309 [](std::false_type) { return std::true_type{};},\n+ 310 [](bool v) { return not v;});\n+ 311 return negate(check(std::forward<decltype(args)>(args)...));\n+ 312 };\n+ 313}\n+ 314\n+ 315\n+ 316namespace Impl {\n+ 317\n+ 318 // Wrapper to capture values in a lambda for perfect forwarding.\n+ 319 // This captures value types by value and reference types by reference.\n+ 320 template <typename T>\n+ 321 struct ForwardCaptureWrapper;\n 322\n- 323 return Imp::resolveStaticMultiIndex(id(c)[head], tail);\n- 324 });\n- 325 }\n- 326\n- 327} // namespace Imp\n+ 323 template <typename T>\n+ 324 struct ForwardCaptureWrapper\n+ 325 {\n+ 326 template <typename TT>\n+ 327 ForwardCaptureWrapper(TT&& t) : t_{std::forward<TT>(t)} {}\n 328\n- 329\n+ 329 auto forward() const { return std::move(t_); }\n 330\n- 353template<class C, class MultiIndex, class IsFinal>\n-354constexpr decltype(auto) resolveDynamicMultiIndex(C&& c, const MultiIndex&\n-multiIndex, const IsFinal& isFinal)\n- 355{\n- 356 return Imp::resolveDynamicMultiIndex(std::forward<C>(c), Imp::\n-shiftedDynamicMultiIndex<0>(multiIndex), isFinal);\n- 357}\n- 358\n- 375template<class C, class MultiIndex>\n-376constexpr decltype(auto) resolveDynamicMultiIndex(C&& c, const MultiIndex&\n-multiIndex)\n- 377{\n- 378 auto hasNoIndexAccess = negatePredicate(callableCheck([](auto&& cc) -\n-> std::void_t<decltype(cc[Dune::Indices::_0])> {}));\n- 379 return Imp::resolveDynamicMultiIndex(std::forward<C>(c), Imp::\n-shiftedDynamicMultiIndex<0>(multiIndex), hasNoIndexAccess);\n- 380}\n+ 331 T t_;\n+ 332 };\n+ 333\n+ 334 template <typename T>\n+ 335 struct ForwardCaptureWrapper<T&>\n+ 336 {\n+ 337 ForwardCaptureWrapper(T& t) : t_{t} {}\n+ 338\n+ 339 T& forward() const { return t_; };\n+ 340\n+ 341 T& t_;\n+ 342 };\n+ 343\n+ 344 template <typename T>\n+ 345 struct ForwardCaptureWrapper<const T&>\n+ 346 {\n+ 347 ForwardCaptureWrapper(const T& t) : t_{t} {}\n+ 348\n+ 349 const T& forward() const { return t_; };\n+ 350\n+ 351 const T& t_;\n+ 352 };\n+ 353\n+ 354} // end namespace Dune::Functions::Impl\n+ 355\n+ 356\n+ 357\n+ 371template <class T>\n+372auto forwardCapture(T&& t)\n+ 373{\n+ 374 return Impl::ForwardCaptureWrapper<T>(std::forward<T>(t));\n+ 375}\n+ 376\n+ 377\n+ 378\n+ 379} // namespace Dune::Functions\n+ 380} // namespace Dune\n 381\n- 397template<class C, class MultiIndex>\n-398constexpr decltype(auto) resolveStaticMultiIndex(C&& c, const MultiIndex&\n-multiIndex)\n- 399{\n- 400 return Imp::resolveStaticMultiIndex(std::forward<C>(c), Imp::\n-shiftedStaticMultiIndex<0>(multiIndex));\n- 401}\n- 402\n- 403\n- 404\n- 405} // namespace Dune::Functions\n- 406} // namespace Dune\n- 407\n- 408\n- 409\n- 410#endif // DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH\n-utility.hh\n-Dune::Functions::hybridIndexAccess\n-auto hybridIndexAccess(C &&c, const I &i, F &&f) -> decltype(f(c[i]))\n-Provide operator[] index-access for containers.\n-Definition: indexaccess.hh:63\n-Dune::Functions::resolveStaticMultiIndex\n-constexpr decltype(auto) resolveStaticMultiIndex(C &&c, const MultiIndex\n-&multiIndex)\n-Provide multi-index access by chaining operator[].\n-Definition: indexaccess.hh:398\n+ 382\n+ 383#endif // DUNE_FUNCTIONS_COMMON_UTILITY_HH\n+functionconcepts.hh\n+Dune::Functions::ExpandTuple\n+typename Imp::ExpandTupleHelper< T, ArgTuple >::Type ExpandTuple\n+Expand tuple arguments as template arguments.\n+Definition: utility.hh:94\n+Dune::Functions::TransformTuple\n+typename Imp::TransformTupleHelper< F, Tuples... >::Type TransformTuple\n+Transform tuple types argument using type-functor.\n+Definition: utility.hh:131\n+Dune::Functions::Concept::isCallable\n+static constexpr auto isCallable()\n+Check if f is callable with given argument list.\n+Definition: functionconcepts.hh:47\n+Dune::Functions::transformTuple\n+auto transformTuple(F &&f, const std::tuple< T... > &tuple) -> decltype(Imp::\n+transformTupleHelper(std::forward< F >(f), tuple, std::index_sequence_for< T...\n+>{}))\n+Transform tuple value using a functor.\n+Definition: utility.hh:165\n Dune::Functions::callableCheck\n auto callableCheck(Expression f)\n Create a predicate for checking validity of expressions.\n Definition: utility.hh:279\n-Dune::Functions::resolveDynamicMultiIndex\n-constexpr decltype(auto) resolveDynamicMultiIndex(C &&c, const MultiIndex\n-&multiIndex)\n-Provide multi-index access by chaining operator[].\n-Definition: indexaccess.hh:376\n-Dune::Functions::resolveDynamicMultiIndex\n-constexpr decltype(auto) resolveDynamicMultiIndex(C &&c, const MultiIndex\n-&multiIndex, const IsFinal &isFinal)\n-Provide multi-index access by chaining operator[].\n-Definition: indexaccess.hh:354\n-Dune::Functions::hybridMultiIndexAccess\n-Result hybridMultiIndexAccess(C &&c, const MultiIndex &index)\n-Provide multi-index access by chaining operator[].\n-Definition: indexaccess.hh:263\n+Dune::Functions::forwardAsStaticIndex\n+auto forwardAsStaticIndex(const size_type &i, F &&f, Args &&... args) -\n+> decltype(f(Dune::Indices::_0, std::forward< Args >(args)...))\n+Transform dynamic index to static index_constant.\n+Definition: utility.hh:60\n Dune::Functions::negatePredicate\n auto negatePredicate(Check check)\n Negate given predicate.\n Definition: utility.hh:304\n Dune\n Definition: polynomial.hh:10\n Dune::Functions::forwardCapture\n auto forwardCapture(T &&t)\n Create a capture object for perfect forwarding.\n Definition: utility.hh:372\n+Dune::Functions::forwardAsStaticInteger\n+auto forwardAsStaticInteger(std::integer_sequence< size_type, firstValue >\n+values, const size_type &i, F &&f, Args &&... args) -> decltype(f(std::\n+integral_constant< size_type, firstValue >(), std::forward< Args >(args)...))\n+Definition: utility.hh:21\n+Dune::Functions::IntegerSequenceTuple\n+typename Imp::IntegerSequenceTupleHelper< IntegerSequence >::Type\n+IntegerSequenceTuple\n+Transform integer_sequence<I,k...> to tuple<integral_constant<I,k>...>\n+Definition: utility.hh:211\n+Dune::Functions::LastType\n+Get last entry of type list.\n+Definition: utility.hh:222\n+Dune::Functions::LastType::type\n+typename std::tuple_element< sizeof...(T) -1, std::tuple< T... > >::type type\n+Definition: utility.hh:223\n+Dune::Functions::RotateTuple\n+Rotate type list by one, such that last entry is moved to first position.\n+Definition: utility.hh:251\n+Dune::Functions::RotateTuple::type\n+typename Imp::RotateHelper< std::tuple< T... >, std::make_index_sequence<\n+sizeof...(T) -1 > >::type type\n+Definition: utility.hh:252\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00044.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00044.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: referencehelper.hh File Reference</title>\n+<title>dune-functions: localfunction_imp.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -63,53 +63,29 @@\n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n-<a href=\"#namespaces\">Namespaces</a> |\n-<a href=\"#typedef-members\">Typedefs</a> |\n-<a href=\"#func-members\">Functions</a> |\n-<a href=\"#var-members\">Variables</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">referencehelper.hh File Reference</div></div>\n+<a href=\"#namespaces\">Namespaces</a> </div>\n+ <div class=\"headertitle\"><div class=\"title\">localfunction_imp.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <type_traits></code><br />\n-<code>#include <dune/common/referencehelper.hh></code><br />\n+<div class=\"textblock\"><code>#include <<a class=\"el\" href=\"a00029_source.html\">dune/functions/common/type_traits.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00071_source.html\">dune/functions/common/differentiablefunction_imp.hh</a>></code><br />\n </div>\n <p><a href=\"a00044_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-</table><table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"typedef-members\" name=\"typedef-members\"></a>\n-Typedefs</h2></td></tr>\n-<tr class=\"memitem:a51755a2fa6d9e5737a8e2b32cbe3cc15\"><td class=\"memTemplParams\" colspan=\"2\">template<class T > </td></tr>\n-<tr class=\"memitem:a51755a2fa6d9e5737a8e2b32cbe3cc15\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a51755a2fa6d9e5737a8e2b32cbe3cc15\">Dune::Functions::ResolveRef_t</a> = Dune::ResolveRef_t< T ></td></tr>\n-<tr class=\"memdesc:a51755a2fa6d9e5737a8e2b32cbe3cc15\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">This is an alias for Dune::ResolveRef_t. <a href=\"a00219.html#a51755a2fa6d9e5737a8e2b32cbe3cc15\">More...</a><br /></td></tr>\n-<tr class=\"separator:a51755a2fa6d9e5737a8e2b32cbe3cc15\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-</table><table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n-Functions</h2></td></tr>\n-<tr class=\"memitem:acd448ecd78521f983720ec5a6f3e7698\"><td class=\"memTemplParams\" colspan=\"2\">template<class T > </td></tr>\n-<tr class=\"memitem:acd448ecd78521f983720ec5a6f3e7698\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">decltype(auto) </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#acd448ecd78521f983720ec5a6f3e7698\">Dune::Functions::resolveRef</a> (T &&t)</td></tr>\n-<tr class=\"memdesc:acd448ecd78521f983720ec5a6f3e7698\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">This is an alias for Dune::resolveRef. <a href=\"a00219.html#acd448ecd78521f983720ec5a6f3e7698\">More...</a><br /></td></tr>\n-<tr class=\"separator:acd448ecd78521f983720ec5a6f3e7698\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-</table><table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"var-members\" name=\"var-members\"></a>\n-Variables</h2></td></tr>\n-<tr class=\"memitem:a432dd9531e141b59ba6b90a6104f2cb7\"><td class=\"memTemplParams\" colspan=\"2\">template<class T > </td></tr>\n-<tr class=\"memitem:a432dd9531e141b59ba6b90a6104f2cb7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">constexpr bool </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a432dd9531e141b59ba6b90a6104f2cb7\">Dune::Functions::IsReferenceWrapper_v</a> = Dune::IsReferenceWrapper_v<T></td></tr>\n-<tr class=\"memdesc:a432dd9531e141b59ba6b90a6104f2cb7\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">This is an alias for Dune::IsReferenceWrapper_v. <a href=\"a00219.html#a432dd9531e141b59ba6b90a6104f2cb7\">More...</a><br /></td></tr>\n-<tr class=\"separator:a432dd9531e141b59ba6b90a6104f2cb7\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,36 +5,20 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * common\n-Namespaces | Typedefs | Functions | Variables\n-referencehelper.hh File Reference\n-#include <type_traits>\n-#include <dune/common/referencehelper.hh>\n+Namespaces\n+localfunction_imp.hh File Reference\n+#include <dune/functions/common/type_traits.hh>\n+#include <dune/functions/common/differentiablefunction_imp.hh>\n Go_to_the_source_code_of_this_file.\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n- Typedefs\n-template<class T >\n-using\u00a0Dune::Functions::ResolveRef_t = Dune::ResolveRef_t< T >\n-\u00a0 This is an alias for Dune::ResolveRef_t. More...\n-\u00a0\n- Functions\n-template<class T >\n-decltype(auto)\u00a0Dune::Functions::resolveRef (T &&t)\n-\u00a0 This is an alias for Dune::resolveRef. More...\n-\u00a0\n- Variables\n-template<class T >\n-constexpr bool\u00a0Dune::Functions::IsReferenceWrapper_v = Dune::\n- IsReferenceWrapper_v<T>\n-\u00a0 This is an alias for Dune::IsReferenceWrapper_v. More...\n-\u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00044_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00044_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: referencehelper.hh Source File</title>\n+<title>dune-functions: localfunction_imp.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,65 +62,88 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">referencehelper.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">localfunction_imp.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00044.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_REFERENCE_HELPER_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_REFERENCE_HELPER_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_LOCALFUNCTION_FUNCTION_IMP_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_LOCALFUNCTION_FUNCTION_IMP_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#warning The header dune/functions/common/referencehelper.hh is deprecated and will be removed after release 2.9. Include dune/common/referencehelper.hh instead.</span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span> </div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <type_traits></span></div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00029.html\">dune/functions/common/type_traits.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00071.html\">dune/functions/common/differentiablefunction_imp.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n <div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/referencehelper.hh></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span> </div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"keyword\">namespace </span>Imp {</div>\n <div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span>[[deprecated(<span class=\"stringliteral\">"Use Dune::IsReferenceWrapper_v instead. Will be removed after release 2.9."</span>)]]</div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span><span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span></div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a432dd9531e141b59ba6b90a6104f2cb7\"> 26</a></span><a class=\"code hl_variable\" href=\"a00219.html#a432dd9531e141b59ba6b90a6104f2cb7\">IsReferenceWrapper_v</a> = Dune::IsReferenceWrapper_v<T>;</div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"comment\">// Interface of type erasure wrapper</span></div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"comment\">//</span></div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"comment\">// Notice that the basic interface of polymorphic classes (destructor, clone, ...)</span></div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"comment\">// will be added by the type erasure foundation classes.</span></div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> DerivativeInterface, <span class=\"keyword\">class</span> LocalContext></div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"keyword\">class </span>LocalFunctionWrapperInterface :</div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> <span class=\"keyword\">public</span> DifferentiableFunctionWrapperInterface<Signature, DerivativeInterface></div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span>{</div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> bind(<span class=\"keyword\">const</span> LocalContext&) = 0;</div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> </div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> unbind() = 0;</div>\n <div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> </div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> </div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span><span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>)</div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#acd448ecd78521f983720ec5a6f3e7698\"> 35</a></span><a class=\"code hl_function\" href=\"a00219.html#acd448ecd78521f983720ec5a6f3e7698\">resolveRef</a></div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span>[[deprecated(<span class=\"stringliteral\">"Use Dune::resolveRef instead. Will be removed after release 2.9."</span>)]]</div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span>(T&& t)</div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> bound() <span class=\"keyword\">const</span> = 0;</div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span> </div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> <span class=\"keyword\">virtual</span> <span class=\"keyword\">const</span> LocalContext& localContext() <span class=\"keyword\">const</span> = 0;</div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span>};</div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> </div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> </div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span><span class=\"comment\">// Implementation of type erasure wrapper</span></div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> DerivativeInterface, <span class=\"keyword\">class</span> LocalContext, <span class=\"keyword\">class</span> B></div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span><span class=\"keyword\">class </span>LocalFunctionWrapperImplementation :</div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> <span class=\"keyword\">public</span> DifferentiableFunctionWrapperImplementation<Signature, DerivativeInterface, B></div>\n <div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span>{</div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00219.html#acd448ecd78521f983720ec5a6f3e7698\">Dune::resolveRef</a>(std::forward<T>(t));</div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span>}</div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> </div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a51755a2fa6d9e5737a8e2b32cbe3cc15\"> 47</a></span><span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a00219.html#a51755a2fa6d9e5737a8e2b32cbe3cc15\">ResolveRef_t</a></div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span>[[deprecated(<span class=\"stringliteral\">"Use Dune::ResolveRef_t instead. Will be removed after release 2.9."</span>)]]</div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> = Dune::ResolveRef_t<T>;</div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> </div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> </div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span>}} <span class=\"comment\">// namespace Dune::Functions</span></div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> </div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> </div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> </div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_REFERENCE_HELPER_HH</span></div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> <span class=\"keyword\">using </span>Base = DifferentiableFunctionWrapperImplementation<Signature, DerivativeInterface, B>;</div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> <span class=\"keyword\">using </span>Base::Base;</div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> </div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> bind(<span class=\"keyword\">const</span> LocalContext& context)</div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> {</div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> this->get().bind(context);</div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> }</div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> unbind()</div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> {</div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> this->get().unbind();</div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> }</div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> </div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> bound()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> <span class=\"keywordflow\">return</span> this->get().bound();</div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> }</div>\n+<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> </div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> <span class=\"keyword\">virtual</span> <span class=\"keyword\">const</span> LocalContext& localContext()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> <span class=\"keywordflow\">return</span> this->get().localContext();</div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> }</div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span>};</div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> </div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span>}}} <span class=\"comment\">// namespace Dune::Functions::Imp</span></div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> </div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> </div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> </div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH</span></div>\n+<div class=\"ttc\" id=\"aa00029_html\"><div class=\"ttname\"><a href=\"a00029.html\">type_traits.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00071_html\"><div class=\"ttname\"><a href=\"a00071.html\">differentiablefunction_imp.hh</a></div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa00219_html_a432dd9531e141b59ba6b90a6104f2cb7\"><div class=\"ttname\"><a href=\"a00219.html#a432dd9531e141b59ba6b90a6104f2cb7\">Dune::Functions::IsReferenceWrapper_v</a></div><div class=\"ttdeci\">constexpr bool IsReferenceWrapper_v</div><div class=\"ttdoc\">This is an alias for Dune::IsReferenceWrapper_v.</div><div class=\"ttdef\"><b>Definition:</b> referencehelper.hh:26</div></div>\n-<div class=\"ttc\" id=\"aa00219_html_a51755a2fa6d9e5737a8e2b32cbe3cc15\"><div class=\"ttname\"><a href=\"a00219.html#a51755a2fa6d9e5737a8e2b32cbe3cc15\">Dune::Functions::ResolveRef_t</a></div><div class=\"ttdeci\">Dune::ResolveRef_t< T > ResolveRef_t</div><div class=\"ttdoc\">This is an alias for Dune::ResolveRef_t.</div><div class=\"ttdef\"><b>Definition:</b> referencehelper.hh:49</div></div>\n-<div class=\"ttc\" id=\"aa00219_html_acd448ecd78521f983720ec5a6f3e7698\"><div class=\"ttname\"><a href=\"a00219.html#acd448ecd78521f983720ec5a6f3e7698\">Dune::Functions::resolveRef</a></div><div class=\"ttdeci\">decltype(auto) resolveRef(T &&t)</div><div class=\"ttdoc\">This is an alias for Dune::resolveRef.</div><div class=\"ttdef\"><b>Definition:</b> referencehelper.hh:37</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,75 +5,89 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * common\n-referencehelper.hh\n+localfunction_imp.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_COMMON_REFERENCE_HELPER_HH\n- 4#define DUNE_FUNCTIONS_COMMON_REFERENCE_HELPER_HH\n+ 3#ifndef DUNE_FUNCTIONS_COMMON_LOCALFUNCTION_FUNCTION_IMP_HH\n+ 4#define DUNE_FUNCTIONS_COMMON_LOCALFUNCTION_FUNCTION_IMP_HH\n 5\n- 6#warning The header dune/functions/common/referencehelper.hh is deprecated\n-and will be removed after release 2.9. Include dune/common/referencehelper.hh\n-instead.\n- 7\n- 8#include <type_traits>\n+ 6#include <dune/functions/common/type_traits.hh>\n+ 7#include <dune/functions/common/differentiablefunction_imp.hh>\n+ 8\n 9\n- 10#include <dune/common/referencehelper.hh>\n- 11\n- 12\n- 13\n+ 10\n+ 11namespace Dune {\n+ 12namespace Functions {\n+ 13namespace Imp {\n 14\n- 15namespace Dune {\n- 16namespace Functions {\n- 17\n- 18\n- 23template<class T>\n- 24[[deprecated(\"Use Dune::IsReferenceWrapper_v instead. Will be removed after\n-release 2.9.\")]]\n- 25constexpr bool\n-26IsReferenceWrapper_v = Dune::IsReferenceWrapper_v<T>;\n+ 15// Interface of type erasure wrapper\n+ 16//\n+ 17// Notice that the basic interface of polymorphic classes (destructor,\n+clone, ...)\n+ 18// will be added by the type erasure foundation classes.\n+ 19template<class Signature, class DerivativeInterface, class LocalContext>\n+ 20class LocalFunctionWrapperInterface :\n+ 21 public DifferentiableFunctionWrapperInterface<Signature,\n+DerivativeInterface>\n+ 22{\n+ 23public:\n+ 24 virtual void bind(const LocalContext&) = 0;\n+ 25\n+ 26 virtual void unbind() = 0;\n 27\n- 28\n- 33template<class T>\n- 34decltype(auto)\n-35resolveRef\n- 36[[deprecated(\"Use Dune::resolveRef instead. Will be removed after release\n-2.9.\")]]\n- 37(T&& t)\n+ 28 virtual bool bound() const = 0;\n+ 29\n+ 30 virtual const LocalContext& localContext() const = 0;\n+ 31};\n+ 32\n+ 33\n+ 34// Implementation of type erasure wrapper\n+ 35template<class Signature, class DerivativeInterface, class LocalContext,\n+class B>\n+ 36class LocalFunctionWrapperImplementation :\n+ 37 public DifferentiableFunctionWrapperImplementation<Signature,\n+DerivativeInterface, B>\n 38{\n- 39 return Dune::resolveRef(std::forward<T>(t));\n- 40}\n- 41\n- 46template<class T>\n-47using ResolveRef_t\n- 48[[deprecated(\"Use Dune::ResolveRef_t instead. Will be removed after release\n-2.9.\")]]\n- 49 = Dune::ResolveRef_t<T>;\n- 50\n- 51\n- 52}} // namespace Dune::Functions\n- 53\n- 54\n- 55\n- 56#endif // DUNE_FUNCTIONS_COMMON_REFERENCE_HELPER_HH\n+ 39 using Base = DifferentiableFunctionWrapperImplementation<Signature,\n+DerivativeInterface, B>;\n+ 40public:\n+ 41 using Base::Base;\n+ 42\n+ 43 virtual void bind(const LocalContext& context)\n+ 44 {\n+ 45 this->get().bind(context);\n+ 46 }\n+ 47\n+ 48 virtual void unbind()\n+ 49 {\n+ 50 this->get().unbind();\n+ 51 }\n+ 52\n+ 53 virtual bool bound() const\n+ 54 {\n+ 55 return this->get().bound();\n+ 56 }\n+ 57\n+ 58 virtual const LocalContext& localContext() const\n+ 59 {\n+ 60 return this->get().localContext();\n+ 61 }\n+ 62};\n+ 63\n+ 64}}} // namespace Dune::Functions::Imp\n+ 65\n+ 66\n+ 67\n+ 68#endif // DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH\n+type_traits.hh\n+differentiablefunction_imp.hh\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::IsReferenceWrapper_v\n-constexpr bool IsReferenceWrapper_v\n-This is an alias for Dune::IsReferenceWrapper_v.\n-Definition: referencehelper.hh:26\n-Dune::Functions::ResolveRef_t\n-Dune::ResolveRef_t< T > ResolveRef_t\n-This is an alias for Dune::ResolveRef_t.\n-Definition: referencehelper.hh:49\n-Dune::Functions::resolveRef\n-decltype(auto) resolveRef(T &&t)\n-This is an alias for Dune::resolveRef.\n-Definition: referencehelper.hh:37\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00047.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00047.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: functionfromcallable.hh File Reference</title>\n+<title>dune-functions: differentiablefunctionfromcallables.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -64,35 +64,49 @@\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n-<a href=\"#namespaces\">Namespaces</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">functionfromcallable.hh File Reference</div></div>\n+<a href=\"#namespaces\">Namespaces</a> |\n+<a href=\"#func-members\">Functions</a> </div>\n+ <div class=\"headertitle\"><div class=\"title\">differentiablefunctionfromcallables.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <dune/common/function.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00086_source.html\">dune/functions/common/signature.hh</a>></code><br />\n+<div class=\"textblock\"><code>#include <dune/common/typeutilities.hh></code><br />\n+<code>#include <dune/common/hybridutilities.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00008_source.html\">dune/functions/common/signature.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00011_source.html\">dune/functions/common/differentiablefunction.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00020_source.html\">dune/functions/common/functionconcepts.hh</a>></code><br />\n </div>\n <p><a href=\"a00047_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01215.html\">Dune::Functions::FunctionFromCallable< Range(Domain), F, FunctionInterface ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Wrap a callable object as Dune::Function or Dune::VirtualFunction. <a href=\"a01215.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01131.html\">Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Wrap a list of callable objects as derivative sequence modelling <a class=\"el\" href=\"a01155.html\">Concept::DifferentiableFunction<Range(Domain), DerivativeTraits></a> <a href=\"a01131.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01135.html\">Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F, DF, Derivatives... ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Wrap a list of callable objects as derivative sequence modelling <a class=\"el\" href=\"a01155.html\">Concept::DifferentiableFunction<Range(Domain), DerivativeTraits></a> <a href=\"a01135.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+</table><table class=\"memberdecls\">\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n+Functions</h2></td></tr>\n+<tr class=\"memitem:gad3bb1b3fe74c7f750a3980f4c0ce0449\"><td class=\"memTemplParams\" colspan=\"2\">template<class Signature , template< class > class DerivativeTraits, class... F> </td></tr>\n+<tr class=\"memitem:gad3bb1b3fe74c7f750a3980f4c0ce0449\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">DifferentiableFunctionFromCallables< Signature, DerivativeTraits, F... > </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00209.html#gad3bb1b3fe74c7f750a3980f4c0ce0449\">Dune::Functions::makeDifferentiableFunctionFromCallables</a> (const SignatureTag< Signature, DerivativeTraits > &signatureTag, F &&... f)</td></tr>\n+<tr class=\"memdesc:gad3bb1b3fe74c7f750a3980f4c0ce0449\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a <a class=\"el\" href=\"a01095.html\">DifferentiableFunction</a> from callables. <a href=\"a00209.html#gad3bb1b3fe74c7f750a3980f4c0ce0449\">More...</a><br /></td></tr>\n+<tr class=\"separator:gad3bb1b3fe74c7f750a3980f4c0ce0449\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,26 +5,47 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * common\n-Classes | Namespaces\n-functionfromcallable.hh File Reference\n-#include <dune/common/function.hh>\n+Classes | Namespaces | Functions\n+differentiablefunctionfromcallables.hh File Reference\n+#include <dune/common/typeutilities.hh>\n+#include <dune/common/hybridutilities.hh>\n #include <dune/functions/common/signature.hh>\n+#include <dune/functions/common/differentiablefunction.hh>\n+#include <dune/functions/common/functionconcepts.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-class \u00a0Dune::Functions::FunctionFromCallable<_Range(Domain),_F,\n- FunctionInterface_>\n-\u00a0 Wrap a callable object as Dune::Function or Dune::VirtualFunction.\n+class \u00a0Dune::Functions::DifferentiableFunctionFromCallables<_Range(Domain),\n+ DerivativeTraits,_F_>\n+ Wrap a list of callable objects as derivative sequence modelling\n+\u00a0 Concept::DifferentiableFunction<Range(Domain),_DerivativeTraits>\n+ More...\n+\u00a0\n+class \u00a0Dune::Functions::DifferentiableFunctionFromCallables<_Range(Domain),\n+ DerivativeTraits,_F,_DF,_Derivatives..._>\n+ Wrap a list of callable objects as derivative sequence modelling\n+\u00a0 Concept::DifferentiableFunction<Range(Domain),_DerivativeTraits>\n More...\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n+ Functions\n+template<class Signature , template< class > class DerivativeTraits, class...\n+F>\n+ DifferentiableFunctionFromCallables< Dune::Functions::\n+ Signature, DerivativeTraits, F... >\u00a0makeDifferentiableFunctionFromCallables\n+ (const SignatureTag< Signature,\n+ DerivativeTraits > &signatureTag, F &&...\n+ f)\n+\u00a0 Create a DifferentiableFunction from\n+ callables. More...\n+\u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00047_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00047_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: functionfromcallable.hh Source File</title>\n+<title>dune-functions: differentiablefunctionfromcallables.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,73 +62,141 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">functionfromcallable.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">differentiablefunctionfromcallables.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00047.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_FUNCTION_FROM_CALLABLE_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_FUNCTION_FROM_CALLABLE_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <dune/common/function.hh></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span> </div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00086.html\">dune/functions/common/signature.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span> </div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <dune/common/typeutilities.hh></span></div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <dune/common/hybridutilities.hh></span></div>\n <div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span> </div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00008.html\">dune/functions/common/signature.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00011.html\">dune/functions/common/differentiablefunction.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00020.html\">dune/functions/common/functionconcepts.hh</a>></span></div>\n <div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n <div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>Signature, <span class=\"keyword\">class </span>F,</div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> <span class=\"keyword\">class </span>FunctionInterface = <span class=\"keyword\">typename</span> Dune::VirtualFunction<</div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> <span class=\"keyword\">typename</span> SignatureTraits<Signature>::RawDomain,</div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> <span class=\"keyword\">typename</span> SignatureTraits<Signature>::RawRange> ></div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01211.html\"> 20</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01211.html\">FunctionFromCallable</a>;</div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span> </div>\n <div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> </div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">class</span> F, <span class=\"keyword\">class</span> FunctionInterface></div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01215.html\"> 38</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01211.html\">FunctionFromCallable</a><Range(Domain), F, FunctionInterface> :</div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> <span class=\"keyword\">public</span> FunctionInterface</div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span>{</div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> </div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01215.html#a457340c945d3413b6285f28fde39a68b\"> 52</a></span> <a class=\"code hl_function\" href=\"a01215.html#a457340c945d3413b6285f28fde39a68b\">FunctionFromCallable</a>(F&& f) :</div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> f_(f)</div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> {}</div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits, <span class=\"keyword\">class</span>... Callables></div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01127.html\"> 23</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01127.html\">DifferentiableFunctionFromCallables</a>;</div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> </div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> </div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> </div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits, <span class=\"keyword\">class </span>F></div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01131.html\"> 44</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01127.html\">DifferentiableFunctionFromCallables</a><Range(Domain), DerivativeTraits, F></div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span>{</div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01131.html#acffaa1044b3ca19944d0f78fc0ff1ac4\"> 49</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01131.html#acffaa1044b3ca19944d0f78fc0ff1ac4\">Signature</a> = Range(Domain);</div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> </div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01131.html#acce6cff869c703e4f707474228581e03\"> 51</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01131.html#acce6cff869c703e4f707474228581e03\">RawSignature</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_struct\" href=\"a01291.html\">SignatureTraits<Signature>::RawSignature</a>;</div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> </div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01131.html#af3d92b77ee01a494d609225d37eb5259\"> 54</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01131.html#af3d92b77ee01a494d609225d37eb5259\">DerivativeSignature</a> = <span class=\"keyword\">typename</span> DerivativeTraits<RawSignature>::Range(Domain);</div>\n <div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> </div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01215.html#ae834ef8c2c819c027517478951ef332f\"> 64</a></span> <a class=\"code hl_function\" href=\"a01215.html#ae834ef8c2c819c027517478951ef332f\">FunctionFromCallable</a>(<span class=\"keyword\">const</span> F& f) :</div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> f_(f)</div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> {}</div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> </div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01215.html#a6aca1daa3b7cbe5c186121333ceb21f7\"> 73</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01215.html#a6aca1daa3b7cbe5c186121333ceb21f7\">evaluate</a>(<span class=\"keyword\">const</span> Domain& x, Range&y)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> y = f_(x);</div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> }</div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> </div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span><span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> F f_;</div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span>};</div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> </div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> </div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> </div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span>} <span class=\"comment\">// namespace Functions</span></div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span>} <span class=\"comment\">// namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01131.html#a1213bfc3682b37f706a9f0b1e958cfbe\"> 57</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01095.html\">Derivative</a> = <a class=\"code hl_class\" href=\"a01095.html\">DifferentiableFunction<DerivativeSignature, DerivativeTraits></a>;</div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> </div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> FF, disableCopyMove<DifferentiableFunctionFromCallables, FF> = 0></div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01131.html#a9509c11776197d4e92b8d1f0ad2a10cb\"> 61</a></span> <a class=\"code hl_function\" href=\"a01131.html#a9509c11776197d4e92b8d1f0ad2a10cb\">DifferentiableFunctionFromCallables</a>(FF&& f) :</div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> f_(std::forward<FF>(f))</div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> {}</div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> </div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01131.html#a720d931d3d5ea77435ea74436c6ab489\"> 66</a></span> Range operator() (<span class=\"keyword\">const</span> Domain& x)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> <span class=\"keywordflow\">return</span> f_(x);</div>\n+<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> }</div>\n+<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> </div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00209.html#ga8bec39fece3c312f2030bab07b2e8721\"> 76</a></span> <span class=\"keyword\">friend</span> <a class=\"code hl_class\" href=\"a01095.html\">Derivative</a> <a class=\"code hl_friend\" href=\"a00209.html#ga8bec39fece3c312f2030bab07b2e8721\">derivative</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01127.html\">DifferentiableFunctionFromCallables</a>& t)</div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> {</div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"Derivative not implemented"</span>);</div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> }</div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> </div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> F f_;</div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span>};</div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> </div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> </div>\n <div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> </div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">//DUNE_FUNCTIONS_COMMON_FUNCTION_FROM_CALLABLE_HH</span></div>\n-<div class=\"ttc\" id=\"aa00086_html\"><div class=\"ttname\"><a href=\"a00086.html\">signature.hh</a></div></div>\n+<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits, <span class=\"keyword\">class </span>F, <span class=\"keyword\">class </span>DF, <span class=\"keyword\">class</span>... Derivatives></div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01135.html\"> 104</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01127.html\">DifferentiableFunctionFromCallables</a><Range(Domain), DerivativeTraits, F, DF, Derivatives...></div>\n+<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span>{</div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> </div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01135.html#a735498bd93fc1c8f33ae9b13ddb56143\"> 108</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01135.html#a735498bd93fc1c8f33ae9b13ddb56143\">Signature</a> = Range(Domain);</div>\n+<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01135.html#a8a377025a382bd84ae15639b09413719\"> 109</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01135.html#a8a377025a382bd84ae15639b09413719\">RawSignature</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_struct\" href=\"a01291.html\">SignatureTraits<Signature>::RawSignature</a>;</div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01135.html#a28d6edb5a9eb34766c6807a2f10550af\"> 110</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01135.html#a28d6edb5a9eb34766c6807a2f10550af\">DerivativeSignature</a> = <span class=\"keyword\">typename</span> DerivativeTraits<RawSignature>::Range(Domain);</div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> </div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01135.html#a7118c4732100128ccf78b42e5041ad61\"> 112</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01127.html\">Derivative</a> = <a class=\"code hl_class\" href=\"a01127.html\">DifferentiableFunctionFromCallables</a><<a class=\"code hl_typedef\" href=\"a01135.html#a28d6edb5a9eb34766c6807a2f10550af\">DerivativeSignature</a>, DerivativeTraits, DF, Derivatives...>;</div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> </div>\n+<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>FF, <span class=\"keyword\">class </span>DFF, <span class=\"keyword\">class</span>... DDFF></div>\n+<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01135.html#acc46161755dba3e7f6ca473b8e07fa35\"> 121</a></span> <a class=\"code hl_function\" href=\"a01135.html#acc46161755dba3e7f6ca473b8e07fa35\">DifferentiableFunctionFromCallables</a>(FF&& f, DFF&& df, DDFF&&... ddf) :</div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> f_(std::forward<FF>(f)),</div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> df_(std::forward<DFF>(df), std::forward<DDFF>(ddf)...)</div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> {}</div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> </div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01135.html#a20be0e57006d97a66ffb8959f1ed4664\"> 127</a></span> Range operator() (<span class=\"keyword\">const</span> Domain& x)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> <span class=\"keywordflow\">return</span> f_(x);</div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> }</div>\n+<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> </div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00209.html#ga8bec39fece3c312f2030bab07b2e8721\"> 137</a></span> <span class=\"keyword\">friend</span> <a class=\"code hl_class\" href=\"a01127.html\">Derivative</a> <a class=\"code hl_friend\" href=\"a00209.html#ga8bec39fece3c312f2030bab07b2e8721\">derivative</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01127.html\">DifferentiableFunctionFromCallables</a>& t)</div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> {</div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> <span class=\"keywordflow\">return</span> t.df_;</div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> }</div>\n+<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> </div>\n+<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> F f_;</div>\n+<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> Derivative df_;</div>\n+<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span>};</div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> </div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> </div>\n+<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits, <span class=\"keyword\">class</span>... F></div>\n+<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span>DifferentiableFunctionFromCallables<Signature, DerivativeTraits, F...></div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00209.html#gad3bb1b3fe74c7f750a3980f4c0ce0449\"> 164</a></span> <a class=\"code hl_function\" href=\"a00209.html#gad3bb1b3fe74c7f750a3980f4c0ce0449\">makeDifferentiableFunctionFromCallables</a>(<span class=\"keyword\">const</span> <a class=\"code hl_struct\" href=\"a01295.html\">SignatureTag<Signature, DerivativeTraits></a>& signatureTag, F&&... f)</div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span>{</div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01127.html\">DifferentiableFunctionFromCallables</a><Signature, DerivativeTraits, F...>(f...);</div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span>}</div>\n+<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> </div>\n+<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> </div>\n+<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> </div>\n+<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span>} <span class=\"comment\">// namespace Functions</span></div>\n+<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span>} <span class=\"comment\">// namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> </div>\n+<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">//DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH</span></div>\n+<div class=\"ttc\" id=\"aa00008_html\"><div class=\"ttname\"><a href=\"a00008.html\">signature.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00011_html\"><div class=\"ttname\"><a href=\"a00011.html\">differentiablefunction.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00020_html\"><div class=\"ttname\"><a href=\"a00020.html\">functionconcepts.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00209_html_ga8bec39fece3c312f2030bab07b2e8721\"><div class=\"ttname\"><a href=\"a00209.html#ga8bec39fece3c312f2030bab07b2e8721\">Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F >::derivative</a></div><div class=\"ttdeci\">friend Derivative derivative(const DifferentiableFunctionFromCallables &t)</div><div class=\"ttdoc\">Get derivative of DifferentiableFunctionFromCallables.</div><div class=\"ttdef\"><b>Definition:</b> differentiablefunctionfromcallables.hh:76</div></div>\n+<div class=\"ttc\" id=\"aa00209_html_gad3bb1b3fe74c7f750a3980f4c0ce0449\"><div class=\"ttname\"><a href=\"a00209.html#gad3bb1b3fe74c7f750a3980f4c0ce0449\">Dune::Functions::makeDifferentiableFunctionFromCallables</a></div><div class=\"ttdeci\">DifferentiableFunctionFromCallables< Signature, DerivativeTraits, F... > makeDifferentiableFunctionFromCallables(const SignatureTag< Signature, DerivativeTraits > &signatureTag, F &&... f)</div><div class=\"ttdoc\">Create a DifferentiableFunction from callables.</div><div class=\"ttdef\"><b>Definition:</b> differentiablefunctionfromcallables.hh:164</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa01211_html\"><div class=\"ttname\"><a href=\"a01211.html\">Dune::Functions::FunctionFromCallable</a></div><div class=\"ttdef\"><b>Definition:</b> functionfromcallable.hh:20</div></div>\n-<div class=\"ttc\" id=\"aa01215_html_a457340c945d3413b6285f28fde39a68b\"><div class=\"ttname\"><a href=\"a01215.html#a457340c945d3413b6285f28fde39a68b\">Dune::Functions::FunctionFromCallable< Range(Domain), F, FunctionInterface >::FunctionFromCallable</a></div><div class=\"ttdeci\">FunctionFromCallable(F &&f)</div><div class=\"ttdoc\">Create VirtualFunction from callable object.</div><div class=\"ttdef\"><b>Definition:</b> functionfromcallable.hh:52</div></div>\n-<div class=\"ttc\" id=\"aa01215_html_a6aca1daa3b7cbe5c186121333ceb21f7\"><div class=\"ttname\"><a href=\"a01215.html#a6aca1daa3b7cbe5c186121333ceb21f7\">Dune::Functions::FunctionFromCallable< Range(Domain), F, FunctionInterface >::evaluate</a></div><div class=\"ttdeci\">void evaluate(const Domain &x, Range &y) const</div><div class=\"ttdoc\">Evaluate function.</div><div class=\"ttdef\"><b>Definition:</b> functionfromcallable.hh:73</div></div>\n-<div class=\"ttc\" id=\"aa01215_html_ae834ef8c2c819c027517478951ef332f\"><div class=\"ttname\"><a href=\"a01215.html#ae834ef8c2c819c027517478951ef332f\">Dune::Functions::FunctionFromCallable< Range(Domain), F, FunctionInterface >::FunctionFromCallable</a></div><div class=\"ttdeci\">FunctionFromCallable(const F &f)</div><div class=\"ttdoc\">Create VirtualFunction from callable object.</div><div class=\"ttdef\"><b>Definition:</b> functionfromcallable.hh:64</div></div>\n+<div class=\"ttc\" id=\"aa01095_html\"><div class=\"ttname\"><a href=\"a01095.html\">Dune::Functions::DifferentiableFunction</a></div><div class=\"ttdef\"><b>Definition:</b> differentiablefunction.hh:29</div></div>\n+<div class=\"ttc\" id=\"aa01127_html\"><div class=\"ttname\"><a href=\"a01127.html\">Dune::Functions::DifferentiableFunctionFromCallables</a></div><div class=\"ttdef\"><b>Definition:</b> differentiablefunctionfromcallables.hh:23</div></div>\n+<div class=\"ttc\" id=\"aa01131_html_a9509c11776197d4e92b8d1f0ad2a10cb\"><div class=\"ttname\"><a href=\"a01131.html#a9509c11776197d4e92b8d1f0ad2a10cb\">Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F >::DifferentiableFunctionFromCallables</a></div><div class=\"ttdeci\">DifferentiableFunctionFromCallables(FF &&f)</div><div class=\"ttdoc\">Constructor copying the given function.</div><div class=\"ttdef\"><b>Definition:</b> differentiablefunctionfromcallables.hh:61</div></div>\n+<div class=\"ttc\" id=\"aa01131_html_acce6cff869c703e4f707474228581e03\"><div class=\"ttname\"><a href=\"a01131.html#acce6cff869c703e4f707474228581e03\">Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F >::RawSignature</a></div><div class=\"ttdeci\">typename SignatureTraits< Signature >::RawSignature RawSignature</div><div class=\"ttdef\"><b>Definition:</b> differentiablefunctionfromcallables.hh:51</div></div>\n+<div class=\"ttc\" id=\"aa01131_html_acffaa1044b3ca19944d0f78fc0ff1ac4\"><div class=\"ttname\"><a href=\"a01131.html#acffaa1044b3ca19944d0f78fc0ff1ac4\">Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F >::Signature</a></div><div class=\"ttdeci\">Range(Domain) Signature</div><div class=\"ttdoc\">Signature of function.</div><div class=\"ttdef\"><b>Definition:</b> differentiablefunctionfromcallables.hh:49</div></div>\n+<div class=\"ttc\" id=\"aa01131_html_af3d92b77ee01a494d609225d37eb5259\"><div class=\"ttname\"><a href=\"a01131.html#af3d92b77ee01a494d609225d37eb5259\">Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F >::DerivativeSignature</a></div><div class=\"ttdeci\">typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature</div><div class=\"ttdoc\">Signature of derivative.</div><div class=\"ttdef\"><b>Definition:</b> differentiablefunctionfromcallables.hh:54</div></div>\n+<div class=\"ttc\" id=\"aa01135_html_a28d6edb5a9eb34766c6807a2f10550af\"><div class=\"ttname\"><a href=\"a01135.html#a28d6edb5a9eb34766c6807a2f10550af\">Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F, DF, Derivatives... >::DerivativeSignature</a></div><div class=\"ttdeci\">typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature</div><div class=\"ttdef\"><b>Definition:</b> differentiablefunctionfromcallables.hh:110</div></div>\n+<div class=\"ttc\" id=\"aa01135_html_a735498bd93fc1c8f33ae9b13ddb56143\"><div class=\"ttname\"><a href=\"a01135.html#a735498bd93fc1c8f33ae9b13ddb56143\">Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F, DF, Derivatives... >::Signature</a></div><div class=\"ttdeci\">Range(Domain) Signature</div><div class=\"ttdef\"><b>Definition:</b> differentiablefunctionfromcallables.hh:108</div></div>\n+<div class=\"ttc\" id=\"aa01135_html_a8a377025a382bd84ae15639b09413719\"><div class=\"ttname\"><a href=\"a01135.html#a8a377025a382bd84ae15639b09413719\">Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F, DF, Derivatives... >::RawSignature</a></div><div class=\"ttdeci\">typename SignatureTraits< Signature >::RawSignature RawSignature</div><div class=\"ttdef\"><b>Definition:</b> differentiablefunctionfromcallables.hh:109</div></div>\n+<div class=\"ttc\" id=\"aa01135_html_acc46161755dba3e7f6ca473b8e07fa35\"><div class=\"ttname\"><a href=\"a01135.html#acc46161755dba3e7f6ca473b8e07fa35\">Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F, DF, Derivatives... >::DifferentiableFunctionFromCallables</a></div><div class=\"ttdeci\">DifferentiableFunctionFromCallables(FF &&f, DFF &&df, DDFF &&... ddf)</div><div class=\"ttdoc\">Constructor copying the given functions.</div><div class=\"ttdef\"><b>Definition:</b> differentiablefunctionfromcallables.hh:121</div></div>\n+<div class=\"ttc\" id=\"aa01291_html\"><div class=\"ttname\"><a href=\"a01291.html\">Dune::Functions::SignatureTraits</a></div><div class=\"ttdoc\">Helper class to deduce the signature of a callable.</div><div class=\"ttdef\"><b>Definition:</b> signature.hh:56</div></div>\n+<div class=\"ttc\" id=\"aa01295_html\"><div class=\"ttname\"><a href=\"a01295.html\">Dune::Functions::SignatureTag</a></div><div class=\"ttdef\"><b>Definition:</b> signature.hh:102</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,82 +5,191 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * common\n-functionfromcallable.hh\n+differentiablefunctionfromcallables.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_COMMON_FUNCTION_FROM_CALLABLE_HH\n- 4#define DUNE_FUNCTIONS_COMMON_FUNCTION_FROM_CALLABLE_HH\n+ 3#ifndef DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH\n+ 4#define DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH\n 5\n- 6#include <dune/common/function.hh>\n- 7\n- 8#include <dune/functions/common/signature.hh>\n+ 6\n+ 7#include <dune/common/typeutilities.hh>\n+ 8#include <dune/common/hybridutilities.hh>\n 9\n- 10\n- 11namespace Dune {\n- 12namespace Functions {\n- 13\n+ 10#include <dune/functions/common/signature.hh>\n+ 11\n+ 12#include <dune/functions/common/differentiablefunction.hh>\n+ 13#include <dune/functions/common/functionconcepts.hh>\n 14\n 15\n- 16template<class Signature, class F,\n- 17 class FunctionInterface = typename Dune::VirtualFunction<\n- 18 typename SignatureTraits<Signature>::RawDomain,\n- 19 typename SignatureTraits<Signature>::RawRange> >\n-20class FunctionFromCallable;\n+ 16\n+ 17namespace Dune {\n+ 18namespace Functions {\n+ 19\n+ 20\n 21\n- 37template<class Range, class Domain, class F, class FunctionInterface>\n-38class FunctionFromCallable<Range(Domain), F, FunctionInterface> :\n- 39 public FunctionInterface\n- 40{\n- 41public:\n- 42\n-52 FunctionFromCallable(F&& f) :\n- 53 f_(f)\n- 54 {}\n+ 22template<class Signature, template<class> class DerivativeTraits, class...\n+Callables>\n+23class DifferentiableFunctionFromCallables;\n+ 24\n+ 25\n+ 26\n+ 43template<class Range, class Domain, template<class> class DerivativeTraits,\n+class F>\n+44class DifferentiableFunctionFromCallables<Range(Domain), DerivativeTraits, F>\n+ 45{\n+ 46public:\n+ 47\n+49 using Signature = Range(Domain);\n+ 50\n+51 using RawSignature = typename SignatureTraits<Signature>::RawSignature;\n+ 52\n+54 using DerivativeSignature = typename DerivativeTraits<RawSignature>::Range\n+(Domain);\n 55\n-64 FunctionFromCallable(const F& f) :\n- 65 f_(f)\n- 66 {}\n- 67\n-73 void evaluate(const Domain& x, Range&y) const\n- 74 {\n- 75 y = f_(x);\n- 76 }\n- 77\n- 78private:\n- 79 F f_;\n- 80};\n- 81\n- 82\n- 83\n- 84} // namespace Functions\n- 85} // namespace Dune\n+57 using Derivative = DifferentiableFunction<DerivativeSignature,\n+DerivativeTraits>;\n+ 58\n+ 60 template<class FF, disableCopyMove<DifferentiableFunctionFromCallables, FF>\n+= 0>\n+61 DifferentiableFunctionFromCallables(FF&& f) :\n+ 62 f_(std::forward<FF>(f))\n+ 63 {}\n+ 64\n+66 Range operator() (const Domain& x) const\n+ 67 {\n+ 68 return f_(x);\n+ 69 }\n+ 70\n+76 friend Derivative derivative(const DifferentiableFunctionFromCallables& t)\n+ 77 {\n+ 78 DUNE_THROW(Dune::NotImplemented, \"Derivative not implemented\");\n+ 79 }\n+ 80\n+ 81private:\n+ 82 F f_;\n+ 83};\n+ 84\n+ 85\n 86\n- 87#endif //DUNE_FUNCTIONS_COMMON_FUNCTION_FROM_CALLABLE_HH\n+ 103template<class Range, class Domain, template<class> class DerivativeTraits,\n+class F, class DF, class... Derivatives>\n+104class DifferentiableFunctionFromCallables<Range(Domain), DerivativeTraits,\n+F, DF, Derivatives...>\n+ 105{\n+ 106public:\n+ 107\n+108 using Signature = Range(Domain);\n+109 using RawSignature = typename SignatureTraits<Signature>::RawSignature;\n+110 using DerivativeSignature = typename DerivativeTraits<RawSignature>::Range\n+(Domain);\n+ 111\n+112 using Derivative = DifferentiableFunctionFromCallables<DerivativeSignature,\n+DerivativeTraits, DF, Derivatives...>;\n+ 113\n+ 120 template<class FF, class DFF, class... DDFF>\n+121 DifferentiableFunctionFromCallables(FF&& f, DFF&& df, DDFF&&... ddf) :\n+ 122 f_(std::forward<FF>(f)),\n+ 123 df_(std::forward<DFF>(df), std::forward<DDFF>(ddf)...)\n+ 124 {}\n+ 125\n+127 Range operator() (const Domain& x) const\n+ 128 {\n+ 129 return f_(x);\n+ 130 }\n+ 131\n+137 friend Derivative derivative(const DifferentiableFunctionFromCallables& t)\n+ 138 {\n+ 139 return t.df_;\n+ 140 }\n+ 141\n+ 142private:\n+ 143 F f_;\n+ 144 Derivative df_;\n+ 145};\n+ 146\n+ 147\n+ 162template<class Signature, template<class> class DerivativeTraits, class...\n+F>\n+ 163DifferentiableFunctionFromCallables<Signature, DerivativeTraits, F...>\n+164 makeDifferentiableFunctionFromCallables(const SignatureTag<Signature,\n+DerivativeTraits>& signatureTag, F&&... f)\n+ 165{\n+ 166 return DifferentiableFunctionFromCallables<Signature, DerivativeTraits,\n+F...>(f...);\n+ 167}\n+ 168\n+ 169\n+ 170\n+ 171} // namespace Functions\n+ 172} // namespace Dune\n+ 173\n+ 174#endif //DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH\n signature.hh\n+differentiablefunction.hh\n+functionconcepts.hh\n+Dune::Functions::DifferentiableFunctionFromCallables<_Range(Domain),\n+DerivativeTraits,_F_>::derivative\n+friend Derivative derivative(const DifferentiableFunctionFromCallables &t)\n+Get derivative of DifferentiableFunctionFromCallables.\n+Definition: differentiablefunctionfromcallables.hh:76\n+Dune::Functions::makeDifferentiableFunctionFromCallables\n+DifferentiableFunctionFromCallables< Signature, DerivativeTraits, F... >\n+makeDifferentiableFunctionFromCallables(const SignatureTag< Signature,\n+DerivativeTraits > &signatureTag, F &&... f)\n+Create a DifferentiableFunction from callables.\n+Definition: differentiablefunctionfromcallables.hh:164\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::FunctionFromCallable\n-Definition: functionfromcallable.hh:20\n-Dune::Functions::FunctionFromCallable<_Range(Domain),_F,_FunctionInterface_>::\n-FunctionFromCallable\n-FunctionFromCallable(F &&f)\n-Create VirtualFunction from callable object.\n-Definition: functionfromcallable.hh:52\n-Dune::Functions::FunctionFromCallable<_Range(Domain),_F,_FunctionInterface_>::\n-evaluate\n-void evaluate(const Domain &x, Range &y) const\n-Evaluate function.\n-Definition: functionfromcallable.hh:73\n-Dune::Functions::FunctionFromCallable<_Range(Domain),_F,_FunctionInterface_>::\n-FunctionFromCallable\n-FunctionFromCallable(const F &f)\n-Create VirtualFunction from callable object.\n-Definition: functionfromcallable.hh:64\n+Dune::Functions::DifferentiableFunction\n+Definition: differentiablefunction.hh:29\n+Dune::Functions::DifferentiableFunctionFromCallables\n+Definition: differentiablefunctionfromcallables.hh:23\n+Dune::Functions::DifferentiableFunctionFromCallables<_Range(Domain),\n+DerivativeTraits,_F_>::DifferentiableFunctionFromCallables\n+DifferentiableFunctionFromCallables(FF &&f)\n+Constructor copying the given function.\n+Definition: differentiablefunctionfromcallables.hh:61\n+Dune::Functions::DifferentiableFunctionFromCallables<_Range(Domain),\n+DerivativeTraits,_F_>::RawSignature\n+typename SignatureTraits< Signature >::RawSignature RawSignature\n+Definition: differentiablefunctionfromcallables.hh:51\n+Dune::Functions::DifferentiableFunctionFromCallables<_Range(Domain),\n+DerivativeTraits,_F_>::Signature\n+Range(Domain) Signature\n+Signature of function.\n+Definition: differentiablefunctionfromcallables.hh:49\n+Dune::Functions::DifferentiableFunctionFromCallables<_Range(Domain),\n+DerivativeTraits,_F_>::DerivativeSignature\n+typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature\n+Signature of derivative.\n+Definition: differentiablefunctionfromcallables.hh:54\n+Dune::Functions::DifferentiableFunctionFromCallables<_Range(Domain),\n+DerivativeTraits,_F,_DF,_Derivatives..._>::DerivativeSignature\n+typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature\n+Definition: differentiablefunctionfromcallables.hh:110\n+Dune::Functions::DifferentiableFunctionFromCallables<_Range(Domain),\n+DerivativeTraits,_F,_DF,_Derivatives..._>::Signature\n+Range(Domain) Signature\n+Definition: differentiablefunctionfromcallables.hh:108\n+Dune::Functions::DifferentiableFunctionFromCallables<_Range(Domain),\n+DerivativeTraits,_F,_DF,_Derivatives..._>::RawSignature\n+typename SignatureTraits< Signature >::RawSignature RawSignature\n+Definition: differentiablefunctionfromcallables.hh:109\n+Dune::Functions::DifferentiableFunctionFromCallables<_Range(Domain),\n+DerivativeTraits,_F,_DF,_Derivatives..._>::DifferentiableFunctionFromCallables\n+DifferentiableFunctionFromCallables(FF &&f, DFF &&df, DDFF &&... ddf)\n+Constructor copying the given functions.\n+Definition: differentiablefunctionfromcallables.hh:121\n+Dune::Functions::SignatureTraits\n+Helper class to deduce the signature of a callable.\n+Definition: signature.hh:56\n+Dune::Functions::SignatureTag\n+Definition: signature.hh:102\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00050.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00050.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: utility.hh File Reference</title>\n+<title>dune-functions: typeerasure.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -64,91 +64,38 @@\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n-<a href=\"#namespaces\">Namespaces</a> |\n-<a href=\"#typedef-members\">Typedefs</a> |\n-<a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">utility.hh File Reference</div></div>\n+<a href=\"#namespaces\">Namespaces</a> </div>\n+ <div class=\"headertitle\"><div class=\"title\">typeerasure.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <utility></code><br />\n-<code>#include <type_traits></code><br />\n-<code>#include <dune/common/overloadset.hh></code><br />\n-<code>#include <dune/common/indices.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00053_source.html\">dune/functions/common/functionconcepts.hh</a>></code><br />\n+<div class=\"textblock\"><code>#include <typeinfo></code><br />\n+<code>#include <dune/common/typeutilities.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00029_source.html\">dune/functions/common/type_traits.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00026_source.html\">dune/functions/common/interfaces.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00068_source.html\">dune/functions/common/polymorphicsmallobject.hh</a>></code><br />\n </div>\n <p><a href=\"a00050_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01383.html\">Dune::Functions::LastType< T ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Get last entry of type list. <a href=\"a01383.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01395.html\">Dune::Functions::RotateTuple< T ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Rotate type list by one, such that last entry is moved to first position. <a href=\"a01395.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01351.html\">Dune::Functions::TypeErasureBase< Interface, Implementation, bufferSize ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Base class for type-erased interface wrapper. <a href=\"a01351.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-</table><table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"typedef-members\" name=\"typedef-members\"></a>\n-Typedefs</h2></td></tr>\n-<tr class=\"memitem:ga047a2180b455bfa030fba76eb6270952\"><td class=\"memTemplParams\" colspan=\"2\">template<template< class... > class T, class ArgTuple > </td></tr>\n-<tr class=\"memitem:ga047a2180b455bfa030fba76eb6270952\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00215.html#ga047a2180b455bfa030fba76eb6270952\">Dune::Functions::ExpandTuple</a> = typename Imp::ExpandTupleHelper< T, ArgTuple >::Type</td></tr>\n-<tr class=\"memdesc:ga047a2180b455bfa030fba76eb6270952\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Expand tuple arguments as template arguments. <a href=\"a00215.html#ga047a2180b455bfa030fba76eb6270952\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga047a2180b455bfa030fba76eb6270952\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:ga1ce77345fbee606e5ac22aeef7d109d6\"><td class=\"memTemplParams\" colspan=\"2\">template<template< class... > class F, class... Tuples> </td></tr>\n-<tr class=\"memitem:ga1ce77345fbee606e5ac22aeef7d109d6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00215.html#ga1ce77345fbee606e5ac22aeef7d109d6\">Dune::Functions::TransformTuple</a> = typename Imp::TransformTupleHelper< F, Tuples... >::Type</td></tr>\n-<tr class=\"memdesc:ga1ce77345fbee606e5ac22aeef7d109d6\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Transform tuple types argument using type-functor. <a href=\"a00215.html#ga1ce77345fbee606e5ac22aeef7d109d6\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga1ce77345fbee606e5ac22aeef7d109d6\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:ad7adaea3a8e209aef72602f07a6988b3\"><td class=\"memTemplParams\" colspan=\"2\">template<class IntegerSequence > </td></tr>\n-<tr class=\"memitem:ad7adaea3a8e209aef72602f07a6988b3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#ad7adaea3a8e209aef72602f07a6988b3\">Dune::Functions::IntegerSequenceTuple</a> = typename Imp::IntegerSequenceTupleHelper< IntegerSequence >::Type</td></tr>\n-<tr class=\"memdesc:ad7adaea3a8e209aef72602f07a6988b3\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Transform integer_sequence<I,k...> to tuple<integral_constant<I,k>...> <a href=\"a00219.html#ad7adaea3a8e209aef72602f07a6988b3\">More...</a><br /></td></tr>\n-<tr class=\"separator:ad7adaea3a8e209aef72602f07a6988b3\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-</table><table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n-Functions</h2></td></tr>\n-<tr class=\"memitem:a84f8a9700ef8b12973e210ee4674c2b7\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class size_type , size_type firstValue, class... Args> </td></tr>\n-<tr class=\"memitem:a84f8a9700ef8b12973e210ee4674c2b7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a84f8a9700ef8b12973e210ee4674c2b7\">Dune::Functions::forwardAsStaticInteger</a> (std::integer_sequence< size_type, firstValue > values, const size_type &i, F &&f, Args &&... args) -> decltype(f(std::integral_constant< size_type, firstValue >(), std::forward< Args >(args)...))</td></tr>\n-<tr class=\"separator:a84f8a9700ef8b12973e210ee4674c2b7\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a4e975086fb37cbf3e33cc42a2b4ef1e2\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class size_type , size_type firstValue, size_type secondValue, size_type... otherValues, class... Args> </td></tr>\n-<tr class=\"memitem:a4e975086fb37cbf3e33cc42a2b4ef1e2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a4e975086fb37cbf3e33cc42a2b4ef1e2\">Dune::Functions::forwardAsStaticInteger</a> (std::integer_sequence< size_type, firstValue, secondValue, otherValues... > values, const size_type i, F &&f, Args &&... args) -> decltype(f(std::integral_constant< size_type, firstValue >(), std::forward< Args >(args)...))</td></tr>\n-<tr class=\"separator:a4e975086fb37cbf3e33cc42a2b4ef1e2\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:gac7d45de6c68fce943e6924403389d234\"><td class=\"memTemplParams\" colspan=\"2\">template<std::size_t end, class F , class size_type , class... Args> </td></tr>\n-<tr class=\"memitem:gac7d45de6c68fce943e6924403389d234\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00215.html#gac7d45de6c68fce943e6924403389d234\">Dune::Functions::forwardAsStaticIndex</a> (const size_type &i, F &&f, Args &&... args) -> decltype(f(Dune::Indices::_0, std::forward< Args >(args)...))</td></tr>\n-<tr class=\"memdesc:gac7d45de6c68fce943e6924403389d234\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Transform dynamic index to static index_constant. <a href=\"a00215.html#gac7d45de6c68fce943e6924403389d234\">More...</a><br /></td></tr>\n-<tr class=\"separator:gac7d45de6c68fce943e6924403389d234\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:ga4e5fbe8e1330cdfab9eddd5962682b4c\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class... T> </td></tr>\n-<tr class=\"memitem:ga4e5fbe8e1330cdfab9eddd5962682b4c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00215.html#ga4e5fbe8e1330cdfab9eddd5962682b4c\">Dune::Functions::transformTuple</a> (F &&f, const std::tuple< T... > &tuple) -> decltype(Imp::transformTupleHelper(std::forward< F >(f), tuple, std::index_sequence_for< T... >{}))</td></tr>\n-<tr class=\"memdesc:ga4e5fbe8e1330cdfab9eddd5962682b4c\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Transform tuple value using a functor. <a href=\"a00215.html#ga4e5fbe8e1330cdfab9eddd5962682b4c\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga4e5fbe8e1330cdfab9eddd5962682b4c\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:gae663a5bfd683c8a0844bb974807d8f52\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class... T1, class... T2> </td></tr>\n-<tr class=\"memitem:gae663a5bfd683c8a0844bb974807d8f52\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00215.html#gae663a5bfd683c8a0844bb974807d8f52\">Dune::Functions::transformTuple</a> (F &&f, const std::tuple< T1... > &tuple1, const std::tuple< T2... > &tuple2) -> decltype(Imp::transformTupleHelper(std::forward< F >(f), tuple1, tuple2, std::index_sequence_for< T1... >{}))</td></tr>\n-<tr class=\"memdesc:gae663a5bfd683c8a0844bb974807d8f52\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Transform tuple value using a binary functor. <a href=\"a00215.html#gae663a5bfd683c8a0844bb974807d8f52\">More...</a><br /></td></tr>\n-<tr class=\"separator:gae663a5bfd683c8a0844bb974807d8f52\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:ga7d55c56e78792c4b169c18d875a60935\"><td class=\"memTemplParams\" colspan=\"2\">template<class Expression > </td></tr>\n-<tr class=\"memitem:ga7d55c56e78792c4b169c18d875a60935\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00215.html#ga7d55c56e78792c4b169c18d875a60935\">Dune::Functions::callableCheck</a> (Expression f)</td></tr>\n-<tr class=\"memdesc:ga7d55c56e78792c4b169c18d875a60935\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a predicate for checking validity of expressions. <a href=\"a00215.html#ga7d55c56e78792c4b169c18d875a60935\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga7d55c56e78792c4b169c18d875a60935\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:gaed02f0c6f78e0d71e09d9bc6a29347c4\"><td class=\"memTemplParams\" colspan=\"2\">template<class Check > </td></tr>\n-<tr class=\"memitem:gaed02f0c6f78e0d71e09d9bc6a29347c4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00215.html#gaed02f0c6f78e0d71e09d9bc6a29347c4\">Dune::Functions::negatePredicate</a> (Check check)</td></tr>\n-<tr class=\"memdesc:gaed02f0c6f78e0d71e09d9bc6a29347c4\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Negate given predicate. <a href=\"a00215.html#gaed02f0c6f78e0d71e09d9bc6a29347c4\">More...</a><br /></td></tr>\n-<tr class=\"separator:gaed02f0c6f78e0d71e09d9bc6a29347c4\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a6bb3a351c2ab1b4eb46d4ba1ec3d95a0\"><td class=\"memTemplParams\" colspan=\"2\">template<class T > </td></tr>\n-<tr class=\"memitem:a6bb3a351c2ab1b4eb46d4ba1ec3d95a0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a6bb3a351c2ab1b4eb46d4ba1ec3d95a0\">Dune::Functions::forwardCapture</a> (T &&t)</td></tr>\n-<tr class=\"memdesc:a6bb3a351c2ab1b4eb46d4ba1ec3d95a0\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a capture object for perfect forwarding. <a href=\"a00219.html#a6bb3a351c2ab1b4eb46d4ba1ec3d95a0\">More...</a><br /></td></tr>\n-<tr class=\"separator:a6bb3a351c2ab1b4eb46d4ba1ec3d95a0\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,94 +5,28 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * common\n-Classes | Namespaces | Typedefs | Functions\n-utility.hh File Reference\n-#include <utility>\n-#include <type_traits>\n-#include <dune/common/overloadset.hh>\n-#include <dune/common/indices.hh>\n-#include <dune/functions/common/functionconcepts.hh>\n+Classes | Namespaces\n+typeerasure.hh File Reference\n+#include <typeinfo>\n+#include <dune/common/typeutilities.hh>\n+#include <dune/functions/common/type_traits.hh>\n+#include <dune/functions/common/interfaces.hh>\n+#include <dune/functions/common/polymorphicsmallobject.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-struct \u00a0Dune::Functions::LastType<_T_>\n-\u00a0 Get last entry of type list. More...\n-\u00a0\n-struct \u00a0Dune::Functions::RotateTuple<_T_>\n-\u00a0 Rotate type list by one, such that last entry is moved to first\n- position. More...\n+class \u00a0Dune::Functions::TypeErasureBase<_Interface,_Implementation,_bufferSize\n+ >\n+\u00a0 Base class for type-erased interface wrapper. More...\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n- Typedefs\n-template<template< class... > class T, class ArgTuple >\n-using\u00a0Dune::Functions::ExpandTuple = typename Imp::ExpandTupleHelper< T,\n- ArgTuple >::Type\n-\u00a0 Expand tuple arguments as template arguments. More...\n-\u00a0\n-template<template< class... > class F, class... Tuples>\n-using\u00a0Dune::Functions::TransformTuple = typename Imp::TransformTupleHelper< F,\n- Tuples... >::Type\n-\u00a0 Transform tuple types argument using type-functor. More...\n-\u00a0\n-template<class IntegerSequence >\n-using\u00a0Dune::Functions::IntegerSequenceTuple = typename Imp::\n- IntegerSequenceTupleHelper< IntegerSequence >::Type\n-\u00a0 Transform integer_sequence<I,k...> to tuple<integral_constant<I,k>...>\n- More...\n-\u00a0\n- Functions\n-template<class F , class size_type , size_type firstValue, class... Args>\n-auto\u00a0Dune::Functions::forwardAsStaticInteger (std::integer_sequence<\n- size_type, firstValue > values, const size_type &i, F &&f, Args &&...\n- args) -> decltype(f(std::integral_constant< size_type, firstValue >(),\n- std::forward< Args >(args)...))\n-\u00a0\n-template<class F , class size_type , size_type firstValue, size_type\n-secondValue, size_type... otherValues, class... Args>\n-auto\u00a0Dune::Functions::forwardAsStaticInteger (std::integer_sequence<\n- size_type, firstValue, secondValue, otherValues... > values, const\n- size_type i, F &&f, Args &&... args) -> decltype(f(std::\n- integral_constant< size_type, firstValue >(), std::forward< Args >\n- (args)...))\n-\u00a0\n-template<std::size_t end, class F , class size_type , class... Args>\n-auto\u00a0Dune::Functions::forwardAsStaticIndex (const size_type &i, F &&f, Args\n- &&... args) -> decltype(f(Dune::Indices::_0, std::forward< Args >\n- (args)...))\n-\u00a0 Transform dynamic index to static index_constant. More...\n-\u00a0\n-template<class F , class... T>\n-auto\u00a0Dune::Functions::transformTuple (F &&f, const std::tuple< T... > &tuple)\n- -> decltype(Imp::transformTupleHelper(std::forward< F >(f), tuple, std::\n- index_sequence_for< T... >{}))\n-\u00a0 Transform tuple value using a functor. More...\n-\u00a0\n-template<class F , class... T1, class... T2>\n-auto\u00a0Dune::Functions::transformTuple (F &&f, const std::tuple< T1... >\n- &tuple1, const std::tuple< T2... > &tuple2) -> decltype(Imp::\n- transformTupleHelper(std::forward< F >(f), tuple1, tuple2, std::\n- index_sequence_for< T1... >{}))\n-\u00a0 Transform tuple value using a binary functor. More...\n-\u00a0\n-template<class Expression >\n-auto\u00a0Dune::Functions::callableCheck (Expression f)\n-\u00a0 Create a predicate for checking validity of expressions. More...\n-\u00a0\n-template<class Check >\n-auto\u00a0Dune::Functions::negatePredicate (Check check)\n-\u00a0 Negate given predicate. More...\n-\u00a0\n-template<class T >\n-auto\u00a0Dune::Functions::forwardCapture (T &&t)\n-\u00a0 Create a capture object for perfect forwarding. More...\n-\u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00050_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00050_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: utility.hh Source File</title>\n+<title>dune-functions: typeerasure.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,284 +62,159 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">utility.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">typeerasure.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00050.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_UTILITY_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_UTILITY_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span> </div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <utility></span></div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <type_traits></span></div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <typeinfo></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span> </div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <dune/common/typeutilities.hh></span></div>\n <div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/overloadset.hh></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/common/indices.hh></span></div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00053.html\">dune/functions/common/functionconcepts.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00029.html\">dune/functions/common/type_traits.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00026.html\">dune/functions/common/interfaces.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00068.html\">dune/functions/common/polymorphicsmallobject.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"keyword\">namespace </span>Imp {</div>\n <div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n <div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n <div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>F, <span class=\"keyword\">class </span>size_type, size_type firstValue, <span class=\"keyword\">class</span>... Args></div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a84f8a9700ef8b12973e210ee4674c2b7\"> 21</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00219.html#a84f8a9700ef8b12973e210ee4674c2b7\">forwardAsStaticInteger</a>(std::integer_sequence<size_type, firstValue> values, <span class=\"keyword\">const</span> size_type& i, F&& f, Args&&... args)</div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> ->decltype(f(std::integral_constant<size_type, firstValue>(), std::forward<Args>(args)...))</div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span>{</div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> <span class=\"keywordflow\">return</span> f(std::integral_constant<size_type, firstValue>(), std::forward<Args>(args)...);</div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span>}</div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> </div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>F, <span class=\"keyword\">class </span>size_type, size_type firstValue, size_type secondValue, size_type... otherValues, <span class=\"keyword\">class</span>... Args></div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a4e975086fb37cbf3e33cc42a2b4ef1e2\"> 28</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00219.html#a84f8a9700ef8b12973e210ee4674c2b7\">forwardAsStaticInteger</a>(std::integer_sequence<size_type, firstValue, secondValue, otherValues...> values, <span class=\"keyword\">const</span> size_type i, F&& f, Args&&... args)</div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span> ->decltype(f(std::integral_constant<size_type, firstValue>(), std::forward<Args>(args)...))</div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span>{</div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> <span class=\"keywordflow\">if</span> (i==firstValue)</div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> <span class=\"keywordflow\">return</span> f(std::integral_constant<size_type, firstValue>(), std::forward<Args>(args)...);</div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00219.html#a84f8a9700ef8b12973e210ee4674c2b7\">forwardAsStaticInteger</a>(std::integer_sequence<size_type, secondValue, otherValues...>(), i, std::forward<F>(f), std::forward<Args>(args)...);</div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span>}</div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> </div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> </div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> </div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span><span class=\"keyword\">template</span><std::size_t end, <span class=\"keyword\">class </span>F, <span class=\"keyword\">class </span>size_type, <span class=\"keyword\">class</span>... Args></div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00215.html#gac7d45de6c68fce943e6924403389d234\"> 60</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00215.html#gac7d45de6c68fce943e6924403389d234\">forwardAsStaticIndex</a>(<span class=\"keyword\">const</span> size_type& i, F&& f, Args&&... args)</div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> ->decltype(f(Dune::Indices::_0, std::forward<Args>(args)...))</div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span>{</div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00219.html#a84f8a9700ef8b12973e210ee4674c2b7\">forwardAsStaticInteger</a>(std::make_index_sequence<end>{}, i, std::forward<F>(f), std::forward<Args>(args)...);</div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span>}</div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> </div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> </div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> </div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span><span class=\"keyword\">namespace </span>Imp {</div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Interface></div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span><span class=\"keyword\">class </span>TypeErasureWrapperInterface :</div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> <span class=\"keyword\">public</span> Interface,</div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> <span class=\"keyword\">public</span> PolymorphicType<TypeErasureWrapperInterface<Interface>></div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span>{</div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> <span class=\"keyword\">virtual</span> <span class=\"keyword\">const</span> std::type_info& target_type() <span class=\"keyword\">const</span> = 0;</div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span>};</div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> </div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> </div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> </div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Interface, <span class=\"keyword\">class</span> T></div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span><span class=\"keyword\">class </span>TypeErasureWrapperBase :</div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> <span class=\"keyword\">public</span> TypeErasureWrapperInterface<Interface></div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span>{</div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> TT, disableCopyMove<TypeErasureWrapperBase, TT> = 0></div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> TypeErasureWrapperBase(TT&& t) :</div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> wrapped_(std::forward<TT>(t))</div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> {}</div>\n <div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> </div>\n-<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> <span class=\"keyword\">template</span><<span class=\"keyword\">template</span><<span class=\"keyword\">class</span>...> <span class=\"keyword\">class </span>T, <span class=\"keyword\">class </span>List></div>\n-<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> <span class=\"keyword\">struct </span>ExpandTupleHelper</div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> {};</div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> </div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> <span class=\"keyword\">template</span><<span class=\"keyword\">template</span><<span class=\"keyword\">class</span>...> <span class=\"keyword\">class </span>T, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>...> <span class=\"keyword\">class </span>ListType, <span class=\"keyword\">class</span>... Args></div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> <span class=\"keyword\">struct </span>ExpandTupleHelper<T, ListType<Args...>></div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> {</div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> <span class=\"keyword\">using </span>Type = T<Args...>;</div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> };</div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> </div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span>} <span class=\"comment\">// end namespace Imp</span></div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> T& get()</div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> {</div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> <span class=\"keywordflow\">return</span> wrapped_;</div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> }</div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> </div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> <span class=\"keyword\">const</span> T& get()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> <span class=\"keywordflow\">return</span> wrapped_;</div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> }</div>\n <div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> </div>\n-<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span><span class=\"keyword\">template</span><<span class=\"keyword\">template</span><<span class=\"keyword\">class</span>...> <span class=\"keyword\">class </span>T, <span class=\"keyword\">class </span>ArgTuple></div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00215.html#ga047a2180b455bfa030fba76eb6270952\"> 94</a></span><span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a00215.html#ga047a2180b455bfa030fba76eb6270952\">ExpandTuple</a> = <span class=\"keyword\">typename</span> Imp::ExpandTupleHelper<T, ArgTuple>::Type;</div>\n-<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> </div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> </div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> </div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span><span class=\"keyword\">namespace </span>Imp {</div>\n-<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> </div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> <span class=\"keyword\">template</span><<span class=\"keyword\">template</span><<span class=\"keyword\">class</span>...> <span class=\"keyword\">class </span>T, <span class=\"keyword\">class</span>... Tuple></div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> <span class=\"keyword\">struct </span>TransformTupleHelper</div>\n-<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> {};</div>\n-<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> </div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> <span class=\"keyword\">template</span><<span class=\"keyword\">template</span><<span class=\"keyword\">class</span>...> <span class=\"keyword\">class </span>T, <span class=\"keyword\">class</span>... Args1></div>\n-<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> <span class=\"keyword\">struct </span>TransformTupleHelper<T, typename std::tuple<Args1...>></div>\n-<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> {</div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> <span class=\"keyword\">using </span>Type = std::tuple<T<Args1>...>;</div>\n-<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> };</div>\n-<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> </div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> <span class=\"keyword\">template</span><<span class=\"keyword\">template</span><<span class=\"keyword\">class</span>...> <span class=\"keyword\">class </span>T, <span class=\"keyword\">class</span>... Args1, <span class=\"keyword\">class</span>... Args2></div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> <span class=\"keyword\">struct </span>TransformTupleHelper<T, typename std::tuple<Args1...>, typename std::tuple<Args2...>></div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> {</div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> <span class=\"keyword\">using </span>Type = std::tuple<T<Args1, Args2>...>;</div>\n-<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> };</div>\n-<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> </div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span>} <span class=\"comment\">// end namespace Imp</span></div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span><span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> <span class=\"keyword\">using </span>Wrapped = T;</div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> Wrapped wrapped_;</div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span>};</div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> </div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> </div>\n+<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> </div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Interface, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>Implementation, <span class=\"keyword\">class </span>T></div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span><span class=\"keyword\">class </span>TypeErasureWrapperImplementation :</div>\n+<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> <span class=\"keyword\">public</span> Implementation<TypeErasureWrapperBase<Interface, T> ></div>\n+<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span>{</div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span><span class=\"keyword\">public</span>:</div>\n <div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> </div>\n-<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span><span class=\"keyword\">template</span><<span class=\"keyword\">template</span><<span class=\"keyword\">class</span>...> <span class=\"keyword\">class </span>F, <span class=\"keyword\">class</span>... Tuples></div>\n-<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00215.html#ga1ce77345fbee606e5ac22aeef7d109d6\"> 131</a></span><span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a00215.html#ga1ce77345fbee606e5ac22aeef7d109d6\">TransformTuple</a> = <span class=\"keyword\">typename</span> Imp::TransformTupleHelper<F, Tuples...>::Type;</div>\n-<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> </div>\n-<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> </div>\n-<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> </div>\n-<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span><span class=\"keyword\">namespace </span>Imp {</div>\n-<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> </div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>F, <span class=\"keyword\">class</span>... T, std::size_t... k></div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> <span class=\"keyword\">auto</span> transformTupleHelper(F&& f, <span class=\"keyword\">const</span> std::tuple<T...>& tuple, std::index_sequence<k...>)</div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> -> <span class=\"keyword\">decltype</span>(std::make_tuple(f(std::get<k>(tuple))...))</div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> {</div>\n-<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> <span class=\"keywordflow\">return</span> std::make_tuple(f(std::get<k>(tuple))...);</div>\n-<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> }</div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> </div>\n-<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>F, <span class=\"keyword\">class</span>... T1, <span class=\"keyword\">class</span>...T2, std::size_t... k></div>\n-<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> <span class=\"keyword\">auto</span> transformTupleHelper(F&& f, <span class=\"keyword\">const</span> std::tuple<T1...>& tuple1, <span class=\"keyword\">const</span> std::tuple<T2...>& tuple2, std::index_sequence<k...>)</div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> -> <span class=\"keyword\">decltype</span>(std::make_tuple(f(std::get<k>(tuple1), std::get<k>(tuple2))...))</div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> {</div>\n-<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> <span class=\"keywordflow\">return</span> std::make_tuple(f(std::get<k>(tuple1), std::get<k>(tuple2))...);</div>\n-<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> }</div>\n+<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> TT, disableCopyMove<TypeErasureWrapperImplementation, T> = 0></div>\n+<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> TypeErasureWrapperImplementation(TT&& t) :</div>\n+<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> Implementation<TypeErasureWrapperBase<Interface, T> >(std::forward<TT>(t))</div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> {}</div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> </div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> <span class=\"keyword\">virtual</span> TypeErasureWrapperImplementation* clone()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> <span class=\"keywordflow\">return</span> <span class=\"keyword\">new</span> TypeErasureWrapperImplementation(*<span class=\"keyword\">this</span>);</div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> }</div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> </div>\n+<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> <span class=\"keyword\">virtual</span> TypeErasureWrapperImplementation* clone(<span class=\"keywordtype\">void</span>* buffer)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> <span class=\"keywordflow\">return</span> <span class=\"keyword\">new</span> (buffer) TypeErasureWrapperImplementation(*<span class=\"keyword\">this</span>);</div>\n+<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> }</div>\n+<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> </div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> <span class=\"keyword\">virtual</span> TypeErasureWrapperImplementation* move(<span class=\"keywordtype\">void</span>* buffer)</div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> {</div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> <span class=\"keywordflow\">return</span> <span class=\"keyword\">new</span> (buffer) TypeErasureWrapperImplementation(std::move(*<span class=\"keyword\">this</span>));</div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> }</div>\n+<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> </div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> <span class=\"keyword\">virtual</span> <span class=\"keyword\">const</span> std::type_info& target_type()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> <span class=\"keywordflow\">return</span> <span class=\"keyword\">typeid</span>(T);</div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> }</div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span>};</div>\n+<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> </div>\n+<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span>} <span class=\"comment\">// namespace Dune::Functions::Imp</span></div>\n <div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> </div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span>} <span class=\"comment\">// end namespace Imp</span></div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> </div>\n <div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> </div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>F, <span class=\"keyword\">class</span>... T></div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00215.html#ga4e5fbe8e1330cdfab9eddd5962682b4c\"> 165</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00215.html#ga4e5fbe8e1330cdfab9eddd5962682b4c\">transformTuple</a>(F&& f, <span class=\"keyword\">const</span> std::tuple<T...>& tuple)</div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> -> <span class=\"keyword\">decltype</span>(Imp::transformTupleHelper(std::forward<F>(f), tuple, std::index_sequence_for<T...>{}))</div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span>{</div>\n-<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> <span class=\"keywordflow\">return</span> Imp::transformTupleHelper(std::forward<F>(f), tuple, std::index_sequence_for<T...>{});</div>\n-<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span>}</div>\n-<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> </div>\n-<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>F, <span class=\"keyword\">class</span>... T1, <span class=\"keyword\">class</span>... T2></div>\n-<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00215.html#gae663a5bfd683c8a0844bb974807d8f52\"> 185</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00215.html#ga4e5fbe8e1330cdfab9eddd5962682b4c\">transformTuple</a>(F&& f, <span class=\"keyword\">const</span> std::tuple<T1...>& tuple1, <span class=\"keyword\">const</span> std::tuple<T2...>& tuple2)</div>\n-<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> -> <span class=\"keyword\">decltype</span>(Imp::transformTupleHelper(std::forward<F>(f), tuple1, tuple2, std::index_sequence_for<T1...>{}))</div>\n-<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span>{</div>\n-<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> <span class=\"keywordflow\">return</span> Imp::transformTupleHelper(std::forward<F>(f), tuple1, tuple2, std::index_sequence_for<T1...>{});</div>\n-<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span>}</div>\n-<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span> </div>\n-<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> </div>\n-<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> </div>\n-<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span><span class=\"keyword\">namespace </span>Imp {</div>\n+<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Interface, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>Implementation, <span class=\"keywordtype\">size_t</span> bufferSize = 56></div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01351.html\"> 164</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01351.html\">TypeErasureBase</a></div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span>{</div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> </div>\n+<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T, disableCopyMove<TypeErasureBase, T> = 0 ></div>\n+<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01351.html#a2ccacb87d5aefd102388090c1a090cf8\"> 170</a></span> <a class=\"code hl_function\" href=\"a01351.html#a2ccacb87d5aefd102388090c1a090cf8\">TypeErasureBase</a>(T&& t) :</div>\n+<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> <a class=\"code hl_variable\" href=\"a01351.html#a63da1c558608230428c5d3110c99fe68\">wrapped_</a>(Imp::TypeErasureWrapperImplementation<Interface, Implementation, typename std::decay<T>::type>(std::forward<T>(t)))</div>\n+<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> {}</div>\n+<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> </div>\n+<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01351.html#a6927b29215757f0c602205cc733b7b49\"> 175</a></span> <a class=\"code hl_function\" href=\"a01351.html#a6927b29215757f0c602205cc733b7b49\">TypeErasureBase</a>() = <span class=\"keywordflow\">default</span>;</div>\n+<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> </div>\n+<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01351.html#a83e602e8260b48b89271c6814273be4f\"> 178</a></span> Interface& <a class=\"code hl_function\" href=\"a01351.html#a83e602e8260b48b89271c6814273be4f\">asInterface</a>()</div>\n+<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> {</div>\n+<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01351.html#a63da1c558608230428c5d3110c99fe68\">wrapped_</a>.get();</div>\n+<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> }</div>\n+<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> </div>\n+<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01351.html#ac134ea2f9ddb8f43f75d8a245920ee1f\"> 184</a></span> <span class=\"keyword\">const</span> Interface& <a class=\"code hl_function\" href=\"a01351.html#ac134ea2f9ddb8f43f75d8a245920ee1f\">asInterface</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01351.html#a63da1c558608230428c5d3110c99fe68\">wrapped_</a>.get();</div>\n+<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> }</div>\n+<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> </div>\n+<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01351.html#a28c29a93a2a593b5e44d71922457d1d5\"> 190</a></span> <span class=\"keyword\">const</span> std::type_info& <a class=\"code hl_function\" href=\"a01351.html#a28c29a93a2a593b5e44d71922457d1d5\">target_type</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01351.html#a63da1c558608230428c5d3110c99fe68\">wrapped_</a>.get().target_type();</div>\n+<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> }</div>\n <div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> </div>\n-<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> IntegerSequence></div>\n-<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> <span class=\"keyword\">struct </span>IntegerSequenceTupleHelper</div>\n-<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> {};</div>\n+<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span><span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01351.html#a63da1c558608230428c5d3110c99fe68\"> 196</a></span> <a class=\"code hl_class\" href=\"a01279.html\">PolymorphicSmallObject<Imp::TypeErasureWrapperInterface<Interface></a>, bufferSize > <a class=\"code hl_variable\" href=\"a01351.html#a63da1c558608230428c5d3110c99fe68\">wrapped_</a>;</div>\n+<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span>};</div>\n <div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> </div>\n-<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>I, I... k></div>\n-<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> <span class=\"keyword\">struct </span>IntegerSequenceTupleHelper<std::integer_sequence<I, k...>></div>\n-<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> {</div>\n-<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> <span class=\"keyword\">using </span>Type = std::tuple<std::integral_constant<I, k>...>;</div>\n-<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> };</div>\n-<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> </div>\n-<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span>} <span class=\"comment\">// end namespace Imp</span></div>\n-<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> </div>\n-<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> IntegerSequence></div>\n-<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#ad7adaea3a8e209aef72602f07a6988b3\"> 211</a></span><span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a00219.html#ad7adaea3a8e209aef72602f07a6988b3\">IntegerSequenceTuple</a>= <span class=\"keyword\">typename</span> Imp::IntegerSequenceTupleHelper<IntegerSequence>::Type;</div>\n-<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"> 212</span> </div>\n-<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span> </div>\n-<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> </div>\n-<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span>... T></div>\n-<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01383.html\"> 221</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01383.html\">LastType</a></div>\n-<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span>{</div>\n-<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01383.html#a45225c5413aac4fc372bc39124b6e4c5\"> 223</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01383.html#a45225c5413aac4fc372bc39124b6e4c5\">type</a> = <span class=\"keyword\">typename</span> std::tuple_element<<span class=\"keyword\">sizeof</span>...(T)-1, std::tuple<T...>><a class=\"code hl_typedef\" href=\"a01383.html#a45225c5413aac4fc372bc39124b6e4c5\">::type</a>;</div>\n-<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span>};</div>\n-<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span> </div>\n-<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> </div>\n-<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> </div>\n-<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span><span class=\"keyword\">namespace </span>Imp {</div>\n-<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> </div>\n-<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T, <span class=\"keyword\">class</span> I></div>\n-<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span><span class=\"keyword\">struct </span>RotateHelper;</div>\n-<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> </div>\n-<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span>... T, std::size_t... I></div>\n-<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span><span class=\"keyword\">struct </span>RotateHelper<std::tuple<T...>, std::index_sequence<I...> ></div>\n-<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span>{</div>\n-<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span> <span class=\"keyword\">using </span>type = <span class=\"keyword\">typename</span> std::tuple<<span class=\"keyword\">typename</span> <a class=\"code hl_struct\" href=\"a01383.html\">LastType</a><T...>::type, <span class=\"keyword\">typename</span> std::tuple_element<I,std::tuple<T...>>::type...>;</div>\n-<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span>};</div>\n-<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span> </div>\n-<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span>} <span class=\"comment\">// end namespace Imp</span></div>\n-<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"> 240</span> </div>\n-<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span> </div>\n-<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span>... T></div>\n-<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01395.html\"> 250</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01395.html\">RotateTuple</a></div>\n-<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span>{</div>\n-<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01395.html#ad2aec0a7681d5138bc8738f98cb86c1f\"> 252</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01395.html#ad2aec0a7681d5138bc8738f98cb86c1f\">type</a> = <span class=\"keyword\">typename</span> Imp::RotateHelper<std::tuple<T...>, std::make_index_sequence<<span class=\"keyword\">sizeof</span>...(T)-1>><a class=\"code hl_typedef\" href=\"a01395.html#ad2aec0a7681d5138bc8738f98cb86c1f\">::type</a>;</div>\n-<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"> 253</span>};</div>\n-<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"> 254</span> </div>\n-<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span> </div>\n-<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"> 256</span> </div>\n-<div class=\"line\"><a id=\"l00278\" name=\"l00278\"></a><span class=\"lineno\"> 278</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Expression></div>\n-<div class=\"line\"><a id=\"l00279\" name=\"l00279\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00215.html#ga7d55c56e78792c4b169c18d875a60935\"> 279</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00215.html#ga7d55c56e78792c4b169c18d875a60935\">callableCheck</a>(Expression f)</div>\n-<div class=\"line\"><a id=\"l00280\" name=\"l00280\"></a><span class=\"lineno\"> 280</span>{</div>\n-<div class=\"line\"><a id=\"l00281\" name=\"l00281\"></a><span class=\"lineno\"> 281</span> <span class=\"keywordflow\">return</span> [f](<span class=\"keyword\">auto</span>&&... args){</div>\n-<div class=\"line\"><a id=\"l00282\" name=\"l00282\"></a><span class=\"lineno\"> 282</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00215.html#ga2bc5056bab5babdfa8a82409665f5a26\">Functions::Concept::isCallable</a>(f, std::forward<<span class=\"keyword\">decltype</span>(args)>(args)...);</div>\n-<div class=\"line\"><a id=\"l00283\" name=\"l00283\"></a><span class=\"lineno\"> 283</span> };</div>\n-<div class=\"line\"><a id=\"l00284\" name=\"l00284\"></a><span class=\"lineno\"> 284</span>}</div>\n-<div class=\"line\"><a id=\"l00285\" name=\"l00285\"></a><span class=\"lineno\"> 285</span> </div>\n-<div class=\"line\"><a id=\"l00286\" name=\"l00286\"></a><span class=\"lineno\"> 286</span> </div>\n-<div class=\"line\"><a id=\"l00287\" name=\"l00287\"></a><span class=\"lineno\"> 287</span> </div>\n-<div class=\"line\"><a id=\"l00303\" name=\"l00303\"></a><span class=\"lineno\"> 303</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Check></div>\n-<div class=\"line\"><a id=\"l00304\" name=\"l00304\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00215.html#gaed02f0c6f78e0d71e09d9bc6a29347c4\"> 304</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00215.html#gaed02f0c6f78e0d71e09d9bc6a29347c4\">negatePredicate</a>(Check check)</div>\n-<div class=\"line\"><a id=\"l00305\" name=\"l00305\"></a><span class=\"lineno\"> 305</span>{</div>\n-<div class=\"line\"><a id=\"l00306\" name=\"l00306\"></a><span class=\"lineno\"> 306</span> <span class=\"keywordflow\">return</span> [check](<span class=\"keyword\">auto</span>&&... args){</div>\n-<div class=\"line\"><a id=\"l00307\" name=\"l00307\"></a><span class=\"lineno\"> 307</span> <span class=\"keyword\">auto</span> negate = overload(</div>\n-<div class=\"line\"><a id=\"l00308\" name=\"l00308\"></a><span class=\"lineno\"> 308</span> [](std::true_type) { <span class=\"keywordflow\">return</span> std::false_type{};},</div>\n-<div class=\"line\"><a id=\"l00309\" name=\"l00309\"></a><span class=\"lineno\"> 309</span> [](std::false_type) { <span class=\"keywordflow\">return</span> std::true_type{};},</div>\n-<div class=\"line\"><a id=\"l00310\" name=\"l00310\"></a><span class=\"lineno\"> 310</span> [](<span class=\"keywordtype\">bool</span> v) { <span class=\"keywordflow\">return</span> not v;});</div>\n-<div class=\"line\"><a id=\"l00311\" name=\"l00311\"></a><span class=\"lineno\"> 311</span> <span class=\"keywordflow\">return</span> negate(check(std::forward<<span class=\"keyword\">decltype</span>(args)>(args)...));</div>\n-<div class=\"line\"><a id=\"l00312\" name=\"l00312\"></a><span class=\"lineno\"> 312</span> };</div>\n-<div class=\"line\"><a id=\"l00313\" name=\"l00313\"></a><span class=\"lineno\"> 313</span>}</div>\n-<div class=\"line\"><a id=\"l00314\" name=\"l00314\"></a><span class=\"lineno\"> 314</span> </div>\n-<div class=\"line\"><a id=\"l00315\" name=\"l00315\"></a><span class=\"lineno\"> 315</span> </div>\n-<div class=\"line\"><a id=\"l00316\" name=\"l00316\"></a><span class=\"lineno\"> 316</span><span class=\"keyword\">namespace </span>Impl {</div>\n-<div class=\"line\"><a id=\"l00317\" name=\"l00317\"></a><span class=\"lineno\"> 317</span> </div>\n-<div class=\"line\"><a id=\"l00318\" name=\"l00318\"></a><span class=\"lineno\"> 318</span> <span class=\"comment\">// Wrapper to capture values in a lambda for perfect forwarding.</span></div>\n-<div class=\"line\"><a id=\"l00319\" name=\"l00319\"></a><span class=\"lineno\"> 319</span> <span class=\"comment\">// This captures value types by value and reference types by reference.</span></div>\n-<div class=\"line\"><a id=\"l00320\" name=\"l00320\"></a><span class=\"lineno\"> 320</span> <span class=\"keyword\">template</span> <<span class=\"keyword\">typename</span> T></div>\n-<div class=\"line\"><a id=\"l00321\" name=\"l00321\"></a><span class=\"lineno\"> 321</span> <span class=\"keyword\">struct </span>ForwardCaptureWrapper;</div>\n-<div class=\"line\"><a id=\"l00322\" name=\"l00322\"></a><span class=\"lineno\"> 322</span> </div>\n-<div class=\"line\"><a id=\"l00323\" name=\"l00323\"></a><span class=\"lineno\"> 323</span> <span class=\"keyword\">template</span> <<span class=\"keyword\">typename</span> T></div>\n-<div class=\"line\"><a id=\"l00324\" name=\"l00324\"></a><span class=\"lineno\"> 324</span> <span class=\"keyword\">struct </span>ForwardCaptureWrapper</div>\n-<div class=\"line\"><a id=\"l00325\" name=\"l00325\"></a><span class=\"lineno\"> 325</span> {</div>\n-<div class=\"line\"><a id=\"l00326\" name=\"l00326\"></a><span class=\"lineno\"> 326</span> <span class=\"keyword\">template</span> <<span class=\"keyword\">typename</span> TT></div>\n-<div class=\"line\"><a id=\"l00327\" name=\"l00327\"></a><span class=\"lineno\"> 327</span> ForwardCaptureWrapper(TT&& t) : t_{std::forward<TT>(t)} {}</div>\n-<div class=\"line\"><a id=\"l00328\" name=\"l00328\"></a><span class=\"lineno\"> 328</span> </div>\n-<div class=\"line\"><a id=\"l00329\" name=\"l00329\"></a><span class=\"lineno\"> 329</span> <span class=\"keyword\">auto</span> forward()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> std::move(t_); }</div>\n-<div class=\"line\"><a id=\"l00330\" name=\"l00330\"></a><span class=\"lineno\"> 330</span> </div>\n-<div class=\"line\"><a id=\"l00331\" name=\"l00331\"></a><span class=\"lineno\"> 331</span> T t_;</div>\n-<div class=\"line\"><a id=\"l00332\" name=\"l00332\"></a><span class=\"lineno\"> 332</span> };</div>\n-<div class=\"line\"><a id=\"l00333\" name=\"l00333\"></a><span class=\"lineno\"> 333</span> </div>\n-<div class=\"line\"><a id=\"l00334\" name=\"l00334\"></a><span class=\"lineno\"> 334</span> <span class=\"keyword\">template</span> <<span class=\"keyword\">typename</span> T></div>\n-<div class=\"line\"><a id=\"l00335\" name=\"l00335\"></a><span class=\"lineno\"> 335</span> <span class=\"keyword\">struct </span>ForwardCaptureWrapper<T&></div>\n-<div class=\"line\"><a id=\"l00336\" name=\"l00336\"></a><span class=\"lineno\"> 336</span> {</div>\n-<div class=\"line\"><a id=\"l00337\" name=\"l00337\"></a><span class=\"lineno\"> 337</span> ForwardCaptureWrapper(T& t) : t_{t} {}</div>\n-<div class=\"line\"><a id=\"l00338\" name=\"l00338\"></a><span class=\"lineno\"> 338</span> </div>\n-<div class=\"line\"><a id=\"l00339\" name=\"l00339\"></a><span class=\"lineno\"> 339</span> T& forward()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> t_; };</div>\n-<div class=\"line\"><a id=\"l00340\" name=\"l00340\"></a><span class=\"lineno\"> 340</span> </div>\n-<div class=\"line\"><a id=\"l00341\" name=\"l00341\"></a><span class=\"lineno\"> 341</span> T& t_;</div>\n-<div class=\"line\"><a id=\"l00342\" name=\"l00342\"></a><span class=\"lineno\"> 342</span> };</div>\n-<div class=\"line\"><a id=\"l00343\" name=\"l00343\"></a><span class=\"lineno\"> 343</span> </div>\n-<div class=\"line\"><a id=\"l00344\" name=\"l00344\"></a><span class=\"lineno\"> 344</span> <span class=\"keyword\">template</span> <<span class=\"keyword\">typename</span> T></div>\n-<div class=\"line\"><a id=\"l00345\" name=\"l00345\"></a><span class=\"lineno\"> 345</span> <span class=\"keyword\">struct </span>ForwardCaptureWrapper<const T&></div>\n-<div class=\"line\"><a id=\"l00346\" name=\"l00346\"></a><span class=\"lineno\"> 346</span> {</div>\n-<div class=\"line\"><a id=\"l00347\" name=\"l00347\"></a><span class=\"lineno\"> 347</span> ForwardCaptureWrapper(<span class=\"keyword\">const</span> T& t) : t_{t} {}</div>\n-<div class=\"line\"><a id=\"l00348\" name=\"l00348\"></a><span class=\"lineno\"> 348</span> </div>\n-<div class=\"line\"><a id=\"l00349\" name=\"l00349\"></a><span class=\"lineno\"> 349</span> <span class=\"keyword\">const</span> T& forward()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> t_; };</div>\n-<div class=\"line\"><a id=\"l00350\" name=\"l00350\"></a><span class=\"lineno\"> 350</span> </div>\n-<div class=\"line\"><a id=\"l00351\" name=\"l00351\"></a><span class=\"lineno\"> 351</span> <span class=\"keyword\">const</span> T& t_;</div>\n-<div class=\"line\"><a id=\"l00352\" name=\"l00352\"></a><span class=\"lineno\"> 352</span> };</div>\n-<div class=\"line\"><a id=\"l00353\" name=\"l00353\"></a><span class=\"lineno\"> 353</span> </div>\n-<div class=\"line\"><a id=\"l00354\" name=\"l00354\"></a><span class=\"lineno\"> 354</span>} <span class=\"comment\">// end namespace Dune::Functions::Impl</span></div>\n-<div class=\"line\"><a id=\"l00355\" name=\"l00355\"></a><span class=\"lineno\"> 355</span> </div>\n-<div class=\"line\"><a id=\"l00356\" name=\"l00356\"></a><span class=\"lineno\"> 356</span> </div>\n-<div class=\"line\"><a id=\"l00357\" name=\"l00357\"></a><span class=\"lineno\"> 357</span> </div>\n-<div class=\"line\"><a id=\"l00371\" name=\"l00371\"></a><span class=\"lineno\"> 371</span><span class=\"keyword\">template</span> <<span class=\"keyword\">class</span> T></div>\n-<div class=\"line\"><a id=\"l00372\" name=\"l00372\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a6bb3a351c2ab1b4eb46d4ba1ec3d95a0\"> 372</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00219.html#a6bb3a351c2ab1b4eb46d4ba1ec3d95a0\">forwardCapture</a>(T&& t)</div>\n-<div class=\"line\"><a id=\"l00373\" name=\"l00373\"></a><span class=\"lineno\"> 373</span>{</div>\n-<div class=\"line\"><a id=\"l00374\" name=\"l00374\"></a><span class=\"lineno\"> 374</span> <span class=\"keywordflow\">return</span> Impl::ForwardCaptureWrapper<T>(std::forward<T>(t));</div>\n-<div class=\"line\"><a id=\"l00375\" name=\"l00375\"></a><span class=\"lineno\"> 375</span>}</div>\n-<div class=\"line\"><a id=\"l00376\" name=\"l00376\"></a><span class=\"lineno\"> 376</span> </div>\n-<div class=\"line\"><a id=\"l00377\" name=\"l00377\"></a><span class=\"lineno\"> 377</span> </div>\n-<div class=\"line\"><a id=\"l00378\" name=\"l00378\"></a><span class=\"lineno\"> 378</span> </div>\n-<div class=\"line\"><a id=\"l00379\" name=\"l00379\"></a><span class=\"lineno\"> 379</span>} <span class=\"comment\">// namespace Dune::Functions</span></div>\n-<div class=\"line\"><a id=\"l00380\" name=\"l00380\"></a><span class=\"lineno\"> 380</span>} <span class=\"comment\">// namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00381\" name=\"l00381\"></a><span class=\"lineno\"> 381</span> </div>\n-<div class=\"line\"><a id=\"l00382\" name=\"l00382\"></a><span class=\"lineno\"> 382</span> </div>\n-<div class=\"line\"><a id=\"l00383\" name=\"l00383\"></a><span class=\"lineno\"> 383</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_UTILITY_HH</span></div>\n-<div class=\"ttc\" id=\"aa00053_html\"><div class=\"ttname\"><a href=\"a00053.html\">functionconcepts.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00215_html_ga047a2180b455bfa030fba76eb6270952\"><div class=\"ttname\"><a href=\"a00215.html#ga047a2180b455bfa030fba76eb6270952\">Dune::Functions::ExpandTuple</a></div><div class=\"ttdeci\">typename Imp::ExpandTupleHelper< T, ArgTuple >::Type ExpandTuple</div><div class=\"ttdoc\">Expand tuple arguments as template arguments.</div><div class=\"ttdef\"><b>Definition:</b> utility.hh:94</div></div>\n-<div class=\"ttc\" id=\"aa00215_html_ga1ce77345fbee606e5ac22aeef7d109d6\"><div class=\"ttname\"><a href=\"a00215.html#ga1ce77345fbee606e5ac22aeef7d109d6\">Dune::Functions::TransformTuple</a></div><div class=\"ttdeci\">typename Imp::TransformTupleHelper< F, Tuples... >::Type TransformTuple</div><div class=\"ttdoc\">Transform tuple types argument using type-functor.</div><div class=\"ttdef\"><b>Definition:</b> utility.hh:131</div></div>\n-<div class=\"ttc\" id=\"aa00215_html_ga2bc5056bab5babdfa8a82409665f5a26\"><div class=\"ttname\"><a href=\"a00215.html#ga2bc5056bab5babdfa8a82409665f5a26\">Dune::Functions::Concept::isCallable</a></div><div class=\"ttdeci\">static constexpr auto isCallable()</div><div class=\"ttdoc\">Check if f is callable with given argument list.</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:47</div></div>\n-<div class=\"ttc\" id=\"aa00215_html_ga4e5fbe8e1330cdfab9eddd5962682b4c\"><div class=\"ttname\"><a href=\"a00215.html#ga4e5fbe8e1330cdfab9eddd5962682b4c\">Dune::Functions::transformTuple</a></div><div class=\"ttdeci\">auto transformTuple(F &&f, const std::tuple< T... > &tuple) -> decltype(Imp::transformTupleHelper(std::forward< F >(f), tuple, std::index_sequence_for< T... >{}))</div><div class=\"ttdoc\">Transform tuple value using a functor.</div><div class=\"ttdef\"><b>Definition:</b> utility.hh:165</div></div>\n-<div class=\"ttc\" id=\"aa00215_html_ga7d55c56e78792c4b169c18d875a60935\"><div class=\"ttname\"><a href=\"a00215.html#ga7d55c56e78792c4b169c18d875a60935\">Dune::Functions::callableCheck</a></div><div class=\"ttdeci\">auto callableCheck(Expression f)</div><div class=\"ttdoc\">Create a predicate for checking validity of expressions.</div><div class=\"ttdef\"><b>Definition:</b> utility.hh:279</div></div>\n-<div class=\"ttc\" id=\"aa00215_html_gac7d45de6c68fce943e6924403389d234\"><div class=\"ttname\"><a href=\"a00215.html#gac7d45de6c68fce943e6924403389d234\">Dune::Functions::forwardAsStaticIndex</a></div><div class=\"ttdeci\">auto forwardAsStaticIndex(const size_type &i, F &&f, Args &&... args) -> decltype(f(Dune::Indices::_0, std::forward< Args >(args)...))</div><div class=\"ttdoc\">Transform dynamic index to static index_constant.</div><div class=\"ttdef\"><b>Definition:</b> utility.hh:60</div></div>\n-<div class=\"ttc\" id=\"aa00215_html_gaed02f0c6f78e0d71e09d9bc6a29347c4\"><div class=\"ttname\"><a href=\"a00215.html#gaed02f0c6f78e0d71e09d9bc6a29347c4\">Dune::Functions::negatePredicate</a></div><div class=\"ttdeci\">auto negatePredicate(Check check)</div><div class=\"ttdoc\">Negate given predicate.</div><div class=\"ttdef\"><b>Definition:</b> utility.hh:304</div></div>\n+<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> </div>\n+<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span>}} <span class=\"comment\">// namespace Dune::Functions</span></div>\n+<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> </div>\n+<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> </div>\n+<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> </div>\n+<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH</span></div>\n+<div class=\"ttc\" id=\"aa00026_html\"><div class=\"ttname\"><a href=\"a00026.html\">interfaces.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00029_html\"><div class=\"ttname\"><a href=\"a00029.html\">type_traits.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00068_html\"><div class=\"ttname\"><a href=\"a00068.html\">polymorphicsmallobject.hh</a></div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa00219_html_a6bb3a351c2ab1b4eb46d4ba1ec3d95a0\"><div class=\"ttname\"><a href=\"a00219.html#a6bb3a351c2ab1b4eb46d4ba1ec3d95a0\">Dune::Functions::forwardCapture</a></div><div class=\"ttdeci\">auto forwardCapture(T &&t)</div><div class=\"ttdoc\">Create a capture object for perfect forwarding.</div><div class=\"ttdef\"><b>Definition:</b> utility.hh:372</div></div>\n-<div class=\"ttc\" id=\"aa00219_html_a84f8a9700ef8b12973e210ee4674c2b7\"><div class=\"ttname\"><a href=\"a00219.html#a84f8a9700ef8b12973e210ee4674c2b7\">Dune::Functions::forwardAsStaticInteger</a></div><div class=\"ttdeci\">auto forwardAsStaticInteger(std::integer_sequence< size_type, firstValue > values, const size_type &i, F &&f, Args &&... args) -> decltype(f(std::integral_constant< size_type, firstValue >(), std::forward< Args >(args)...))</div><div class=\"ttdef\"><b>Definition:</b> utility.hh:21</div></div>\n-<div class=\"ttc\" id=\"aa00219_html_ad7adaea3a8e209aef72602f07a6988b3\"><div class=\"ttname\"><a href=\"a00219.html#ad7adaea3a8e209aef72602f07a6988b3\">Dune::Functions::IntegerSequenceTuple</a></div><div class=\"ttdeci\">typename Imp::IntegerSequenceTupleHelper< IntegerSequence >::Type IntegerSequenceTuple</div><div class=\"ttdoc\">Transform integer_sequence<I,k...> to tuple<integral_constant<I,k>...></div><div class=\"ttdef\"><b>Definition:</b> utility.hh:211</div></div>\n-<div class=\"ttc\" id=\"aa01383_html\"><div class=\"ttname\"><a href=\"a01383.html\">Dune::Functions::LastType</a></div><div class=\"ttdoc\">Get last entry of type list.</div><div class=\"ttdef\"><b>Definition:</b> utility.hh:222</div></div>\n-<div class=\"ttc\" id=\"aa01383_html_a45225c5413aac4fc372bc39124b6e4c5\"><div class=\"ttname\"><a href=\"a01383.html#a45225c5413aac4fc372bc39124b6e4c5\">Dune::Functions::LastType::type</a></div><div class=\"ttdeci\">typename std::tuple_element< sizeof...(T) -1, std::tuple< T... > >::type type</div><div class=\"ttdef\"><b>Definition:</b> utility.hh:223</div></div>\n-<div class=\"ttc\" id=\"aa01395_html\"><div class=\"ttname\"><a href=\"a01395.html\">Dune::Functions::RotateTuple</a></div><div class=\"ttdoc\">Rotate type list by one, such that last entry is moved to first position.</div><div class=\"ttdef\"><b>Definition:</b> utility.hh:251</div></div>\n-<div class=\"ttc\" id=\"aa01395_html_ad2aec0a7681d5138bc8738f98cb86c1f\"><div class=\"ttname\"><a href=\"a01395.html#ad2aec0a7681d5138bc8738f98cb86c1f\">Dune::Functions::RotateTuple::type</a></div><div class=\"ttdeci\">typename Imp::RotateHelper< std::tuple< T... >, std::make_index_sequence< sizeof...(T) -1 > >::type type</div><div class=\"ttdef\"><b>Definition:</b> utility.hh:252</div></div>\n+<div class=\"ttc\" id=\"aa01279_html\"><div class=\"ttname\"><a href=\"a01279.html\">Dune::Functions::PolymorphicSmallObject</a></div><div class=\"ttdoc\">A wrapper providing small object optimization with polymorphic types.</div><div class=\"ttdef\"><b>Definition:</b> polymorphicsmallobject.hh:45</div></div>\n+<div class=\"ttc\" id=\"aa01351_html\"><div class=\"ttname\"><a href=\"a01351.html\">Dune::Functions::TypeErasureBase</a></div><div class=\"ttdoc\">Base class for type-erased interface wrapper.</div><div class=\"ttdef\"><b>Definition:</b> typeerasure.hh:165</div></div>\n+<div class=\"ttc\" id=\"aa01351_html_a28c29a93a2a593b5e44d71922457d1d5\"><div class=\"ttname\"><a href=\"a01351.html#a28c29a93a2a593b5e44d71922457d1d5\">Dune::Functions::TypeErasureBase::target_type</a></div><div class=\"ttdeci\">const std::type_info & target_type() const</div><div class=\"ttdoc\">Get type of stored object.</div><div class=\"ttdef\"><b>Definition:</b> typeerasure.hh:190</div></div>\n+<div class=\"ttc\" id=\"aa01351_html_a2ccacb87d5aefd102388090c1a090cf8\"><div class=\"ttname\"><a href=\"a01351.html#a2ccacb87d5aefd102388090c1a090cf8\">Dune::Functions::TypeErasureBase::TypeErasureBase</a></div><div class=\"ttdeci\">TypeErasureBase(T &&t)</div><div class=\"ttdoc\">Construct wrapper from object.</div><div class=\"ttdef\"><b>Definition:</b> typeerasure.hh:170</div></div>\n+<div class=\"ttc\" id=\"aa01351_html_a63da1c558608230428c5d3110c99fe68\"><div class=\"ttname\"><a href=\"a01351.html#a63da1c558608230428c5d3110c99fe68\">Dune::Functions::TypeErasureBase::wrapped_</a></div><div class=\"ttdeci\">PolymorphicSmallObject< Imp::TypeErasureWrapperInterface< Interface >, bufferSize > wrapped_</div><div class=\"ttdef\"><b>Definition:</b> typeerasure.hh:196</div></div>\n+<div class=\"ttc\" id=\"aa01351_html_a6927b29215757f0c602205cc733b7b49\"><div class=\"ttname\"><a href=\"a01351.html#a6927b29215757f0c602205cc733b7b49\">Dune::Functions::TypeErasureBase::TypeErasureBase</a></div><div class=\"ttdeci\">TypeErasureBase()=default</div><div class=\"ttdoc\">Default constructor.</div></div>\n+<div class=\"ttc\" id=\"aa01351_html_a83e602e8260b48b89271c6814273be4f\"><div class=\"ttname\"><a href=\"a01351.html#a83e602e8260b48b89271c6814273be4f\">Dune::Functions::TypeErasureBase::asInterface</a></div><div class=\"ttdeci\">Interface & asInterface()</div><div class=\"ttdoc\">Get mutable reference to wrapped object.</div><div class=\"ttdef\"><b>Definition:</b> typeerasure.hh:178</div></div>\n+<div class=\"ttc\" id=\"aa01351_html_ac134ea2f9ddb8f43f75d8a245920ee1f\"><div class=\"ttname\"><a href=\"a01351.html#ac134ea2f9ddb8f43f75d8a245920ee1f\">Dune::Functions::TypeErasureBase::asInterface</a></div><div class=\"ttdeci\">const Interface & asInterface() const</div><div class=\"ttdoc\">Get reference to wrapped object.</div><div class=\"ttdef\"><b>Definition:</b> typeerasure.hh:184</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,349 +5,180 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * common\n-utility.hh\n+typeerasure.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_COMMON_UTILITY_HH\n- 4#define DUNE_FUNCTIONS_COMMON_UTILITY_HH\n+ 3#ifndef DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH\n+ 4#define DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH\n 5\n- 6\n- 7#include <utility>\n- 8#include <type_traits>\n+ 6#include <typeinfo>\n+ 7\n+ 8#include <dune/common/typeutilities.hh>\n 9\n- 10#include <dune/common/overloadset.hh>\n- 11#include <dune/common/indices.hh>\n- 12\n- 13#include <dune/functions/common/functionconcepts.hh>\n- 14\n- 15namespace Dune {\n- 16namespace Functions {\n+ 10#include <dune/functions/common/type_traits.hh>\n+ 11#include <dune/functions/common/interfaces.hh>\n+ 12#include <dune/functions/common/polymorphicsmallobject.hh>\n+ 13\n+ 14namespace Dune {\n+ 15namespace Functions {\n+ 16namespace Imp {\n 17\n 18\n 19\n- 20template<class F, class size_type, size_type firstValue, class... Args>\n-21auto forwardAsStaticInteger(std::integer_sequence<size_type, firstValue>\n-values, const size_type& i, F&& f, Args&&... args)\n- 22 ->decltype(f(std::integral_constant<size_type, firstValue>(), std::\n-forward<Args>(args)...))\n- 23{\n- 24 return f(std::integral_constant<size_type, firstValue>(), std::\n-forward<Args>(args)...);\n- 25}\n- 26\n- 27template<class F, class size_type, size_type firstValue, size_type\n-secondValue, size_type... otherValues, class... Args>\n-28auto forwardAsStaticInteger(std::integer_sequence<size_type, firstValue,\n-secondValue, otherValues...> values, const size_type i, F&& f, Args&&... args)\n- 29 ->decltype(f(std::integral_constant<size_type, firstValue>(), std::\n-forward<Args>(args)...))\n- 30{\n- 31 if (i==firstValue)\n- 32 return f(std::integral_constant<size_type, firstValue>(), std::\n-forward<Args>(args)...);\n- 33 return forwardAsStaticInteger(std::integer_sequence<size_type, secondValue,\n-otherValues...>(), i, std::forward<F>(f), std::forward<Args>(args)...);\n- 34}\n- 35\n- 36\n- 37\n- 59template<std::size_t end, class F, class size_type, class... Args>\n-60auto forwardAsStaticIndex(const size_type& i, F&& f, Args&&... args)\n- 61 ->decltype(f(Dune::Indices::_0, std::forward<Args>(args)...))\n- 62{\n- 63 return forwardAsStaticInteger(std::make_index_sequence<end>{}, i, std::\n-forward<F>(f), std::forward<Args>(args)...);\n- 64}\n- 65\n- 66\n- 67\n- 68namespace Imp {\n+ 33template<class Interface>\n+ 34class TypeErasureWrapperInterface :\n+ 35 public Interface,\n+ 36 public PolymorphicType<TypeErasureWrapperInterface<Interface>>\n+ 37{\n+ 38public:\n+ 39 virtual const std::type_info& target_type() const = 0;\n+ 40};\n+ 41\n+ 42\n+ 43\n+ 60template<class Interface, class T>\n+ 61class TypeErasureWrapperBase :\n+ 62 public TypeErasureWrapperInterface<Interface>\n+ 63{\n+ 64public:\n+ 65 template<class TT, disableCopyMove<TypeErasureWrapperBase, TT> = 0>\n+ 66 TypeErasureWrapperBase(TT&& t) :\n+ 67 wrapped_(std::forward<TT>(t))\n+ 68 {}\n 69\n- 70 template<template<class...> class T, class List>\n- 71 struct ExpandTupleHelper\n- 72 {};\n- 73\n- 74 template<template<class...> class T, template<class...> class ListType,\n-class... Args>\n- 75 struct ExpandTupleHelper<T, ListType<Args...>>\n- 76 {\n- 77 using Type = T<Args...>;\n- 78 };\n- 79\n- 80} // end namespace Imp\n+ 71 T& get()\n+ 72 {\n+ 73 return wrapped_;\n+ 74 }\n+ 75\n+ 77 const T& get() const\n+ 78 {\n+ 79 return wrapped_;\n+ 80 }\n 81\n- 93template<template<class...> class T, class ArgTuple>\n-94using ExpandTuple = typename Imp::ExpandTupleHelper<T, ArgTuple>::Type;\n- 95\n- 96\n- 97\n- 98namespace Imp {\n- 99\n- 100 template<template<class...> class T, class... Tuple>\n- 101 struct TransformTupleHelper\n- 102 {};\n- 103\n- 104 template<template<class...> class T, class... Args1>\n- 105 struct TransformTupleHelper<T, typename std::tuple<Args1...>>\n- 106 {\n- 107 using Type = std::tuple<T<Args1>...>;\n- 108 };\n- 109\n- 110 template<template<class...> class T, class... Args1, class... Args2>\n- 111 struct TransformTupleHelper<T, typename std::tuple<Args1...>, typename\n-std::tuple<Args2...>>\n- 112 {\n- 113 using Type = std::tuple<T<Args1, Args2>...>;\n- 114 };\n- 115\n- 116} // end namespace Imp\n+ 82protected:\n+ 83 using Wrapped = T;\n+ 84 Wrapped wrapped_;\n+ 85};\n+ 86\n+ 87\n+ 88\n+ 112template<class Interface, template<class> class Implementation, class T>\n+ 113class TypeErasureWrapperImplementation :\n+ 114 public Implementation<TypeErasureWrapperBase<Interface, T> >\n+ 115{\n+ 116public:\n 117\n- 130template<template<class...> class F, class... Tuples>\n-131using TransformTuple = typename Imp::TransformTupleHelper<F, Tuples...>::\n-Type;\n- 132\n- 133\n- 134\n- 135namespace Imp {\n- 136\n- 137 template<class F, class... T, std::size_t... k>\n- 138 auto transformTupleHelper(F&& f, const std::tuple<T...>& tuple, std::\n-index_sequence<k...>)\n- 139 -> decltype(std::make_tuple(f(std::get<k>(tuple))...))\n- 140 {\n- 141 return std::make_tuple(f(std::get<k>(tuple))...);\n- 142 }\n- 143\n- 144 template<class F, class... T1, class...T2, std::size_t... k>\n- 145 auto transformTupleHelper(F&& f, const std::tuple<T1...>& tuple1, const\n-std::tuple<T2...>& tuple2, std::index_sequence<k...>)\n- 146 -> decltype(std::make_tuple(f(std::get<k>(tuple1), std::get<k>\n-(tuple2))...))\n- 147 {\n- 148 return std::make_tuple(f(std::get<k>(tuple1), std::get<k>(tuple2))...);\n- 149 }\n+ 119 template<class TT, disableCopyMove<TypeErasureWrapperImplementation, T> =\n+0>\n+ 120 TypeErasureWrapperImplementation(TT&& t) :\n+ 121 Implementation<TypeErasureWrapperBase<Interface, T> >(std::forward<TT>(t))\n+ 122 {}\n+ 123\n+ 125 virtual TypeErasureWrapperImplementation* clone() const\n+ 126 {\n+ 127 return new TypeErasureWrapperImplementation(*this);\n+ 128 }\n+ 129\n+ 131 virtual TypeErasureWrapperImplementation* clone(void* buffer) const\n+ 132 {\n+ 133 return new (buffer) TypeErasureWrapperImplementation(*this);\n+ 134 }\n+ 135\n+ 137 virtual TypeErasureWrapperImplementation* move(void* buffer)\n+ 138 {\n+ 139 return new (buffer) TypeErasureWrapperImplementation(std::move(*this));\n+ 140 }\n+ 141\n+ 143 virtual const std::type_info& target_type() const\n+ 144 {\n+ 145 return typeid(T);\n+ 146 }\n+ 147};\n+ 148\n+ 149} // namespace Dune::Functions::Imp\n 150\n- 151} // end namespace Imp\n+ 151\n 152\n- 164template<class F, class... T>\n-165auto transformTuple(F&& f, const std::tuple<T...>& tuple)\n- 166 -> decltype(Imp::transformTupleHelper(std::forward<F>(f), tuple, std::\n-index_sequence_for<T...>{}))\n- 167{\n- 168 return Imp::transformTupleHelper(std::forward<F>(f), tuple, std::\n-index_sequence_for<T...>{});\n- 169}\n- 170\n- 184template<class F, class... T1, class... T2>\n-185auto transformTuple(F&& f, const std::tuple<T1...>& tuple1, const std::\n-tuple<T2...>& tuple2)\n- 186 -> decltype(Imp::transformTupleHelper(std::forward<F>(f), tuple1, tuple2,\n-std::index_sequence_for<T1...>{}))\n- 187{\n- 188 return Imp::transformTupleHelper(std::forward<F>(f), tuple1, tuple2, std::\n-index_sequence_for<T1...>{});\n- 189}\n- 190\n- 191\n- 192\n- 193namespace Imp {\n+ 163template<class Interface, template<class> class Implementation, size_t\n+bufferSize = 56>\n+164class TypeErasureBase\n+ 165{\n+ 166public:\n+ 167\n+ 169 template<class T, disableCopyMove<TypeErasureBase, T> = 0 >\n+170 TypeErasureBase(T&& t) :\n+ 171 wrapped_(Imp::TypeErasureWrapperImplementation<Interface, Implementation,\n+typename std::decay<T>::type>(std::forward<T>(t)))\n+ 172 {}\n+ 173\n+175 TypeErasureBase() = default;\n+ 176\n+178 Interface& asInterface()\n+ 179 {\n+ 180 return wrapped_.get();\n+ 181 }\n+ 182\n+184 const Interface& asInterface() const\n+ 185 {\n+ 186 return wrapped_.get();\n+ 187 }\n+ 188\n+190 const std::type_info& target_type() const\n+ 191 {\n+ 192 return wrapped_.get().target_type();\n+ 193 }\n 194\n- 195 template<class IntegerSequence>\n- 196 struct IntegerSequenceTupleHelper\n- 197 {};\n+ 195protected:\n+196 PolymorphicSmallObject<Imp::TypeErasureWrapperInterface<Interface>,\n+bufferSize > wrapped_;\n+ 197};\n 198\n- 199 template<class I, I... k>\n- 200 struct IntegerSequenceTupleHelper<std::integer_sequence<I, k...>>\n- 201 {\n- 202 using Type = std::tuple<std::integral_constant<I, k>...>;\n- 203 };\n- 204\n- 205} // end namespace Imp\n- 206\n- 210template<class IntegerSequence>\n-211using IntegerSequenceTuple= typename Imp::\n-IntegerSequenceTupleHelper<IntegerSequence>::Type;\n- 212\n- 213\n- 214\n- 220template<class... T>\n-221struct LastType\n- 222{\n-223 using type = typename std::tuple_element<sizeof...(T)-1, std::\n-tuple<T...>>::type;\n- 224};\n- 225\n- 226\n- 227\n- 228namespace Imp {\n- 229\n- 230template<class T, class I>\n- 231struct RotateHelper;\n- 232\n- 233template<class... T, std::size_t... I>\n- 234struct RotateHelper<std::tuple<T...>, std::index_sequence<I...> >\n- 235{\n- 236 using type = typename std::tuple<typename LastType<T...>::type, typename\n-std::tuple_element<I,std::tuple<T...>>::type...>;\n- 237};\n- 238\n- 239} // end namespace Imp\n- 240\n- 241\n- 249template<class... T>\n-250struct RotateTuple\n- 251{\n-252 using type = typename Imp::RotateHelper<std::tuple<T...>, std::\n-make_index_sequence<sizeof...(T)-1>>::type;\n- 253};\n- 254\n- 255\n- 256\n- 278template<class Expression>\n-279auto callableCheck(Expression f)\n- 280{\n- 281 return [f](auto&&... args){\n- 282 return Functions::Concept::isCallable(f, std::forward<decltype(args)>\n-(args)...);\n- 283 };\n- 284}\n- 285\n- 286\n- 287\n- 303template<class Check>\n-304auto negatePredicate(Check check)\n- 305{\n- 306 return [check](auto&&... args){\n- 307 auto negate = overload(\n- 308 [](std::true_type) { return std::false_type{};},\n- 309 [](std::false_type) { return std::true_type{};},\n- 310 [](bool v) { return not v;});\n- 311 return negate(check(std::forward<decltype(args)>(args)...));\n- 312 };\n- 313}\n- 314\n- 315\n- 316namespace Impl {\n- 317\n- 318 // Wrapper to capture values in a lambda for perfect forwarding.\n- 319 // This captures value types by value and reference types by reference.\n- 320 template <typename T>\n- 321 struct ForwardCaptureWrapper;\n- 322\n- 323 template <typename T>\n- 324 struct ForwardCaptureWrapper\n- 325 {\n- 326 template <typename TT>\n- 327 ForwardCaptureWrapper(TT&& t) : t_{std::forward<TT>(t)} {}\n- 328\n- 329 auto forward() const { return std::move(t_); }\n- 330\n- 331 T t_;\n- 332 };\n- 333\n- 334 template <typename T>\n- 335 struct ForwardCaptureWrapper<T&>\n- 336 {\n- 337 ForwardCaptureWrapper(T& t) : t_{t} {}\n- 338\n- 339 T& forward() const { return t_; };\n- 340\n- 341 T& t_;\n- 342 };\n- 343\n- 344 template <typename T>\n- 345 struct ForwardCaptureWrapper<const T&>\n- 346 {\n- 347 ForwardCaptureWrapper(const T& t) : t_{t} {}\n- 348\n- 349 const T& forward() const { return t_; };\n- 350\n- 351 const T& t_;\n- 352 };\n- 353\n- 354} // end namespace Dune::Functions::Impl\n- 355\n- 356\n- 357\n- 371template <class T>\n-372auto forwardCapture(T&& t)\n- 373{\n- 374 return Impl::ForwardCaptureWrapper<T>(std::forward<T>(t));\n- 375}\n- 376\n- 377\n- 378\n- 379} // namespace Dune::Functions\n- 380} // namespace Dune\n- 381\n- 382\n- 383#endif // DUNE_FUNCTIONS_COMMON_UTILITY_HH\n-functionconcepts.hh\n-Dune::Functions::ExpandTuple\n-typename Imp::ExpandTupleHelper< T, ArgTuple >::Type ExpandTuple\n-Expand tuple arguments as template arguments.\n-Definition: utility.hh:94\n-Dune::Functions::TransformTuple\n-typename Imp::TransformTupleHelper< F, Tuples... >::Type TransformTuple\n-Transform tuple types argument using type-functor.\n-Definition: utility.hh:131\n-Dune::Functions::Concept::isCallable\n-static constexpr auto isCallable()\n-Check if f is callable with given argument list.\n-Definition: functionconcepts.hh:47\n-Dune::Functions::transformTuple\n-auto transformTuple(F &&f, const std::tuple< T... > &tuple) -> decltype(Imp::\n-transformTupleHelper(std::forward< F >(f), tuple, std::index_sequence_for< T...\n->{}))\n-Transform tuple value using a functor.\n-Definition: utility.hh:165\n-Dune::Functions::callableCheck\n-auto callableCheck(Expression f)\n-Create a predicate for checking validity of expressions.\n-Definition: utility.hh:279\n-Dune::Functions::forwardAsStaticIndex\n-auto forwardAsStaticIndex(const size_type &i, F &&f, Args &&... args) -\n-> decltype(f(Dune::Indices::_0, std::forward< Args >(args)...))\n-Transform dynamic index to static index_constant.\n-Definition: utility.hh:60\n-Dune::Functions::negatePredicate\n-auto negatePredicate(Check check)\n-Negate given predicate.\n-Definition: utility.hh:304\n+ 199\n+ 200}} // namespace Dune::Functions\n+ 201\n+ 202\n+ 203\n+ 204#endif // DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH\n+interfaces.hh\n+type_traits.hh\n+polymorphicsmallobject.hh\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::forwardCapture\n-auto forwardCapture(T &&t)\n-Create a capture object for perfect forwarding.\n-Definition: utility.hh:372\n-Dune::Functions::forwardAsStaticInteger\n-auto forwardAsStaticInteger(std::integer_sequence< size_type, firstValue >\n-values, const size_type &i, F &&f, Args &&... args) -> decltype(f(std::\n-integral_constant< size_type, firstValue >(), std::forward< Args >(args)...))\n-Definition: utility.hh:21\n-Dune::Functions::IntegerSequenceTuple\n-typename Imp::IntegerSequenceTupleHelper< IntegerSequence >::Type\n-IntegerSequenceTuple\n-Transform integer_sequence<I,k...> to tuple<integral_constant<I,k>...>\n-Definition: utility.hh:211\n-Dune::Functions::LastType\n-Get last entry of type list.\n-Definition: utility.hh:222\n-Dune::Functions::LastType::type\n-typename std::tuple_element< sizeof...(T) -1, std::tuple< T... > >::type type\n-Definition: utility.hh:223\n-Dune::Functions::RotateTuple\n-Rotate type list by one, such that last entry is moved to first position.\n-Definition: utility.hh:251\n-Dune::Functions::RotateTuple::type\n-typename Imp::RotateHelper< std::tuple< T... >, std::make_index_sequence<\n-sizeof...(T) -1 > >::type type\n-Definition: utility.hh:252\n+Dune::Functions::PolymorphicSmallObject\n+A wrapper providing small object optimization with polymorphic types.\n+Definition: polymorphicsmallobject.hh:45\n+Dune::Functions::TypeErasureBase\n+Base class for type-erased interface wrapper.\n+Definition: typeerasure.hh:165\n+Dune::Functions::TypeErasureBase::target_type\n+const std::type_info & target_type() const\n+Get type of stored object.\n+Definition: typeerasure.hh:190\n+Dune::Functions::TypeErasureBase::TypeErasureBase\n+TypeErasureBase(T &&t)\n+Construct wrapper from object.\n+Definition: typeerasure.hh:170\n+Dune::Functions::TypeErasureBase::wrapped_\n+PolymorphicSmallObject< Imp::TypeErasureWrapperInterface< Interface >,\n+bufferSize > wrapped_\n+Definition: typeerasure.hh:196\n+Dune::Functions::TypeErasureBase::TypeErasureBase\n+TypeErasureBase()=default\n+Default constructor.\n+Dune::Functions::TypeErasureBase::asInterface\n+Interface & asInterface()\n+Get mutable reference to wrapped object.\n+Definition: typeerasure.hh:178\n+Dune::Functions::TypeErasureBase::asInterface\n+const Interface & asInterface() const\n+Get reference to wrapped object.\n+Definition: typeerasure.hh:184\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00053.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00053.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: functionconcepts.hh File Reference</title>\n+<title>dune-functions: localfunction.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -64,123 +64,42 @@\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n-<a href=\"#namespaces\">Namespaces</a> |\n-<a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">functionconcepts.hh File Reference</div></div>\n+<a href=\"#namespaces\">Namespaces</a> </div>\n+ <div class=\"headertitle\"><div class=\"title\">localfunction.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <dune/common/typelist.hh></code><br />\n-<code>#include <dune/common/concept.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00086_source.html\">dune/functions/common/signature.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00029_source.html\">dune/functions/gridfunctions/localderivativetraits.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00023_source.html\">dune/functions/gridfunctions/gridviewentityset.hh</a>></code><br />\n+<div class=\"textblock\"><code>#include <type_traits></code><br />\n+<code>#include <dune/common/typeutilities.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00035_source.html\">dune/functions/common/defaultderivativetraits.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00011_source.html\">dune/functions/common/differentiablefunction.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00044_source.html\">dune/functions/common/localfunction_imp.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00050_source.html\">dune/functions/common/typeerasure.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00020_source.html\">dune/functions/common/functionconcepts.hh</a>></code><br />\n </div>\n <p><a href=\"a00053_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01139.html\">Dune::Functions::Concept::Callable< Args ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\"><a class=\"el\" href=\"a00220.html\">Concept</a> objects that can be called with given argument list. <a href=\"a01139.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01243.html\">Dune::Functions::LocalFunction< Signature, LocalContext, DerivativeTraits, bufferSize ></a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01147.html\">Dune::Functions::Concept::Function< Range(Domain)></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\"><a class=\"el\" href=\"a00220.html\">Concept</a> for a function mapping <code>Domain</code> to <code>Range</code>. <a href=\"a01147.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01155.html\">Dune::Functions::Concept::DifferentiableFunction< Range(Domain), DerivativeTraits ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\"><a class=\"el\" href=\"a00220.html\">Concept</a> for a differentiable function mapping <code>Domain</code> to <code>Range</code>. <a href=\"a01155.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01163.html\">Dune::Functions::Concept::LocalFunction< Range(Domain), LocalContext ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\"><a class=\"el\" href=\"a00220.html\">Concept</a> for a local function mapping <code>Domain</code> to <code>Range</code>. <a href=\"a01163.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01171.html\">Dune::Functions::Concept::DifferentiableLocalFunction< Range(Domain), LocalContext, DerivativeTraits ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\"><a class=\"el\" href=\"a00220.html\">Concept</a> for a differentiable local function mapping <code>Domain</code> to <code>Range</code>. <a href=\"a01171.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01175.html\">Dune::Functions::Concept::EntitySet</a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\"><a class=\"el\" href=\"a00220.html\">Concept</a> for an entity set for a Concept::GridFunction<Range(Domain), EntitySet, DerivativeTraits> <a href=\"a01175.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01183.html\">Dune::Functions::Concept::GridFunction< Range(Domain), EntitySet ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\"><a class=\"el\" href=\"a00220.html\">Concept</a> for a grid function mapping <code>Domain</code> to <code>Range</code>. <a href=\"a01183.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01191.html\">Dune::Functions::Concept::DifferentiableGridFunction< Range(Domain), EntitySet, DerivativeTraits ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\"><a class=\"el\" href=\"a00220.html\">Concept</a> for a differentiable grid function mapping <code>Domain</code> to <code>Range</code>. <a href=\"a01191.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01199.html\">Dune::Functions::Concept::GridViewFunction< Range(Domain), GridView ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\"><a class=\"el\" href=\"a00220.html\">Concept</a> for a grid view function mapping <code>Domain</code> to <code>Range</code>. <a href=\"a01199.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01207.html\">Dune::Functions::Concept::DifferentiableGridViewFunction< Range(Domain), GridView, DerivativeTraits ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\"><a class=\"el\" href=\"a00220.html\">Concept</a> for a differentiable grid view function mapping <code>Domain</code> to <code>Range</code>. <a href=\"a01207.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01251.html\">Dune::Functions::LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Class storing local functions using type erasure. <a href=\"a01251.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a00220\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00220.html\">Dune::Functions::Concept</a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-</table><table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n-Functions</h2></td></tr>\n-<tr class=\"memitem:ga2bc5056bab5babdfa8a82409665f5a26\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class... Args> </td></tr>\n-<tr class=\"memitem:ga2bc5056bab5babdfa8a82409665f5a26\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static constexpr auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00215.html#ga2bc5056bab5babdfa8a82409665f5a26\">Dune::Functions::Concept::isCallable</a> ()</td></tr>\n-<tr class=\"memdesc:ga2bc5056bab5babdfa8a82409665f5a26\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Check if f is callable with given argument list. <a href=\"a00215.html#ga2bc5056bab5babdfa8a82409665f5a26\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga2bc5056bab5babdfa8a82409665f5a26\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:ga5d8c4be87961f1cff0cb71fc7c7f4c61\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class... Args> </td></tr>\n-<tr class=\"memitem:ga5d8c4be87961f1cff0cb71fc7c7f4c61\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static constexpr auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00215.html#ga5d8c4be87961f1cff0cb71fc7c7f4c61\">Dune::Functions::Concept::isCallable</a> (F &&, Args &&...)</td></tr>\n-<tr class=\"memdesc:ga5d8c4be87961f1cff0cb71fc7c7f4c61\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Check if f is callable with given argument list. <a href=\"a00215.html#ga5d8c4be87961f1cff0cb71fc7c7f4c61\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga5d8c4be87961f1cff0cb71fc7c7f4c61\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:ga44de2338acc7d9c49fbc12452545c7fc\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class Signature > </td></tr>\n-<tr class=\"memitem:ga44de2338acc7d9c49fbc12452545c7fc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static constexpr bool </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00207.html#ga44de2338acc7d9c49fbc12452545c7fc\">Dune::Functions::Concept::isFunction</a> ()</td></tr>\n-<tr class=\"memdesc:ga44de2338acc7d9c49fbc12452545c7fc\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Check if F models the <a class=\"el\" href=\"a01143.html\">Function</a> concept with given signature. <a href=\"a00207.html#ga44de2338acc7d9c49fbc12452545c7fc\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga44de2338acc7d9c49fbc12452545c7fc\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:gaf3604a4b809f49bb590440c0f06ededa\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class Signature , template< class > class DerivativeTraits> </td></tr>\n-<tr class=\"memitem:gaf3604a4b809f49bb590440c0f06ededa\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static constexpr bool </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00207.html#gaf3604a4b809f49bb590440c0f06ededa\">Dune::Functions::Concept::isFunction</a> (F &&f, SignatureTag< Signature, DerivativeTraits >)</td></tr>\n-<tr class=\"memdesc:gaf3604a4b809f49bb590440c0f06ededa\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Check if f models the <a class=\"el\" href=\"a01143.html\">Function</a> concept with given signature. <a href=\"a00207.html#gaf3604a4b809f49bb590440c0f06ededa\">More...</a><br /></td></tr>\n-<tr class=\"separator:gaf3604a4b809f49bb590440c0f06ededa\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:ga6c75551b9678848113181d29678ec81e\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class Signature , template< class > class DerivativeTraits = DefaultDerivativeTraits> </td></tr>\n-<tr class=\"memitem:ga6c75551b9678848113181d29678ec81e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static constexpr bool </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00207.html#ga6c75551b9678848113181d29678ec81e\">Dune::Functions::Concept::isDifferentiableFunction</a> ()</td></tr>\n-<tr class=\"memdesc:ga6c75551b9678848113181d29678ec81e\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Check if F models the <a class=\"el\" href=\"a01151.html\">DifferentiableFunction</a> concept with given signature. <a href=\"a00207.html#ga6c75551b9678848113181d29678ec81e\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga6c75551b9678848113181d29678ec81e\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:ga2ce66508daac0e7fab4ea581865b13c3\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class Signature , template< class > class DerivativeTraits> </td></tr>\n-<tr class=\"memitem:ga2ce66508daac0e7fab4ea581865b13c3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static constexpr bool </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00207.html#ga2ce66508daac0e7fab4ea581865b13c3\">Dune::Functions::Concept::isDifferentiableFunction</a> (F &&f, SignatureTag< Signature, DerivativeTraits >)</td></tr>\n-<tr class=\"memdesc:ga2ce66508daac0e7fab4ea581865b13c3\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Check if f models the <a class=\"el\" href=\"a01151.html\">DifferentiableFunction</a> concept with given signature. <a href=\"a00207.html#ga2ce66508daac0e7fab4ea581865b13c3\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga2ce66508daac0e7fab4ea581865b13c3\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:gae2c89a3c7780ff790a8b066bbb5f9687\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class Signature , class LocalContext > </td></tr>\n-<tr class=\"memitem:gae2c89a3c7780ff790a8b066bbb5f9687\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static constexpr bool </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00207.html#gae2c89a3c7780ff790a8b066bbb5f9687\">Dune::Functions::Concept::isLocalFunction</a> ()</td></tr>\n-<tr class=\"memdesc:gae2c89a3c7780ff790a8b066bbb5f9687\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Check if F models the <a class=\"el\" href=\"a01159.html\">LocalFunction</a> concept with given signature and local context. <a href=\"a00207.html#gae2c89a3c7780ff790a8b066bbb5f9687\">More...</a><br /></td></tr>\n-<tr class=\"separator:gae2c89a3c7780ff790a8b066bbb5f9687\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:ga2a244aa61f5d2c3f5d0dfb125b0436d5\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class Signature , class LocalContext , template< class > class DerivativeTraits = DefaultDerivativeTraits> </td></tr>\n-<tr class=\"memitem:ga2a244aa61f5d2c3f5d0dfb125b0436d5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static constexpr bool </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00207.html#ga2a244aa61f5d2c3f5d0dfb125b0436d5\">Dune::Functions::Concept::isDifferentiableLocalFunction</a> ()</td></tr>\n-<tr class=\"memdesc:ga2a244aa61f5d2c3f5d0dfb125b0436d5\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Check if F models the <a class=\"el\" href=\"a01167.html\">DifferentiableLocalFunction</a> concept with given signature and local context. <a href=\"a00207.html#ga2a244aa61f5d2c3f5d0dfb125b0436d5\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga2a244aa61f5d2c3f5d0dfb125b0436d5\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:gaa59c2062e5469a358cd00ce5bb90fe4d\"><td class=\"memTemplParams\" colspan=\"2\">template<class E > </td></tr>\n-<tr class=\"memitem:gaa59c2062e5469a358cd00ce5bb90fe4d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static constexpr bool </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00207.html#gaa59c2062e5469a358cd00ce5bb90fe4d\">Dune::Functions::Concept::isEntitySet</a> ()</td></tr>\n-<tr class=\"memdesc:gaa59c2062e5469a358cd00ce5bb90fe4d\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Check if F models the <a class=\"el\" href=\"a01179.html\">GridFunction</a> concept with given signature and entity set. <a href=\"a00207.html#gaa59c2062e5469a358cd00ce5bb90fe4d\">More...</a><br /></td></tr>\n-<tr class=\"separator:gaa59c2062e5469a358cd00ce5bb90fe4d\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:ga1691be3e84b0405cc8a7ebcd598bd861\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class Signature , class EntitySet > </td></tr>\n-<tr class=\"memitem:ga1691be3e84b0405cc8a7ebcd598bd861\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static constexpr bool </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00207.html#ga1691be3e84b0405cc8a7ebcd598bd861\">Dune::Functions::Concept::isGridFunction</a> ()</td></tr>\n-<tr class=\"memdesc:ga1691be3e84b0405cc8a7ebcd598bd861\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Check if F models the <a class=\"el\" href=\"a01179.html\">GridFunction</a> concept with given signature and entity set. <a href=\"a00207.html#ga1691be3e84b0405cc8a7ebcd598bd861\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga1691be3e84b0405cc8a7ebcd598bd861\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:gab53d12b97e04f88eec30f4192944e85a\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class Signature , class EntitySet , template< class > class DerivativeTraits = DefaultDerivativeTraits> </td></tr>\n-<tr class=\"memitem:gab53d12b97e04f88eec30f4192944e85a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static constexpr bool </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00207.html#gab53d12b97e04f88eec30f4192944e85a\">Dune::Functions::Concept::isDifferentiableGridFunction</a> ()</td></tr>\n-<tr class=\"memdesc:gab53d12b97e04f88eec30f4192944e85a\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Check if F models the <a class=\"el\" href=\"a01187.html\">DifferentiableGridFunction</a> concept with given signature and entity set. <a href=\"a00207.html#gab53d12b97e04f88eec30f4192944e85a\">More...</a><br /></td></tr>\n-<tr class=\"separator:gab53d12b97e04f88eec30f4192944e85a\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:ga8510d4e3f9e774bd9a3f434e3de659c9\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class Signature , class GridView > </td></tr>\n-<tr class=\"memitem:ga8510d4e3f9e774bd9a3f434e3de659c9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static constexpr bool </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00207.html#ga8510d4e3f9e774bd9a3f434e3de659c9\">Dune::Functions::Concept::isGridViewFunction</a> ()</td></tr>\n-<tr class=\"memdesc:ga8510d4e3f9e774bd9a3f434e3de659c9\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Check if F models the <a class=\"el\" href=\"a01195.html\">GridViewFunction</a> concept with given signature. <a href=\"a00207.html#ga8510d4e3f9e774bd9a3f434e3de659c9\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga8510d4e3f9e774bd9a3f434e3de659c9\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:ga5fe279401b9387533b85b085d6d521cc\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class Signature , class GridView , template< class > class DerivativeTraits = DefaultDerivativeTraits> </td></tr>\n-<tr class=\"memitem:ga5fe279401b9387533b85b085d6d521cc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static constexpr bool </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00207.html#ga5fe279401b9387533b85b085d6d521cc\">Dune::Functions::Concept::isDifferentiableGridViewFunction</a> ()</td></tr>\n-<tr class=\"memdesc:ga5fe279401b9387533b85b085d6d521cc\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Check if F models the <a class=\"el\" href=\"a01203.html\">DifferentiableGridViewFunction</a> concept with given signature. <a href=\"a00207.html#ga5fe279401b9387533b85b085d6d521cc\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga5fe279401b9387533b85b085d6d521cc\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,137 +5,33 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * common\n-Classes | Namespaces | Functions\n-functionconcepts.hh File Reference\n-#include <dune/common/typelist.hh>\n-#include <dune/common/concept.hh>\n-#include <dune/functions/common/signature.hh>\n-#include <dune/functions/gridfunctions/localderivativetraits.hh>\n-#include <dune/functions/gridfunctions/gridviewentityset.hh>\n+Classes | Namespaces\n+localfunction.hh File Reference\n+#include <type_traits>\n+#include <dune/common/typeutilities.hh>\n+#include <dune/functions/common/defaultderivativetraits.hh>\n+#include <dune/functions/common/differentiablefunction.hh>\n+#include <dune/functions/common/localfunction_imp.hh>\n+#include <dune/functions/common/typeerasure.hh>\n+#include <dune/functions/common/functionconcepts.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-struct \u00a0Dune::Functions::Concept::Callable<_Args_>\n-\u00a0 Concept objects that can be called with given argument list. More...\n+class \u00a0Dune::Functions::LocalFunction<_Signature,_LocalContext,\n+ DerivativeTraits,_bufferSize_>\n \u00a0\n-struct \u00a0Dune::Functions::Concept::Function<_Range(Domain)>\n-\u00a0 Concept for a function mapping Domain to Range. More...\n-\u00a0\n-struct \u00a0Dune::Functions::Concept::DifferentiableFunction<_Range(Domain),\n- DerivativeTraits_>\n-\u00a0 Concept for a differentiable function mapping Domain to Range. More...\n-\u00a0\n-struct \u00a0Dune::Functions::Concept::LocalFunction<_Range(Domain),_LocalContext_>\n-\u00a0 Concept for a local function mapping Domain to Range. More...\n-\u00a0\n-struct \u00a0Dune::Functions::Concept::DifferentiableLocalFunction<_Range(Domain),\n- LocalContext,_DerivativeTraits_>\n-\u00a0 Concept for a differentiable local function mapping Domain to Range.\n- More...\n-\u00a0\n-struct \u00a0Dune::Functions::Concept::EntitySet\n-\u00a0 Concept for an entity set for a Concept::GridFunction<Range(Domain),\n- EntitySet, DerivativeTraits> More...\n-\u00a0\n-struct \u00a0Dune::Functions::Concept::GridFunction<_Range(Domain),_EntitySet_>\n-\u00a0 Concept for a grid function mapping Domain to Range. More...\n-\u00a0\n-struct \u00a0Dune::Functions::Concept::DifferentiableGridFunction<_Range(Domain),\n- EntitySet,_DerivativeTraits_>\n-\u00a0 Concept for a differentiable grid function mapping Domain to Range.\n- More...\n-\u00a0\n-struct \u00a0Dune::Functions::Concept::GridViewFunction<_Range(Domain),_GridView_>\n-\u00a0 Concept for a grid view function mapping Domain to Range. More...\n-\u00a0\n-struct \u00a0Dune::Functions::Concept::DifferentiableGridViewFunction<_Range\n- (Domain),_GridView,_DerivativeTraits_>\n-\u00a0 Concept for a differentiable grid view function mapping Domain to\n- Range. More...\n+class \u00a0Dune::Functions::LocalFunction<_Range(Domain),_LocalContext,\n+ DerivativeTraits,_bufferSize_>\n+\u00a0 Class storing local functions using type erasure. More...\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n-namespace \u00a0Dune::Functions::Concept\n-\u00a0\n- Functions\n-template<class F , class... Args>\n-static constexpr auto\u00a0Dune::Functions::Concept::isCallable ()\n-\u00a0 Check if f is callable with given argument list. More...\n-\u00a0\n-template<class F , class... Args>\n-static constexpr auto\u00a0Dune::Functions::Concept::isCallable (F &&, Args &&...)\n-\u00a0 Check if f is callable with given argument list. More...\n-\u00a0\n-template<class F , class Signature >\n-static constexpr bool\u00a0Dune::Functions::Concept::isFunction ()\n-\u00a0 Check if F models the Function concept with given\n- signature. More...\n-\u00a0\n-template<class F , class Signature , template< class > class DerivativeTraits>\n-static constexpr bool\u00a0Dune::Functions::Concept::isFunction (F &&f,\n- SignatureTag< Signature, DerivativeTraits >)\n-\u00a0 Check if f models the Function concept with given\n- signature. More...\n-\u00a0\n-template<class F , class Signature , template< class > class DerivativeTraits =\n-DefaultDerivativeTraits>\n-static constexpr bool\u00a0Dune::Functions::Concept::isDifferentiableFunction ()\n-\u00a0 Check if F models the DifferentiableFunction concept\n- with given signature. More...\n-\u00a0\n-template<class F , class Signature , template< class > class DerivativeTraits>\n-static constexpr bool\u00a0Dune::Functions::Concept::isDifferentiableFunction (F\n- &&f, SignatureTag< Signature, DerivativeTraits >)\n-\u00a0 Check if f models the DifferentiableFunction concept\n- with given signature. More...\n-\u00a0\n-template<class F , class Signature , class LocalContext >\n-static constexpr bool\u00a0Dune::Functions::Concept::isLocalFunction ()\n-\u00a0 Check if F models the LocalFunction concept with given\n- signature and local context. More...\n-\u00a0\n-template<class F , class Signature , class LocalContext , template< class >\n-class DerivativeTraits = DefaultDerivativeTraits>\n-static constexpr bool\u00a0Dune::Functions::Concept::isDifferentiableLocalFunction\n- ()\n-\u00a0 Check if F models the DifferentiableLocalFunction\n- concept with given signature and local context. More...\n-\u00a0\n-template<class E >\n-static constexpr bool\u00a0Dune::Functions::Concept::isEntitySet ()\n-\u00a0 Check if F models the GridFunction concept with given\n- signature and entity set. More...\n-\u00a0\n-template<class F , class Signature , class EntitySet >\n-static constexpr bool\u00a0Dune::Functions::Concept::isGridFunction ()\n-\u00a0 Check if F models the GridFunction concept with given\n- signature and entity set. More...\n-\u00a0\n-template<class F , class Signature , class EntitySet , template< class > class\n-DerivativeTraits = DefaultDerivativeTraits>\n-static constexpr bool\u00a0Dune::Functions::Concept::isDifferentiableGridFunction\n- ()\n-\u00a0 Check if F models the DifferentiableGridFunction concept\n- with given signature and entity set. More...\n-\u00a0\n-template<class F , class Signature , class GridView >\n-static constexpr bool\u00a0Dune::Functions::Concept::isGridViewFunction ()\n-\u00a0 Check if F models the GridViewFunction concept with\n- given signature. More...\n-\u00a0\n-template<class F , class Signature , class GridView , template< class > class\n-DerivativeTraits = DefaultDerivativeTraits>\n-static constexpr bool\u00a0Dune::Functions::Concept::\n- isDifferentiableGridViewFunction ()\n-\u00a0 Check if F models the DifferentiableGridViewFunction\n- concept with given signature. More...\n-\u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00053_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00053_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: functionconcepts.hh Source File</title>\n+<title>dune-functions: localfunction.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,320 +62,152 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">functionconcepts.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">localfunction.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00053.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <dune/common/typelist.hh></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <dune/common/concept.hh></span></div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00086.html\">dune/functions/common/signature.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00029.html\">dune/functions/gridfunctions/localderivativetraits.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00023.html\">dune/functions/gridfunctions/gridviewentityset.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"keyword\">namespace </span>Concept {</div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <type_traits></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span> </div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <dune/common/typeutilities.hh></span></div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00035.html\">dune/functions/common/defaultderivativetraits.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00011.html\">dune/functions/common/differentiablefunction.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00044.html\">dune/functions/common/localfunction_imp.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00050.html\">dune/functions/common/typeerasure.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00020.html\">dune/functions/common/functionconcepts.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n <div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"keyword\">using namespace </span>Dune::Concept;</div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"keyword\">namespace </span>Functions {</div>\n <div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span> </div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"comment\">// Callable concept ############################################################</span></div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> </div>\n <div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> </div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span> </div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span>... Args></div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01139.html\"> 32</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01139.html\">Callable</a></div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span>{</div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F></div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01139.html#a8020f2dc3373ee93bbb30e7dfd362b9f\"> 35</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a01139.html#a8020f2dc3373ee93bbb30e7dfd362b9f\">require</a>(F&& f) -> <span class=\"keyword\">decltype</span>(</div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> f(std::declval<Args>()...)</div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> );</div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span>};</div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> </div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>F, <span class=\"keyword\">class</span>... Args></div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00215.html#ga2bc5056bab5babdfa8a82409665f5a26\"> 47</a></span><span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00215.html#ga2bc5056bab5babdfa8a82409665f5a26\">isCallable</a>()</div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span>{ <span class=\"keywordflow\">return</span> models<<a class=\"code hl_struct\" href=\"a01139.html\">Concept::Callable</a><Args...>, F>(); }</div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> </div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>F, <span class=\"keyword\">class</span>... Args></div>\n-<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00215.html#ga5d8c4be87961f1cff0cb71fc7c7f4c61\"> 57</a></span><span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00215.html#ga2bc5056bab5babdfa8a82409665f5a26\">isCallable</a>(F&&, Args&&...)</div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span>{</div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> <span class=\"keywordflow\">return</span> models<<a class=\"code hl_struct\" href=\"a01139.html\">Concept::Callable</a><Args&&...>, F>();</div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span>}</div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> </div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> </div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"comment\">/*</span></div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"comment\"> * Default implementation is empty</span></div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span><span class=\"comment\"> * The actual implementation is only given if Signature is an type</span></div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"comment\"> * describing a function signature as Range(Domain).</span></div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span><span class=\"comment\"> */</span></div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> LocalContext, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits=DefaultDerivativeTraits, <span class=\"keywordtype\">size_t</span> bufferSize=56></div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01243.html\"> 29</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01243.html\">LocalFunction</a></div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span>{};</div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> </div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> </div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> </div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span><span class=\"keyword\">namespace </span>Imp</div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span>{</div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> </div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> S, <span class=\"keyword\">class</span> L, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits, <span class=\"keywordtype\">size_t</span> bufferSize></div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> <span class=\"keyword\">struct </span>LocalFunctionTraits :</div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize></div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> {</div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> <span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> <span class=\"keyword\">using </span>Base=DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize>;</div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> </div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> <span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> <span class=\"keyword\">using </span>LocalContext = L;</div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> </div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> <span class=\"keyword\">using </span>DerivativeSignature = <span class=\"keyword\">typename</span> Base::DerivativeSignature;</div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> </div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> <span class=\"keyword\">using </span>DerivativeInterface = <a class=\"code hl_class\" href=\"a01243.html\">LocalFunction<DerivativeSignature, L, DerivativeTraits, bufferSize></a>;</div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> </div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> <span class=\"keyword\">using </span>Concept = LocalFunctionWrapperInterface<S, DerivativeInterface, L>;</div>\n+<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> </div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> B></div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> <span class=\"keyword\">using </span>Model = LocalFunctionWrapperImplementation<S, DerivativeInterface, L, B>;</div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> };</div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span>}</div>\n <div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> </div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span><span class=\"comment\">// Function concept ############################################################</span></div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature></div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01143.html\"> 66</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01143.html\">Function</a>;</div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> </div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain></div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01147.html\"> 77</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01143.html\">Function</a><Range(Domain)> : Refines<Callable<Domain> ></div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span>{</div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F></div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01147.html#a8cd663e9ec6cd8cef42e103a3dff7b8d\"> 80</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a01147.html#a8cd663e9ec6cd8cef42e103a3dff7b8d\">require</a>(F&& f) -> <span class=\"keyword\">decltype</span>(</div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> <span class=\"comment\">// F models Function<Range(Domain)> if the result of F(Domain) is implicitly convertible to Range</span></div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> requireConvertible<Range>(f(std::declval<Domain>()))</div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> );</div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span>};</div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> </div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F, <span class=\"keyword\">class</span> Signature></div>\n-<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00207.html#ga44de2338acc7d9c49fbc12452545c7fc\"> 88</a></span><span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a00207.html#ga44de2338acc7d9c49fbc12452545c7fc\">isFunction</a>()</div>\n-<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span>{ <span class=\"keywordflow\">return</span> models<Concept::Function<Signature>, F>(); }</div>\n-<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> </div>\n-<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F, <span class=\"keyword\">class</span> Signature, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits></div>\n-<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00207.html#gaf3604a4b809f49bb590440c0f06ededa\"> 93</a></span><span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a00207.html#ga44de2338acc7d9c49fbc12452545c7fc\">isFunction</a>(F&& f, <a class=\"code hl_struct\" href=\"a01295.html\">SignatureTag<Signature, DerivativeTraits></a>)</div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span>{ <span class=\"keywordflow\">return</span> models<Concept::Function<Signature>, F>(); }</div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> </div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> </div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">class</span> LocalContext, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits, <span class=\"keywordtype\">size_t</span> bufferSize></div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01251.html\"> 87</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01243.html\">LocalFunction</a>< Range(Domain), LocalContext, DerivativeTraits, bufferSize> :</div>\n+<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01351.html\">TypeErasureBase</a><</div>\n+<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> typename Imp::LocalFunctionTraits<Range(Domain), LocalContext, DerivativeTraits, bufferSize>::Concept,</div>\n+<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> Imp::LocalFunctionTraits<Range(Domain), LocalContext, DerivativeTraits, bufferSize>::template Model></div>\n+<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span>{</div>\n+<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> <span class=\"keyword\">using </span>Traits = Imp::LocalFunctionTraits<Range(Domain), LocalContext, DerivativeTraits, bufferSize>;</div>\n+<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> </div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01351.html\">Base</a> = <a class=\"code hl_class\" href=\"a01351.html\">TypeErasureBase<typename Traits::Concept, Traits::template Model></a>;</div>\n <div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> </div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> </div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> <span class=\"keyword\">using </span>DerivativeInterface = <span class=\"keyword\">typename</span> <a class=\"code hl_class\" href=\"a01243.html\">Traits::DerivativeInterface</a>;</div>\n <div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> </div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span><span class=\"comment\">// DifferentiableFunction concept ##############################################</span></div>\n-<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits = <a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a>></div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01151.html\"> 100</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01151.html\">DifferentiableFunction</a>;</div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> </div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits></div>\n-<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01155.html\"> 114</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01151.html\">DifferentiableFunction</a><Range(Domain), DerivativeTraits> : Refines<Dune::Functions::Concept::Function<Range(Domain)> ></div>\n-<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span>{</div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01155.html#a06581f35c60f2f1a53ffcb579d2fb018\"> 116</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01155.html#a06581f35c60f2f1a53ffcb579d2fb018\">DerivativeSignature</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_struct\" href=\"a01291.html\">SignatureTraits</a><Range(Domain)>::template <a class=\"code hl_typedef\" href=\"a01155.html#a06581f35c60f2f1a53ffcb579d2fb018\">DerivativeSignature<DerivativeTraits></a>;</div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> </div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F, disableCopyMove<LocalFunction, F> = 0 ></div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01251.html#a6d54d317a0068c6bcb27a937afac321d\"> 112</a></span> <a class=\"code hl_function\" href=\"a01251.html#a6d54d317a0068c6bcb27a937afac321d\">LocalFunction</a>(F&& f) :</div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> <a class=\"code hl_class\" href=\"a01351.html\">Base</a>(std::forward<F>(f))</div>\n+<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> {</div>\n+<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> <span class=\"keyword\">static_assert</span>(Dune::Functions::Concept::isLocalFunction<F, Range(Domain), LocalContext>(), <span class=\"stringliteral\">"Trying to construct a LocalFunction from type that does not model the LocalFunction concept"</span>);</div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> }</div>\n <div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> </div>\n-<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F></div>\n-<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01155.html#a178d79f67e27907184d01fe3258b57f2\"> 119</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a01155.html#a178d79f67e27907184d01fe3258b57f2\">require</a>(F&& f) -> <span class=\"keyword\">decltype</span>(</div>\n-<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> <a class=\"code hl_function\" href=\"a00209.html#ga7ec424ff4be740ad675bd85750940472\">derivative</a>(f),</div>\n-<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> requireConcept<Function<DerivativeSignature>>(<a class=\"code hl_function\" href=\"a00209.html#ga7ec424ff4be740ad675bd85750940472\">derivative</a>(f))</div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> );</div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span>};</div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> </div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F, <span class=\"keyword\">class</span> Signature, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits = <a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a>></div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00207.html#ga6c75551b9678848113181d29678ec81e\"> 127</a></span><span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a00207.html#ga6c75551b9678848113181d29678ec81e\">isDifferentiableFunction</a>()</div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span>{ <span class=\"keywordflow\">return</span> models<Concept::DifferentiableFunction<Signature, DerivativeTraits>, F>(); }</div>\n-<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> </div>\n-<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F, <span class=\"keyword\">class</span> Signature, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits></div>\n-<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00207.html#ga2ce66508daac0e7fab4ea581865b13c3\"> 132</a></span><span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a00207.html#ga6c75551b9678848113181d29678ec81e\">isDifferentiableFunction</a>(F&& f, <a class=\"code hl_struct\" href=\"a01295.html\">SignatureTag<Signature, DerivativeTraits></a>)</div>\n-<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span>{ <span class=\"keywordflow\">return</span> models<Concept::DifferentiableFunction<Signature, DerivativeTraits>, F>(); }</div>\n-<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> </div>\n-<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> </div>\n-<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> </div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span><span class=\"comment\">// LocalFunction concept ##############################################</span></div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> LocalContext></div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01159.html\"> 139</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01159.html\">LocalFunction</a>;</div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> </div>\n-<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">class</span> LocalContext></div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01163.html\"> 151</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01159.html\">LocalFunction</a><Range(Domain), LocalContext> :</div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> Refines<Dune::Functions::Concept::Function<Range(Domain)> ></div>\n-<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span>{</div>\n-<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F></div>\n-<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01163.html#a48db21bb312816392239ff02d27a804c\"> 155</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a01163.html#a48db21bb312816392239ff02d27a804c\">require</a>(F&& f) -> <span class=\"keyword\">decltype</span>(</div>\n-<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> f.bind(std::declval<LocalContext>()),</div>\n-<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> f.unbind(),</div>\n-<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> requireConvertible<bool>(f.bound()),</div>\n-<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> f.localContext(),</div>\n-<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> requireConvertible<LocalContext>(f.localContext())</div>\n-<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> );</div>\n-<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span>};</div>\n-<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> </div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F, <span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> LocalContext></div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00207.html#gae2c89a3c7780ff790a8b066bbb5f9687\"> 166</a></span><span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a00207.html#gae2c89a3c7780ff790a8b066bbb5f9687\">isLocalFunction</a>()</div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span>{ <span class=\"keywordflow\">return</span> models<Concept::LocalFunction<Signature, LocalContext>, F>(); }</div>\n-<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> </div>\n-<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> </div>\n-<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span><span class=\"comment\">// DifferentiableLocalFunction concept ##############################################</span></div>\n-<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> LocalContext, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits = <a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a>></div>\n-<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01167.html\"> 172</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01167.html\">DifferentiableLocalFunction</a>;</div>\n-<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> </div>\n-<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">class</span> LocalContext, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits></div>\n-<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01171.html\"> 187</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01167.html\">DifferentiableLocalFunction</a><Range(Domain), LocalContext, DerivativeTraits> :</div>\n-<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> Refines<</div>\n-<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> Dune::Functions::Concept::DifferentiableFunction<Range(Domain), DerivativeTraits>,</div>\n-<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span> Dune::Functions::Concept::LocalFunction<Range(Domain),LocalContext></div>\n-<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> ></div>\n-<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span>{</div>\n-<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F></div>\n-<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01171.html#ac0aee0abe38ae49eeb9cfea8abcd56ba\"> 194</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a01171.html#ac0aee0abe38ae49eeb9cfea8abcd56ba\">require</a>(F&& f) -> <span class=\"keyword\">decltype</span>(</div>\n-<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> f.bind(std::declval<LocalContext>()),</div>\n-<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> f.unbind(),</div>\n-<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> f.localContext(),</div>\n-<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> requireConvertible<LocalContext>(f.localContext())</div>\n-<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> );</div>\n-<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span>};</div>\n-<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> </div>\n-<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F, <span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> LocalContext, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits = <a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a>></div>\n-<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00207.html#ga2a244aa61f5d2c3f5d0dfb125b0436d5\"> 204</a></span><span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a00207.html#ga2a244aa61f5d2c3f5d0dfb125b0436d5\">isDifferentiableLocalFunction</a>()</div>\n-<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span>{ <span class=\"keywordflow\">return</span> models<Concept::DifferentiableLocalFunction<Signature, LocalContext, DerivativeTraits>, F>(); }</div>\n-<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> </div>\n-<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> </div>\n-<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span><span class=\"comment\">// EntitySet concept ##############################################</span></div>\n-<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> </div>\n-<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01175.html\"> 219</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01175.html\">EntitySet</a></div>\n-<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span>{</div>\n-<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> E></div>\n-<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01175.html#a68f40d08a99de681cf30949d76461d8a\"> 222</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a01175.html#a68f40d08a99de681cf30949d76461d8a\">require</a>(E&& f) -> <span class=\"keyword\">decltype</span>(</div>\n-<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> requireType<typename E::Element>(),</div>\n-<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> requireType<typename E::LocalCoordinate>(),</div>\n-<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span> requireType<typename E::GlobalCoordinate>()</div>\n-<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> );</div>\n-<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span>};</div>\n-<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> </div>\n-<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> E></div>\n-<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00207.html#gaa59c2062e5469a358cd00ce5bb90fe4d\"> 231</a></span><span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a00207.html#gaa59c2062e5469a358cd00ce5bb90fe4d\">isEntitySet</a>()</div>\n-<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span>{ <span class=\"keywordflow\">return</span> models<Concept::EntitySet, E>(); }</div>\n-<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> </div>\n-<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> </div>\n-<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> </div>\n-<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span><span class=\"comment\">// GridFunction concept ##############################################</span></div>\n-<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> EntitySet></div>\n-<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01179.html\"> 238</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01179.html\">GridFunction</a>;</div>\n-<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span> </div>\n-<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">class</span> EntitySet></div>\n-<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01183.html\"> 250</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01179.html\">GridFunction</a><Range(Domain), <a class=\"code hl_struct\" href=\"a01175.html\">EntitySet</a>> :</div>\n-<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span> Refines<Dune::Functions::Concept::Function<Range(Domain)> ></div>\n-<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span>{</div>\n-<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01183.html#a6344d487356e0513b458a11b45dd935b\"> 253</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01183.html#a6344d487356e0513b458a11b45dd935b\">LocalSignature</a> = Range(<span class=\"keyword\">typename</span> EntitySet::LocalCoordinate);</div>\n-<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01183.html#a15f0186a48c8602d29c53c131906da6e\"> 254</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01183.html#a15f0186a48c8602d29c53c131906da6e\">LocalContext</a> = <span class=\"keyword\">typename</span> EntitySet::Element;</div>\n-<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span> </div>\n-<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"> 256</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F></div>\n-<div class=\"line\"><a id=\"l00257\" name=\"l00257\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01183.html#ae2f4f9301cbe9507a2a643c88ce90d27\"> 257</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a01183.html#ae2f4f9301cbe9507a2a643c88ce90d27\">require</a>(F&& f) -> <span class=\"keyword\">decltype</span>(</div>\n-<div class=\"line\"><a id=\"l00258\" name=\"l00258\"></a><span class=\"lineno\"> 258</span> localFunction(f),</div>\n-<div class=\"line\"><a id=\"l00259\" name=\"l00259\"></a><span class=\"lineno\"> 259</span> f.entitySet(),</div>\n-<div class=\"line\"><a id=\"l00260\" name=\"l00260\"></a><span class=\"lineno\"> 260</span> requireConcept<LocalFunction<LocalSignature, LocalContext>>(localFunction(f)),</div>\n-<div class=\"line\"><a id=\"l00261\" name=\"l00261\"></a><span class=\"lineno\"> 261</span> requireConcept<Concept::EntitySet, EntitySet>(),</div>\n-<div class=\"line\"><a id=\"l00262\" name=\"l00262\"></a><span class=\"lineno\"> 262</span> requireConvertible<EntitySet>(f.entitySet()),</div>\n-<div class=\"line\"><a id=\"l00263\" name=\"l00263\"></a><span class=\"lineno\"> 263</span> requireConvertible<typename EntitySet::GlobalCoordinate, Domain>()</div>\n-<div class=\"line\"><a id=\"l00264\" name=\"l00264\"></a><span class=\"lineno\"> 264</span> );</div>\n-<div class=\"line\"><a id=\"l00265\" name=\"l00265\"></a><span class=\"lineno\"> 265</span>};</div>\n-<div class=\"line\"><a id=\"l00266\" name=\"l00266\"></a><span class=\"lineno\"> 266</span> </div>\n-<div class=\"line\"><a id=\"l00268\" name=\"l00268\"></a><span class=\"lineno\"> 268</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F, <span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> EntitySet></div>\n-<div class=\"line\"><a id=\"l00269\" name=\"l00269\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00207.html#ga1691be3e84b0405cc8a7ebcd598bd861\"> 269</a></span><span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a00207.html#ga1691be3e84b0405cc8a7ebcd598bd861\">isGridFunction</a>()</div>\n-<div class=\"line\"><a id=\"l00270\" name=\"l00270\"></a><span class=\"lineno\"> 270</span>{ <span class=\"keywordflow\">return</span> models<Concept::GridFunction<Signature, EntitySet>, F>(); }</div>\n-<div class=\"line\"><a id=\"l00271\" name=\"l00271\"></a><span class=\"lineno\"> 271</span> </div>\n-<div class=\"line\"><a id=\"l00272\" name=\"l00272\"></a><span class=\"lineno\"> 272</span> </div>\n-<div class=\"line\"><a id=\"l00273\" name=\"l00273\"></a><span class=\"lineno\"> 273</span><span class=\"comment\">// DifferentiableGridFunction concept ##############################################</span></div>\n-<div class=\"line\"><a id=\"l00274\" name=\"l00274\"></a><span class=\"lineno\"> 274</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> EntitySet, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits = <a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a>></div>\n-<div class=\"line\"><a id=\"l00275\" name=\"l00275\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01187.html\"> 275</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01187.html\">DifferentiableGridFunction</a>;</div>\n-<div class=\"line\"><a id=\"l00276\" name=\"l00276\"></a><span class=\"lineno\"> 276</span> </div>\n-<div class=\"line\"><a id=\"l00289\" name=\"l00289\"></a><span class=\"lineno\"> 289</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">class</span> EntitySet, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits></div>\n-<div class=\"line\"><a id=\"l00290\" name=\"l00290\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01191.html\"> 290</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01187.html\">DifferentiableGridFunction</a><Range(Domain), <a class=\"code hl_struct\" href=\"a01175.html\">EntitySet</a>, DerivativeTraits> :</div>\n-<div class=\"line\"><a id=\"l00291\" name=\"l00291\"></a><span class=\"lineno\"> 291</span> Refines<</div>\n-<div class=\"line\"><a id=\"l00292\" name=\"l00292\"></a><span class=\"lineno\"> 292</span> Dune::Functions::Concept::DifferentiableFunction<Range(Domain), DerivativeTraits>,</div>\n-<div class=\"line\"><a id=\"l00293\" name=\"l00293\"></a><span class=\"lineno\"> 293</span> Dune::Functions::Concept::GridFunction<Range(Domain),EntitySet></div>\n-<div class=\"line\"><a id=\"l00294\" name=\"l00294\"></a><span class=\"lineno\"> 294</span> ></div>\n-<div class=\"line\"><a id=\"l00295\" name=\"l00295\"></a><span class=\"lineno\"> 295</span>{</div>\n-<div class=\"line\"><a id=\"l00296\" name=\"l00296\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01191.html#a531f1d9858954a669da2a589f1fc4c4e\"> 296</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01191.html#a531f1d9858954a669da2a589f1fc4c4e\">LocalSignature</a> = Range(<span class=\"keyword\">typename</span> EntitySet::LocalCoordinate);</div>\n-<div class=\"line\"><a id=\"l00297\" name=\"l00297\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01191.html#a8f80cc5322c7d178fcf4707fbc6a02f8\"> 297</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01191.html#a8f80cc5322c7d178fcf4707fbc6a02f8\">LocalContext</a> = <span class=\"keyword\">typename</span> EntitySet::Element;</div>\n-<div class=\"line\"><a id=\"l00298\" name=\"l00298\"></a><span class=\"lineno\"> 298</span> </div>\n-<div class=\"line\"><a id=\"l00299\" name=\"l00299\"></a><span class=\"lineno\"> 299</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> R></div>\n-<div class=\"line\"><a id=\"l00300\" name=\"l00300\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01191.html#a0232d4cb02eb536145d8c115a9737578\"> 300</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01191.html#a0232d4cb02eb536145d8c115a9737578\">LocalDerivativeTraits</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_struct\" href=\"a01931.html\">Dune::Functions::LocalDerivativeTraits<EntitySet, DerivativeTraits>::template</a> Traits<R>;</div>\n-<div class=\"line\"><a id=\"l00301\" name=\"l00301\"></a><span class=\"lineno\"> 301</span> </div>\n-<div class=\"line\"><a id=\"l00302\" name=\"l00302\"></a><span class=\"lineno\"> 302</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F></div>\n-<div class=\"line\"><a id=\"l00303\" name=\"l00303\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01191.html#a450cfe8f161fb0308f19109d9bd7b196\"> 303</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a01191.html#a450cfe8f161fb0308f19109d9bd7b196\">require</a>(F&& f) -> <span class=\"keyword\">decltype</span>(</div>\n-<div class=\"line\"><a id=\"l00304\" name=\"l00304\"></a><span class=\"lineno\"> 304</span> requireConcept<DifferentiableLocalFunction<LocalSignature, LocalContext, LocalDerivativeTraits>>(localFunction(f))</div>\n-<div class=\"line\"><a id=\"l00305\" name=\"l00305\"></a><span class=\"lineno\"> 305</span> );</div>\n-<div class=\"line\"><a id=\"l00306\" name=\"l00306\"></a><span class=\"lineno\"> 306</span>};</div>\n-<div class=\"line\"><a id=\"l00307\" name=\"l00307\"></a><span class=\"lineno\"> 307</span> </div>\n-<div class=\"line\"><a id=\"l00309\" name=\"l00309\"></a><span class=\"lineno\"> 309</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F, <span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> EntitySet, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits = <a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a>></div>\n-<div class=\"line\"><a id=\"l00310\" name=\"l00310\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00207.html#gab53d12b97e04f88eec30f4192944e85a\"> 310</a></span><span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a00207.html#gab53d12b97e04f88eec30f4192944e85a\">isDifferentiableGridFunction</a>()</div>\n-<div class=\"line\"><a id=\"l00311\" name=\"l00311\"></a><span class=\"lineno\"> 311</span>{ <span class=\"keywordflow\">return</span> models<Concept::DifferentiableGridFunction<Signature, EntitySet, DerivativeTraits>, F>(); }</div>\n-<div class=\"line\"><a id=\"l00312\" name=\"l00312\"></a><span class=\"lineno\"> 312</span> </div>\n-<div class=\"line\"><a id=\"l00313\" name=\"l00313\"></a><span class=\"lineno\"> 313</span> </div>\n-<div class=\"line\"><a id=\"l00314\" name=\"l00314\"></a><span class=\"lineno\"> 314</span> </div>\n-<div class=\"line\"><a id=\"l00315\" name=\"l00315\"></a><span class=\"lineno\"> 315</span><span class=\"comment\">// GridViewFunction concept ##############################################</span></div>\n-<div class=\"line\"><a id=\"l00316\" name=\"l00316\"></a><span class=\"lineno\"> 316</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> Gr<span class=\"keywordtype\">id</span>View></div>\n-<div class=\"line\"><a id=\"l00317\" name=\"l00317\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01195.html\"> 317</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01195.html\">GridViewFunction</a>;</div>\n-<div class=\"line\"><a id=\"l00318\" name=\"l00318\"></a><span class=\"lineno\"> 318</span> </div>\n-<div class=\"line\"><a id=\"l00331\" name=\"l00331\"></a><span class=\"lineno\"> 331</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">class</span> Gr<span class=\"keywordtype\">id</span>View></div>\n-<div class=\"line\"><a id=\"l00332\" name=\"l00332\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01199.html\"> 332</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01195.html\">GridViewFunction</a><Range(Domain), GridView> :</div>\n-<div class=\"line\"><a id=\"l00333\" name=\"l00333\"></a><span class=\"lineno\"> 333</span> Refines<Dune::Functions::Concept::GridFunction<Range(Domain), GridViewEntitySet<GridView,0>>></div>\n-<div class=\"line\"><a id=\"l00334\" name=\"l00334\"></a><span class=\"lineno\"> 334</span>{</div>\n-<div class=\"line\"><a id=\"l00335\" name=\"l00335\"></a><span class=\"lineno\"> 335</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F></div>\n-<div class=\"line\"><a id=\"l00336\" name=\"l00336\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01199.html#a8eac66e126c3190e4a7f26bf72cc474e\"> 336</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a01199.html#a8eac66e126c3190e4a7f26bf72cc474e\">require</a>(F&& f) -> <span class=\"keyword\">decltype</span>(</div>\n-<div class=\"line\"><a id=\"l00337\" name=\"l00337\"></a><span class=\"lineno\"> 337</span> 0 <span class=\"comment\">// We don't need to check any further expressions, because a GridViewFunction is just a GridFunction with a special EntitySet</span></div>\n-<div class=\"line\"><a id=\"l00338\" name=\"l00338\"></a><span class=\"lineno\"> 338</span> );</div>\n-<div class=\"line\"><a id=\"l00339\" name=\"l00339\"></a><span class=\"lineno\"> 339</span>};</div>\n-<div class=\"line\"><a id=\"l00340\" name=\"l00340\"></a><span class=\"lineno\"> 340</span> </div>\n-<div class=\"line\"><a id=\"l00342\" name=\"l00342\"></a><span class=\"lineno\"> 342</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F, <span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> Gr<span class=\"keywordtype\">id</span>View></div>\n-<div class=\"line\"><a id=\"l00343\" name=\"l00343\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00207.html#ga8510d4e3f9e774bd9a3f434e3de659c9\"> 343</a></span><span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a00207.html#ga8510d4e3f9e774bd9a3f434e3de659c9\">isGridViewFunction</a>()</div>\n-<div class=\"line\"><a id=\"l00344\" name=\"l00344\"></a><span class=\"lineno\"> 344</span>{ <span class=\"keywordflow\">return</span> models<Concept::GridViewFunction<Signature, GridView>, F>(); }</div>\n-<div class=\"line\"><a id=\"l00345\" name=\"l00345\"></a><span class=\"lineno\"> 345</span> </div>\n-<div class=\"line\"><a id=\"l00346\" name=\"l00346\"></a><span class=\"lineno\"> 346</span> </div>\n-<div class=\"line\"><a id=\"l00347\" name=\"l00347\"></a><span class=\"lineno\"> 347</span><span class=\"comment\">// DifferentiableGridViewFunction concept ##############################################</span></div>\n-<div class=\"line\"><a id=\"l00348\" name=\"l00348\"></a><span class=\"lineno\"> 348</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> Gr<span class=\"keywordtype\">id</span>View, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits = <a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a>></div>\n-<div class=\"line\"><a id=\"l00349\" name=\"l00349\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01203.html\"> 349</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01203.html\">DifferentiableGridViewFunction</a>;</div>\n-<div class=\"line\"><a id=\"l00350\" name=\"l00350\"></a><span class=\"lineno\"> 350</span> </div>\n-<div class=\"line\"><a id=\"l00364\" name=\"l00364\"></a><span class=\"lineno\"> 364</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">class</span> Gr<span class=\"keywordtype\">id</span>View, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits></div>\n-<div class=\"line\"><a id=\"l00365\" name=\"l00365\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01207.html\"> 365</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01203.html\">DifferentiableGridViewFunction</a><Range(Domain), GridView, DerivativeTraits> :</div>\n-<div class=\"line\"><a id=\"l00366\" name=\"l00366\"></a><span class=\"lineno\"> 366</span> Refines<Dune::Functions::Concept::DifferentiableGridFunction<Range(Domain), GridViewEntitySet<GridView,0>, DerivativeTraits>></div>\n-<div class=\"line\"><a id=\"l00367\" name=\"l00367\"></a><span class=\"lineno\"> 367</span>{</div>\n-<div class=\"line\"><a id=\"l00368\" name=\"l00368\"></a><span class=\"lineno\"> 368</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F></div>\n-<div class=\"line\"><a id=\"l00369\" name=\"l00369\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01207.html#a9f3333426a5998365b59d5dc08db2003\"> 369</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a01207.html#a9f3333426a5998365b59d5dc08db2003\">require</a>(F&& f) -> <span class=\"keyword\">decltype</span>(</div>\n-<div class=\"line\"><a id=\"l00370\" name=\"l00370\"></a><span class=\"lineno\"> 370</span> 0 <span class=\"comment\">// We don't need to check any further expressions, because a GridViewFunction is just a GridFunction with a special EntitySet</span></div>\n-<div class=\"line\"><a id=\"l00371\" name=\"l00371\"></a><span class=\"lineno\"> 371</span> );</div>\n-<div class=\"line\"><a id=\"l00372\" name=\"l00372\"></a><span class=\"lineno\"> 372</span>};</div>\n-<div class=\"line\"><a id=\"l00373\" name=\"l00373\"></a><span class=\"lineno\"> 373</span> </div>\n-<div class=\"line\"><a id=\"l00375\" name=\"l00375\"></a><span class=\"lineno\"> 375</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F, <span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> Gr<span class=\"keywordtype\">id</span>View, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits = <a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a>></div>\n-<div class=\"line\"><a id=\"l00376\" name=\"l00376\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00207.html#ga5fe279401b9387533b85b085d6d521cc\"> 376</a></span><span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a00207.html#ga5fe279401b9387533b85b085d6d521cc\">isDifferentiableGridViewFunction</a>()</div>\n-<div class=\"line\"><a id=\"l00377\" name=\"l00377\"></a><span class=\"lineno\"> 377</span>{ <span class=\"keywordflow\">return</span> models<Concept::DifferentiableGridViewFunction<Signature, GridView, DerivativeTraits>, F>(); }</div>\n-<div class=\"line\"><a id=\"l00378\" name=\"l00378\"></a><span class=\"lineno\"> 378</span> </div>\n-<div class=\"line\"><a id=\"l00379\" name=\"l00379\"></a><span class=\"lineno\"> 379</span> </div>\n-<div class=\"line\"><a id=\"l00380\" name=\"l00380\"></a><span class=\"lineno\"> 380</span> </div>\n-<div class=\"line\"><a id=\"l00381\" name=\"l00381\"></a><span class=\"lineno\"> 381</span>}}} <span class=\"comment\">// namespace Dune::Functions::Concept</span></div>\n-<div class=\"line\"><a id=\"l00382\" name=\"l00382\"></a><span class=\"lineno\"> 382</span> </div>\n-<div class=\"line\"><a id=\"l00383\" name=\"l00383\"></a><span class=\"lineno\"> 383</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH</span></div>\n-<div class=\"ttc\" id=\"aa00023_html\"><div class=\"ttname\"><a href=\"a00023.html\">gridviewentityset.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00029_html\"><div class=\"ttname\"><a href=\"a00029.html\">localderivativetraits.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00086_html\"><div class=\"ttname\"><a href=\"a00086.html\">signature.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00207_html_ga1691be3e84b0405cc8a7ebcd598bd861\"><div class=\"ttname\"><a href=\"a00207.html#ga1691be3e84b0405cc8a7ebcd598bd861\">Dune::Functions::Concept::isGridFunction</a></div><div class=\"ttdeci\">static constexpr bool isGridFunction()</div><div class=\"ttdoc\">Check if F models the GridFunction concept with given signature and entity set.</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:269</div></div>\n-<div class=\"ttc\" id=\"aa00207_html_ga2a244aa61f5d2c3f5d0dfb125b0436d5\"><div class=\"ttname\"><a href=\"a00207.html#ga2a244aa61f5d2c3f5d0dfb125b0436d5\">Dune::Functions::Concept::isDifferentiableLocalFunction</a></div><div class=\"ttdeci\">static constexpr bool isDifferentiableLocalFunction()</div><div class=\"ttdoc\">Check if F models the DifferentiableLocalFunction concept with given signature and local context.</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:204</div></div>\n-<div class=\"ttc\" id=\"aa00207_html_ga44de2338acc7d9c49fbc12452545c7fc\"><div class=\"ttname\"><a href=\"a00207.html#ga44de2338acc7d9c49fbc12452545c7fc\">Dune::Functions::Concept::isFunction</a></div><div class=\"ttdeci\">static constexpr bool isFunction()</div><div class=\"ttdoc\">Check if F models the Function concept with given signature.</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:88</div></div>\n-<div class=\"ttc\" id=\"aa00207_html_ga5fe279401b9387533b85b085d6d521cc\"><div class=\"ttname\"><a href=\"a00207.html#ga5fe279401b9387533b85b085d6d521cc\">Dune::Functions::Concept::isDifferentiableGridViewFunction</a></div><div class=\"ttdeci\">static constexpr bool isDifferentiableGridViewFunction()</div><div class=\"ttdoc\">Check if F models the DifferentiableGridViewFunction concept with given signature.</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:376</div></div>\n-<div class=\"ttc\" id=\"aa00207_html_ga6c75551b9678848113181d29678ec81e\"><div class=\"ttname\"><a href=\"a00207.html#ga6c75551b9678848113181d29678ec81e\">Dune::Functions::Concept::isDifferentiableFunction</a></div><div class=\"ttdeci\">static constexpr bool isDifferentiableFunction()</div><div class=\"ttdoc\">Check if F models the DifferentiableFunction concept with given signature.</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:127</div></div>\n-<div class=\"ttc\" id=\"aa00207_html_ga8510d4e3f9e774bd9a3f434e3de659c9\"><div class=\"ttname\"><a href=\"a00207.html#ga8510d4e3f9e774bd9a3f434e3de659c9\">Dune::Functions::Concept::isGridViewFunction</a></div><div class=\"ttdeci\">static constexpr bool isGridViewFunction()</div><div class=\"ttdoc\">Check if F models the GridViewFunction concept with given signature.</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:343</div></div>\n-<div class=\"ttc\" id=\"aa00207_html_gaa59c2062e5469a358cd00ce5bb90fe4d\"><div class=\"ttname\"><a href=\"a00207.html#gaa59c2062e5469a358cd00ce5bb90fe4d\">Dune::Functions::Concept::isEntitySet</a></div><div class=\"ttdeci\">static constexpr bool isEntitySet()</div><div class=\"ttdoc\">Check if F models the GridFunction concept with given signature and entity set.</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:231</div></div>\n-<div class=\"ttc\" id=\"aa00207_html_gab53d12b97e04f88eec30f4192944e85a\"><div class=\"ttname\"><a href=\"a00207.html#gab53d12b97e04f88eec30f4192944e85a\">Dune::Functions::Concept::isDifferentiableGridFunction</a></div><div class=\"ttdeci\">static constexpr bool isDifferentiableGridFunction()</div><div class=\"ttdoc\">Check if F models the DifferentiableGridFunction concept with given signature and entity set.</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:310</div></div>\n-<div class=\"ttc\" id=\"aa00207_html_gae2c89a3c7780ff790a8b066bbb5f9687\"><div class=\"ttname\"><a href=\"a00207.html#gae2c89a3c7780ff790a8b066bbb5f9687\">Dune::Functions::Concept::isLocalFunction</a></div><div class=\"ttdeci\">static constexpr bool isLocalFunction()</div><div class=\"ttdoc\">Check if F models the LocalFunction concept with given signature and local context.</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:166</div></div>\n-<div class=\"ttc\" id=\"aa00209_html_ga7ec424ff4be740ad675bd85750940472\"><div class=\"ttname\"><a href=\"a00209.html#ga7ec424ff4be740ad675bd85750940472\">Dune::Functions::derivative</a></div><div class=\"ttdeci\">TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const TrigonometricFunction< K, sinFactor, cosFactor > &f)</div><div class=\"ttdoc\">Obtain derivative of TrigonometricFunction function.</div><div class=\"ttdef\"><b>Definition:</b> trigonometricfunction.hh:39</div></div>\n-<div class=\"ttc\" id=\"aa00215_html_ga2bc5056bab5babdfa8a82409665f5a26\"><div class=\"ttname\"><a href=\"a00215.html#ga2bc5056bab5babdfa8a82409665f5a26\">Dune::Functions::Concept::isCallable</a></div><div class=\"ttdeci\">static constexpr auto isCallable()</div><div class=\"ttdoc\">Check if f is callable with given argument list.</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:47</div></div>\n+<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01251.html#af06e8ffc9fe0be67a76a17cbf6c86c90\"> 118</a></span> <a class=\"code hl_function\" href=\"a01251.html#af06e8ffc9fe0be67a76a17cbf6c86c90\">LocalFunction</a>() = <span class=\"keywordflow\">default</span>;</div>\n+<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> </div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01251.html#ad6810aaf520c4e4e99fe9d4343332dde\"> 123</a></span> Range operator() (<span class=\"keyword\">const</span> Domain& x)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> <span class=\"keywordflow\">return</span> this->asInterface().operator()(x);</div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> }</div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> </div>\n+<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00208.html#ga525e3415d41db7f6b4557e6bd5b88726\"> 135</a></span> <span class=\"keyword\">friend</span> DerivativeInterface <a class=\"code hl_friend\" href=\"a00208.html#ga525e3415d41db7f6b4557e6bd5b88726\">derivative</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01243.html\">LocalFunction</a>& t)</div>\n+<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> {</div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> <span class=\"keywordflow\">return</span> t.asInterface().derivative();</div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> }</div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> </div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01251.html#ade625720d01e11b8e0bcaf06322633d9\"> 146</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01251.html#ade625720d01e11b8e0bcaf06322633d9\">bind</a>(<span class=\"keyword\">const</span> LocalContext& context)</div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> {</div>\n+<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> this->asInterface().bind(context);</div>\n+<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> }</div>\n+<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> </div>\n+<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01251.html#a81e2881a71c9c47c2524e6354c34a17b\"> 154</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01251.html#a81e2881a71c9c47c2524e6354c34a17b\">unbind</a>()</div>\n+<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> {</div>\n+<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> this->asInterface().unbind();</div>\n+<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> }</div>\n+<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> </div>\n+<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01251.html#aa107dc076a48e19c9a0d38747426080e\"> 161</a></span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a01251.html#aa107dc076a48e19c9a0d38747426080e\">bound</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> <span class=\"keywordflow\">return</span> this->asInterface().bound();</div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> }</div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> </div>\n+<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01251.html#a478edd79e31ff224240e32bba6068cb6\"> 169</a></span> <span class=\"keyword\">const</span> LocalContext& <a class=\"code hl_function\" href=\"a01251.html#a478edd79e31ff224240e32bba6068cb6\">localContext</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> <span class=\"keywordflow\">return</span> this->asInterface().localContext();</div>\n+<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> }</div>\n+<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span>};</div>\n+<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> </div>\n+<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> </div>\n+<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> </div>\n+<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span>}} <span class=\"comment\">// namespace Dune::Functions</span></div>\n+<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> </div>\n+<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> </div>\n+<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> </div>\n+<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH</span></div>\n+<div class=\"ttc\" id=\"aa00011_html\"><div class=\"ttname\"><a href=\"a00011.html\">differentiablefunction.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00020_html\"><div class=\"ttname\"><a href=\"a00020.html\">functionconcepts.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00035_html\"><div class=\"ttname\"><a href=\"a00035.html\">defaultderivativetraits.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00044_html\"><div class=\"ttname\"><a href=\"a00044.html\">localfunction_imp.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00050_html\"><div class=\"ttname\"><a href=\"a00050.html\">typeerasure.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00208_html_ga525e3415d41db7f6b4557e6bd5b88726\"><div class=\"ttname\"><a href=\"a00208.html#ga525e3415d41db7f6b4557e6bd5b88726\">Dune::Functions::LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize >::derivative</a></div><div class=\"ttdeci\">friend DerivativeInterface derivative(const LocalFunction &t)</div><div class=\"ttdoc\">Get derivative of wrapped function.</div><div class=\"ttdef\"><b>Definition:</b> localfunction.hh:135</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa01075_html\"><div class=\"ttname\"><a href=\"a01075.html\">Dune::Functions::DefaultDerivativeTraits</a></div><div class=\"ttdoc\">Default implementation for derivative traits.</div><div class=\"ttdef\"><b>Definition:</b> defaultderivativetraits.hh:37</div></div>\n-<div class=\"ttc\" id=\"aa01139_html\"><div class=\"ttname\"><a href=\"a01139.html\">Dune::Functions::Concept::Callable</a></div><div class=\"ttdoc\">Concept objects that can be called with given argument list.</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:33</div></div>\n-<div class=\"ttc\" id=\"aa01139_html_a8020f2dc3373ee93bbb30e7dfd362b9f\"><div class=\"ttname\"><a href=\"a01139.html#a8020f2dc3373ee93bbb30e7dfd362b9f\">Dune::Functions::Concept::Callable::require</a></div><div class=\"ttdeci\">auto require(F &&f) -> decltype(f(std::declval< Args >()...))</div></div>\n-<div class=\"ttc\" id=\"aa01143_html\"><div class=\"ttname\"><a href=\"a01143.html\">Dune::Functions::Concept::Function</a></div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:66</div></div>\n-<div class=\"ttc\" id=\"aa01147_html_a8cd663e9ec6cd8cef42e103a3dff7b8d\"><div class=\"ttname\"><a href=\"a01147.html#a8cd663e9ec6cd8cef42e103a3dff7b8d\">Dune::Functions::Concept::Function< Range(Domain)>::require</a></div><div class=\"ttdeci\">auto require(F &&f) -> decltype(requireConvertible< Range >(f(std::declval< Domain >())))</div></div>\n-<div class=\"ttc\" id=\"aa01151_html\"><div class=\"ttname\"><a href=\"a01151.html\">Dune::Functions::Concept::DifferentiableFunction</a></div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:100</div></div>\n-<div class=\"ttc\" id=\"aa01155_html_a06581f35c60f2f1a53ffcb579d2fb018\"><div class=\"ttname\"><a href=\"a01155.html#a06581f35c60f2f1a53ffcb579d2fb018\">Dune::Functions::Concept::DifferentiableFunction< Range(Domain), DerivativeTraits >::DerivativeSignature</a></div><div class=\"ttdeci\">typename SignatureTraits< Range(Domain)>::template DerivativeSignature< DerivativeTraits > DerivativeSignature</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:116</div></div>\n-<div class=\"ttc\" id=\"aa01155_html_a178d79f67e27907184d01fe3258b57f2\"><div class=\"ttname\"><a href=\"a01155.html#a178d79f67e27907184d01fe3258b57f2\">Dune::Functions::Concept::DifferentiableFunction< Range(Domain), DerivativeTraits >::require</a></div><div class=\"ttdeci\">auto require(F &&f) -> decltype(derivative(f), requireConcept< Function< DerivativeSignature > >(derivative(f)))</div></div>\n-<div class=\"ttc\" id=\"aa01159_html\"><div class=\"ttname\"><a href=\"a01159.html\">Dune::Functions::Concept::LocalFunction</a></div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:139</div></div>\n-<div class=\"ttc\" id=\"aa01163_html_a48db21bb312816392239ff02d27a804c\"><div class=\"ttname\"><a href=\"a01163.html#a48db21bb312816392239ff02d27a804c\">Dune::Functions::Concept::LocalFunction< Range(Domain), LocalContext >::require</a></div><div class=\"ttdeci\">auto require(F &&f) -> decltype(f.bind(std::declval< LocalContext >()), f.unbind(), requireConvertible< bool >(f.bound()), f.localContext(), requireConvertible< LocalContext >(f.localContext()))</div></div>\n-<div class=\"ttc\" id=\"aa01167_html\"><div class=\"ttname\"><a href=\"a01167.html\">Dune::Functions::Concept::DifferentiableLocalFunction</a></div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:172</div></div>\n-<div class=\"ttc\" id=\"aa01171_html_ac0aee0abe38ae49eeb9cfea8abcd56ba\"><div class=\"ttname\"><a href=\"a01171.html#ac0aee0abe38ae49eeb9cfea8abcd56ba\">Dune::Functions::Concept::DifferentiableLocalFunction< Range(Domain), LocalContext, DerivativeTraits >::require</a></div><div class=\"ttdeci\">auto require(F &&f) -> decltype(f.bind(std::declval< LocalContext >()), f.unbind(), f.localContext(), requireConvertible< LocalContext >(f.localContext()))</div></div>\n-<div class=\"ttc\" id=\"aa01175_html\"><div class=\"ttname\"><a href=\"a01175.html\">Dune::Functions::Concept::EntitySet</a></div><div class=\"ttdoc\">Concept for an entity set for a Concept::GridFunction<Range(Domain), EntitySet, DerivativeTraits></div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:220</div></div>\n-<div class=\"ttc\" id=\"aa01175_html_a68f40d08a99de681cf30949d76461d8a\"><div class=\"ttname\"><a href=\"a01175.html#a68f40d08a99de681cf30949d76461d8a\">Dune::Functions::Concept::EntitySet::require</a></div><div class=\"ttdeci\">auto require(E &&f) -> decltype(requireType< typename E::Element >(), requireType< typename E::LocalCoordinate >(), requireType< typename E::GlobalCoordinate >())</div></div>\n-<div class=\"ttc\" id=\"aa01179_html\"><div class=\"ttname\"><a href=\"a01179.html\">Dune::Functions::Concept::GridFunction</a></div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:238</div></div>\n-<div class=\"ttc\" id=\"aa01183_html_a15f0186a48c8602d29c53c131906da6e\"><div class=\"ttname\"><a href=\"a01183.html#a15f0186a48c8602d29c53c131906da6e\">Dune::Functions::Concept::GridFunction< Range(Domain), EntitySet >::LocalContext</a></div><div class=\"ttdeci\">typename EntitySet::Element LocalContext</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:254</div></div>\n-<div class=\"ttc\" id=\"aa01183_html_a6344d487356e0513b458a11b45dd935b\"><div class=\"ttname\"><a href=\"a01183.html#a6344d487356e0513b458a11b45dd935b\">Dune::Functions::Concept::GridFunction< Range(Domain), EntitySet >::LocalSignature</a></div><div class=\"ttdeci\">Range(typename EntitySet::LocalCoordinate) LocalSignature</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:253</div></div>\n-<div class=\"ttc\" id=\"aa01183_html_ae2f4f9301cbe9507a2a643c88ce90d27\"><div class=\"ttname\"><a href=\"a01183.html#ae2f4f9301cbe9507a2a643c88ce90d27\">Dune::Functions::Concept::GridFunction< Range(Domain), EntitySet >::require</a></div><div class=\"ttdeci\">auto require(F &&f) -> decltype(localFunction(f), f.entitySet(), requireConcept< LocalFunction< LocalSignature, LocalContext > >(localFunction(f)), requireConcept< Concept::EntitySet, EntitySet >(), requireConvertible< EntitySet >(f.entitySet()), requireConvertible< typename EntitySet::GlobalCoordinate, Domain >())</div></div>\n-<div class=\"ttc\" id=\"aa01187_html\"><div class=\"ttname\"><a href=\"a01187.html\">Dune::Functions::Concept::DifferentiableGridFunction</a></div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:275</div></div>\n-<div class=\"ttc\" id=\"aa01191_html_a0232d4cb02eb536145d8c115a9737578\"><div class=\"ttname\"><a href=\"a01191.html#a0232d4cb02eb536145d8c115a9737578\">Dune::Functions::Concept::DifferentiableGridFunction< Range(Domain), EntitySet, DerivativeTraits >::LocalDerivativeTraits</a></div><div class=\"ttdeci\">typename Dune::Functions::LocalDerivativeTraits< EntitySet, DerivativeTraits >::template Traits< R > LocalDerivativeTraits</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:300</div></div>\n-<div class=\"ttc\" id=\"aa01191_html_a450cfe8f161fb0308f19109d9bd7b196\"><div class=\"ttname\"><a href=\"a01191.html#a450cfe8f161fb0308f19109d9bd7b196\">Dune::Functions::Concept::DifferentiableGridFunction< Range(Domain), EntitySet, DerivativeTraits >::require</a></div><div class=\"ttdeci\">auto require(F &&f) -> decltype(requireConcept< DifferentiableLocalFunction< LocalSignature, LocalContext, LocalDerivativeTraits > >(localFunction(f)))</div></div>\n-<div class=\"ttc\" id=\"aa01191_html_a531f1d9858954a669da2a589f1fc4c4e\"><div class=\"ttname\"><a href=\"a01191.html#a531f1d9858954a669da2a589f1fc4c4e\">Dune::Functions::Concept::DifferentiableGridFunction< Range(Domain), EntitySet, DerivativeTraits >::LocalSignature</a></div><div class=\"ttdeci\">Range(typename EntitySet::LocalCoordinate) LocalSignature</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:296</div></div>\n-<div class=\"ttc\" id=\"aa01191_html_a8f80cc5322c7d178fcf4707fbc6a02f8\"><div class=\"ttname\"><a href=\"a01191.html#a8f80cc5322c7d178fcf4707fbc6a02f8\">Dune::Functions::Concept::DifferentiableGridFunction< Range(Domain), EntitySet, DerivativeTraits >::LocalContext</a></div><div class=\"ttdeci\">typename EntitySet::Element LocalContext</div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:297</div></div>\n-<div class=\"ttc\" id=\"aa01195_html\"><div class=\"ttname\"><a href=\"a01195.html\">Dune::Functions::Concept::GridViewFunction</a></div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:317</div></div>\n-<div class=\"ttc\" id=\"aa01199_html_a8eac66e126c3190e4a7f26bf72cc474e\"><div class=\"ttname\"><a href=\"a01199.html#a8eac66e126c3190e4a7f26bf72cc474e\">Dune::Functions::Concept::GridViewFunction< Range(Domain), GridView >::require</a></div><div class=\"ttdeci\">auto require(F &&f) -> decltype(0)</div></div>\n-<div class=\"ttc\" id=\"aa01203_html\"><div class=\"ttname\"><a href=\"a01203.html\">Dune::Functions::Concept::DifferentiableGridViewFunction</a></div><div class=\"ttdef\"><b>Definition:</b> functionconcepts.hh:349</div></div>\n-<div class=\"ttc\" id=\"aa01207_html_a9f3333426a5998365b59d5dc08db2003\"><div class=\"ttname\"><a href=\"a01207.html#a9f3333426a5998365b59d5dc08db2003\">Dune::Functions::Concept::DifferentiableGridViewFunction< Range(Domain), GridView, DerivativeTraits >::require</a></div><div class=\"ttdeci\">auto require(F &&f) -> decltype(0)</div></div>\n-<div class=\"ttc\" id=\"aa01291_html\"><div class=\"ttname\"><a href=\"a01291.html\">Dune::Functions::SignatureTraits</a></div><div class=\"ttdoc\">Helper class to deduce the signature of a callable.</div><div class=\"ttdef\"><b>Definition:</b> signature.hh:56</div></div>\n-<div class=\"ttc\" id=\"aa01295_html\"><div class=\"ttname\"><a href=\"a01295.html\">Dune::Functions::SignatureTag</a></div><div class=\"ttdef\"><b>Definition:</b> signature.hh:102</div></div>\n-<div class=\"ttc\" id=\"aa01931_html\"><div class=\"ttname\"><a href=\"a01931.html\">Dune::Functions::LocalDerivativeTraits</a></div><div class=\"ttdoc\">Derivative traits for local functions.</div><div class=\"ttdef\"><b>Definition:</b> localderivativetraits.hh:28</div></div>\n+<div class=\"ttc\" id=\"aa01243_html\"><div class=\"ttname\"><a href=\"a01243.html\">Dune::Functions::LocalFunction</a></div><div class=\"ttdef\"><b>Definition:</b> localfunction.hh:30</div></div>\n+<div class=\"ttc\" id=\"aa01251_html_a478edd79e31ff224240e32bba6068cb6\"><div class=\"ttname\"><a href=\"a01251.html#a478edd79e31ff224240e32bba6068cb6\">Dune::Functions::LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize >::localContext</a></div><div class=\"ttdeci\">const LocalContext & localContext() const</div><div class=\"ttdoc\">Obtain local context this LocalFunction is bound to.</div><div class=\"ttdef\"><b>Definition:</b> localfunction.hh:169</div></div>\n+<div class=\"ttc\" id=\"aa01251_html_a6d54d317a0068c6bcb27a937afac321d\"><div class=\"ttname\"><a href=\"a01251.html#a6d54d317a0068c6bcb27a937afac321d\">Dune::Functions::LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize >::LocalFunction</a></div><div class=\"ttdeci\">LocalFunction(F &&f)</div><div class=\"ttdoc\">Construct from function.</div><div class=\"ttdef\"><b>Definition:</b> localfunction.hh:112</div></div>\n+<div class=\"ttc\" id=\"aa01251_html_a81e2881a71c9c47c2524e6354c34a17b\"><div class=\"ttname\"><a href=\"a01251.html#a81e2881a71c9c47c2524e6354c34a17b\">Dune::Functions::LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize >::unbind</a></div><div class=\"ttdeci\">void unbind()</div><div class=\"ttdoc\">Unbind from local context.</div><div class=\"ttdef\"><b>Definition:</b> localfunction.hh:154</div></div>\n+<div class=\"ttc\" id=\"aa01251_html_aa107dc076a48e19c9a0d38747426080e\"><div class=\"ttname\"><a href=\"a01251.html#aa107dc076a48e19c9a0d38747426080e\">Dune::Functions::LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize >::bound</a></div><div class=\"ttdeci\">bool bound() const</div><div class=\"ttdoc\">Return if the local function is bound to a grid element.</div><div class=\"ttdef\"><b>Definition:</b> localfunction.hh:161</div></div>\n+<div class=\"ttc\" id=\"aa01251_html_ade625720d01e11b8e0bcaf06322633d9\"><div class=\"ttname\"><a href=\"a01251.html#ade625720d01e11b8e0bcaf06322633d9\">Dune::Functions::LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize >::bind</a></div><div class=\"ttdeci\">void bind(const LocalContext &context)</div><div class=\"ttdoc\">Bind function to a local context.</div><div class=\"ttdef\"><b>Definition:</b> localfunction.hh:146</div></div>\n+<div class=\"ttc\" id=\"aa01251_html_af06e8ffc9fe0be67a76a17cbf6c86c90\"><div class=\"ttname\"><a href=\"a01251.html#af06e8ffc9fe0be67a76a17cbf6c86c90\">Dune::Functions::LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize >::LocalFunction</a></div><div class=\"ttdeci\">LocalFunction()=default</div></div>\n+<div class=\"ttc\" id=\"aa01351_html\"><div class=\"ttname\"><a href=\"a01351.html\">Dune::Functions::TypeErasureBase</a></div><div class=\"ttdoc\">Base class for type-erased interface wrapper.</div><div class=\"ttdef\"><b>Definition:</b> typeerasure.hh:165</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,460 +5,189 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * common\n-functionconcepts.hh\n+localfunction.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH\n- 4#define DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH\n+ 3#ifndef DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH\n+ 4#define DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH\n 5\n- 6#include <dune/common/typelist.hh>\n- 7#include <dune/common/concept.hh>\n- 8\n- 9#include <dune/functions/common/signature.hh>\n- 10#include <dune/functions/gridfunctions/localderivativetraits.hh>\n- 11#include <dune/functions/gridfunctions/gridviewentityset.hh>\n- 12\n- 13namespace Dune {\n- 14namespace Functions {\n- 15namespace Concept {\n+ 6#include <type_traits>\n+ 7\n+ 8#include <dune/common/typeutilities.hh>\n+ 9\n+ 10#include <dune/functions/common/defaultderivativetraits.hh>\n+ 11#include <dune/functions/common/differentiablefunction.hh>\n+ 12#include <dune/functions/common/localfunction_imp.hh>\n+ 13#include <dune/functions/common/typeerasure.hh>\n+ 14#include <dune/functions/common/functionconcepts.hh>\n+ 15\n 16\n- 17using namespace Dune::Concept;\n- 18\n- 19\n+ 17\n+ 18namespace Dune {\n+ 19namespace Functions {\n 20\n- 21// Callable concept\n-############################################################\n+ 21\n 22\n- 23\n- 31template<class... Args>\n-32struct Callable\n- 33{\n- 34 template<class F>\n-35 auto require(F&& f) -> decltype(\n- 36 f(std::declval<Args>()...)\n- 37 );\n- 38};\n- 39\n- 46template<class F, class... Args>\n-47static constexpr auto isCallable()\n- 48{ return models<Concept::Callable<Args...>, F>(); }\n- 49\n- 56template<class F, class... Args>\n-57static constexpr auto isCallable(F&&, Args&&...)\n- 58{\n- 59 return models<Concept::Callable<Args&&...>, F>();\n- 60}\n- 61\n- 62\n+ 23/*\n+ 24 * Default implementation is empty\n+ 25 * The actual implementation is only given if Signature is an type\n+ 26 * describing a function signature as Range(Domain).\n+ 27 */\n+ 28template<class Signature, class LocalContext, template<class> class\n+DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>\n+29class LocalFunction\n+ 30{};\n+ 31\n+ 32\n+ 33\n+ 34namespace Imp\n+ 35{\n+ 36\n+ 38 template<class S, class L, template<class> class DerivativeTraits, size_t\n+bufferSize>\n+ 39 struct LocalFunctionTraits :\n+ 40 DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize>\n+ 41 {\n+ 42 protected:\n+ 43 using Base=DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize>;\n+ 44\n+ 45 public:\n+ 47 using LocalContext = L;\n+ 48\n+ 50 using DerivativeSignature = typename Base::DerivativeSignature;\n+ 51\n+ 53 using DerivativeInterface = LocalFunction<DerivativeSignature,_L,\n+DerivativeTraits,_bufferSize>;\n+ 54\n+ 56 using Concept = LocalFunctionWrapperInterface<S, DerivativeInterface, L>;\n+ 57\n+ 59 template<class B>\n+ 60 using Model = LocalFunctionWrapperImplementation<S, DerivativeInterface, L,\n+B>;\n+ 61 };\n+ 62}\n 63\n- 64// Function concept\n-############################################################\n- 65template<class Signature>\n-66struct Function;\n- 67\n- 76template<class Range, class Domain>\n-77struct Function<Range(Domain)> : Refines<Callable<Domain> >\n- 78{\n- 79 template<class F>\n-80 auto require(F&& f) -> decltype(\n- 81 // F models Function<Range(Domain)> if the result of F(Domain) is\n-implicitly convertible to Range\n- 82 requireConvertible<Range>(f(std::declval<Domain>()))\n- 83 );\n- 84};\n- 85\n- 87template<class F, class Signature>\n-88static constexpr bool isFunction()\n- 89{ return models<Concept::Function<Signature>, F>(); }\n- 90\n- 92template<class F, class Signature, template<class> class DerivativeTraits>\n-93static constexpr bool isFunction(F&& f, SignatureTag<Signature,\n-DerivativeTraits>)\n- 94{ return models<Concept::Function<Signature>, F>(); }\n+ 64\n+ 65\n+ 86template<class Range, class Domain, class LocalContext, template<class>\n+class DerivativeTraits, size_t bufferSize>\n+87class LocalFunction< Range(Domain), LocalContext, DerivativeTraits,\n+bufferSize> :\n+ 88 public TypeErasureBase<\n+ 89 typename Imp::LocalFunctionTraits<Range(Domain), LocalContext,\n+DerivativeTraits, bufferSize>::Concept,\n+ 90 Imp::LocalFunctionTraits<Range(Domain), LocalContext, DerivativeTraits,\n+bufferSize>::template Model>\n+ 91{\n+ 92 using Traits = Imp::LocalFunctionTraits<Range(Domain), LocalContext,\n+DerivativeTraits, bufferSize>;\n+ 93\n+ 94 using Base = TypeErasureBase<typename_Traits::Concept,_Traits::template\n+Model>;\n 95\n- 96\n+ 96 using DerivativeInterface = typename Traits::DerivativeInterface;\n 97\n- 98// DifferentiableFunction concept\n-##############################################\n- 99template<class Signature, template<class> class DerivativeTraits =\n-DefaultDerivativeTraits>\n-100struct DifferentiableFunction;\n- 101\n- 113template<class Range, class Domain, template<class> class DerivativeTraits>\n-114struct DifferentiableFunction<Range(Domain), DerivativeTraits> :\n-Refines<Dune::Functions::Concept::Function<Range(Domain)> >\n- 115{\n-116 using DerivativeSignature = typename SignatureTraits<Range(Domain)>::\n-template DerivativeSignature<DerivativeTraits>;\n+ 98public:\n+ 99\n+ 111 template<class F, disableCopyMove<LocalFunction, F> = 0 >\n+112 LocalFunction(F&& f) :\n+ 113 Base(std::forward<F>(f))\n+ 114 {\n+ 115 static_assert(Dune::Functions::Concept::isLocalFunction<F, Range(Domain),\n+LocalContext>(), \"Trying to construct a LocalFunction from type that does not\n+model the LocalFunction concept\");\n+ 116 }\n 117\n- 118 template<class F>\n-119 auto require(F&& f) -> decltype(\n- 120 derivative(f),\n- 121 requireConcept<Function<DerivativeSignature>>(derivative(f))\n- 122 );\n- 123};\n- 124\n- 126template<class F, class Signature, template<class> class DerivativeTraits =\n-DefaultDerivativeTraits>\n-127static constexpr bool isDifferentiableFunction()\n- 128{ return models<Concept::DifferentiableFunction<Signature,\n-DerivativeTraits>, F>(); }\n- 129\n- 131template<class F, class Signature, template<class> class DerivativeTraits>\n-132static constexpr bool isDifferentiableFunction(F&& f,\n-SignatureTag<Signature,_DerivativeTraits>)\n- 133{ return models<Concept::DifferentiableFunction<Signature,\n-DerivativeTraits>, F>(); }\n- 134\n- 135\n- 136\n- 137// LocalFunction concept ##############################################\n- 138template<class Signature, class LocalContext>\n-139struct LocalFunction;\n- 140\n- 150template<class Range, class Domain, class LocalContext>\n-151struct LocalFunction<Range(Domain), LocalContext> :\n- 152 Refines<Dune::Functions::Concept::Function<Range(Domain)> >\n- 153{\n- 154 template<class F>\n-155 auto require(F&& f) -> decltype(\n- 156 f.bind(std::declval<LocalContext>()),\n- 157 f.unbind(),\n- 158 requireConvertible<bool>(f.bound()),\n- 159 f.localContext(),\n- 160 requireConvertible<LocalContext>(f.localContext())\n- 161 );\n- 162};\n- 163\n- 165template<class F, class Signature, class LocalContext>\n-166static constexpr bool isLocalFunction()\n- 167{ return models<Concept::LocalFunction<Signature, LocalContext>, F>(); }\n- 168\n- 169\n- 170// DifferentiableLocalFunction concept\n-##############################################\n- 171template<class Signature, class LocalContext, template<class> class\n-DerivativeTraits = DefaultDerivativeTraits>\n-172struct DifferentiableLocalFunction;\n- 173\n- 186template<class Range, class Domain, class LocalContext, template<class>\n-class DerivativeTraits>\n-187struct DifferentiableLocalFunction<Range(Domain), LocalContext,\n-DerivativeTraits> :\n- 188 Refines<\n- 189 Dune::Functions::Concept::DifferentiableFunction<Range(Domain),\n-DerivativeTraits>,\n- 190 Dune::Functions::Concept::LocalFunction<Range(Domain),LocalContext>\n- 191 >\n- 192{\n- 193 template<class F>\n-194 auto require(F&& f) -> decltype(\n- 195 f.bind(std::declval<LocalContext>()),\n- 196 f.unbind(),\n- 197 f.localContext(),\n- 198 requireConvertible<LocalContext>(f.localContext())\n- 199 );\n- 200};\n- 201\n- 203template<class F, class Signature, class LocalContext, template<class>\n-class DerivativeTraits = DefaultDerivativeTraits>\n-204static constexpr bool isDifferentiableLocalFunction()\n- 205{ return models<Concept::DifferentiableLocalFunction<Signature,\n-LocalContext, DerivativeTraits>, F>(); }\n- 206\n- 207\n- 208// EntitySet concept ##############################################\n- 209\n-219struct EntitySet\n- 220{\n- 221 template<class E>\n-222 auto require(E&& f) -> decltype(\n- 223 requireType<typename E::Element>(),\n- 224 requireType<typename E::LocalCoordinate>(),\n- 225 requireType<typename E::GlobalCoordinate>()\n- 226 );\n- 227};\n- 228\n- 230template<class E>\n-231static constexpr bool isEntitySet()\n- 232{ return models<Concept::EntitySet, E>(); }\n- 233\n- 234\n- 235\n- 236// GridFunction concept ##############################################\n- 237template<class Signature, class EntitySet>\n-238struct GridFunction;\n- 239\n- 249template<class Range, class Domain, class EntitySet>\n-250struct GridFunction<Range(Domain), EntitySet> :\n- 251 Refines<Dune::Functions::Concept::Function<Range(Domain)> >\n- 252{\n-253 using LocalSignature = Range(typename EntitySet::LocalCoordinate);\n-254 using LocalContext = typename EntitySet::Element;\n- 255\n- 256 template<class F>\n-257 auto require(F&& f) -> decltype(\n- 258 localFunction(f),\n- 259 f.entitySet(),\n- 260 requireConcept<LocalFunction<LocalSignature, LocalContext>>(localFunction\n-(f)),\n- 261 requireConcept<Concept::EntitySet, EntitySet>(),\n- 262 requireConvertible<EntitySet>(f.entitySet()),\n- 263 requireConvertible<typename EntitySet::GlobalCoordinate, Domain>()\n- 264 );\n- 265};\n- 266\n- 268template<class F, class Signature, class EntitySet>\n-269static constexpr bool isGridFunction()\n- 270{ return models<Concept::GridFunction<Signature, EntitySet>, F>(); }\n- 271\n- 272\n- 273// DifferentiableGridFunction concept\n-##############################################\n- 274template<class Signature, class EntitySet, template<class> class\n-DerivativeTraits = DefaultDerivativeTraits>\n-275struct DifferentiableGridFunction;\n- 276\n- 289template<class Range, class Domain, class EntitySet, template<class> class\n-DerivativeTraits>\n-290struct DifferentiableGridFunction<Range(Domain), EntitySet,\n-DerivativeTraits> :\n- 291 Refines<\n- 292 Dune::Functions::Concept::DifferentiableFunction<Range(Domain),\n-DerivativeTraits>,\n- 293 Dune::Functions::Concept::GridFunction<Range(Domain),EntitySet>\n- 294 >\n- 295{\n-296 using LocalSignature = Range(typename EntitySet::LocalCoordinate);\n-297 using LocalContext = typename EntitySet::Element;\n- 298\n- 299 template<class R>\n-300 using LocalDerivativeTraits = typename Dune::Functions::\n-LocalDerivativeTraits<EntitySet,_DerivativeTraits>::template Traits<R>;\n- 301\n- 302 template<class F>\n-303 auto require(F&& f) -> decltype(\n- 304 requireConcept<DifferentiableLocalFunction<LocalSignature, LocalContext,\n-LocalDerivativeTraits>>(localFunction(f))\n- 305 );\n- 306};\n- 307\n- 309template<class F, class Signature, class EntitySet, template<class> class\n-DerivativeTraits = DefaultDerivativeTraits>\n-310static constexpr bool isDifferentiableGridFunction()\n- 311{ return models<Concept::DifferentiableGridFunction<Signature, EntitySet,\n-DerivativeTraits>, F>(); }\n- 312\n- 313\n- 314\n- 315// GridViewFunction concept ##############################################\n- 316template<class Signature, class GridView>\n-317struct GridViewFunction;\n- 318\n- 331template<class Range, class Domain, class GridView>\n-332struct GridViewFunction<Range(Domain), GridView> :\n- 333 Refines<Dune::Functions::Concept::GridFunction<Range(Domain),\n-GridViewEntitySet<GridView,0>>>\n- 334{\n- 335 template<class F>\n-336 auto require(F&& f) -> decltype(\n- 337 0 // We don't need to check any further expressions, because a\n-GridViewFunction is just a GridFunction with a special EntitySet\n- 338 );\n- 339};\n- 340\n- 342template<class F, class Signature, class GridView>\n-343static constexpr bool isGridViewFunction()\n- 344{ return models<Concept::GridViewFunction<Signature, GridView>, F>(); }\n- 345\n- 346\n- 347// DifferentiableGridViewFunction concept\n-##############################################\n- 348template<class Signature, class GridView, template<class> class\n-DerivativeTraits = DefaultDerivativeTraits>\n-349struct DifferentiableGridViewFunction;\n- 350\n- 364template<class Range, class Domain, class GridView, template<class> class\n-DerivativeTraits>\n-365struct DifferentiableGridViewFunction<Range(Domain), GridView,\n-DerivativeTraits> :\n- 366 Refines<Dune::Functions::Concept::DifferentiableGridFunction<Range\n-(Domain), GridViewEntitySet<GridView,0>, DerivativeTraits>>\n- 367{\n- 368 template<class F>\n-369 auto require(F&& f) -> decltype(\n- 370 0 // We don't need to check any further expressions, because a\n-GridViewFunction is just a GridFunction with a special EntitySet\n- 371 );\n- 372};\n- 373\n- 375template<class F, class Signature, class GridView, template<class> class\n-DerivativeTraits = DefaultDerivativeTraits>\n-376static constexpr bool isDifferentiableGridViewFunction()\n- 377{ return models<Concept::DifferentiableGridViewFunction<Signature,\n-GridView, DerivativeTraits>, F>(); }\n- 378\n- 379\n- 380\n- 381}}} // namespace Dune::Functions::Concept\n- 382\n- 383#endif // DUNE_FUNCTIONS_COMMON_FUNCTIONCONCEPT_HH\n-gridviewentityset.hh\n-localderivativetraits.hh\n-signature.hh\n-Dune::Functions::Concept::isGridFunction\n-static constexpr bool isGridFunction()\n-Check if F models the GridFunction concept with given signature and entity set.\n-Definition: functionconcepts.hh:269\n-Dune::Functions::Concept::isDifferentiableLocalFunction\n-static constexpr bool isDifferentiableLocalFunction()\n-Check if F models the DifferentiableLocalFunction concept with given signature\n-and local context.\n-Definition: functionconcepts.hh:204\n-Dune::Functions::Concept::isFunction\n-static constexpr bool isFunction()\n-Check if F models the Function concept with given signature.\n-Definition: functionconcepts.hh:88\n-Dune::Functions::Concept::isDifferentiableGridViewFunction\n-static constexpr bool isDifferentiableGridViewFunction()\n-Check if F models the DifferentiableGridViewFunction concept with given\n-signature.\n-Definition: functionconcepts.hh:376\n-Dune::Functions::Concept::isDifferentiableFunction\n-static constexpr bool isDifferentiableFunction()\n-Check if F models the DifferentiableFunction concept with given signature.\n-Definition: functionconcepts.hh:127\n-Dune::Functions::Concept::isGridViewFunction\n-static constexpr bool isGridViewFunction()\n-Check if F models the GridViewFunction concept with given signature.\n-Definition: functionconcepts.hh:343\n-Dune::Functions::Concept::isEntitySet\n-static constexpr bool isEntitySet()\n-Check if F models the GridFunction concept with given signature and entity set.\n-Definition: functionconcepts.hh:231\n-Dune::Functions::Concept::isDifferentiableGridFunction\n-static constexpr bool isDifferentiableGridFunction()\n-Check if F models the DifferentiableGridFunction concept with given signature\n-and entity set.\n-Definition: functionconcepts.hh:310\n-Dune::Functions::Concept::isLocalFunction\n-static constexpr bool isLocalFunction()\n-Check if F models the LocalFunction concept with given signature and local\n-context.\n-Definition: functionconcepts.hh:166\n-Dune::Functions::derivative\n-TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const\n-TrigonometricFunction< K, sinFactor, cosFactor > &f)\n-Obtain derivative of TrigonometricFunction function.\n-Definition: trigonometricfunction.hh:39\n-Dune::Functions::Concept::isCallable\n-static constexpr auto isCallable()\n-Check if f is callable with given argument list.\n-Definition: functionconcepts.hh:47\n+118 LocalFunction() = default;\n+ 119\n+123 Range operator() (const Domain& x) const\n+ 124 {\n+ 125 return this->asInterface().operator()(x);\n+ 126 }\n+ 127\n+135 friend DerivativeInterface derivative(const LocalFunction& t)\n+ 136 {\n+ 137 return t.asInterface().derivative();\n+ 138 }\n+ 139\n+146 void bind(const LocalContext& context)\n+ 147 {\n+ 148 this->asInterface().bind(context);\n+ 149 }\n+ 150\n+154 void unbind()\n+ 155 {\n+ 156 this->asInterface().unbind();\n+ 157 }\n+ 158\n+161 bool bound() const\n+ 162 {\n+ 163 return this->asInterface().bound();\n+ 164 }\n+ 165\n+169 const LocalContext& localContext() const\n+ 170 {\n+ 171 return this->asInterface().localContext();\n+ 172 }\n+ 173};\n+ 174\n+ 175\n+ 176\n+ 177}} // namespace Dune::Functions\n+ 178\n+ 179\n+ 180\n+ 181#endif // DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH\n+differentiablefunction.hh\n+functionconcepts.hh\n+defaultderivativetraits.hh\n+localfunction_imp.hh\n+typeerasure.hh\n+Dune::Functions::LocalFunction<_Range(Domain),_LocalContext,_DerivativeTraits,\n+bufferSize_>::derivative\n+friend DerivativeInterface derivative(const LocalFunction &t)\n+Get derivative of wrapped function.\n+Definition: localfunction.hh:135\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::DefaultDerivativeTraits\n-Default implementation for derivative traits.\n-Definition: defaultderivativetraits.hh:37\n-Dune::Functions::Concept::Callable\n-Concept objects that can be called with given argument list.\n-Definition: functionconcepts.hh:33\n-Dune::Functions::Concept::Callable::require\n-auto require(F &&f) -> decltype(f(std::declval< Args >()...))\n-Dune::Functions::Concept::Function\n-Definition: functionconcepts.hh:66\n-Dune::Functions::Concept::Function<_Range(Domain)>::require\n-auto require(F &&f) -> decltype(requireConvertible< Range >(f(std::declval<\n-Domain >())))\n-Dune::Functions::Concept::DifferentiableFunction\n-Definition: functionconcepts.hh:100\n-Dune::Functions::Concept::DifferentiableFunction<_Range(Domain),\n-DerivativeTraits_>::DerivativeSignature\n-typename SignatureTraits< Range(Domain)>::template DerivativeSignature<\n-DerivativeTraits > DerivativeSignature\n-Definition: functionconcepts.hh:116\n-Dune::Functions::Concept::DifferentiableFunction<_Range(Domain),\n-DerivativeTraits_>::require\n-auto require(F &&f) -> decltype(derivative(f), requireConcept< Function<\n-DerivativeSignature > >(derivative(f)))\n-Dune::Functions::Concept::LocalFunction\n-Definition: functionconcepts.hh:139\n-Dune::Functions::Concept::LocalFunction<_Range(Domain),_LocalContext_>::require\n-auto require(F &&f) -> decltype(f.bind(std::declval< LocalContext >()),\n-f.unbind(), requireConvertible< bool >(f.bound()), f.localContext(),\n-requireConvertible< LocalContext >(f.localContext()))\n-Dune::Functions::Concept::DifferentiableLocalFunction\n-Definition: functionconcepts.hh:172\n-Dune::Functions::Concept::DifferentiableLocalFunction<_Range(Domain),\n-LocalContext,_DerivativeTraits_>::require\n-auto require(F &&f) -> decltype(f.bind(std::declval< LocalContext >()),\n-f.unbind(), f.localContext(), requireConvertible< LocalContext >(f.localContext\n-()))\n-Dune::Functions::Concept::EntitySet\n-Concept for an entity set for a Concept::GridFunction<Range(Domain), EntitySet,\n-DerivativeTraits>\n-Definition: functionconcepts.hh:220\n-Dune::Functions::Concept::EntitySet::require\n-auto require(E &&f) -> decltype(requireType< typename E::Element >(),\n-requireType< typename E::LocalCoordinate >(), requireType< typename E::\n-GlobalCoordinate >())\n-Dune::Functions::Concept::GridFunction\n-Definition: functionconcepts.hh:238\n-Dune::Functions::Concept::GridFunction<_Range(Domain),_EntitySet_>::\n-LocalContext\n-typename EntitySet::Element LocalContext\n-Definition: functionconcepts.hh:254\n-Dune::Functions::Concept::GridFunction<_Range(Domain),_EntitySet_>::\n-LocalSignature\n-Range(typename EntitySet::LocalCoordinate) LocalSignature\n-Definition: functionconcepts.hh:253\n-Dune::Functions::Concept::GridFunction<_Range(Domain),_EntitySet_>::require\n-auto require(F &&f) -> decltype(localFunction(f), f.entitySet(),\n-requireConcept< LocalFunction< LocalSignature, LocalContext > >(localFunction\n-(f)), requireConcept< Concept::EntitySet, EntitySet >(), requireConvertible<\n-EntitySet >(f.entitySet()), requireConvertible< typename EntitySet::\n-GlobalCoordinate, Domain >())\n-Dune::Functions::Concept::DifferentiableGridFunction\n-Definition: functionconcepts.hh:275\n-Dune::Functions::Concept::DifferentiableGridFunction<_Range(Domain),_EntitySet,\n-DerivativeTraits_>::LocalDerivativeTraits\n-typename Dune::Functions::LocalDerivativeTraits< EntitySet, DerivativeTraits\n->::template Traits< R > LocalDerivativeTraits\n-Definition: functionconcepts.hh:300\n-Dune::Functions::Concept::DifferentiableGridFunction<_Range(Domain),_EntitySet,\n-DerivativeTraits_>::require\n-auto require(F &&f) -> decltype(requireConcept< DifferentiableLocalFunction<\n-LocalSignature, LocalContext, LocalDerivativeTraits > >(localFunction(f)))\n-Dune::Functions::Concept::DifferentiableGridFunction<_Range(Domain),_EntitySet,\n-DerivativeTraits_>::LocalSignature\n-Range(typename EntitySet::LocalCoordinate) LocalSignature\n-Definition: functionconcepts.hh:296\n-Dune::Functions::Concept::DifferentiableGridFunction<_Range(Domain),_EntitySet,\n-DerivativeTraits_>::LocalContext\n-typename EntitySet::Element LocalContext\n-Definition: functionconcepts.hh:297\n-Dune::Functions::Concept::GridViewFunction\n-Definition: functionconcepts.hh:317\n-Dune::Functions::Concept::GridViewFunction<_Range(Domain),_GridView_>::require\n-auto require(F &&f) -> decltype(0)\n-Dune::Functions::Concept::DifferentiableGridViewFunction\n-Definition: functionconcepts.hh:349\n-Dune::Functions::Concept::DifferentiableGridViewFunction<_Range(Domain),\n-GridView,_DerivativeTraits_>::require\n-auto require(F &&f) -> decltype(0)\n-Dune::Functions::SignatureTraits\n-Helper class to deduce the signature of a callable.\n-Definition: signature.hh:56\n-Dune::Functions::SignatureTag\n-Definition: signature.hh:102\n-Dune::Functions::LocalDerivativeTraits\n-Derivative traits for local functions.\n-Definition: localderivativetraits.hh:28\n+Dune::Functions::LocalFunction\n+Definition: localfunction.hh:30\n+Dune::Functions::LocalFunction<_Range(Domain),_LocalContext,_DerivativeTraits,\n+bufferSize_>::localContext\n+const LocalContext & localContext() const\n+Obtain local context this LocalFunction is bound to.\n+Definition: localfunction.hh:169\n+Dune::Functions::LocalFunction<_Range(Domain),_LocalContext,_DerivativeTraits,\n+bufferSize_>::LocalFunction\n+LocalFunction(F &&f)\n+Construct from function.\n+Definition: localfunction.hh:112\n+Dune::Functions::LocalFunction<_Range(Domain),_LocalContext,_DerivativeTraits,\n+bufferSize_>::unbind\n+void unbind()\n+Unbind from local context.\n+Definition: localfunction.hh:154\n+Dune::Functions::LocalFunction<_Range(Domain),_LocalContext,_DerivativeTraits,\n+bufferSize_>::bound\n+bool bound() const\n+Return if the local function is bound to a grid element.\n+Definition: localfunction.hh:161\n+Dune::Functions::LocalFunction<_Range(Domain),_LocalContext,_DerivativeTraits,\n+bufferSize_>::bind\n+void bind(const LocalContext &context)\n+Bind function to a local context.\n+Definition: localfunction.hh:146\n+Dune::Functions::LocalFunction<_Range(Domain),_LocalContext,_DerivativeTraits,\n+bufferSize_>::LocalFunction\n+LocalFunction()=default\n+Dune::Functions::TypeErasureBase\n+Base class for type-erased interface wrapper.\n+Definition: typeerasure.hh:165\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00056.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00056.html", "unified_diff": "@@ -69,15 +69,15 @@\n <div class=\"summary\">\n <a href=\"#namespaces\">Namespaces</a> |\n <a href=\"#func-members\">Functions</a> </div>\n <div class=\"headertitle\"><div class=\"title\">staticforloop.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <div class=\"textblock\"><code>#include <dune/common/concept.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00092_source.html\">dune/functions/common/type_traits.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00029_source.html\">dune/functions/common/type_traits.hh</a>></code><br />\n <code>#include <<a class=\"el\" href=\"a02876_source.html\">dune/functions/functionspacebases/concepts.hh</a>></code><br />\n </div>\n <p><a href=\"a00056_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00056_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00056_source.html", "unified_diff": "@@ -73,15 +73,15 @@\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n <div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH</span></div>\n <div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n <div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span> </div>\n <div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <dune/common/concept.hh></span></div>\n <div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00092.html\">dune/functions/common/type_traits.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00029.html\">dune/functions/common/type_traits.hh</a>></span></div>\n <div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a02876.html\">dune/functions/functionspacebases/concepts.hh</a>></span></div>\n <div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n <div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n <div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n <div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"keyword\">namespace </span>Functions {</div>\n <div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n <div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"keyword\">namespace </span>Imp {</div>\n@@ -119,15 +119,15 @@\n <div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> </div>\n <div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span>} <span class=\"comment\">// namespace Dune::Functions</span></div>\n <div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span>} <span class=\"comment\">// namespace Dune</span></div>\n <div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> </div>\n <div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> </div>\n <div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> </div>\n <div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">//DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH</span></div>\n-<div class=\"ttc\" id=\"aa00092_html\"><div class=\"ttname\"><a href=\"a00092.html\">type_traits.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00029_html\"><div class=\"ttname\"><a href=\"a00029.html\">type_traits.hh</a></div></div>\n <div class=\"ttc\" id=\"aa00215_html_gaa625ea93bc3285b8a09c9267302386ec\"><div class=\"ttname\"><a href=\"a00215.html#gaa625ea93bc3285b8a09c9267302386ec\">Dune::Functions::staticFindInRange</a></div><div class=\"ttdeci\">void staticFindInRange(F &&f, Args &&... args)</div><div class=\"ttdoc\">Static find loop.</div><div class=\"ttdef\"><b>Definition:</b> staticforloop.hh:56</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n <div class=\"ttc\" id=\"aa02876_html\"><div class=\"ttname\"><a href=\"a02876.html\">concepts.hh</a></div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00059.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00059.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: reserveddeque.hh File Reference</title>\n+<title>dune-functions: overflowarray.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -64,69 +64,40 @@\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n-<a href=\"#namespaces\">Namespaces</a> |\n-<a href=\"#define-members\">Macros</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">reserveddeque.hh File Reference</div></div>\n+<a href=\"#namespaces\">Namespaces</a> </div>\n+ <div class=\"headertitle\"><div class=\"title\">overflowarray.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-\n-<p>An stl-compliant double-ended queue which stores everything on the stack. \n-<a href=\"#details\">More...</a></p>\n <div class=\"textblock\"><code>#include <algorithm></code><br />\n <code>#include <iostream></code><br />\n <code>#include <cstddef></code><br />\n+<code>#include <array></code><br />\n <code>#include <initializer_list></code><br />\n <code>#include <dune/common/genericiterator.hh></code><br />\n </div>\n <p><a href=\"a00059_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01283.html\">Dune::Functions::ReservedDeque< T, n ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A double-ended queue (deque) class with statically reserved memory. <a href=\"a01283.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01275.html\">Dune::Functions::OverflowArray< BA, maxSize ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A dynamically sized array-like class with overflow. <a href=\"a01275.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-</table><table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"define-members\" name=\"define-members\"></a>\n-Macros</h2></td></tr>\n-<tr class=\"memitem:a65543e75bc949ecdb95a25b1f4e11675\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00059.html#a65543e75bc949ecdb95a25b1f4e11675\">CHECKSIZE</a>(X)   {}</td></tr>\n-<tr class=\"separator:a65543e75bc949ecdb95a25b1f4e11675\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n-<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n-<div class=\"textblock\"><p >An stl-compliant double-ended queue which stores everything on the stack. </p>\n-</div><h2 class=\"groupheader\">Macro Definition Documentation</h2>\n-<a id=\"a65543e75bc949ecdb95a25b1f4e11675\" name=\"a65543e75bc949ecdb95a25b1f4e11675\"></a>\n-<h2 class=\"memtitle\"><span class=\"permalink\"><a href=\"#a65543e75bc949ecdb95a25b1f4e11675\">◆ </a></span>CHECKSIZE</h2>\n-\n-<div class=\"memitem\">\n-<div class=\"memproto\">\n- <table class=\"memname\">\n- <tr>\n- <td class=\"memname\">#define CHECKSIZE</td>\n- <td>(</td>\n- <td class=\"paramtype\"> </td>\n- <td class=\"paramname\">X</td><td>)</td>\n- <td>   {}</td>\n- </tr>\n- </table>\n-</div><div class=\"memdoc\">\n-\n-</div>\n-</div>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,38 +5,28 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * common\n-Classes | Namespaces | Macros\n-reserveddeque.hh File Reference\n-An stl-compliant double-ended queue which stores everything on the stack.\n-More...\n+Classes | Namespaces\n+overflowarray.hh File Reference\n #include <algorithm>\n #include <iostream>\n #include <cstddef>\n+#include <array>\n #include <initializer_list>\n #include <dune/common/genericiterator.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-class \u00a0Dune::Functions::ReservedDeque<_T,_n_>\n-\u00a0 A double-ended queue (deque) class with statically reserved memory.\n- More...\n+class \u00a0Dune::Functions::OverflowArray<_BA,_maxSize_>\n+\u00a0 A dynamically sized array-like class with overflow. More...\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n- Macros\n-#define\u00a0CHECKSIZE(X)\u00a0\u00a0\u00a0{}\n-\u00a0\n-***** Detailed Description *****\n-An stl-compliant double-ended queue which stores everything on the stack.\n-***** Macro Definition Documentation *****\n-***** \u25c6\u00a0CHECKSIZE *****\n-#define CHECKSIZE ( \u00a0X ) \u00a0\u00a0\u00a0{}\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00059_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00059_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: reserveddeque.hh Source File</title>\n+<title>dune-functions: overflowarray.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,229 +62,230 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">reserveddeque.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">overflowarray.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00059.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_RESERVEDDEQUE_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_RESERVEDDEQUE_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <algorithm></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <iostream></span></div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <cstddef></span></div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <initializer_list></span></div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <algorithm></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <iostream></span></div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <cstddef></span></div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <array></span></div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <initializer_list></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <dune/common/genericiterator.hh></span></div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n <div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <dune/common/genericiterator.hh></span></div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"preprocessor\">#ifdef CHECK_RESERVEDDEQUE</span></div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"preprocessor\">#define CHECKSIZE(X) assert(X)</span></div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"preprocessor\">#else</span></div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00059.html#a65543e75bc949ecdb95a25b1f4e11675\"> 20</a></span><span class=\"preprocessor\">#define CHECKSIZE(X) {}</span></div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"preprocessor\">#endif</span></div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> </div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> </div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T, <span class=\"keywordtype\">int</span> n></div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html\"> 44</a></span> <span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01283.html\">ReservedDeque</a></div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> {</div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> <span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00219.html\">Dune::Functions</a> {</div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> BA, std::<span class=\"keywordtype\">size_t</span> maxSize = std::tuple_size_v<BA>></div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html\"> 43</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01275.html\">OverflowArray</a> :</div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> <span class=\"keyword\">public</span> BA</div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span>{</div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> std::size_t baseSize = std::tuple_size_v<BA>;</div>\n <div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a1a11a57db6a51cd6ceebc8aba56e87d9\"> 51</a></span> <span class=\"keyword\">typedef</span> T <a class=\"code hl_typedef\" href=\"a01283.html#a1a11a57db6a51cd6ceebc8aba56e87d9\">value_type</a>;</div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a65bd934ebbbb695648a6f506d8914861\"> 53</a></span> <span class=\"keyword\">typedef</span> T* <a class=\"code hl_typedef\" href=\"a01283.html#a65bd934ebbbb695648a6f506d8914861\">pointer</a>;</div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a9d97a3dd5165e57039304aab2c6065b3\"> 55</a></span> <span class=\"keyword\">typedef</span> T& <a class=\"code hl_typedef\" href=\"a01283.html#a9d97a3dd5165e57039304aab2c6065b3\">reference</a>;</div>\n-<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a841549562074d4cf71f7cac885b5e351\"> 57</a></span> <span class=\"keyword\">typedef</span> <span class=\"keyword\">const</span> T& <a class=\"code hl_typedef\" href=\"a01283.html#a841549562074d4cf71f7cac885b5e351\">const_reference</a>;</div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#ae274c5849a958b0d61a6047ae8849ce4\"> 59</a></span> <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">size_t</span> <a class=\"code hl_typedef\" href=\"a01283.html#ae274c5849a958b0d61a6047ae8849ce4\">size_type</a>;</div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a9caae6b45eb4e86efd054b5b21e17ecb\"> 61</a></span> <span class=\"keyword\">typedef</span> std::ptrdiff_t <a class=\"code hl_typedef\" href=\"a01283.html#a9caae6b45eb4e86efd054b5b21e17ecb\">difference_type</a>;</div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a165ae75902a942b5a9a01a540d5e92b3\"> 63</a></span> <span class=\"keyword\">typedef</span> Dune::GenericIterator<ReservedDeque, value_type> <a class=\"code hl_typedef\" href=\"a01283.html#a165ae75902a942b5a9a01a540d5e92b3\">iterator</a>;</div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#aa2e6ff65ab87792f1a761c2a5d3c8d39\"> 65</a></span> <span class=\"keyword\">typedef</span> Dune::GenericIterator<const ReservedDeque, const value_type> <a class=\"code hl_typedef\" href=\"a01283.html#aa2e6ff65ab87792f1a761c2a5d3c8d39\">const_iterator</a>;</div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a95296504e2bd12821b975daa3d2f9934\"> 49</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01275.html#a95296504e2bd12821b975daa3d2f9934\">BaseArray</a> = BA;</div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> </div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a67526616996e52fa0bc26046cf0a2485\"> 51</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01275.html#a67526616996e52fa0bc26046cf0a2485\">value_type</a> = <span class=\"keyword\">typename</span> BaseArray::value_type;</div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a057b2fd50430511a0c5697c8e271fd70\"> 52</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01275.html#a057b2fd50430511a0c5697c8e271fd70\">reference</a> = <a class=\"code hl_typedef\" href=\"a01275.html#a67526616996e52fa0bc26046cf0a2485\">value_type</a>&;</div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a040c3d78e6edfb6576a03b8be4f0e71c\"> 53</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01275.html#a040c3d78e6edfb6576a03b8be4f0e71c\">const_reference</a> = <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01275.html#a67526616996e52fa0bc26046cf0a2485\">value_type</a>&;</div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#ad6864fbd3a109a6b10b32af7e9c58b5b\"> 54</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01275.html#ad6864fbd3a109a6b10b32af7e9c58b5b\">pointer</a> = <a class=\"code hl_typedef\" href=\"a01275.html#a67526616996e52fa0bc26046cf0a2485\">value_type</a>*;</div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a87ef9a454715903d6832df402705780d\"> 55</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01275.html#a87ef9a454715903d6832df402705780d\">difference_type</a> = std::ptrdiff_t;</div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#ab600c0c276d09c1adfa934f77ca7c712\"> 56</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01275.html#ab600c0c276d09c1adfa934f77ca7c712\">size_type</a> = std::size_t;</div>\n+<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a72ffe9b324024906b65d3051ec1d199c\"> 57</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01275.html#a72ffe9b324024906b65d3051ec1d199c\">iterator</a> = Dune::GenericIterator<OverflowArray, value_type>;</div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#ad7feb14b245d1a17e13e690cf693aba7\"> 58</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01275.html#ad7feb14b245d1a17e13e690cf693aba7\">const_iterator</a> = Dune::GenericIterator<const OverflowArray, const value_type>;</div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> </div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> <span class=\"keyword\">using </span>OverflowBuffer = std::array<<a class=\"code hl_typedef\" href=\"a01275.html#a67526616996e52fa0bc26046cf0a2485\">value_type</a>, maxSize-baseSize>;</div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> </div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> </div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a8ff4c2cab7f220136c0b072c6a055f34\"> 65</a></span> <a class=\"code hl_function\" href=\"a01275.html#a8ff4c2cab7f220136c0b072c6a055f34\">OverflowArray</a>() = <span class=\"keywordflow\">default</span>;</div>\n <div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> </div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a1a933bab5b5adcc06dfd9408aa98e6a5\"> 72</a></span> <a class=\"code hl_function\" href=\"a01283.html#a1a933bab5b5adcc06dfd9408aa98e6a5\">ReservedDeque</a>() :</div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> size_(0),</div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> first_(0)</div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> {}</div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> </div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#ad7ce13b5aef147da1c161680a6002e32\"> 77</a></span> <a class=\"code hl_function\" href=\"a01283.html#ad7ce13b5aef147da1c161680a6002e32\">ReservedDeque</a>(std::initializer_list<T> <span class=\"keyword\">const</span> &l)</div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> {</div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> assert(l.size() <= n);<span class=\"comment\">// Actually, this is not needed any more!</span></div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> size_ = l.size();</div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> std::copy_n(l.begin(), size_, data_);</div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> }</div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> </div>\n-<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a0a444f28dfb7fb3b6218e2f45eaa3815\"> 89</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01283.html#a0a444f28dfb7fb3b6218e2f45eaa3815\">clear</a>()</div>\n-<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> {</div>\n-<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> first_ = 0;</div>\n-<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> size_ = 0;</div>\n-<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> }</div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> </div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#accbfb817461412168779007c0a2e792d\"> 96</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01283.html#accbfb817461412168779007c0a2e792d\">resize</a>(<span class=\"keywordtype\">size_t</span> s)</div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> {</div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> <a class=\"code hl_define\" href=\"a00059.html#a65543e75bc949ecdb95a25b1f4e11675\">CHECKSIZE</a>(s<=n);</div>\n-<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> size_ = s;</div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> }</div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> </div>\n-<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#aec567f9d91f8d29e9baff6adef93051b\"> 103</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01283.html#aec567f9d91f8d29e9baff6adef93051b\">push_back</a>(<span class=\"keyword\">const</span> T& t)</div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> {</div>\n-<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> <a class=\"code hl_define\" href=\"a00059.html#a65543e75bc949ecdb95a25b1f4e11675\">CHECKSIZE</a>(size_<n);</div>\n-<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> data_[size_++ % n] = t;</div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> }</div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#aec5c016d84ff17d2c57dac741c1954b6\"> 67</a></span> <a class=\"code hl_function\" href=\"a01275.html#aec5c016d84ff17d2c57dac741c1954b6\">OverflowArray</a>(<span class=\"keyword\">const</span> std::initializer_list<value_type>& l) {</div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> assert(l.size() <= <a class=\"code hl_function\" href=\"a01275.html#a966efdb92bd58131b9960ca4c3afb792\">capacity</a>());</div>\n+<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> size_ = l.size();</div>\n+<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> std::copy_n(l.begin(), size_, <a class=\"code hl_function\" href=\"a01275.html#a4b246cb76dc8a3b81638052e5d3c4617\">begin</a>());</div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> }</div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> </div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a0fb3877160f4a79b3f149a873ba6bc10\"> 73</a></span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a01275.html#a0fb3877160f4a79b3f149a873ba6bc10\">operator == </a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01275.html\">OverflowArray</a>& other)<span class=\"keyword\"> const </span>{</div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> <span class=\"keywordflow\">if</span> (<a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>() != other.<a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>())</div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> <span class=\"keywordflow\">for</span> (<a class=\"code hl_typedef\" href=\"a01275.html#ab600c0c276d09c1adfa934f77ca7c712\">size_type</a> i=0; i<<a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>(); ++i)</div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> <span class=\"keywordflow\">if</span> ((*<span class=\"keyword\">this</span>)[i] != other[i])</div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> }</div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> </div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#aac47600e996341476adeda5a998a6c4d\"> 83</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01275.html#aac47600e996341476adeda5a998a6c4d\">clear</a>() {</div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> size_ = 0;</div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> }</div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> </div>\n+<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#acb3c0d310f92e484249c69697210dd3b\"> 93</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01275.html#acb3c0d310f92e484249c69697210dd3b\">resize</a>(<a class=\"code hl_typedef\" href=\"a01275.html#ab600c0c276d09c1adfa934f77ca7c712\">size_type</a> n) {</div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> assert(n <= <a class=\"code hl_function\" href=\"a01275.html#a966efdb92bd58131b9960ca4c3afb792\">capacity</a>());</div>\n+<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> size_ = n;</div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> }</div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> </div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a267512305609933baab963caed1ccd41\"> 104</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01275.html#a267512305609933baab963caed1ccd41\">push_back</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01275.html#a67526616996e52fa0bc26046cf0a2485\">value_type</a>& t) {</div>\n+<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> assert(<a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>() < <a class=\"code hl_function\" href=\"a01275.html#a966efdb92bd58131b9960ca4c3afb792\">capacity</a>());</div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> (*this)[size_++] = t;</div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> }</div>\n <div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> </div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a492adac13d6ff55ebeb9863346312799\"> 110</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01283.html#a492adac13d6ff55ebeb9863346312799\">push_front</a>(<span class=\"keyword\">const</span> T& t)</div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> {</div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> <a class=\"code hl_define\" href=\"a00059.html#a65543e75bc949ecdb95a25b1f4e11675\">CHECKSIZE</a>(size_<n);</div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> ++size_;</div>\n-<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> first_ = (first_+(n-1)) % n;</div>\n-<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> data_[first_] = t;</div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> }</div>\n-<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> </div>\n-<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a75f1d16ad475f7a915dc9d7e922db2d0\"> 119</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01283.html#a75f1d16ad475f7a915dc9d7e922db2d0\">pop_back</a>()</div>\n-<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> {</div>\n-<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> <span class=\"keywordflow\">if</span> (! <a class=\"code hl_function\" href=\"a01283.html#a306e780119bf0c91e6cd80e34446e3d2\">empty</a>())</div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> size_--;</div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> }</div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> </div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a015e28a7841104760b9b20c173f89c03\"> 126</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01283.html#a015e28a7841104760b9b20c173f89c03\">pop_front</a>()</div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> {</div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> <span class=\"keywordflow\">if</span> (! <a class=\"code hl_function\" href=\"a01283.html#a306e780119bf0c91e6cd80e34446e3d2\">empty</a>())</div>\n-<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> {</div>\n-<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> size_--;</div>\n-<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> first_ = (++first_) % n;</div>\n-<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> }</div>\n-<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> }</div>\n-<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> </div>\n-<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#ad03d43143fb36b71f9fca912be89c071\"> 136</a></span> <a class=\"code hl_typedef\" href=\"a01283.html#a165ae75902a942b5a9a01a540d5e92b3\">iterator</a> <a class=\"code hl_function\" href=\"a01283.html#ad03d43143fb36b71f9fca912be89c071\">begin</a>(){</div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_typedef\" href=\"a01283.html#a165ae75902a942b5a9a01a540d5e92b3\">iterator</a>(*<span class=\"keyword\">this</span>, 0);</div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> }</div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> </div>\n-<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#ad668fffa956543db5329ce89256ca800\"> 141</a></span> <a class=\"code hl_typedef\" href=\"a01283.html#aa2e6ff65ab87792f1a761c2a5d3c8d39\">const_iterator</a> <a class=\"code hl_function\" href=\"a01283.html#ad668fffa956543db5329ce89256ca800\">begin</a>()<span class=\"keyword\"> const </span>{</div>\n-<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_typedef\" href=\"a01283.html#aa2e6ff65ab87792f1a761c2a5d3c8d39\">const_iterator</a>(*<span class=\"keyword\">this</span>, 0);</div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> }</div>\n-<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> </div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a71cf40c58f49ea4a73fcc757986f8492\"> 146</a></span> <a class=\"code hl_typedef\" href=\"a01283.html#a165ae75902a942b5a9a01a540d5e92b3\">iterator</a> <a class=\"code hl_function\" href=\"a01283.html#a71cf40c58f49ea4a73fcc757986f8492\">end</a>(){</div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_typedef\" href=\"a01283.html#a165ae75902a942b5a9a01a540d5e92b3\">iterator</a>(*<span class=\"keyword\">this</span>, size_);</div>\n-<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> }</div>\n-<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> </div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#aab4dbf78d7483bd2802dbf8f7d1b2228\"> 151</a></span> <a class=\"code hl_typedef\" href=\"a01283.html#aa2e6ff65ab87792f1a761c2a5d3c8d39\">const_iterator</a> <a class=\"code hl_function\" href=\"a01283.html#aab4dbf78d7483bd2802dbf8f7d1b2228\">end</a>()<span class=\"keyword\"> const </span>{</div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_typedef\" href=\"a01283.html#aa2e6ff65ab87792f1a761c2a5d3c8d39\">const_iterator</a>(*<span class=\"keyword\">this</span>, size_);</div>\n-<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> }</div>\n-<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> </div>\n-<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a5750b10edac44ae6ee3115d41f103631\"> 156</a></span> <a class=\"code hl_typedef\" href=\"a01283.html#a9d97a3dd5165e57039304aab2c6065b3\">reference</a> <a class=\"code hl_function\" href=\"a01283.html#a5750b10edac44ae6ee3115d41f103631\">operator[] </a>(<a class=\"code hl_typedef\" href=\"a01283.html#ae274c5849a958b0d61a6047ae8849ce4\">size_type</a> i)</div>\n-<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> {</div>\n-<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> <a class=\"code hl_define\" href=\"a00059.html#a65543e75bc949ecdb95a25b1f4e11675\">CHECKSIZE</a>(size_>i);</div>\n-<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> <span class=\"keywordflow\">return</span> data_[(first_ + i) % n];</div>\n-<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> }</div>\n-<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> </div>\n-<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a44d84861a79f22c16a4fd64178bc35f7\"> 163</a></span> <a class=\"code hl_typedef\" href=\"a01283.html#a841549562074d4cf71f7cac885b5e351\">const_reference</a> <a class=\"code hl_function\" href=\"a01283.html#a5750b10edac44ae6ee3115d41f103631\">operator[] </a>(<a class=\"code hl_typedef\" href=\"a01283.html#ae274c5849a958b0d61a6047ae8849ce4\">size_type</a> i)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> <a class=\"code hl_define\" href=\"a00059.html#a65543e75bc949ecdb95a25b1f4e11675\">CHECKSIZE</a>(size_>i);</div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> <span class=\"keywordflow\">return</span> data_[(first_ + i) % n];</div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> }</div>\n-<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> </div>\n-<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a5c980256ebfa4bd92657ce0a97b9202a\"> 170</a></span> <a class=\"code hl_typedef\" href=\"a01283.html#a9d97a3dd5165e57039304aab2c6065b3\">reference</a> <a class=\"code hl_function\" href=\"a01283.html#a5c980256ebfa4bd92657ce0a97b9202a\">front</a>()</div>\n-<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> {</div>\n-<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> <a class=\"code hl_define\" href=\"a00059.html#a65543e75bc949ecdb95a25b1f4e11675\">CHECKSIZE</a>(size_>0);</div>\n-<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> <span class=\"keywordflow\">return</span> data_[first_];</div>\n-<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> }</div>\n-<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> </div>\n-<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a6be336050bece6a071809840bc2946d7\"> 177</a></span> <a class=\"code hl_typedef\" href=\"a01283.html#a841549562074d4cf71f7cac885b5e351\">const_reference</a> <a class=\"code hl_function\" href=\"a01283.html#a6be336050bece6a071809840bc2946d7\">front</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> <a class=\"code hl_define\" href=\"a00059.html#a65543e75bc949ecdb95a25b1f4e11675\">CHECKSIZE</a>(size_>0);</div>\n-<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> <span class=\"keywordflow\">return</span> data_[first_];</div>\n-<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> }</div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a67ad7c3562178a61003cbd24b26011f8\"> 110</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01275.html#a67ad7c3562178a61003cbd24b26011f8\">pop_back</a>() {</div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> assert(<a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>() > 0);</div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> <span class=\"keywordflow\">if</span> (! <a class=\"code hl_function\" href=\"a01275.html#a5177f15acc922fbfeb20ac7ac57da093\">empty</a>())</div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> size_--;</div>\n+<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> }</div>\n+<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> </div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#af9483f104035eac50b90396d2ad4640c\"> 122</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01275.html#af9483f104035eac50b90396d2ad4640c\">push_front</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01275.html#a67526616996e52fa0bc26046cf0a2485\">value_type</a>& t) {</div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> assert(<a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>() < <a class=\"code hl_function\" href=\"a01275.html#a966efdb92bd58131b9960ca4c3afb792\">capacity</a>());</div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> <span class=\"keywordflow\">for</span> (<a class=\"code hl_typedef\" href=\"a01275.html#ab600c0c276d09c1adfa934f77ca7c712\">size_type</a> i=0; i<<a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>(); i++)</div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> (*<span class=\"keyword\">this</span>)[i+1] = (*this)[i];</div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> (*this)[0] = t;</div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> }</div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> </div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a4b246cb76dc8a3b81638052e5d3c4617\"> 130</a></span> <a class=\"code hl_typedef\" href=\"a01275.html#a72ffe9b324024906b65d3051ec1d199c\">iterator</a> <a class=\"code hl_function\" href=\"a01275.html#a4b246cb76dc8a3b81638052e5d3c4617\">begin</a>() {</div>\n+<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_typedef\" href=\"a01275.html#a72ffe9b324024906b65d3051ec1d199c\">iterator</a>(*<span class=\"keyword\">this</span>, 0);</div>\n+<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> }</div>\n+<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> </div>\n+<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a77ba635703a41b09aab4f717714c8178\"> 135</a></span> <a class=\"code hl_typedef\" href=\"a01275.html#ad7feb14b245d1a17e13e690cf693aba7\">const_iterator</a> <a class=\"code hl_function\" href=\"a01275.html#a77ba635703a41b09aab4f717714c8178\">begin</a>()<span class=\"keyword\"> const </span>{</div>\n+<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_typedef\" href=\"a01275.html#ad7feb14b245d1a17e13e690cf693aba7\">const_iterator</a>(*<span class=\"keyword\">this</span>, 0);</div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> }</div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> </div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#aacc8b19785b09af92bb1e041609a7896\"> 140</a></span> <a class=\"code hl_typedef\" href=\"a01275.html#a72ffe9b324024906b65d3051ec1d199c\">iterator</a> <a class=\"code hl_function\" href=\"a01275.html#aacc8b19785b09af92bb1e041609a7896\">end</a>() {</div>\n+<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_typedef\" href=\"a01275.html#a72ffe9b324024906b65d3051ec1d199c\">iterator</a>(*<span class=\"keyword\">this</span>, <a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>());</div>\n+<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> }</div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> </div>\n+<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a0a564defa0c39ddf1690def7cb707db1\"> 145</a></span> <a class=\"code hl_typedef\" href=\"a01275.html#ad7feb14b245d1a17e13e690cf693aba7\">const_iterator</a> <a class=\"code hl_function\" href=\"a01275.html#a0a564defa0c39ddf1690def7cb707db1\">end</a>()<span class=\"keyword\"> const </span>{</div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_typedef\" href=\"a01275.html#ad7feb14b245d1a17e13e690cf693aba7\">const_iterator</a>(*<span class=\"keyword\">this</span>, <a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>());</div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> }</div>\n+<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> </div>\n+<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#aff8b6a5fa259da1688924f7bd6a3de0e\"> 150</a></span> <a class=\"code hl_typedef\" href=\"a01275.html#a057b2fd50430511a0c5697c8e271fd70\">reference</a> <a class=\"code hl_function\" href=\"a01275.html#aff8b6a5fa259da1688924f7bd6a3de0e\">operator[] </a>(<a class=\"code hl_typedef\" href=\"a01275.html#ab600c0c276d09c1adfa934f77ca7c712\">size_type</a> i) {</div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> assert(i < <a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>());</div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> <span class=\"comment\">// If there's no padding between the base class and the overflow_ member,</span></div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> <span class=\"comment\">// the compiler should be able to optimize this to</span></div>\n+<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> <span class=\"comment\">// return *(&BaseArray::operator[](0) + i);</span></div>\n+<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> <span class=\"keywordflow\">if</span> (i<baseSize)</div>\n+<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> <span class=\"keywordflow\">return</span> BaseArray::operator[](i);</div>\n+<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> <span class=\"keywordflow\">return</span> overflow_[i-baseSize];</div>\n+<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> }</div>\n+<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> </div>\n+<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#adcdc5bae2f0fe4bb385a7e38ddc02b16\"> 161</a></span> <a class=\"code hl_typedef\" href=\"a01275.html#a040c3d78e6edfb6576a03b8be4f0e71c\">const_reference</a> <a class=\"code hl_function\" href=\"a01275.html#aff8b6a5fa259da1688924f7bd6a3de0e\">operator[] </a>(<a class=\"code hl_typedef\" href=\"a01275.html#ab600c0c276d09c1adfa934f77ca7c712\">size_type</a> i)<span class=\"keyword\"> const </span>{</div>\n+<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> assert(i < <a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>());</div>\n+<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> <span class=\"comment\">// If there's no padding between the base class and the overflow_ member,</span></div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> <span class=\"comment\">// the compiler should be able to optimize this to</span></div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> <span class=\"comment\">// return *(&BaseArray::operator[](0) + i);</span></div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> <span class=\"keywordflow\">if</span> (i<baseSize)</div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> <span class=\"keywordflow\">return</span> BaseArray::operator[](i);</div>\n+<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> <span class=\"keywordflow\">return</span> overflow_[i-baseSize];</div>\n+<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> }</div>\n+<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> </div>\n+<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#afc310b029604b09c928a99c341f0ac52\"> 172</a></span> <a class=\"code hl_typedef\" href=\"a01275.html#a057b2fd50430511a0c5697c8e271fd70\">reference</a> <a class=\"code hl_function\" href=\"a01275.html#afc310b029604b09c928a99c341f0ac52\">front</a>() {</div>\n+<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> assert(<a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>() > 0);</div>\n+<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> <span class=\"keywordflow\">return</span> (*<span class=\"keyword\">this</span>)[0];</div>\n+<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> }</div>\n+<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> </div>\n+<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a9a8d90c0aa530dda911b987d48db2f41\"> 178</a></span> <a class=\"code hl_typedef\" href=\"a01275.html#a040c3d78e6edfb6576a03b8be4f0e71c\">const_reference</a> <a class=\"code hl_function\" href=\"a01275.html#a9a8d90c0aa530dda911b987d48db2f41\">front</a>()<span class=\"keyword\"> const </span>{</div>\n+<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> assert(<a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>() > 0);</div>\n+<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> <span class=\"keywordflow\">return</span> (*<span class=\"keyword\">this</span>)[0];</div>\n+<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> }</div>\n <div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> </div>\n-<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a748c4f51dd0445ce73228ca16fe016e2\"> 184</a></span> <a class=\"code hl_typedef\" href=\"a01283.html#a9d97a3dd5165e57039304aab2c6065b3\">reference</a> <a class=\"code hl_function\" href=\"a01283.html#a748c4f51dd0445ce73228ca16fe016e2\">back</a>()</div>\n-<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> {</div>\n-<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> <a class=\"code hl_define\" href=\"a00059.html#a65543e75bc949ecdb95a25b1f4e11675\">CHECKSIZE</a>(size_>0);</div>\n-<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> <span class=\"keywordflow\">return</span> data_[(first_ + size_-1) % n];</div>\n-<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> }</div>\n-<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> </div>\n-<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a3615c8d36a753bb2120e5939c11ca39b\"> 191</a></span> <a class=\"code hl_typedef\" href=\"a01283.html#a841549562074d4cf71f7cac885b5e351\">const_reference</a> <a class=\"code hl_function\" href=\"a01283.html#a3615c8d36a753bb2120e5939c11ca39b\">back</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> <a class=\"code hl_define\" href=\"a00059.html#a65543e75bc949ecdb95a25b1f4e11675\">CHECKSIZE</a>(size_>0);</div>\n-<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> <span class=\"keywordflow\">return</span> data_[(first_ + size_-1) % n];</div>\n-<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> }</div>\n-<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> </div>\n-<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#aaa1edbb9f563f59f78abe764b3760020\"> 202</a></span> <a class=\"code hl_typedef\" href=\"a01283.html#ae274c5849a958b0d61a6047ae8849ce4\">size_type</a> <a class=\"code hl_function\" href=\"a01283.html#aaa1edbb9f563f59f78abe764b3760020\">size</a> ()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> <span class=\"keywordflow\">return</span> size_;</div>\n-<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span> }</div>\n-<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> </div>\n-<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a306e780119bf0c91e6cd80e34446e3d2\"> 208</a></span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a01283.html#a306e780119bf0c91e6cd80e34446e3d2\">empty</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> <span class=\"keywordflow\">return</span> size_==0;</div>\n-<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> }</div>\n-<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"> 212</span> </div>\n-<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a08e8f6dc1efef2c93a14442e26ed3cf3\"> 214</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01283.html#ae274c5849a958b0d61a6047ae8849ce4\">size_type</a> <a class=\"code hl_function\" href=\"a01283.html#a08e8f6dc1efef2c93a14442e26ed3cf3\">capacity</a>()</div>\n-<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> {</div>\n-<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span> <span class=\"keywordflow\">return</span> n;</div>\n-<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> }</div>\n-<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> </div>\n-<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a92313a941786106b88b2c43e503d911b\"> 220</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01283.html#ae274c5849a958b0d61a6047ae8849ce4\">size_type</a> <a class=\"code hl_function\" href=\"a01283.html#a92313a941786106b88b2c43e503d911b\">max_size</a>()</div>\n-<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> {</div>\n-<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span> <span class=\"keywordflow\">return</span> n;</div>\n-<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> }</div>\n-<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> </div>\n-<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01283.html#a43dd4af258c989193a8f25872504c67c\"> 228</a></span> <span class=\"keyword\">friend</span> std::ostream& <a class=\"code hl_friend\" href=\"a01283.html#a43dd4af258c989193a8f25872504c67c\">operator<< </a>(std::ostream& s, <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01283.html\">ReservedDeque</a>& v)</div>\n-<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> {</div>\n-<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<v.<a class=\"code hl_function\" href=\"a01283.html#aaa1edbb9f563f59f78abe764b3760020\">size</a>(); i++)</div>\n-<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span> s << v[i] << <span class=\"stringliteral\">" "</span>;</div>\n-<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> <span class=\"keywordflow\">return</span> s;</div>\n-<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> }</div>\n-<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> </div>\n-<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> <span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span> T data_[n];</div>\n-<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span> <a class=\"code hl_typedef\" href=\"a01283.html#ae274c5849a958b0d61a6047ae8849ce4\">size_type</a> first_;</div>\n-<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span> <a class=\"code hl_typedef\" href=\"a01283.html#ae274c5849a958b0d61a6047ae8849ce4\">size_type</a> size_;</div>\n-<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span> };</div>\n-<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"> 240</span> </div>\n-<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span>} <span class=\"comment\">// end namespace Functions</span></div>\n-<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span>} <span class=\"comment\">// end namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> </div>\n-<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span><span class=\"preprocessor\">#undef CHECKSIZE</span></div>\n-<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> </div>\n-<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_RESERVEDDEQUE_HH</span></div>\n-<div class=\"ttc\" id=\"aa00059_html_a65543e75bc949ecdb95a25b1f4e11675\"><div class=\"ttname\"><a href=\"a00059.html#a65543e75bc949ecdb95a25b1f4e11675\">CHECKSIZE</a></div><div class=\"ttdeci\">#define CHECKSIZE(X)</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:20</div></div>\n-<div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa01283_html\"><div class=\"ttname\"><a href=\"a01283.html\">Dune::Functions::ReservedDeque</a></div><div class=\"ttdoc\">A double-ended queue (deque) class with statically reserved memory.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:45</div></div>\n-<div class=\"ttc\" id=\"aa01283_html_a015e28a7841104760b9b20c173f89c03\"><div class=\"ttname\"><a href=\"a01283.html#a015e28a7841104760b9b20c173f89c03\">Dune::Functions::ReservedDeque::pop_front</a></div><div class=\"ttdeci\">void pop_front()</div><div class=\"ttdoc\">Erases the first element of the vector, O(1) time.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:126</div></div>\n-<div class=\"ttc\" id=\"aa01283_html_a08e8f6dc1efef2c93a14442e26ed3cf3\"><div class=\"ttname\"><a href=\"a01283.html#a08e8f6dc1efef2c93a14442e26ed3cf3\">Dune::Functions::ReservedDeque::capacity</a></div><div class=\"ttdeci\">static constexpr size_type capacity()</div><div class=\"ttdoc\">Returns current capacity (allocated memory) of the vector.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:214</div></div>\n-<div class=\"ttc\" id=\"aa01283_html_a0a444f28dfb7fb3b6218e2f45eaa3815\"><div class=\"ttname\"><a href=\"a01283.html#a0a444f28dfb7fb3b6218e2f45eaa3815\">Dune::Functions::ReservedDeque::clear</a></div><div class=\"ttdeci\">void clear()</div><div class=\"ttdoc\">Erases all elements.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:89</div></div>\n-<div class=\"ttc\" id=\"aa01283_html_a165ae75902a942b5a9a01a540d5e92b3\"><div class=\"ttname\"><a href=\"a01283.html#a165ae75902a942b5a9a01a540d5e92b3\">Dune::Functions::ReservedDeque::iterator</a></div><div class=\"ttdeci\">Dune::GenericIterator< ReservedDeque, value_type > iterator</div><div class=\"ttdoc\">Iterator used to iterate through a vector.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:63</div></div>\n-<div class=\"ttc\" id=\"aa01283_html_a1a11a57db6a51cd6ceebc8aba56e87d9\"><div class=\"ttname\"><a href=\"a01283.html#a1a11a57db6a51cd6ceebc8aba56e87d9\">Dune::Functions::ReservedDeque::value_type</a></div><div class=\"ttdeci\">T value_type</div><div class=\"ttdoc\">The type of object, T, stored in the vector.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:51</div></div>\n-<div class=\"ttc\" id=\"aa01283_html_a1a933bab5b5adcc06dfd9408aa98e6a5\"><div class=\"ttname\"><a href=\"a01283.html#a1a933bab5b5adcc06dfd9408aa98e6a5\">Dune::Functions::ReservedDeque::ReservedDeque</a></div><div class=\"ttdeci\">ReservedDeque()</div><div class=\"ttdoc\">Constructor.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:72</div></div>\n-<div class=\"ttc\" id=\"aa01283_html_a306e780119bf0c91e6cd80e34446e3d2\"><div class=\"ttname\"><a href=\"a01283.html#a306e780119bf0c91e6cd80e34446e3d2\">Dune::Functions::ReservedDeque::empty</a></div><div class=\"ttdeci\">bool empty() const</div><div class=\"ttdoc\">Returns true if vector has no elements.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:208</div></div>\n-<div class=\"ttc\" id=\"aa01283_html_a3615c8d36a753bb2120e5939c11ca39b\"><div class=\"ttname\"><a href=\"a01283.html#a3615c8d36a753bb2120e5939c11ca39b\">Dune::Functions::ReservedDeque::back</a></div><div class=\"ttdeci\">const_reference back() const</div><div class=\"ttdoc\">Returns const reference to last element of vector.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:191</div></div>\n-<div class=\"ttc\" id=\"aa01283_html_a43dd4af258c989193a8f25872504c67c\"><div class=\"ttname\"><a href=\"a01283.html#a43dd4af258c989193a8f25872504c67c\">Dune::Functions::ReservedDeque::operator<<</a></div><div class=\"ttdeci\">friend std::ostream & operator<<(std::ostream &s, const ReservedDeque &v)</div><div class=\"ttdoc\">Send ReservedDeque to an output stream.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:228</div></div>\n-<div class=\"ttc\" id=\"aa01283_html_a492adac13d6ff55ebeb9863346312799\"><div class=\"ttname\"><a href=\"a01283.html#a492adac13d6ff55ebeb9863346312799\">Dune::Functions::ReservedDeque::push_front</a></div><div class=\"ttdeci\">void push_front(const T &t)</div><div class=\"ttdoc\">Prepends an element to the begin of a deque if size<capacity, O(1) time.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:110</div></div>\n-<div class=\"ttc\" id=\"aa01283_html_a5750b10edac44ae6ee3115d41f103631\"><div class=\"ttname\"><a href=\"a01283.html#a5750b10edac44ae6ee3115d41f103631\">Dune::Functions::ReservedDeque::operator[]</a></div><div class=\"ttdeci\">reference operator[](size_type i)</div><div class=\"ttdoc\">Returns reference to the i'th element.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:156</div></div>\n-<div class=\"ttc\" id=\"aa01283_html_a5c980256ebfa4bd92657ce0a97b9202a\"><div class=\"ttname\"><a href=\"a01283.html#a5c980256ebfa4bd92657ce0a97b9202a\">Dune::Functions::ReservedDeque::front</a></div><div class=\"ttdeci\">reference front()</div><div class=\"ttdoc\">Returns reference to first element of vector.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:170</div></div>\n-<div class=\"ttc\" id=\"aa01283_html_a65bd934ebbbb695648a6f506d8914861\"><div class=\"ttname\"><a href=\"a01283.html#a65bd934ebbbb695648a6f506d8914861\">Dune::Functions::ReservedDeque::pointer</a></div><div class=\"ttdeci\">T * pointer</div><div class=\"ttdoc\">Pointer to T.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:53</div></div>\n-<div class=\"ttc\" id=\"aa01283_html_a6be336050bece6a071809840bc2946d7\"><div class=\"ttname\"><a href=\"a01283.html#a6be336050bece6a071809840bc2946d7\">Dune::Functions::ReservedDeque::front</a></div><div class=\"ttdeci\">const_reference front() const</div><div class=\"ttdoc\">Returns const reference to first element of vector.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:177</div></div>\n-<div class=\"ttc\" id=\"aa01283_html_a71cf40c58f49ea4a73fcc757986f8492\"><div class=\"ttname\"><a href=\"a01283.html#a71cf40c58f49ea4a73fcc757986f8492\">Dune::Functions::ReservedDeque::end</a></div><div class=\"ttdeci\">iterator end()</div><div class=\"ttdoc\">Returns an iterator pointing to the end of the vector.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:146</div></div>\n-<div class=\"ttc\" id=\"aa01283_html_a748c4f51dd0445ce73228ca16fe016e2\"><div class=\"ttname\"><a href=\"a01283.html#a748c4f51dd0445ce73228ca16fe016e2\">Dune::Functions::ReservedDeque::back</a></div><div class=\"ttdeci\">reference back()</div><div class=\"ttdoc\">Returns reference to last element of vector.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:184</div></div>\n-<div class=\"ttc\" id=\"aa01283_html_a75f1d16ad475f7a915dc9d7e922db2d0\"><div class=\"ttname\"><a href=\"a01283.html#a75f1d16ad475f7a915dc9d7e922db2d0\">Dune::Functions::ReservedDeque::pop_back</a></div><div class=\"ttdeci\">void pop_back()</div><div class=\"ttdoc\">Erases the last element of the vector, O(1) time.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:119</div></div>\n-<div class=\"ttc\" id=\"aa01283_html_a841549562074d4cf71f7cac885b5e351\"><div class=\"ttname\"><a href=\"a01283.html#a841549562074d4cf71f7cac885b5e351\">Dune::Functions::ReservedDeque::const_reference</a></div><div class=\"ttdeci\">const T & const_reference</div><div class=\"ttdoc\">Const reference to T.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:57</div></div>\n-<div class=\"ttc\" id=\"aa01283_html_a92313a941786106b88b2c43e503d911b\"><div class=\"ttname\"><a href=\"a01283.html#a92313a941786106b88b2c43e503d911b\">Dune::Functions::ReservedDeque::max_size</a></div><div class=\"ttdeci\">static constexpr size_type max_size()</div><div class=\"ttdoc\">Returns the maximum length of the vector.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:220</div></div>\n-<div class=\"ttc\" id=\"aa01283_html_a9caae6b45eb4e86efd054b5b21e17ecb\"><div class=\"ttname\"><a href=\"a01283.html#a9caae6b45eb4e86efd054b5b21e17ecb\">Dune::Functions::ReservedDeque::difference_type</a></div><div class=\"ttdeci\">std::ptrdiff_t difference_type</div><div class=\"ttdoc\">A signed integral type.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:61</div></div>\n-<div class=\"ttc\" id=\"aa01283_html_a9d97a3dd5165e57039304aab2c6065b3\"><div class=\"ttname\"><a href=\"a01283.html#a9d97a3dd5165e57039304aab2c6065b3\">Dune::Functions::ReservedDeque::reference</a></div><div class=\"ttdeci\">T & reference</div><div class=\"ttdoc\">Reference to T.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:55</div></div>\n-<div class=\"ttc\" id=\"aa01283_html_aa2e6ff65ab87792f1a761c2a5d3c8d39\"><div class=\"ttname\"><a href=\"a01283.html#aa2e6ff65ab87792f1a761c2a5d3c8d39\">Dune::Functions::ReservedDeque::const_iterator</a></div><div class=\"ttdeci\">Dune::GenericIterator< const ReservedDeque, const value_type > const_iterator</div><div class=\"ttdoc\">Const iterator used to iterate through a vector.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:65</div></div>\n-<div class=\"ttc\" id=\"aa01283_html_aaa1edbb9f563f59f78abe764b3760020\"><div class=\"ttname\"><a href=\"a01283.html#aaa1edbb9f563f59f78abe764b3760020\">Dune::Functions::ReservedDeque::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdoc\">Returns number of elements in the vector.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:202</div></div>\n-<div class=\"ttc\" id=\"aa01283_html_aab4dbf78d7483bd2802dbf8f7d1b2228\"><div class=\"ttname\"><a href=\"a01283.html#aab4dbf78d7483bd2802dbf8f7d1b2228\">Dune::Functions::ReservedDeque::end</a></div><div class=\"ttdeci\">const_iterator end() const</div><div class=\"ttdoc\">Returns a const_iterator pointing to the end of the vector.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:151</div></div>\n-<div class=\"ttc\" id=\"aa01283_html_accbfb817461412168779007c0a2e792d\"><div class=\"ttname\"><a href=\"a01283.html#accbfb817461412168779007c0a2e792d\">Dune::Functions::ReservedDeque::resize</a></div><div class=\"ttdeci\">void resize(size_t s)</div><div class=\"ttdoc\">Specifies a new size for the vector.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:96</div></div>\n-<div class=\"ttc\" id=\"aa01283_html_ad03d43143fb36b71f9fca912be89c071\"><div class=\"ttname\"><a href=\"a01283.html#ad03d43143fb36b71f9fca912be89c071\">Dune::Functions::ReservedDeque::begin</a></div><div class=\"ttdeci\">iterator begin()</div><div class=\"ttdoc\">Returns a iterator pointing to the beginning of the vector.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:136</div></div>\n-<div class=\"ttc\" id=\"aa01283_html_ad668fffa956543db5329ce89256ca800\"><div class=\"ttname\"><a href=\"a01283.html#ad668fffa956543db5329ce89256ca800\">Dune::Functions::ReservedDeque::begin</a></div><div class=\"ttdeci\">const_iterator begin() const</div><div class=\"ttdoc\">Returns a const_iterator pointing to the beginning of the vector.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:141</div></div>\n-<div class=\"ttc\" id=\"aa01283_html_ad7ce13b5aef147da1c161680a6002e32\"><div class=\"ttname\"><a href=\"a01283.html#ad7ce13b5aef147da1c161680a6002e32\">Dune::Functions::ReservedDeque::ReservedDeque</a></div><div class=\"ttdeci\">ReservedDeque(std::initializer_list< T > const &l)</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:77</div></div>\n-<div class=\"ttc\" id=\"aa01283_html_ae274c5849a958b0d61a6047ae8849ce4\"><div class=\"ttname\"><a href=\"a01283.html#ae274c5849a958b0d61a6047ae8849ce4\">Dune::Functions::ReservedDeque::size_type</a></div><div class=\"ttdeci\">size_t size_type</div><div class=\"ttdoc\">An unsigned integral type.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:59</div></div>\n-<div class=\"ttc\" id=\"aa01283_html_aec567f9d91f8d29e9baff6adef93051b\"><div class=\"ttname\"><a href=\"a01283.html#aec567f9d91f8d29e9baff6adef93051b\">Dune::Functions::ReservedDeque::push_back</a></div><div class=\"ttdeci\">void push_back(const T &t)</div><div class=\"ttdoc\">Appends an element to the end of a vector, up to the maximum size n, O(1) time.</div><div class=\"ttdef\"><b>Definition:</b> reserveddeque.hh:103</div></div>\n+<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#aeedca403252095b9f7d7b1aafcfd95d8\"> 184</a></span> <a class=\"code hl_typedef\" href=\"a01275.html#a057b2fd50430511a0c5697c8e271fd70\">reference</a> <a class=\"code hl_function\" href=\"a01275.html#aeedca403252095b9f7d7b1aafcfd95d8\">back</a>() {</div>\n+<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> assert(<a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>() > 0);</div>\n+<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> <span class=\"keywordflow\">return</span> (*<span class=\"keyword\">this</span>)[<a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>()-1];</div>\n+<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> }</div>\n+<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> </div>\n+<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#adda8f20adc81d38258794dc1d88dead3\"> 190</a></span> <a class=\"code hl_typedef\" href=\"a01275.html#a040c3d78e6edfb6576a03b8be4f0e71c\">const_reference</a> <a class=\"code hl_function\" href=\"a01275.html#adda8f20adc81d38258794dc1d88dead3\">back</a>()<span class=\"keyword\"> const </span>{</div>\n+<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> assert(<a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>() > 0);</div>\n+<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> <span class=\"keywordflow\">return</span> (*<span class=\"keyword\">this</span>)[<a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>()-1];</div>\n+<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> }</div>\n+<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> </div>\n+<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\"> 196</a></span> <a class=\"code hl_typedef\" href=\"a01275.html#ab600c0c276d09c1adfa934f77ca7c712\">size_type</a> <a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a> ()<span class=\"keyword\"> const </span>{</div>\n+<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> <span class=\"keywordflow\">return</span> size_;</div>\n+<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> }</div>\n+<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> </div>\n+<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a5177f15acc922fbfeb20ac7ac57da093\"> 201</a></span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a01275.html#a5177f15acc922fbfeb20ac7ac57da093\">empty</a>()<span class=\"keyword\"> const </span>{</div>\n+<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>() == 0;</div>\n+<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> }</div>\n+<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> </div>\n+<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a966efdb92bd58131b9960ca4c3afb792\"> 206</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01275.html#ab600c0c276d09c1adfa934f77ca7c712\">size_type</a> <a class=\"code hl_function\" href=\"a01275.html#a966efdb92bd58131b9960ca4c3afb792\">capacity</a>() {</div>\n+<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> <span class=\"keywordflow\">return</span> maxSize;</div>\n+<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span> }</div>\n+<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> </div>\n+<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a9a4101a7bcb022a9bf6842d33dca39c0\"> 211</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01275.html#ab600c0c276d09c1adfa934f77ca7c712\">size_type</a> <a class=\"code hl_function\" href=\"a01275.html#a9a4101a7bcb022a9bf6842d33dca39c0\">max_size</a>() {</div>\n+<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"> 212</span> <span class=\"keywordflow\">return</span> maxSize;</div>\n+<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span> }</div>\n+<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> </div>\n+<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a25221f9f42ef55ccc53f9fb91997b102\"> 216</a></span> <span class=\"keyword\">inline</span> <span class=\"keyword\">friend</span> std::size_t <a class=\"code hl_friend\" href=\"a01275.html#a25221f9f42ef55ccc53f9fb91997b102\">hash_value</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01275.html\">OverflowArray</a>& v) <span class=\"keyword\">noexcept</span> {</div>\n+<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> <span class=\"keywordflow\">return</span> hash_range(v.begin(), v.end());</div>\n+<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> }</div>\n+<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> </div>\n+<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a3e35d413f76edbdefd484385a75060d7\"> 221</a></span> <span class=\"keyword\">friend</span> std::ostream& <a class=\"code hl_friend\" href=\"a01275.html#a3e35d413f76edbdefd484385a75060d7\">operator<< </a>(std::ostream& s, <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01275.html\">OverflowArray</a>& c) {</div>\n+<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span> <span class=\"keywordflow\">for</span> (<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& ci : c)</div>\n+<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> s << ci << <span class=\"stringliteral\">" "</span>;</div>\n+<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> <span class=\"keywordflow\">return</span> s;</div>\n+<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span> }</div>\n+<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> </div>\n+<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> OverflowBuffer overflow_;</div>\n+<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> <a class=\"code hl_typedef\" href=\"a01275.html#ab600c0c276d09c1adfa934f77ca7c712\">size_type</a> size_ = 0;</div>\n+<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span>};</div>\n+<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span> </div>\n+<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> </div>\n+<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> </div>\n+<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span>} <span class=\"comment\">// namespace Dune::Functions</span></div>\n+<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> </div>\n+<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span> </div>\n+<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span> </div>\n+<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH</span></div>\n+<div class=\"ttc\" id=\"aa00219_html\"><div class=\"ttname\"><a href=\"a00219.html\">Dune::Functions</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:11</div></div>\n+<div class=\"ttc\" id=\"aa01275_html\"><div class=\"ttname\"><a href=\"a01275.html\">Dune::Functions::OverflowArray</a></div><div class=\"ttdoc\">A dynamically sized array-like class with overflow.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:45</div></div>\n+<div class=\"ttc\" id=\"aa01275_html_a040c3d78e6edfb6576a03b8be4f0e71c\"><div class=\"ttname\"><a href=\"a01275.html#a040c3d78e6edfb6576a03b8be4f0e71c\">Dune::Functions::OverflowArray::const_reference</a></div><div class=\"ttdeci\">const value_type & const_reference</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:53</div></div>\n+<div class=\"ttc\" id=\"aa01275_html_a057b2fd50430511a0c5697c8e271fd70\"><div class=\"ttname\"><a href=\"a01275.html#a057b2fd50430511a0c5697c8e271fd70\">Dune::Functions::OverflowArray::reference</a></div><div class=\"ttdeci\">value_type & reference</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:52</div></div>\n+<div class=\"ttc\" id=\"aa01275_html_a0a564defa0c39ddf1690def7cb707db1\"><div class=\"ttname\"><a href=\"a01275.html#a0a564defa0c39ddf1690def7cb707db1\">Dune::Functions::OverflowArray::end</a></div><div class=\"ttdeci\">const_iterator end() const</div><div class=\"ttdoc\">Returns a const_iterator pointing to the end of the OverflowArray.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:145</div></div>\n+<div class=\"ttc\" id=\"aa01275_html_a0fb3877160f4a79b3f149a873ba6bc10\"><div class=\"ttname\"><a href=\"a01275.html#a0fb3877160f4a79b3f149a873ba6bc10\">Dune::Functions::OverflowArray::operator==</a></div><div class=\"ttdeci\">bool operator==(const OverflowArray &other) const</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:73</div></div>\n+<div class=\"ttc\" id=\"aa01275_html_a25221f9f42ef55ccc53f9fb91997b102\"><div class=\"ttname\"><a href=\"a01275.html#a25221f9f42ef55ccc53f9fb91997b102\">Dune::Functions::OverflowArray::hash_value</a></div><div class=\"ttdeci\">friend std::size_t hash_value(const OverflowArray &v) noexcept</div><div class=\"ttdoc\">Compute hash value.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:216</div></div>\n+<div class=\"ttc\" id=\"aa01275_html_a267512305609933baab963caed1ccd41\"><div class=\"ttname\"><a href=\"a01275.html#a267512305609933baab963caed1ccd41\">Dune::Functions::OverflowArray::push_back</a></div><div class=\"ttdeci\">void push_back(const value_type &t)</div><div class=\"ttdoc\">Appends an element to the end of the OverflowArray,.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:104</div></div>\n+<div class=\"ttc\" id=\"aa01275_html_a3e35d413f76edbdefd484385a75060d7\"><div class=\"ttname\"><a href=\"a01275.html#a3e35d413f76edbdefd484385a75060d7\">Dune::Functions::OverflowArray::operator<<</a></div><div class=\"ttdeci\">friend std::ostream & operator<<(std::ostream &s, const OverflowArray &c)</div><div class=\"ttdoc\">Write container to an output stream.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:221</div></div>\n+<div class=\"ttc\" id=\"aa01275_html_a4b246cb76dc8a3b81638052e5d3c4617\"><div class=\"ttname\"><a href=\"a01275.html#a4b246cb76dc8a3b81638052e5d3c4617\">Dune::Functions::OverflowArray::begin</a></div><div class=\"ttdeci\">iterator begin()</div><div class=\"ttdoc\">Returns a iterator pointing to the beginning of the OverflowArray.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:130</div></div>\n+<div class=\"ttc\" id=\"aa01275_html_a5177f15acc922fbfeb20ac7ac57da093\"><div class=\"ttname\"><a href=\"a01275.html#a5177f15acc922fbfeb20ac7ac57da093\">Dune::Functions::OverflowArray::empty</a></div><div class=\"ttdeci\">bool empty() const</div><div class=\"ttdoc\">Returns true if OverflowArray has no elements.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:201</div></div>\n+<div class=\"ttc\" id=\"aa01275_html_a6418868e96294c749e1f50b3f4e24e04\"><div class=\"ttname\"><a href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">Dune::Functions::OverflowArray::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdoc\">Returns number of elements in the OverflowArray.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:196</div></div>\n+<div class=\"ttc\" id=\"aa01275_html_a67526616996e52fa0bc26046cf0a2485\"><div class=\"ttname\"><a href=\"a01275.html#a67526616996e52fa0bc26046cf0a2485\">Dune::Functions::OverflowArray::value_type</a></div><div class=\"ttdeci\">typename BaseArray::value_type value_type</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:51</div></div>\n+<div class=\"ttc\" id=\"aa01275_html_a67ad7c3562178a61003cbd24b26011f8\"><div class=\"ttname\"><a href=\"a01275.html#a67ad7c3562178a61003cbd24b26011f8\">Dune::Functions::OverflowArray::pop_back</a></div><div class=\"ttdeci\">void pop_back()</div><div class=\"ttdoc\">Erases the last element of the OverflowArray, O(1) time.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:110</div></div>\n+<div class=\"ttc\" id=\"aa01275_html_a72ffe9b324024906b65d3051ec1d199c\"><div class=\"ttname\"><a href=\"a01275.html#a72ffe9b324024906b65d3051ec1d199c\">Dune::Functions::OverflowArray::iterator</a></div><div class=\"ttdeci\">Dune::GenericIterator< OverflowArray, value_type > iterator</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:57</div></div>\n+<div class=\"ttc\" id=\"aa01275_html_a77ba635703a41b09aab4f717714c8178\"><div class=\"ttname\"><a href=\"a01275.html#a77ba635703a41b09aab4f717714c8178\">Dune::Functions::OverflowArray::begin</a></div><div class=\"ttdeci\">const_iterator begin() const</div><div class=\"ttdoc\">Returns a const_iterator pointing to the beginning of the OverflowArray.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:135</div></div>\n+<div class=\"ttc\" id=\"aa01275_html_a87ef9a454715903d6832df402705780d\"><div class=\"ttname\"><a href=\"a01275.html#a87ef9a454715903d6832df402705780d\">Dune::Functions::OverflowArray::difference_type</a></div><div class=\"ttdeci\">std::ptrdiff_t difference_type</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:55</div></div>\n+<div class=\"ttc\" id=\"aa01275_html_a8ff4c2cab7f220136c0b072c6a055f34\"><div class=\"ttname\"><a href=\"a01275.html#a8ff4c2cab7f220136c0b072c6a055f34\">Dune::Functions::OverflowArray::OverflowArray</a></div><div class=\"ttdeci\">OverflowArray()=default</div></div>\n+<div class=\"ttc\" id=\"aa01275_html_a95296504e2bd12821b975daa3d2f9934\"><div class=\"ttname\"><a href=\"a01275.html#a95296504e2bd12821b975daa3d2f9934\">Dune::Functions::OverflowArray::BaseArray</a></div><div class=\"ttdeci\">BA BaseArray</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:49</div></div>\n+<div class=\"ttc\" id=\"aa01275_html_a966efdb92bd58131b9960ca4c3afb792\"><div class=\"ttname\"><a href=\"a01275.html#a966efdb92bd58131b9960ca4c3afb792\">Dune::Functions::OverflowArray::capacity</a></div><div class=\"ttdeci\">static constexpr size_type capacity()</div><div class=\"ttdoc\">Returns the capacity of the OverflowArray.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:206</div></div>\n+<div class=\"ttc\" id=\"aa01275_html_a9a4101a7bcb022a9bf6842d33dca39c0\"><div class=\"ttname\"><a href=\"a01275.html#a9a4101a7bcb022a9bf6842d33dca39c0\">Dune::Functions::OverflowArray::max_size</a></div><div class=\"ttdeci\">static constexpr size_type max_size()</div><div class=\"ttdoc\">Returns the maximum length of the OverflowArray.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:211</div></div>\n+<div class=\"ttc\" id=\"aa01275_html_a9a8d90c0aa530dda911b987d48db2f41\"><div class=\"ttname\"><a href=\"a01275.html#a9a8d90c0aa530dda911b987d48db2f41\">Dune::Functions::OverflowArray::front</a></div><div class=\"ttdeci\">const_reference front() const</div><div class=\"ttdoc\">Returns const reference to first element of OverflowArray.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:178</div></div>\n+<div class=\"ttc\" id=\"aa01275_html_aac47600e996341476adeda5a998a6c4d\"><div class=\"ttname\"><a href=\"a01275.html#aac47600e996341476adeda5a998a6c4d\">Dune::Functions::OverflowArray::clear</a></div><div class=\"ttdeci\">void clear()</div><div class=\"ttdoc\">Erases all elements.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:83</div></div>\n+<div class=\"ttc\" id=\"aa01275_html_aacc8b19785b09af92bb1e041609a7896\"><div class=\"ttname\"><a href=\"a01275.html#aacc8b19785b09af92bb1e041609a7896\">Dune::Functions::OverflowArray::end</a></div><div class=\"ttdeci\">iterator end()</div><div class=\"ttdoc\">Returns an iterator pointing to the end of the OverflowArray.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:140</div></div>\n+<div class=\"ttc\" id=\"aa01275_html_ab600c0c276d09c1adfa934f77ca7c712\"><div class=\"ttname\"><a href=\"a01275.html#ab600c0c276d09c1adfa934f77ca7c712\">Dune::Functions::OverflowArray::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:56</div></div>\n+<div class=\"ttc\" id=\"aa01275_html_acb3c0d310f92e484249c69697210dd3b\"><div class=\"ttname\"><a href=\"a01275.html#acb3c0d310f92e484249c69697210dd3b\">Dune::Functions::OverflowArray::resize</a></div><div class=\"ttdeci\">void resize(size_type n)</div><div class=\"ttdoc\">Specifies a new size for the OverflowArray.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:93</div></div>\n+<div class=\"ttc\" id=\"aa01275_html_ad6864fbd3a109a6b10b32af7e9c58b5b\"><div class=\"ttname\"><a href=\"a01275.html#ad6864fbd3a109a6b10b32af7e9c58b5b\">Dune::Functions::OverflowArray::pointer</a></div><div class=\"ttdeci\">value_type * pointer</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:54</div></div>\n+<div class=\"ttc\" id=\"aa01275_html_ad7feb14b245d1a17e13e690cf693aba7\"><div class=\"ttname\"><a href=\"a01275.html#ad7feb14b245d1a17e13e690cf693aba7\">Dune::Functions::OverflowArray::const_iterator</a></div><div class=\"ttdeci\">Dune::GenericIterator< const OverflowArray, const value_type > const_iterator</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:58</div></div>\n+<div class=\"ttc\" id=\"aa01275_html_adda8f20adc81d38258794dc1d88dead3\"><div class=\"ttname\"><a href=\"a01275.html#adda8f20adc81d38258794dc1d88dead3\">Dune::Functions::OverflowArray::back</a></div><div class=\"ttdeci\">const_reference back() const</div><div class=\"ttdoc\">Returns const reference to last element of OverflowArray.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:190</div></div>\n+<div class=\"ttc\" id=\"aa01275_html_aec5c016d84ff17d2c57dac741c1954b6\"><div class=\"ttname\"><a href=\"a01275.html#aec5c016d84ff17d2c57dac741c1954b6\">Dune::Functions::OverflowArray::OverflowArray</a></div><div class=\"ttdeci\">OverflowArray(const std::initializer_list< value_type > &l)</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:67</div></div>\n+<div class=\"ttc\" id=\"aa01275_html_aeedca403252095b9f7d7b1aafcfd95d8\"><div class=\"ttname\"><a href=\"a01275.html#aeedca403252095b9f7d7b1aafcfd95d8\">Dune::Functions::OverflowArray::back</a></div><div class=\"ttdeci\">reference back()</div><div class=\"ttdoc\">Returns reference to last element of OverflowArray.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:184</div></div>\n+<div class=\"ttc\" id=\"aa01275_html_af9483f104035eac50b90396d2ad4640c\"><div class=\"ttname\"><a href=\"a01275.html#af9483f104035eac50b90396d2ad4640c\">Dune::Functions::OverflowArray::push_front</a></div><div class=\"ttdeci\">void push_front(const value_type &t)</div><div class=\"ttdoc\">Inserts an element to the begin of the OverflowArray,.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:122</div></div>\n+<div class=\"ttc\" id=\"aa01275_html_afc310b029604b09c928a99c341f0ac52\"><div class=\"ttname\"><a href=\"a01275.html#afc310b029604b09c928a99c341f0ac52\">Dune::Functions::OverflowArray::front</a></div><div class=\"ttdeci\">reference front()</div><div class=\"ttdoc\">Returns reference to first element of OverflowArray.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:172</div></div>\n+<div class=\"ttc\" id=\"aa01275_html_aff8b6a5fa259da1688924f7bd6a3de0e\"><div class=\"ttname\"><a href=\"a01275.html#aff8b6a5fa259da1688924f7bd6a3de0e\">Dune::Functions::OverflowArray::operator[]</a></div><div class=\"ttdeci\">reference operator[](size_type i)</div><div class=\"ttdoc\">Returns reference to the i'th element.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:150</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,319 +5,312 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * common\n-reserveddeque.hh\n+overflowarray.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_COMMON_RESERVEDDEQUE_HH\n- 4#define DUNE_FUNCTIONS_COMMON_RESERVEDDEQUE_HH\n+ 3#ifndef DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH\n+ 4#define DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH\n 5\n- 10#include <algorithm>\n- 11#include <iostream>\n- 12#include <cstddef>\n- 13#include <initializer_list>\n+ 6#include <algorithm>\n+ 7#include <iostream>\n+ 8#include <cstddef>\n+ 9#include <array>\n+ 10#include <initializer_list>\n+ 11\n+ 12#include <dune/common/genericiterator.hh>\n+ 13\n 14\n- 15#include <dune/common/genericiterator.hh>\n- 16\n- 17#ifdef CHECK_RESERVEDDEQUE\n- 18#define CHECKSIZE(X) assert(X)\n- 19#else\n-20#define CHECKSIZE(X) {}\n- 21#endif\n- 22\n- 23namespace Dune {\n- 24namespace Functions {\n- 25\n- 43 template<class T, int n>\n-44 class ReservedDeque\n- 45 {\n- 46 public:\n+ 15\n+ 16namespace Dune::Functions {\n+ 17\n+ 18\n+ 42template<class BA, std::size_t maxSize = std::tuple_size_v<BA>>\n+43class OverflowArray :\n+ 44 public BA\n+ 45{\n+ 46 static constexpr std::size_t baseSize = std::tuple_size_v<BA>;\n 47\n-51 typedef T value_type;\n-53 typedef T* pointer;\n-55 typedef T& reference;\n-57 typedef const T& const_reference;\n-59 typedef size_t size_type;\n-61 typedef std::ptrdiff_t difference_type;\n-63 typedef Dune::GenericIterator<ReservedDeque, value_type> iterator;\n-65 typedef Dune::GenericIterator<const ReservedDeque, const value_type>\n-const_iterator;\n+ 48public:\n+49 using BaseArray = BA;\n+ 50\n+51 using value_type = typename BaseArray::value_type;\n+52 using reference = value_type&;\n+53 using const_reference = const value_type&;\n+54 using pointer = value_type*;\n+55 using difference_type = std::ptrdiff_t;\n+56 using size_type = std::size_t;\n+57 using iterator = Dune::GenericIterator<OverflowArray, value_type>;\n+58 using const_iterator = Dune::GenericIterator<const OverflowArray, const\n+value_type>;\n+ 59\n+ 60private:\n+ 61 using OverflowBuffer = std::array<value_type, maxSize-baseSize>;\n+ 62\n+ 63public:\n+ 64\n+65 OverflowArray() = default;\n 66\n-72 ReservedDeque() :\n- 73 size_(0),\n- 74 first_(0)\n- 75 {}\n- 76\n-77 ReservedDeque(std::initializer_list<T> const &l)\n- 78 {\n- 79 assert(l.size() <= n);// Actually, this is not needed any more!\n- 80 size_ = l.size();\n- 81 std::copy_n(l.begin(), size_, data_);\n- 82 }\n- 83\n-89 void clear()\n- 90 {\n- 91 first_ = 0;\n- 92 size_ = 0;\n- 93 }\n- 94\n-96 void resize(size_t s)\n- 97 {\n- 98 CHECKSIZE(s<=n);\n- 99 size_ = s;\n- 100 }\n- 101\n-103 void push_back(const T& t)\n- 104 {\n- 105 CHECKSIZE(size_<n);\n- 106 data_[size_++ % n] = t;\n+67 OverflowArray(const std::initializer_list<value_type>& l) {\n+ 68 assert(l.size() <= capacity());\n+ 69 size_ = l.size();\n+ 70 std::copy_n(l.begin(), size_, begin());\n+ 71 }\n+ 72\n+73 bool operator_==(const OverflowArray& other) const {\n+ 74 if (size() != other.size())\n+ 75 return false;\n+ 76 for (size_type i=0; i<size(); ++i)\n+ 77 if ((*this)[i] != other[i])\n+ 78 return false;\n+ 79 return true;\n+ 80 }\n+ 81\n+83 void clear() {\n+ 84 size_ = 0;\n+ 85 }\n+ 86\n+93 void resize(size_type n) {\n+ 94 assert(n <= capacity());\n+ 95 size_ = n;\n+ 96 }\n+ 97\n+104 void push_back(const value_type& t) {\n+ 105 assert(size() < capacity());\n+ 106 (*this)[size_++] = t;\n 107 }\n 108\n-110 void push_front(const T& t)\n- 111 {\n- 112 CHECKSIZE(size_<n);\n- 113 ++size_;\n- 114 first_ = (first_+(n-1)) % n;\n- 115 data_[first_] = t;\n- 116 }\n- 117\n-119 void pop_back()\n- 120 {\n- 121 if (! empty())\n- 122 size_--;\n- 123 }\n- 124\n-126 void pop_front()\n- 127 {\n- 128 if (! empty())\n- 129 {\n- 130 size_--;\n- 131 first_ = (++first_) % n;\n+110 void pop_back() {\n+ 111 assert(size() > 0);\n+ 112 if (! empty())\n+ 113 size_--;\n+ 114 }\n+ 115\n+122 void push_front(const value_type& t) {\n+ 123 assert(size() < capacity());\n+ 124 for (size_type i=0; i<size(); i++)\n+ 125 (*this)[i+1] = (*this)[i];\n+ 126 (*this)[0] = t;\n+ 127 }\n+ 128\n+130 iterator begin() {\n+ 131 return iterator(*this, 0);\n 132 }\n- 133 }\n- 134\n-136 iterator begin(){\n- 137 return iterator(*this, 0);\n- 138 }\n- 139\n-141 const_iterator begin() const {\n- 142 return const_iterator(*this, 0);\n- 143 }\n- 144\n-146 iterator end(){\n- 147 return iterator(*this, size_);\n- 148 }\n- 149\n-151 const_iterator end() const {\n- 152 return const_iterator(*this, size_);\n- 153 }\n- 154\n-156 reference operator[](size_type i)\n- 157 {\n- 158 CHECKSIZE(size_>i);\n- 159 return data_[(first_ + i) % n];\n- 160 }\n- 161\n-163 const_reference operator[](size_type i) const\n- 164 {\n- 165 CHECKSIZE(size_>i);\n- 166 return data_[(first_ + i) % n];\n- 167 }\n- 168\n-170 reference front()\n- 171 {\n- 172 CHECKSIZE(size_>0);\n- 173 return data_[first_];\n- 174 }\n- 175\n-177 const_reference front() const\n- 178 {\n- 179 CHECKSIZE(size_>0);\n- 180 return data_[first_];\n+ 133\n+135 const_iterator begin() const {\n+ 136 return const_iterator(*this, 0);\n+ 137 }\n+ 138\n+140 iterator end() {\n+ 141 return iterator(*this, size());\n+ 142 }\n+ 143\n+145 const_iterator end() const {\n+ 146 return const_iterator(*this, size());\n+ 147 }\n+ 148\n+150 reference operator[](size_type i) {\n+ 151 assert(i < size());\n+ 152 // If there's no padding between the base class and the overflow_ member,\n+ 153 // the compiler should be able to optimize this to\n+ 154 // return *(&BaseArray::operator[](0) + i);\n+ 155 if (i<baseSize)\n+ 156 return BaseArray::operator[](i);\n+ 157 return overflow_[i-baseSize];\n+ 158 }\n+ 159\n+161 const_reference operator[](size_type i) const {\n+ 162 assert(i < size());\n+ 163 // If there's no padding between the base class and the overflow_ member,\n+ 164 // the compiler should be able to optimize this to\n+ 165 // return *(&BaseArray::operator[](0) + i);\n+ 166 if (i<baseSize)\n+ 167 return BaseArray::operator[](i);\n+ 168 return overflow_[i-baseSize];\n+ 169 }\n+ 170\n+172 reference front() {\n+ 173 assert(size() > 0);\n+ 174 return (*this)[0];\n+ 175 }\n+ 176\n+178 const_reference front() const {\n+ 179 assert(size() > 0);\n+ 180 return (*this)[0];\n 181 }\n 182\n-184 reference back()\n- 185 {\n- 186 CHECKSIZE(size_>0);\n- 187 return data_[(first_ + size_-1) % n];\n- 188 }\n- 189\n-191 const_reference back() const\n- 192 {\n- 193 CHECKSIZE(size_>0);\n- 194 return data_[(first_ + size_-1) % n];\n- 195 }\n- 196\n-202 size_type size () const\n- 203 {\n- 204 return size_;\n- 205 }\n- 206\n-208 bool empty() const\n- 209 {\n- 210 return size_==0;\n- 211 }\n- 212\n-214 static constexpr size_type capacity()\n- 215 {\n- 216 return n;\n- 217 }\n- 218\n-220 static constexpr size_type max_size()\n- 221 {\n- 222 return n;\n- 223 }\n- 224\n-228 friend std::ostream& operator<<(std::ostream& s, const ReservedDeque& v)\n- 229 {\n- 230 for (size_t i=0; i<v.size(); i++)\n- 231 s << v[i] << \" \";\n- 232 return s;\n- 233 }\n- 234\n- 235 private:\n- 236 T data_[n];\n- 237 size_type first_;\n- 238 size_type size_;\n- 239 };\n- 240\n- 241} // end namespace Functions\n- 242} // end namespace Dune\n- 243\n- 244#undef CHECKSIZE\n- 245\n- 246#endif // DUNE_FUNCTIONS_COMMON_RESERVEDDEQUE_HH\n-CHECKSIZE\n-#define CHECKSIZE(X)\n-Definition: reserveddeque.hh:20\n-Dune\n-Definition: polynomial.hh:10\n-Dune::Functions::ReservedDeque\n-A double-ended queue (deque) class with statically reserved memory.\n-Definition: reserveddeque.hh:45\n-Dune::Functions::ReservedDeque::pop_front\n-void pop_front()\n-Erases the first element of the vector, O(1) time.\n-Definition: reserveddeque.hh:126\n-Dune::Functions::ReservedDeque::capacity\n+184 reference back() {\n+ 185 assert(size() > 0);\n+ 186 return (*this)[size()-1];\n+ 187 }\n+ 188\n+190 const_reference back() const {\n+ 191 assert(size() > 0);\n+ 192 return (*this)[size()-1];\n+ 193 }\n+ 194\n+196 size_type size () const {\n+ 197 return size_;\n+ 198 }\n+ 199\n+201 bool empty() const {\n+ 202 return size() == 0;\n+ 203 }\n+ 204\n+206 static constexpr size_type capacity() {\n+ 207 return maxSize;\n+ 208 }\n+ 209\n+211 static constexpr size_type max_size() {\n+ 212 return maxSize;\n+ 213 }\n+ 214\n+216 inline friend std::size_t hash_value(const OverflowArray& v) noexcept {\n+ 217 return hash_range(v.begin(), v.end());\n+ 218 }\n+ 219\n+221 friend std::ostream& operator<<(std::ostream& s, const OverflowArray& c) {\n+ 222 for (const auto& ci : c)\n+ 223 s << ci << \" \";\n+ 224 return s;\n+ 225 }\n+ 226\n+ 227private:\n+ 228 OverflowBuffer overflow_;\n+ 229 size_type size_ = 0;\n+ 230};\n+ 231\n+ 232\n+ 233\n+ 234} // namespace Dune::Functions\n+ 235\n+ 236\n+ 237\n+ 238#endif // DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH\n+Dune::Functions\n+Definition: polynomial.hh:11\n+Dune::Functions::OverflowArray\n+A dynamically sized array-like class with overflow.\n+Definition: overflowarray.hh:45\n+Dune::Functions::OverflowArray::const_reference\n+const value_type & const_reference\n+Definition: overflowarray.hh:53\n+Dune::Functions::OverflowArray::reference\n+value_type & reference\n+Definition: overflowarray.hh:52\n+Dune::Functions::OverflowArray::end\n+const_iterator end() const\n+Returns a const_iterator pointing to the end of the OverflowArray.\n+Definition: overflowarray.hh:145\n+Dune::Functions::OverflowArray::operator==\n+bool operator==(const OverflowArray &other) const\n+Definition: overflowarray.hh:73\n+Dune::Functions::OverflowArray::hash_value\n+friend std::size_t hash_value(const OverflowArray &v) noexcept\n+Compute hash value.\n+Definition: overflowarray.hh:216\n+Dune::Functions::OverflowArray::push_back\n+void push_back(const value_type &t)\n+Appends an element to the end of the OverflowArray,.\n+Definition: overflowarray.hh:104\n+Dune::Functions::OverflowArray::operator<<\n+friend std::ostream & operator<<(std::ostream &s, const OverflowArray &c)\n+Write container to an output stream.\n+Definition: overflowarray.hh:221\n+Dune::Functions::OverflowArray::begin\n+iterator begin()\n+Returns a iterator pointing to the beginning of the OverflowArray.\n+Definition: overflowarray.hh:130\n+Dune::Functions::OverflowArray::empty\n+bool empty() const\n+Returns true if OverflowArray has no elements.\n+Definition: overflowarray.hh:201\n+Dune::Functions::OverflowArray::size\n+size_type size() const\n+Returns number of elements in the OverflowArray.\n+Definition: overflowarray.hh:196\n+Dune::Functions::OverflowArray::value_type\n+typename BaseArray::value_type value_type\n+Definition: overflowarray.hh:51\n+Dune::Functions::OverflowArray::pop_back\n+void pop_back()\n+Erases the last element of the OverflowArray, O(1) time.\n+Definition: overflowarray.hh:110\n+Dune::Functions::OverflowArray::iterator\n+Dune::GenericIterator< OverflowArray, value_type > iterator\n+Definition: overflowarray.hh:57\n+Dune::Functions::OverflowArray::begin\n+const_iterator begin() const\n+Returns a const_iterator pointing to the beginning of the OverflowArray.\n+Definition: overflowarray.hh:135\n+Dune::Functions::OverflowArray::difference_type\n+std::ptrdiff_t difference_type\n+Definition: overflowarray.hh:55\n+Dune::Functions::OverflowArray::OverflowArray\n+OverflowArray()=default\n+Dune::Functions::OverflowArray::BaseArray\n+BA BaseArray\n+Definition: overflowarray.hh:49\n+Dune::Functions::OverflowArray::capacity\n static constexpr size_type capacity()\n-Returns current capacity (allocated memory) of the vector.\n-Definition: reserveddeque.hh:214\n-Dune::Functions::ReservedDeque::clear\n+Returns the capacity of the OverflowArray.\n+Definition: overflowarray.hh:206\n+Dune::Functions::OverflowArray::max_size\n+static constexpr size_type max_size()\n+Returns the maximum length of the OverflowArray.\n+Definition: overflowarray.hh:211\n+Dune::Functions::OverflowArray::front\n+const_reference front() const\n+Returns const reference to first element of OverflowArray.\n+Definition: overflowarray.hh:178\n+Dune::Functions::OverflowArray::clear\n void clear()\n Erases all elements.\n-Definition: reserveddeque.hh:89\n-Dune::Functions::ReservedDeque::iterator\n-Dune::GenericIterator< ReservedDeque, value_type > iterator\n-Iterator used to iterate through a vector.\n-Definition: reserveddeque.hh:63\n-Dune::Functions::ReservedDeque::value_type\n-T value_type\n-The type of object, T, stored in the vector.\n-Definition: reserveddeque.hh:51\n-Dune::Functions::ReservedDeque::ReservedDeque\n-ReservedDeque()\n-Constructor.\n-Definition: reserveddeque.hh:72\n-Dune::Functions::ReservedDeque::empty\n-bool empty() const\n-Returns true if vector has no elements.\n-Definition: reserveddeque.hh:208\n-Dune::Functions::ReservedDeque::back\n+Definition: overflowarray.hh:83\n+Dune::Functions::OverflowArray::end\n+iterator end()\n+Returns an iterator pointing to the end of the OverflowArray.\n+Definition: overflowarray.hh:140\n+Dune::Functions::OverflowArray::size_type\n+std::size_t size_type\n+Definition: overflowarray.hh:56\n+Dune::Functions::OverflowArray::resize\n+void resize(size_type n)\n+Specifies a new size for the OverflowArray.\n+Definition: overflowarray.hh:93\n+Dune::Functions::OverflowArray::pointer\n+value_type * pointer\n+Definition: overflowarray.hh:54\n+Dune::Functions::OverflowArray::const_iterator\n+Dune::GenericIterator< const OverflowArray, const value_type > const_iterator\n+Definition: overflowarray.hh:58\n+Dune::Functions::OverflowArray::back\n const_reference back() const\n-Returns const reference to last element of vector.\n-Definition: reserveddeque.hh:191\n-Dune::Functions::ReservedDeque::operator<<\n-friend std::ostream & operator<<(std::ostream &s, const ReservedDeque &v)\n-Send ReservedDeque to an output stream.\n-Definition: reserveddeque.hh:228\n-Dune::Functions::ReservedDeque::push_front\n-void push_front(const T &t)\n-Prepends an element to the begin of a deque if size<capacity, O(1) time.\n-Definition: reserveddeque.hh:110\n-Dune::Functions::ReservedDeque::operator[]\n+Returns const reference to last element of OverflowArray.\n+Definition: overflowarray.hh:190\n+Dune::Functions::OverflowArray::OverflowArray\n+OverflowArray(const std::initializer_list< value_type > &l)\n+Definition: overflowarray.hh:67\n+Dune::Functions::OverflowArray::back\n+reference back()\n+Returns reference to last element of OverflowArray.\n+Definition: overflowarray.hh:184\n+Dune::Functions::OverflowArray::push_front\n+void push_front(const value_type &t)\n+Inserts an element to the begin of the OverflowArray,.\n+Definition: overflowarray.hh:122\n+Dune::Functions::OverflowArray::front\n+reference front()\n+Returns reference to first element of OverflowArray.\n+Definition: overflowarray.hh:172\n+Dune::Functions::OverflowArray::operator[]\n reference operator[](size_type i)\n Returns reference to the i'th element.\n-Definition: reserveddeque.hh:156\n-Dune::Functions::ReservedDeque::front\n-reference front()\n-Returns reference to first element of vector.\n-Definition: reserveddeque.hh:170\n-Dune::Functions::ReservedDeque::pointer\n-T * pointer\n-Pointer to T.\n-Definition: reserveddeque.hh:53\n-Dune::Functions::ReservedDeque::front\n-const_reference front() const\n-Returns const reference to first element of vector.\n-Definition: reserveddeque.hh:177\n-Dune::Functions::ReservedDeque::end\n-iterator end()\n-Returns an iterator pointing to the end of the vector.\n-Definition: reserveddeque.hh:146\n-Dune::Functions::ReservedDeque::back\n-reference back()\n-Returns reference to last element of vector.\n-Definition: reserveddeque.hh:184\n-Dune::Functions::ReservedDeque::pop_back\n-void pop_back()\n-Erases the last element of the vector, O(1) time.\n-Definition: reserveddeque.hh:119\n-Dune::Functions::ReservedDeque::const_reference\n-const T & const_reference\n-Const reference to T.\n-Definition: reserveddeque.hh:57\n-Dune::Functions::ReservedDeque::max_size\n-static constexpr size_type max_size()\n-Returns the maximum length of the vector.\n-Definition: reserveddeque.hh:220\n-Dune::Functions::ReservedDeque::difference_type\n-std::ptrdiff_t difference_type\n-A signed integral type.\n-Definition: reserveddeque.hh:61\n-Dune::Functions::ReservedDeque::reference\n-T & reference\n-Reference to T.\n-Definition: reserveddeque.hh:55\n-Dune::Functions::ReservedDeque::const_iterator\n-Dune::GenericIterator< const ReservedDeque, const value_type > const_iterator\n-Const iterator used to iterate through a vector.\n-Definition: reserveddeque.hh:65\n-Dune::Functions::ReservedDeque::size\n-size_type size() const\n-Returns number of elements in the vector.\n-Definition: reserveddeque.hh:202\n-Dune::Functions::ReservedDeque::end\n-const_iterator end() const\n-Returns a const_iterator pointing to the end of the vector.\n-Definition: reserveddeque.hh:151\n-Dune::Functions::ReservedDeque::resize\n-void resize(size_t s)\n-Specifies a new size for the vector.\n-Definition: reserveddeque.hh:96\n-Dune::Functions::ReservedDeque::begin\n-iterator begin()\n-Returns a iterator pointing to the beginning of the vector.\n-Definition: reserveddeque.hh:136\n-Dune::Functions::ReservedDeque::begin\n-const_iterator begin() const\n-Returns a const_iterator pointing to the beginning of the vector.\n-Definition: reserveddeque.hh:141\n-Dune::Functions::ReservedDeque::ReservedDeque\n-ReservedDeque(std::initializer_list< T > const &l)\n-Definition: reserveddeque.hh:77\n-Dune::Functions::ReservedDeque::size_type\n-size_t size_type\n-An unsigned integral type.\n-Definition: reserveddeque.hh:59\n-Dune::Functions::ReservedDeque::push_back\n-void push_back(const T &t)\n-Appends an element to the end of a vector, up to the maximum size n, O(1) time.\n-Definition: reserveddeque.hh:103\n+Definition: overflowarray.hh:150\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00062.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00062.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: typeerasure.hh File Reference</title>\n+<title>dune-functions: indexaccess.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -63,39 +63,61 @@\n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n-<a href=\"#nested-classes\">Classes</a> |\n-<a href=\"#namespaces\">Namespaces</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">typeerasure.hh File Reference</div></div>\n+<a href=\"#namespaces\">Namespaces</a> |\n+<a href=\"#func-members\">Functions</a> </div>\n+ <div class=\"headertitle\"><div class=\"title\">indexaccess.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <typeinfo></code><br />\n-<code>#include <dune/common/typeutilities.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00092_source.html\">dune/functions/common/type_traits.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00095_source.html\">dune/functions/common/interfaces.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00089_source.html\">dune/functions/common/polymorphicsmallobject.hh</a>></code><br />\n+<div class=\"textblock\"><code>#include <utility></code><br />\n+<code>#include <type_traits></code><br />\n+<code>#include <dune/common/typetraits.hh></code><br />\n+<code>#include <dune/common/concept.hh></code><br />\n+<code>#include <dune/common/hybridutilities.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00041_source.html\">dune/functions/common/utility.hh</a>></code><br />\n </div>\n <p><a href=\"a00062_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n-Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01351.html\">Dune::Functions::TypeErasureBase< Interface, Implementation, bufferSize ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Base class for type-erased interface wrapper. <a href=\"a01351.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-</table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+</table><table class=\"memberdecls\">\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n+Functions</h2></td></tr>\n+<tr class=\"memitem:ga2226fe3a86eb176df27c9801a98a10ae\"><td class=\"memTemplParams\" colspan=\"2\">template<class C , class I , class F , typename std::enable_if< Dune::models< Imp::Concept::HasDynamicIndexAccess< I >, C >(), int >::type = 0> </td></tr>\n+<tr class=\"memitem:ga2226fe3a86eb176df27c9801a98a10ae\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00215.html#ga2226fe3a86eb176df27c9801a98a10ae\">Dune::Functions::hybridIndexAccess</a> (C &&c, const I &i, F &&f) -> decltype(f(c[i]))</td></tr>\n+<tr class=\"memdesc:ga2226fe3a86eb176df27c9801a98a10ae\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Provide operator[] index-access for containers. <a href=\"a00215.html#ga2226fe3a86eb176df27c9801a98a10ae\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga2226fe3a86eb176df27c9801a98a10ae\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga2226fe3a86eb176df27c9801a98a10ae\"><td class=\"memTemplParams\" colspan=\"2\">template<class C , class I , class F , typename std::enable_if< not Dune::models< Imp::Concept::HasDynamicIndexAccess< I >, C >(), int >::type = 0> </td></tr>\n+<tr class=\"memitem:ga2226fe3a86eb176df27c9801a98a10ae\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">decltype(auto) </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#ga2226fe3a86eb176df27c9801a98a10ae\">Dune::Functions::hybridIndexAccess</a> (C &&c, const I &i, F &&f)</td></tr>\n+<tr class=\"memdesc:ga2226fe3a86eb176df27c9801a98a10ae\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Provide operator[] index-access for containers. <a href=\"a00219.html#ga2226fe3a86eb176df27c9801a98a10ae\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga2226fe3a86eb176df27c9801a98a10ae\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:gabd5106817636cc5542dc4e9a1817551b\"><td class=\"memTemplParams\" colspan=\"2\">template<class Result , class C , class MultiIndex > </td></tr>\n+<tr class=\"memitem:gabd5106817636cc5542dc4e9a1817551b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Result </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00215.html#gabd5106817636cc5542dc4e9a1817551b\">Dune::Functions::hybridMultiIndexAccess</a> (C &&c, const MultiIndex &index)</td></tr>\n+<tr class=\"memdesc:gabd5106817636cc5542dc4e9a1817551b\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Provide multi-index access by chaining operator[]. <a href=\"a00215.html#gabd5106817636cc5542dc4e9a1817551b\">More...</a><br /></td></tr>\n+<tr class=\"separator:gabd5106817636cc5542dc4e9a1817551b\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga9aaec884c080483fea267d1098f81590\"><td class=\"memTemplParams\" colspan=\"2\">template<class C , class MultiIndex , class IsFinal > </td></tr>\n+<tr class=\"memitem:ga9aaec884c080483fea267d1098f81590\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">constexpr decltype(auto) </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00215.html#ga9aaec884c080483fea267d1098f81590\">Dune::Functions::resolveDynamicMultiIndex</a> (C &&c, const MultiIndex &multiIndex, const IsFinal &isFinal)</td></tr>\n+<tr class=\"memdesc:ga9aaec884c080483fea267d1098f81590\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Provide multi-index access by chaining operator[]. <a href=\"a00215.html#ga9aaec884c080483fea267d1098f81590\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga9aaec884c080483fea267d1098f81590\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga89fbdd009241b14e86b4fff7ba208a04\"><td class=\"memTemplParams\" colspan=\"2\">template<class C , class MultiIndex > </td></tr>\n+<tr class=\"memitem:ga89fbdd009241b14e86b4fff7ba208a04\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">constexpr decltype(auto) </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00215.html#ga89fbdd009241b14e86b4fff7ba208a04\">Dune::Functions::resolveDynamicMultiIndex</a> (C &&c, const MultiIndex &multiIndex)</td></tr>\n+<tr class=\"memdesc:ga89fbdd009241b14e86b4fff7ba208a04\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Provide multi-index access by chaining operator[]. <a href=\"a00215.html#ga89fbdd009241b14e86b4fff7ba208a04\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga89fbdd009241b14e86b4fff7ba208a04\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga4cc6af2842348271c242c048e0411637\"><td class=\"memTemplParams\" colspan=\"2\">template<class C , class MultiIndex > </td></tr>\n+<tr class=\"memitem:ga4cc6af2842348271c242c048e0411637\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">constexpr decltype(auto) </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00215.html#ga4cc6af2842348271c242c048e0411637\">Dune::Functions::resolveStaticMultiIndex</a> (C &&c, const MultiIndex &multiIndex)</td></tr>\n+<tr class=\"memdesc:ga4cc6af2842348271c242c048e0411637\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Provide multi-index access by chaining operator[]. <a href=\"a00215.html#ga4cc6af2842348271c242c048e0411637\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga4cc6af2842348271c242c048e0411637\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,28 +5,63 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * common\n-Classes | Namespaces\n-typeerasure.hh File Reference\n-#include <typeinfo>\n-#include <dune/common/typeutilities.hh>\n-#include <dune/functions/common/type_traits.hh>\n-#include <dune/functions/common/interfaces.hh>\n-#include <dune/functions/common/polymorphicsmallobject.hh>\n+Namespaces | Functions\n+indexaccess.hh File Reference\n+#include <utility>\n+#include <type_traits>\n+#include <dune/common/typetraits.hh>\n+#include <dune/common/concept.hh>\n+#include <dune/common/hybridutilities.hh>\n+#include <dune/functions/common/utility.hh>\n Go_to_the_source_code_of_this_file.\n- Classes\n-class \u00a0Dune::Functions::TypeErasureBase<_Interface,_Implementation,_bufferSize\n- >\n-\u00a0 Base class for type-erased interface wrapper. More...\n-\u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n+ Functions\n+template<class C , class I , class F , typename std::enable_if< Dune::models<\n+Imp::Concept::HasDynamicIndexAccess< I >, C >(), int >::type = 0>\n+ auto\u00a0Dune::Functions::hybridIndexAccess (C &&c, const I\n+ &i, F &&f) -> decltype(f(c[i]))\n+\u00a0 Provide operator[] index-access for containers.\n+ More...\n+\u00a0\n+template<class C , class I , class F , typename std::enable_if< not Dune::\n+models< Imp::Concept::HasDynamicIndexAccess< I >, C >(), int >::type = 0>\n+ decltype(auto)\u00a0Dune::Functions::hybridIndexAccess (C &&c, const I\n+ &i, F &&f)\n+\u00a0 Provide operator[] index-access for containers.\n+ More...\n+\u00a0\n+template<class Result , class C , class MultiIndex >\n+ Result\u00a0Dune::Functions::hybridMultiIndexAccess (C &&c, const\n+ MultiIndex &index)\n+\u00a0 Provide multi-index access by chaining operator[].\n+ More...\n+\u00a0\n+template<class C , class MultiIndex , class IsFinal >\n+constexpr decltype(auto)\u00a0Dune::Functions::resolveDynamicMultiIndex (C &&c,\n+ const MultiIndex &multiIndex, const IsFinal &isFinal)\n+\u00a0 Provide multi-index access by chaining operator[].\n+ More...\n+\u00a0\n+template<class C , class MultiIndex >\n+constexpr decltype(auto)\u00a0Dune::Functions::resolveDynamicMultiIndex (C &&c,\n+ const MultiIndex &multiIndex)\n+\u00a0 Provide multi-index access by chaining operator[].\n+ More...\n+\u00a0\n+template<class C , class MultiIndex >\n+constexpr decltype(auto)\u00a0Dune::Functions::resolveStaticMultiIndex (C &&c,\n+ const MultiIndex &multiIndex)\n+\u00a0 Provide multi-index access by chaining operator[].\n+ More...\n+\u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00062_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00062_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: typeerasure.hh Source File</title>\n+<title>dune-functions: indexaccess.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,159 +62,313 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">typeerasure.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">indexaccess.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00062.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <typeinfo></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span> </div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <dune/common/typeutilities.hh></span></div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span> </div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <utility></span></div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <type_traits></span></div>\n <div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00092.html\">dune/functions/common/type_traits.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00095.html\">dune/functions/common/interfaces.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00089.html\">dune/functions/common/polymorphicsmallobject.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/typetraits.hh></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/common/concept.hh></span></div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <dune/common/hybridutilities.hh></span></div>\n <div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"keyword\">namespace </span>Imp {</div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00041.html\">dune/functions/common/utility.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n <div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Interface></div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span><span class=\"keyword\">class </span>TypeErasureWrapperInterface :</div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> <span class=\"keyword\">public</span> Interface,</div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> <span class=\"keyword\">public</span> PolymorphicType<TypeErasureWrapperInterface<Interface>></div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span>{</div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> <span class=\"keyword\">virtual</span> <span class=\"keyword\">const</span> std::type_info& target_type() <span class=\"keyword\">const</span> = 0;</div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span>};</div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> </div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span> </div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> </div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"keyword\">namespace </span>Imp {</div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span> </div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"keyword\">namespace </span>Concept {</div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> </div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> <span class=\"keywordtype\">size_t</span>ype></div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span><span class=\"keyword\">struct </span>HasDynamicIndexAccess</div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span>{</div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C></div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> <span class=\"keyword\">auto</span> require(C&& c) -> <span class=\"keyword\">decltype</span>(</div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> c[std::declval<size_type>()]</div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> );</div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span>};</div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> </div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span><span class=\"keyword\">struct </span>HasStaticIndexAccess</div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span>{</div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C></div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> <span class=\"keyword\">auto</span> require(C&& c) -> <span class=\"keyword\">decltype</span>(</div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> c[Dune::Indices::_0]</div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> );</div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span>};</div>\n <div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> </div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> </div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Interface, <span class=\"keyword\">class</span> T></div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span><span class=\"keyword\">class </span>TypeErasureWrapperBase :</div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> <span class=\"keyword\">public</span> TypeErasureWrapperInterface<Interface></div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span>{</div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> TT, disableCopyMove<TypeErasureWrapperBase, TT> = 0></div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> TypeErasureWrapperBase(TT&& t) :</div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> wrapped_(std::forward<TT>(t))</div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> {}</div>\n-<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> </div>\n-<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> T& get()</div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> {</div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> <span class=\"keywordflow\">return</span> wrapped_;</div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> }</div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> </div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> <span class=\"keyword\">const</span> T& get()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> <span class=\"keywordflow\">return</span> wrapped_;</div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> }</div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> </div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span><span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> <span class=\"keyword\">using </span>Wrapped = T;</div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> Wrapped wrapped_;</div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span>};</div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> </div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> </div>\n-<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> </div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Interface, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>Implementation, <span class=\"keyword\">class </span>T></div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span><span class=\"keyword\">class </span>TypeErasureWrapperImplementation :</div>\n-<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> <span class=\"keyword\">public</span> Implementation<TypeErasureWrapperBase<Interface, T> ></div>\n-<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span>{</div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> </div>\n-<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> TT, disableCopyMove<TypeErasureWrapperImplementation, T> = 0></div>\n-<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> TypeErasureWrapperImplementation(TT&& t) :</div>\n-<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> Implementation<TypeErasureWrapperBase<Interface, T> >(std::forward<TT>(t))</div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> {}</div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> </div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> <span class=\"keyword\">virtual</span> TypeErasureWrapperImplementation* clone()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> <span class=\"keywordflow\">return</span> <span class=\"keyword\">new</span> TypeErasureWrapperImplementation(*<span class=\"keyword\">this</span>);</div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> }</div>\n-<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> </div>\n-<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> <span class=\"keyword\">virtual</span> TypeErasureWrapperImplementation* clone(<span class=\"keywordtype\">void</span>* buffer)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> <span class=\"keywordflow\">return</span> <span class=\"keyword\">new</span> (buffer) TypeErasureWrapperImplementation(*<span class=\"keyword\">this</span>);</div>\n-<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> }</div>\n-<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> </div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> <span class=\"keyword\">virtual</span> TypeErasureWrapperImplementation* move(<span class=\"keywordtype\">void</span>* buffer)</div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> {</div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> <span class=\"keywordflow\">return</span> <span class=\"keyword\">new</span> (buffer) TypeErasureWrapperImplementation(std::move(*<span class=\"keyword\">this</span>));</div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> }</div>\n-<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> </div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> <span class=\"keyword\">virtual</span> <span class=\"keyword\">const</span> std::type_info& target_type()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> <span class=\"keywordflow\">return</span> <span class=\"keyword\">typeid</span>(T);</div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> }</div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span>};</div>\n-<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> </div>\n-<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span>} <span class=\"comment\">// namespace Dune::Functions::Imp</span></div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span>} <span class=\"comment\">// namespace Concept</span></div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> </div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span>} <span class=\"comment\">// namespace Imp</span></div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> </div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> </div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>C, <span class=\"keyword\">class </span>I, <span class=\"keyword\">class </span>F,</div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> <span class=\"keyword\">typename</span> std::enable_if< Dune::models<Imp::Concept::HasDynamicIndexAccess<I>, C>(), <span class=\"keywordtype\">int</span>>::type = 0></div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00215.html#ga2226fe3a86eb176df27c9801a98a10ae\"> 63</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00215.html#ga2226fe3a86eb176df27c9801a98a10ae\">hybridIndexAccess</a>(C&& c, <span class=\"keyword\">const</span> I& i, F&& f)</div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> -> <span class=\"keyword\">decltype</span>(f(c[i]))</div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span>{</div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> <span class=\"keywordflow\">return</span> f(c[i]);</div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span>}</div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> </div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>C, <span class=\"keyword\">class </span>I, <span class=\"keyword\">class </span>F,</div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> <span class=\"keyword\">typename</span> std::enable_if< not Dune::models<Imp::Concept::HasDynamicIndexAccess<I>, C>(), <span class=\"keywordtype\">int</span>>::type = 0></div>\n+<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#ga2226fe3a86eb176df27c9801a98a10ae\"> 88</a></span><span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <a class=\"code hl_function\" href=\"a00215.html#ga2226fe3a86eb176df27c9801a98a10ae\">hybridIndexAccess</a>(C&& c, <span class=\"keyword\">const</span> I& i, F&& f)</div>\n+<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span>{</div>\n+<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> <span class=\"keyword\">using </span>Size = <span class=\"keyword\">decltype</span>(Hybrid::size(c));</div>\n+<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> <span class=\"keywordflow\">return</span> Hybrid::switchCases(std::make_index_sequence<Size::value>(), i,</div>\n+<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> [&](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& ii) -> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>){</div>\n+<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> <span class=\"keywordflow\">return</span> f(c[ii]);</div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> }, [&]() -> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>){</div>\n+<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> <span class=\"keywordflow\">return</span> f(c[Dune::Indices::_0]);</div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> });</div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span>}</div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> </div>\n+<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> </div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span><span class=\"keyword\">namespace </span>Imp {</div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> </div>\n+<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Index, std::<span class=\"keywordtype\">size_t</span> offset=1></div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> <span class=\"keyword\">class </span>ShiftedDynamicMultiIndex</div>\n+<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> {</div>\n+<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> <span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> ShiftedDynamicMultiIndex(<span class=\"keyword\">const</span> Index& index) :</div>\n+<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> index_(index)</div>\n+<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> {}</div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> </div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> std::size_t operator[](std::size_t position)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> <span class=\"keywordflow\">if</span> (position<size())</div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> <span class=\"keywordflow\">return</span> index_[position+offset];</div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> <span class=\"keywordflow\">else</span></div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> <span class=\"keywordflow\">return</span> 0;</div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> }</div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> </div>\n+<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> ShiftedDynamicMultiIndex<Index, offset+1> pop()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> <span class=\"keywordflow\">return</span> {index_};</div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> }</div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> </div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> std::size_t size()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> <span class=\"keywordflow\">if</span> (offset < index_.size())</div>\n+<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> <span class=\"keywordflow\">return</span> index_.size() - offset;</div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> <span class=\"keywordflow\">else</span></div>\n+<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> <span class=\"keywordflow\">return</span> 0;</div>\n+<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> }</div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> </div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> <span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> <span class=\"keyword\">const</span> Index& index_;</div>\n+<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> };</div>\n <div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> </div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> </div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> </div>\n-<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Interface, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>Implementation, <span class=\"keywordtype\">size_t</span> bufferSize = 56></div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01351.html\"> 164</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01351.html\">TypeErasureBase</a></div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span>{</div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> </div>\n-<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T, disableCopyMove<TypeErasureBase, T> = 0 ></div>\n-<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01351.html#a2ccacb87d5aefd102388090c1a090cf8\"> 170</a></span> <a class=\"code hl_function\" href=\"a01351.html#a2ccacb87d5aefd102388090c1a090cf8\">TypeErasureBase</a>(T&& t) :</div>\n-<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> <a class=\"code hl_variable\" href=\"a01351.html#a63da1c558608230428c5d3110c99fe68\">wrapped_</a>(Imp::TypeErasureWrapperImplementation<Interface, Implementation, typename std::decay<T>::type>(std::forward<T>(t)))</div>\n-<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> {}</div>\n-<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> </div>\n-<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01351.html#a6927b29215757f0c602205cc733b7b49\"> 175</a></span> <a class=\"code hl_function\" href=\"a01351.html#a6927b29215757f0c602205cc733b7b49\">TypeErasureBase</a>() = <span class=\"keywordflow\">default</span>;</div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Index, std::<span class=\"keywordtype\">size_t</span> offset=1></div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> <span class=\"keyword\">class </span>ShiftedStaticMultiIndex</div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> {</div>\n+<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> <span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> ShiftedStaticMultiIndex(<span class=\"keyword\">const</span> Index& index) :</div>\n+<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> index_(index)</div>\n+<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> {}</div>\n+<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> </div>\n+<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> <span class=\"keyword\">template</span><std::<span class=\"keywordtype\">size_t</span> i></div>\n+<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> <span class=\"keyword\">auto</span> operator[](Dune::index_constant<i>)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> (i<size()) {</div>\n+<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> <span class=\"keywordflow\">return</span> index_[Dune::index_constant<i+offset>{}];</div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> } <span class=\"keywordflow\">else</span> {</div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> <span class=\"keywordflow\">return</span> Dune::index_constant<0>{};</div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> }</div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> }</div>\n+<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> </div>\n+<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> ShiftedStaticMultiIndex<Index, offset+1> pop()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> <span class=\"keywordflow\">return</span> {index_};</div>\n+<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> }</div>\n <div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> </div>\n-<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01351.html#a83e602e8260b48b89271c6814273be4f\"> 178</a></span> Interface& <a class=\"code hl_function\" href=\"a01351.html#a83e602e8260b48b89271c6814273be4f\">asInterface</a>()</div>\n-<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> {</div>\n-<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01351.html#a63da1c558608230428c5d3110c99fe68\">wrapped_</a>.get();</div>\n-<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> }</div>\n-<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> </div>\n-<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01351.html#ac134ea2f9ddb8f43f75d8a245920ee1f\"> 184</a></span> <span class=\"keyword\">const</span> Interface& <a class=\"code hl_function\" href=\"a01351.html#ac134ea2f9ddb8f43f75d8a245920ee1f\">asInterface</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01351.html#a63da1c558608230428c5d3110c99fe68\">wrapped_</a>.get();</div>\n-<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> }</div>\n-<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> </div>\n-<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01351.html#a28c29a93a2a593b5e44d71922457d1d5\"> 190</a></span> <span class=\"keyword\">const</span> std::type_info& <a class=\"code hl_function\" href=\"a01351.html#a28c29a93a2a593b5e44d71922457d1d5\">target_type</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01351.html#a63da1c558608230428c5d3110c99fe68\">wrapped_</a>.get().target_type();</div>\n-<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> }</div>\n-<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> </div>\n-<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span><span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01351.html#a63da1c558608230428c5d3110c99fe68\"> 196</a></span> <a class=\"code hl_class\" href=\"a01279.html\">PolymorphicSmallObject<Imp::TypeErasureWrapperInterface<Interface></a>, bufferSize > <a class=\"code hl_variable\" href=\"a01351.html#a63da1c558608230428c5d3110c99fe68\">wrapped_</a>;</div>\n-<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span>};</div>\n-<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> </div>\n-<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> </div>\n-<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span>}} <span class=\"comment\">// namespace Dune::Functions</span></div>\n-<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> </div>\n-<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> </div>\n-<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> </div>\n-<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH</span></div>\n-<div class=\"ttc\" id=\"aa00089_html\"><div class=\"ttname\"><a href=\"a00089.html\">polymorphicsmallobject.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00092_html\"><div class=\"ttname\"><a href=\"a00092.html\">type_traits.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00095_html\"><div class=\"ttname\"><a href=\"a00095.html\">interfaces.hh</a></div></div>\n+<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> std::size_t size()</div>\n+<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> {</div>\n+<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> <span class=\"keyword\">auto</span> fullSize = <span class=\"keyword\">decltype</span>(Hybrid::size(std::declval<Index>()))::value;</div>\n+<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> <span class=\"keywordflow\">if</span> (offset < fullSize)</div>\n+<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> <span class=\"keywordflow\">return</span> fullSize - offset;</div>\n+<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> <span class=\"keywordflow\">else</span></div>\n+<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span> <span class=\"keywordflow\">return</span> 0;</div>\n+<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span> }</div>\n+<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> </div>\n+<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> <span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> <span class=\"keyword\">const</span> Index& index_;</div>\n+<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> };</div>\n+<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> </div>\n+<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> <span class=\"keyword\">template</span><std::<span class=\"keywordtype\">size_t</span> offset, <span class=\"keyword\">class</span> Index></div>\n+<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> ShiftedDynamicMultiIndex<Index, offset> shiftedDynamicMultiIndex(<span class=\"keyword\">const</span> Index& index)</div>\n+<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> {</div>\n+<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> <span class=\"keywordflow\">return</span> {index};</div>\n+<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> }</div>\n+<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> </div>\n+<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> <span class=\"keyword\">template</span><std::<span class=\"keywordtype\">size_t</span> offset, <span class=\"keyword\">class</span> Index></div>\n+<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> ShiftedStaticMultiIndex<Index, offset> shiftedStaticMultiIndex(<span class=\"keyword\">const</span> Index& index)</div>\n+<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> {</div>\n+<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> <span class=\"keywordflow\">return</span> {index};</div>\n+<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span> }</div>\n+<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> </div>\n+<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span>} <span class=\"comment\">// namespace Imp</span></div>\n+<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span> </div>\n+<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> </div>\n+<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> </div>\n+<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> </div>\n+<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"> 212</span><span class=\"keyword\">namespace </span>Imp {</div>\n+<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span> </div>\n+<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Result, <span class=\"keyword\">class</span> Index></div>\n+<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span><span class=\"keyword\">struct </span>MultiIndexResolver</div>\n+<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span>{</div>\n+<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> MultiIndexResolver(<span class=\"keyword\">const</span> Index& index) :</div>\n+<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> index_(index)</div>\n+<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> {}</div>\n+<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span> </div>\n+<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>C,</div>\n+<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span> <span class=\"keyword\">typename</span> std::enable_if<not std::is_convertible<C&, Result>::value, <span class=\"keywordtype\">int</span>>::type = 0></div>\n+<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> Result operator()(C&& c)</div>\n+<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> {</div>\n+<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span> <span class=\"keyword\">auto</span>&& subIndex = Imp::shiftedDynamicMultiIndex<1>(index_);</div>\n+<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> <span class=\"keyword\">auto</span>&& subIndexResolver = MultiIndexResolver<Result, decltype(subIndex)>(subIndex);</div>\n+<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> <span class=\"keywordflow\">return</span> (Result)(<a class=\"code hl_function\" href=\"a00215.html#ga2226fe3a86eb176df27c9801a98a10ae\">hybridIndexAccess</a>(c, index_[Dune::Indices::_0], subIndexResolver));</div>\n+<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> }</div>\n+<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> </div>\n+<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>C,</div>\n+<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span> <span class=\"keyword\">typename</span> std::enable_if<std::is_convertible<C&, Result>::value, <span class=\"keywordtype\">int</span>>::type = 0></div>\n+<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> Result operator()(C&& c)</div>\n+<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> {</div>\n+<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> <span class=\"keywordflow\">return</span> (Result)(std::forward<C>(c));</div>\n+<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> }</div>\n+<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span> </div>\n+<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span> <span class=\"keyword\">const</span> Index& index_;</div>\n+<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span>};</div>\n+<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span> </div>\n+<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"> 240</span>} <span class=\"comment\">// namespace Imp</span></div>\n+<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span> </div>\n+<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span> </div>\n+<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> </div>\n+<div class=\"line\"><a id=\"l00262\" name=\"l00262\"></a><span class=\"lineno\"> 262</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Result, <span class=\"keyword\">class</span> C, <span class=\"keyword\">class</span> MultiIndex></div>\n+<div class=\"line\"><a id=\"l00263\" name=\"l00263\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00215.html#gabd5106817636cc5542dc4e9a1817551b\"> 263</a></span>Result <a class=\"code hl_function\" href=\"a00215.html#gabd5106817636cc5542dc4e9a1817551b\">hybridMultiIndexAccess</a>(C&& c, <span class=\"keyword\">const</span> MultiIndex& index)</div>\n+<div class=\"line\"><a id=\"l00264\" name=\"l00264\"></a><span class=\"lineno\"> 264</span>{</div>\n+<div class=\"line\"><a id=\"l00265\" name=\"l00265\"></a><span class=\"lineno\"> 265</span> </div>\n+<div class=\"line\"><a id=\"l00266\" name=\"l00266\"></a><span class=\"lineno\"> 266</span> Imp::MultiIndexResolver<Result, MultiIndex> multiIndexResolver(index);</div>\n+<div class=\"line\"><a id=\"l00267\" name=\"l00267\"></a><span class=\"lineno\"> 267</span> <span class=\"keywordflow\">return</span> multiIndexResolver(c);</div>\n+<div class=\"line\"><a id=\"l00268\" name=\"l00268\"></a><span class=\"lineno\"> 268</span>}</div>\n+<div class=\"line\"><a id=\"l00269\" name=\"l00269\"></a><span class=\"lineno\"> 269</span> </div>\n+<div class=\"line\"><a id=\"l00270\" name=\"l00270\"></a><span class=\"lineno\"> 270</span> </div>\n+<div class=\"line\"><a id=\"l00271\" name=\"l00271\"></a><span class=\"lineno\"> 271</span> </div>\n+<div class=\"line\"><a id=\"l00272\" name=\"l00272\"></a><span class=\"lineno\"> 272</span> </div>\n+<div class=\"line\"><a id=\"l00273\" name=\"l00273\"></a><span class=\"lineno\"> 273</span> </div>\n+<div class=\"line\"><a id=\"l00274\" name=\"l00274\"></a><span class=\"lineno\"> 274</span> </div>\n+<div class=\"line\"><a id=\"l00275\" name=\"l00275\"></a><span class=\"lineno\"> 275</span><span class=\"keyword\">namespace </span>Imp {</div>\n+<div class=\"line\"><a id=\"l00276\" name=\"l00276\"></a><span class=\"lineno\"> 276</span> </div>\n+<div class=\"line\"><a id=\"l00277\" name=\"l00277\"></a><span class=\"lineno\"> 277</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C, <span class=\"keyword\">class</span> MultiIndex, <span class=\"keyword\">class</span> IsFinal></div>\n+<div class=\"line\"><a id=\"l00278\" name=\"l00278\"></a><span class=\"lineno\"> 278</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <a class=\"code hl_function\" href=\"a00215.html#ga9aaec884c080483fea267d1098f81590\">resolveDynamicMultiIndex</a>(C&& c, <span class=\"keyword\">const</span> MultiIndex& multiIndex, <span class=\"keyword\">const</span> IsFinal& isFinal)</div>\n+<div class=\"line\"><a id=\"l00279\" name=\"l00279\"></a><span class=\"lineno\"> 279</span> {</div>\n+<div class=\"line\"><a id=\"l00280\" name=\"l00280\"></a><span class=\"lineno\"> 280</span> <span class=\"comment\">// If c is already considered final simply return it,</span></div>\n+<div class=\"line\"><a id=\"l00281\" name=\"l00281\"></a><span class=\"lineno\"> 281</span> <span class=\"comment\">// else resolve the next multiIndex entry.</span></div>\n+<div class=\"line\"><a id=\"l00282\" name=\"l00282\"></a><span class=\"lineno\"> 282</span> <span class=\"keywordflow\">return</span> Hybrid::ifElse(isFinal(c), [&, c = <a class=\"code hl_function\" href=\"a00219.html#a6bb3a351c2ab1b4eb46d4ba1ec3d95a0\">forwardCapture</a>(std::forward<C>(c))](<span class=\"keyword\">auto</span>) -> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) {</div>\n+<div class=\"line\"><a id=\"l00283\" name=\"l00283\"></a><span class=\"lineno\"> 283</span> assert(multiIndex.size() == 0);</div>\n+<div class=\"line\"><a id=\"l00284\" name=\"l00284\"></a><span class=\"lineno\"> 284</span> <span class=\"keywordflow\">return</span> c.forward();</div>\n+<div class=\"line\"><a id=\"l00285\" name=\"l00285\"></a><span class=\"lineno\"> 285</span> }, [&](<span class=\"keyword\">auto</span>) -> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) {</div>\n+<div class=\"line\"><a id=\"l00286\" name=\"l00286\"></a><span class=\"lineno\"> 286</span> <span class=\"keyword\">auto</span> hasDynamicAccess = <a class=\"code hl_function\" href=\"a00215.html#ga7d55c56e78792c4b169c18d875a60935\">callableCheck</a>([](<span class=\"keyword\">auto</span>&& cc) -> std::void_t<<span class=\"keyword\">decltype</span>(cc[0])> {});</div>\n+<div class=\"line\"><a id=\"l00287\" name=\"l00287\"></a><span class=\"lineno\"> 287</span> </div>\n+<div class=\"line\"><a id=\"l00288\" name=\"l00288\"></a><span class=\"lineno\"> 288</span> <span class=\"comment\">// Split multiIndex into first entry and remaining ones.</span></div>\n+<div class=\"line\"><a id=\"l00289\" name=\"l00289\"></a><span class=\"lineno\"> 289</span> <span class=\"keyword\">auto</span> i = multiIndex[0];</div>\n+<div class=\"line\"><a id=\"l00290\" name=\"l00290\"></a><span class=\"lineno\"> 290</span> <span class=\"keyword\">auto</span> tail = multiIndex.pop();</div>\n+<div class=\"line\"><a id=\"l00291\" name=\"l00291\"></a><span class=\"lineno\"> 291</span> </div>\n+<div class=\"line\"><a id=\"l00292\" name=\"l00292\"></a><span class=\"lineno\"> 292</span> <span class=\"comment\">// Resolve first multiIndex entry by c[multiIndex[0]] and</span></div>\n+<div class=\"line\"><a id=\"l00293\" name=\"l00293\"></a><span class=\"lineno\"> 293</span> <span class=\"comment\">// continue resolving with the remaining remaining ones.</span></div>\n+<div class=\"line\"><a id=\"l00294\" name=\"l00294\"></a><span class=\"lineno\"> 294</span> <span class=\"comment\">// If c has a dynamic operator[] this is straight forward.</span></div>\n+<div class=\"line\"><a id=\"l00295\" name=\"l00295\"></a><span class=\"lineno\"> 295</span> <span class=\"comment\">// Else the dynamic multiIndex[0] has to be translated into</span></div>\n+<div class=\"line\"><a id=\"l00296\" name=\"l00296\"></a><span class=\"lineno\"> 296</span> <span class=\"comment\">// a static one using hybridIndexAccess.</span></div>\n+<div class=\"line\"><a id=\"l00297\" name=\"l00297\"></a><span class=\"lineno\"> 297</span> <span class=\"keywordflow\">return</span> Hybrid::ifElse(hasDynamicAccess(c), [&](<span class=\"keyword\">auto</span> <span class=\"keywordtype\">id</span>) -> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) {</div>\n+<div class=\"line\"><a id=\"l00298\" name=\"l00298\"></a><span class=\"lineno\"> 298</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00215.html#ga89fbdd009241b14e86b4fff7ba208a04\">Imp::resolveDynamicMultiIndex</a>(<span class=\"keywordtype\">id</span>(c)[i], tail, isFinal);</div>\n+<div class=\"line\"><a id=\"l00299\" name=\"l00299\"></a><span class=\"lineno\"> 299</span> }, [&](<span class=\"keyword\">auto</span> id) -> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) {</div>\n+<div class=\"line\"><a id=\"l00300\" name=\"l00300\"></a><span class=\"lineno\"> 300</span> <span class=\"comment\">// auto indexRange = range(Hybrid::size(id(c)));</span></div>\n+<div class=\"line\"><a id=\"l00301\" name=\"l00301\"></a><span class=\"lineno\"> 301</span> <span class=\"keyword\">auto</span> indexRange = <span class=\"keyword\">typename</span> <span class=\"keyword\">decltype</span>(range(Hybrid::size(<span class=\"keywordtype\">id</span>(c))))::integer_sequence();</div>\n+<div class=\"line\"><a id=\"l00302\" name=\"l00302\"></a><span class=\"lineno\"> 302</span> <span class=\"keywordflow\">return</span> Hybrid::switchCases(indexRange, i, [&](<span class=\"keyword\">auto</span> static_i) -> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>){</div>\n+<div class=\"line\"><a id=\"l00303\" name=\"l00303\"></a><span class=\"lineno\"> 303</span> <span class=\"comment\">// Do rescursion with static version of i</span></div>\n+<div class=\"line\"><a id=\"l00304\" name=\"l00304\"></a><span class=\"lineno\"> 304</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00215.html#ga89fbdd009241b14e86b4fff7ba208a04\">Imp::resolveDynamicMultiIndex</a>(<span class=\"keywordtype\">id</span>(c)[static_i], tail, isFinal);</div>\n+<div class=\"line\"><a id=\"l00305\" name=\"l00305\"></a><span class=\"lineno\"> 305</span> }, [&]() -> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>){</div>\n+<div class=\"line\"><a id=\"l00306\" name=\"l00306\"></a><span class=\"lineno\"> 306</span> <span class=\"comment\">// As fallback we use c[0] this is needed, because there must be one branch that matches.</span></div>\n+<div class=\"line\"><a id=\"l00307\" name=\"l00307\"></a><span class=\"lineno\"> 307</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00215.html#ga89fbdd009241b14e86b4fff7ba208a04\">Imp::resolveDynamicMultiIndex</a>(<span class=\"keywordtype\">id</span>(c)[Dune::Indices::_0], tail, isFinal);</div>\n+<div class=\"line\"><a id=\"l00308\" name=\"l00308\"></a><span class=\"lineno\"> 308</span> });</div>\n+<div class=\"line\"><a id=\"l00309\" name=\"l00309\"></a><span class=\"lineno\"> 309</span> });</div>\n+<div class=\"line\"><a id=\"l00310\" name=\"l00310\"></a><span class=\"lineno\"> 310</span> });</div>\n+<div class=\"line\"><a id=\"l00311\" name=\"l00311\"></a><span class=\"lineno\"> 311</span> }</div>\n+<div class=\"line\"><a id=\"l00312\" name=\"l00312\"></a><span class=\"lineno\"> 312</span> </div>\n+<div class=\"line\"><a id=\"l00313\" name=\"l00313\"></a><span class=\"lineno\"> 313</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C, <span class=\"keyword\">class</span> MultiIndex></div>\n+<div class=\"line\"><a id=\"l00314\" name=\"l00314\"></a><span class=\"lineno\"> 314</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <a class=\"code hl_function\" href=\"a00215.html#ga4cc6af2842348271c242c048e0411637\">resolveStaticMultiIndex</a>(C&& c, <span class=\"keyword\">const</span> MultiIndex& multiIndex)</div>\n+<div class=\"line\"><a id=\"l00315\" name=\"l00315\"></a><span class=\"lineno\"> 315</span> {</div>\n+<div class=\"line\"><a id=\"l00316\" name=\"l00316\"></a><span class=\"lineno\"> 316</span> <span class=\"keyword\">auto</span> isExhausted = Hybrid::equals(Hybrid::size(multiIndex), Dune::Indices::_0);</div>\n+<div class=\"line\"><a id=\"l00317\" name=\"l00317\"></a><span class=\"lineno\"> 317</span> <span class=\"keywordflow\">return</span> Hybrid::ifElse(isExhausted, [&, c = <a class=\"code hl_function\" href=\"a00219.html#a6bb3a351c2ab1b4eb46d4ba1ec3d95a0\">forwardCapture</a>(std::forward<C>(c))](<span class=\"keyword\">auto</span>) -> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) {</div>\n+<div class=\"line\"><a id=\"l00318\" name=\"l00318\"></a><span class=\"lineno\"> 318</span> <span class=\"keywordflow\">return</span> c.forward();</div>\n+<div class=\"line\"><a id=\"l00319\" name=\"l00319\"></a><span class=\"lineno\"> 319</span> }, [&](<span class=\"keyword\">auto</span> id) -> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) {</div>\n+<div class=\"line\"><a id=\"l00320\" name=\"l00320\"></a><span class=\"lineno\"> 320</span> <span class=\"keyword\">auto</span> head = multiIndex[Dune::Indices::_0];</div>\n+<div class=\"line\"><a id=\"l00321\" name=\"l00321\"></a><span class=\"lineno\"> 321</span> <span class=\"keyword\">auto</span> tail = multiIndex.pop();</div>\n+<div class=\"line\"><a id=\"l00322\" name=\"l00322\"></a><span class=\"lineno\"> 322</span> </div>\n+<div class=\"line\"><a id=\"l00323\" name=\"l00323\"></a><span class=\"lineno\"> 323</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00215.html#ga4cc6af2842348271c242c048e0411637\">Imp::resolveStaticMultiIndex</a>(<span class=\"keywordtype\">id</span>(c)[head], tail);</div>\n+<div class=\"line\"><a id=\"l00324\" name=\"l00324\"></a><span class=\"lineno\"> 324</span> });</div>\n+<div class=\"line\"><a id=\"l00325\" name=\"l00325\"></a><span class=\"lineno\"> 325</span> }</div>\n+<div class=\"line\"><a id=\"l00326\" name=\"l00326\"></a><span class=\"lineno\"> 326</span> </div>\n+<div class=\"line\"><a id=\"l00327\" name=\"l00327\"></a><span class=\"lineno\"> 327</span>} <span class=\"comment\">// namespace Imp</span></div>\n+<div class=\"line\"><a id=\"l00328\" name=\"l00328\"></a><span class=\"lineno\"> 328</span> </div>\n+<div class=\"line\"><a id=\"l00329\" name=\"l00329\"></a><span class=\"lineno\"> 329</span> </div>\n+<div class=\"line\"><a id=\"l00330\" name=\"l00330\"></a><span class=\"lineno\"> 330</span> </div>\n+<div class=\"line\"><a id=\"l00353\" name=\"l00353\"></a><span class=\"lineno\"> 353</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C, <span class=\"keyword\">class</span> MultiIndex, <span class=\"keyword\">class</span> IsFinal></div>\n+<div class=\"line\"><a id=\"l00354\" name=\"l00354\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00215.html#ga9aaec884c080483fea267d1098f81590\"> 354</a></span><span class=\"keyword\">constexpr</span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <a class=\"code hl_function\" href=\"a00215.html#ga9aaec884c080483fea267d1098f81590\">resolveDynamicMultiIndex</a>(C&& c, <span class=\"keyword\">const</span> MultiIndex& multiIndex, <span class=\"keyword\">const</span> IsFinal& isFinal)</div>\n+<div class=\"line\"><a id=\"l00355\" name=\"l00355\"></a><span class=\"lineno\"> 355</span>{</div>\n+<div class=\"line\"><a id=\"l00356\" name=\"l00356\"></a><span class=\"lineno\"> 356</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00215.html#ga89fbdd009241b14e86b4fff7ba208a04\">Imp::resolveDynamicMultiIndex</a>(std::forward<C>(c), Imp::shiftedDynamicMultiIndex<0>(multiIndex), isFinal);</div>\n+<div class=\"line\"><a id=\"l00357\" name=\"l00357\"></a><span class=\"lineno\"> 357</span>}</div>\n+<div class=\"line\"><a id=\"l00358\" name=\"l00358\"></a><span class=\"lineno\"> 358</span> </div>\n+<div class=\"line\"><a id=\"l00375\" name=\"l00375\"></a><span class=\"lineno\"> 375</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C, <span class=\"keyword\">class</span> MultiIndex></div>\n+<div class=\"line\"><a id=\"l00376\" name=\"l00376\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00215.html#ga89fbdd009241b14e86b4fff7ba208a04\"> 376</a></span><span class=\"keyword\">constexpr</span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <a class=\"code hl_function\" href=\"a00215.html#ga9aaec884c080483fea267d1098f81590\">resolveDynamicMultiIndex</a>(C&& c, <span class=\"keyword\">const</span> MultiIndex& multiIndex)</div>\n+<div class=\"line\"><a id=\"l00377\" name=\"l00377\"></a><span class=\"lineno\"> 377</span>{</div>\n+<div class=\"line\"><a id=\"l00378\" name=\"l00378\"></a><span class=\"lineno\"> 378</span> <span class=\"keyword\">auto</span> hasNoIndexAccess = <a class=\"code hl_function\" href=\"a00215.html#gaed02f0c6f78e0d71e09d9bc6a29347c4\">negatePredicate</a>(<a class=\"code hl_function\" href=\"a00215.html#ga7d55c56e78792c4b169c18d875a60935\">callableCheck</a>([](<span class=\"keyword\">auto</span>&& cc) -> std::void_t<<span class=\"keyword\">decltype</span>(cc[Dune::Indices::_0])> {}));</div>\n+<div class=\"line\"><a id=\"l00379\" name=\"l00379\"></a><span class=\"lineno\"> 379</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00215.html#ga89fbdd009241b14e86b4fff7ba208a04\">Imp::resolveDynamicMultiIndex</a>(std::forward<C>(c), Imp::shiftedDynamicMultiIndex<0>(multiIndex), hasNoIndexAccess);</div>\n+<div class=\"line\"><a id=\"l00380\" name=\"l00380\"></a><span class=\"lineno\"> 380</span>}</div>\n+<div class=\"line\"><a id=\"l00381\" name=\"l00381\"></a><span class=\"lineno\"> 381</span> </div>\n+<div class=\"line\"><a id=\"l00397\" name=\"l00397\"></a><span class=\"lineno\"> 397</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C, <span class=\"keyword\">class</span> MultiIndex></div>\n+<div class=\"line\"><a id=\"l00398\" name=\"l00398\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00215.html#ga4cc6af2842348271c242c048e0411637\"> 398</a></span><span class=\"keyword\">constexpr</span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <a class=\"code hl_function\" href=\"a00215.html#ga4cc6af2842348271c242c048e0411637\">resolveStaticMultiIndex</a>(C&& c, <span class=\"keyword\">const</span> MultiIndex& multiIndex)</div>\n+<div class=\"line\"><a id=\"l00399\" name=\"l00399\"></a><span class=\"lineno\"> 399</span>{</div>\n+<div class=\"line\"><a id=\"l00400\" name=\"l00400\"></a><span class=\"lineno\"> 400</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00215.html#ga4cc6af2842348271c242c048e0411637\">Imp::resolveStaticMultiIndex</a>(std::forward<C>(c), Imp::shiftedStaticMultiIndex<0>(multiIndex));</div>\n+<div class=\"line\"><a id=\"l00401\" name=\"l00401\"></a><span class=\"lineno\"> 401</span>}</div>\n+<div class=\"line\"><a id=\"l00402\" name=\"l00402\"></a><span class=\"lineno\"> 402</span> </div>\n+<div class=\"line\"><a id=\"l00403\" name=\"l00403\"></a><span class=\"lineno\"> 403</span> </div>\n+<div class=\"line\"><a id=\"l00404\" name=\"l00404\"></a><span class=\"lineno\"> 404</span> </div>\n+<div class=\"line\"><a id=\"l00405\" name=\"l00405\"></a><span class=\"lineno\"> 405</span>} <span class=\"comment\">// namespace Dune::Functions</span></div>\n+<div class=\"line\"><a id=\"l00406\" name=\"l00406\"></a><span class=\"lineno\"> 406</span>} <span class=\"comment\">// namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00407\" name=\"l00407\"></a><span class=\"lineno\"> 407</span> </div>\n+<div class=\"line\"><a id=\"l00408\" name=\"l00408\"></a><span class=\"lineno\"> 408</span> </div>\n+<div class=\"line\"><a id=\"l00409\" name=\"l00409\"></a><span class=\"lineno\"> 409</span> </div>\n+<div class=\"line\"><a id=\"l00410\" name=\"l00410\"></a><span class=\"lineno\"> 410</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH</span></div>\n+<div class=\"ttc\" id=\"aa00041_html\"><div class=\"ttname\"><a href=\"a00041.html\">utility.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00215_html_ga2226fe3a86eb176df27c9801a98a10ae\"><div class=\"ttname\"><a href=\"a00215.html#ga2226fe3a86eb176df27c9801a98a10ae\">Dune::Functions::hybridIndexAccess</a></div><div class=\"ttdeci\">auto hybridIndexAccess(C &&c, const I &i, F &&f) -> decltype(f(c[i]))</div><div class=\"ttdoc\">Provide operator[] index-access for containers.</div><div class=\"ttdef\"><b>Definition:</b> indexaccess.hh:63</div></div>\n+<div class=\"ttc\" id=\"aa00215_html_ga4cc6af2842348271c242c048e0411637\"><div class=\"ttname\"><a href=\"a00215.html#ga4cc6af2842348271c242c048e0411637\">Dune::Functions::resolveStaticMultiIndex</a></div><div class=\"ttdeci\">constexpr decltype(auto) resolveStaticMultiIndex(C &&c, const MultiIndex &multiIndex)</div><div class=\"ttdoc\">Provide multi-index access by chaining operator[].</div><div class=\"ttdef\"><b>Definition:</b> indexaccess.hh:398</div></div>\n+<div class=\"ttc\" id=\"aa00215_html_ga7d55c56e78792c4b169c18d875a60935\"><div class=\"ttname\"><a href=\"a00215.html#ga7d55c56e78792c4b169c18d875a60935\">Dune::Functions::callableCheck</a></div><div class=\"ttdeci\">auto callableCheck(Expression f)</div><div class=\"ttdoc\">Create a predicate for checking validity of expressions.</div><div class=\"ttdef\"><b>Definition:</b> utility.hh:279</div></div>\n+<div class=\"ttc\" id=\"aa00215_html_ga89fbdd009241b14e86b4fff7ba208a04\"><div class=\"ttname\"><a href=\"a00215.html#ga89fbdd009241b14e86b4fff7ba208a04\">Dune::Functions::resolveDynamicMultiIndex</a></div><div class=\"ttdeci\">constexpr decltype(auto) resolveDynamicMultiIndex(C &&c, const MultiIndex &multiIndex)</div><div class=\"ttdoc\">Provide multi-index access by chaining operator[].</div><div class=\"ttdef\"><b>Definition:</b> indexaccess.hh:376</div></div>\n+<div class=\"ttc\" id=\"aa00215_html_ga9aaec884c080483fea267d1098f81590\"><div class=\"ttname\"><a href=\"a00215.html#ga9aaec884c080483fea267d1098f81590\">Dune::Functions::resolveDynamicMultiIndex</a></div><div class=\"ttdeci\">constexpr decltype(auto) resolveDynamicMultiIndex(C &&c, const MultiIndex &multiIndex, const IsFinal &isFinal)</div><div class=\"ttdoc\">Provide multi-index access by chaining operator[].</div><div class=\"ttdef\"><b>Definition:</b> indexaccess.hh:354</div></div>\n+<div class=\"ttc\" id=\"aa00215_html_gabd5106817636cc5542dc4e9a1817551b\"><div class=\"ttname\"><a href=\"a00215.html#gabd5106817636cc5542dc4e9a1817551b\">Dune::Functions::hybridMultiIndexAccess</a></div><div class=\"ttdeci\">Result hybridMultiIndexAccess(C &&c, const MultiIndex &index)</div><div class=\"ttdoc\">Provide multi-index access by chaining operator[].</div><div class=\"ttdef\"><b>Definition:</b> indexaccess.hh:263</div></div>\n+<div class=\"ttc\" id=\"aa00215_html_gaed02f0c6f78e0d71e09d9bc6a29347c4\"><div class=\"ttname\"><a href=\"a00215.html#gaed02f0c6f78e0d71e09d9bc6a29347c4\">Dune::Functions::negatePredicate</a></div><div class=\"ttdeci\">auto negatePredicate(Check check)</div><div class=\"ttdoc\">Negate given predicate.</div><div class=\"ttdef\"><b>Definition:</b> utility.hh:304</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa01279_html\"><div class=\"ttname\"><a href=\"a01279.html\">Dune::Functions::PolymorphicSmallObject</a></div><div class=\"ttdoc\">A wrapper providing small object optimization with polymorphic types.</div><div class=\"ttdef\"><b>Definition:</b> polymorphicsmallobject.hh:45</div></div>\n-<div class=\"ttc\" id=\"aa01351_html\"><div class=\"ttname\"><a href=\"a01351.html\">Dune::Functions::TypeErasureBase</a></div><div class=\"ttdoc\">Base class for type-erased interface wrapper.</div><div class=\"ttdef\"><b>Definition:</b> typeerasure.hh:165</div></div>\n-<div class=\"ttc\" id=\"aa01351_html_a28c29a93a2a593b5e44d71922457d1d5\"><div class=\"ttname\"><a href=\"a01351.html#a28c29a93a2a593b5e44d71922457d1d5\">Dune::Functions::TypeErasureBase::target_type</a></div><div class=\"ttdeci\">const std::type_info & target_type() const</div><div class=\"ttdoc\">Get type of stored object.</div><div class=\"ttdef\"><b>Definition:</b> typeerasure.hh:190</div></div>\n-<div class=\"ttc\" id=\"aa01351_html_a2ccacb87d5aefd102388090c1a090cf8\"><div class=\"ttname\"><a href=\"a01351.html#a2ccacb87d5aefd102388090c1a090cf8\">Dune::Functions::TypeErasureBase::TypeErasureBase</a></div><div class=\"ttdeci\">TypeErasureBase(T &&t)</div><div class=\"ttdoc\">Construct wrapper from object.</div><div class=\"ttdef\"><b>Definition:</b> typeerasure.hh:170</div></div>\n-<div class=\"ttc\" id=\"aa01351_html_a63da1c558608230428c5d3110c99fe68\"><div class=\"ttname\"><a href=\"a01351.html#a63da1c558608230428c5d3110c99fe68\">Dune::Functions::TypeErasureBase::wrapped_</a></div><div class=\"ttdeci\">PolymorphicSmallObject< Imp::TypeErasureWrapperInterface< Interface >, bufferSize > wrapped_</div><div class=\"ttdef\"><b>Definition:</b> typeerasure.hh:196</div></div>\n-<div class=\"ttc\" id=\"aa01351_html_a6927b29215757f0c602205cc733b7b49\"><div class=\"ttname\"><a href=\"a01351.html#a6927b29215757f0c602205cc733b7b49\">Dune::Functions::TypeErasureBase::TypeErasureBase</a></div><div class=\"ttdeci\">TypeErasureBase()=default</div><div class=\"ttdoc\">Default constructor.</div></div>\n-<div class=\"ttc\" id=\"aa01351_html_a83e602e8260b48b89271c6814273be4f\"><div class=\"ttname\"><a href=\"a01351.html#a83e602e8260b48b89271c6814273be4f\">Dune::Functions::TypeErasureBase::asInterface</a></div><div class=\"ttdeci\">Interface & asInterface()</div><div class=\"ttdoc\">Get mutable reference to wrapped object.</div><div class=\"ttdef\"><b>Definition:</b> typeerasure.hh:178</div></div>\n-<div class=\"ttc\" id=\"aa01351_html_ac134ea2f9ddb8f43f75d8a245920ee1f\"><div class=\"ttname\"><a href=\"a01351.html#ac134ea2f9ddb8f43f75d8a245920ee1f\">Dune::Functions::TypeErasureBase::asInterface</a></div><div class=\"ttdeci\">const Interface & asInterface() const</div><div class=\"ttdoc\">Get reference to wrapped object.</div><div class=\"ttdef\"><b>Definition:</b> typeerasure.hh:184</div></div>\n+<div class=\"ttc\" id=\"aa00219_html_a6bb3a351c2ab1b4eb46d4ba1ec3d95a0\"><div class=\"ttname\"><a href=\"a00219.html#a6bb3a351c2ab1b4eb46d4ba1ec3d95a0\">Dune::Functions::forwardCapture</a></div><div class=\"ttdeci\">auto forwardCapture(T &&t)</div><div class=\"ttdoc\">Create a capture object for perfect forwarding.</div><div class=\"ttdef\"><b>Definition:</b> utility.hh:372</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,180 +5,362 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * common\n-typeerasure.hh\n+indexaccess.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH\n- 4#define DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH\n+ 3#ifndef DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH\n+ 4#define DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH\n 5\n- 6#include <typeinfo>\n- 7\n- 8#include <dune/common/typeutilities.hh>\n+ 6\n+ 7#include <utility>\n+ 8#include <type_traits>\n 9\n- 10#include <dune/functions/common/type_traits.hh>\n- 11#include <dune/functions/common/interfaces.hh>\n- 12#include <dune/functions/common/polymorphicsmallobject.hh>\n+ 10#include <dune/common/typetraits.hh>\n+ 11#include <dune/common/concept.hh>\n+ 12#include <dune/common/hybridutilities.hh>\n 13\n- 14namespace Dune {\n- 15namespace Functions {\n- 16namespace Imp {\n+ 14#include <dune/functions/common/utility.hh>\n+ 15\n+ 16\n 17\n- 18\n- 19\n- 33template<class Interface>\n- 34class TypeErasureWrapperInterface :\n- 35 public Interface,\n- 36 public PolymorphicType<TypeErasureWrapperInterface<Interface>>\n- 37{\n- 38public:\n- 39 virtual const std::type_info& target_type() const = 0;\n- 40};\n- 41\n+ 18namespace Dune {\n+ 19namespace Functions {\n+ 20\n+ 21\n+ 22namespace Imp {\n+ 23\n+ 24namespace Concept {\n+ 25\n+ 26template<class size_type>\n+ 27struct HasDynamicIndexAccess\n+ 28{\n+ 29 template<class C>\n+ 30 auto require(C&& c) -> decltype(\n+ 31 c[std::declval<size_type>()]\n+ 32 );\n+ 33};\n+ 34\n+ 35struct HasStaticIndexAccess\n+ 36{\n+ 37 template<class C>\n+ 38 auto require(C&& c) -> decltype(\n+ 39 c[Dune::Indices::_0]\n+ 40 );\n+ 41};\n 42\n- 43\n- 60template<class Interface, class T>\n- 61class TypeErasureWrapperBase :\n- 62 public TypeErasureWrapperInterface<Interface>\n- 63{\n- 64public:\n- 65 template<class TT, disableCopyMove<TypeErasureWrapperBase, TT> = 0>\n- 66 TypeErasureWrapperBase(TT&& t) :\n- 67 wrapped_(std::forward<TT>(t))\n- 68 {}\n- 69\n- 71 T& get()\n- 72 {\n- 73 return wrapped_;\n- 74 }\n- 75\n- 77 const T& get() const\n- 78 {\n- 79 return wrapped_;\n- 80 }\n- 81\n- 82protected:\n- 83 using Wrapped = T;\n- 84 Wrapped wrapped_;\n- 85};\n- 86\n- 87\n- 88\n- 112template<class Interface, template<class> class Implementation, class T>\n- 113class TypeErasureWrapperImplementation :\n- 114 public Implementation<TypeErasureWrapperBase<Interface, T> >\n- 115{\n- 116public:\n- 117\n- 119 template<class TT, disableCopyMove<TypeErasureWrapperImplementation, T> =\n-0>\n- 120 TypeErasureWrapperImplementation(TT&& t) :\n- 121 Implementation<TypeErasureWrapperBase<Interface, T> >(std::forward<TT>(t))\n- 122 {}\n- 123\n- 125 virtual TypeErasureWrapperImplementation* clone() const\n- 126 {\n- 127 return new TypeErasureWrapperImplementation(*this);\n- 128 }\n- 129\n- 131 virtual TypeErasureWrapperImplementation* clone(void* buffer) const\n- 132 {\n- 133 return new (buffer) TypeErasureWrapperImplementation(*this);\n- 134 }\n- 135\n- 137 virtual TypeErasureWrapperImplementation* move(void* buffer)\n- 138 {\n- 139 return new (buffer) TypeErasureWrapperImplementation(std::move(*this));\n- 140 }\n- 141\n- 143 virtual const std::type_info& target_type() const\n- 144 {\n- 145 return typeid(T);\n- 146 }\n- 147};\n- 148\n- 149} // namespace Dune::Functions::Imp\n+ 43} // namespace Concept\n+ 44\n+ 45} // namespace Imp\n+ 46\n+ 47\n+ 48\n+ 61template<class C, class I, class F,\n+ 62 typename std::enable_if< Dune::models<Imp::Concept::\n+HasDynamicIndexAccess<I>, C>(), int>::type = 0>\n+63auto hybridIndexAccess(C&& c, const I& i, F&& f)\n+ 64 -> decltype(f(c[i]))\n+ 65{\n+ 66 return f(c[i]);\n+ 67}\n+ 68\n+ 86template<class C, class I, class F,\n+ 87 typename std::enable_if< not Dune::models<Imp::Concept::\n+HasDynamicIndexAccess<I>, C>(), int>::type = 0>\n+88decltype(auto) hybridIndexAccess(C&& c, const I& i, F&& f)\n+ 89{\n+ 90 using Size = decltype(Hybrid::size(c));\n+ 91 return Hybrid::switchCases(std::make_index_sequence<Size::value>(), i,\n+ 92 [&](const auto& ii) -> decltype(auto){\n+ 93 return f(c[ii]);\n+ 94 }, [&]() -> decltype(auto){\n+ 95 return f(c[Dune::Indices::_0]);\n+ 96 });\n+ 97}\n+ 98\n+ 99\n+ 100namespace Imp {\n+ 101\n+ 115 template<class Index, std::size_t offset=1>\n+ 116 class ShiftedDynamicMultiIndex\n+ 117 {\n+ 118 public:\n+ 119 ShiftedDynamicMultiIndex(const Index& index) :\n+ 120 index_(index)\n+ 121 {}\n+ 122\n+ 123 std::size_t operator[](std::size_t position) const\n+ 124 {\n+ 125 if (position<size())\n+ 126 return index_[position+offset];\n+ 127 else\n+ 128 return 0;\n+ 129 }\n+ 130\n+ 134 ShiftedDynamicMultiIndex<Index, offset+1> pop() const\n+ 135 {\n+ 136 return {index_};\n+ 137 }\n+ 138\n+ 139 std::size_t size() const\n+ 140 {\n+ 141 if (offset < index_.size())\n+ 142 return index_.size() - offset;\n+ 143 else\n+ 144 return 0;\n+ 145 }\n+ 146\n+ 147 private:\n+ 148 const Index& index_;\n+ 149 };\n 150\n- 151\n- 152\n- 163template<class Interface, template<class> class Implementation, size_t\n-bufferSize = 56>\n-164class TypeErasureBase\n- 165{\n- 166public:\n- 167\n- 169 template<class T, disableCopyMove<TypeErasureBase, T> = 0 >\n-170 TypeErasureBase(T&& t) :\n- 171 wrapped_(Imp::TypeErasureWrapperImplementation<Interface, Implementation,\n-typename std::decay<T>::type>(std::forward<T>(t)))\n- 172 {}\n- 173\n-175 TypeErasureBase() = default;\n+ 151 template<class Index, std::size_t offset=1>\n+ 152 class ShiftedStaticMultiIndex\n+ 153 {\n+ 154 public:\n+ 155 ShiftedStaticMultiIndex(const Index& index) :\n+ 156 index_(index)\n+ 157 {}\n+ 158\n+ 159 template<std::size_t i>\n+ 160 auto operator[](Dune::index_constant<i>) const\n+ 161 {\n+ 162 if constexpr (i<size()) {\n+ 163 return index_[Dune::index_constant<i+offset>{}];\n+ 164 } else {\n+ 165 return Dune::index_constant<0>{};\n+ 166 }\n+ 167 }\n+ 168\n+ 172 ShiftedStaticMultiIndex<Index, offset+1> pop() const\n+ 173 {\n+ 174 return {index_};\n+ 175 }\n 176\n-178 Interface& asInterface()\n- 179 {\n- 180 return wrapped_.get();\n- 181 }\n- 182\n-184 const Interface& asInterface() const\n- 185 {\n- 186 return wrapped_.get();\n- 187 }\n- 188\n-190 const std::type_info& target_type() const\n- 191 {\n- 192 return wrapped_.get().target_type();\n- 193 }\n- 194\n- 195protected:\n-196 PolymorphicSmallObject<Imp::TypeErasureWrapperInterface<Interface>,\n-bufferSize > wrapped_;\n- 197};\n- 198\n- 199\n- 200}} // namespace Dune::Functions\n- 201\n- 202\n- 203\n- 204#endif // DUNE_FUNCTIONS_COMMON_TYPEERASURE_HH\n-polymorphicsmallobject.hh\n-type_traits.hh\n-interfaces.hh\n+ 177 static constexpr std::size_t size()\n+ 178 {\n+ 179 auto fullSize = decltype(Hybrid::size(std::declval<Index>()))::value;\n+ 180 if (offset < fullSize)\n+ 181 return fullSize - offset;\n+ 182 else\n+ 183 return 0;\n+ 184 }\n+ 185\n+ 186 private:\n+ 187 const Index& index_;\n+ 188 };\n+ 189\n+ 195 template<std::size_t offset, class Index>\n+ 196 ShiftedDynamicMultiIndex<Index, offset> shiftedDynamicMultiIndex(const\n+Index& index)\n+ 197 {\n+ 198 return {index};\n+ 199 }\n+ 200\n+ 201 template<std::size_t offset, class Index>\n+ 202 ShiftedStaticMultiIndex<Index, offset> shiftedStaticMultiIndex(const\n+Index& index)\n+ 203 {\n+ 204 return {index};\n+ 205 }\n+ 206\n+ 207} // namespace Imp\n+ 208\n+ 209\n+ 210\n+ 211\n+ 212namespace Imp {\n+ 213\n+ 214template<class Result, class Index>\n+ 215struct MultiIndexResolver\n+ 216{\n+ 217 MultiIndexResolver(const Index& index) :\n+ 218 index_(index)\n+ 219 {}\n+ 220\n+ 221 template<class C,\n+ 222 typename std::enable_if<not std::is_convertible<C&, Result>::value, int>::\n+type = 0>\n+ 223 Result operator()(C&& c)\n+ 224 {\n+ 225 auto&& subIndex = Imp::shiftedDynamicMultiIndex<1>(index_);\n+ 226 auto&& subIndexResolver = MultiIndexResolver<Result, decltype(subIndex)>\n+(subIndex);\n+ 227 return (Result)(hybridIndexAccess(c, index_[Dune::Indices::_0],\n+subIndexResolver));\n+ 228 }\n+ 229\n+ 230 template<class C,\n+ 231 typename std::enable_if<std::is_convertible<C&, Result>::value, int>::type\n+= 0>\n+ 232 Result operator()(C&& c)\n+ 233 {\n+ 234 return (Result)(std::forward<C>(c));\n+ 235 }\n+ 236\n+ 237 const Index& index_;\n+ 238};\n+ 239\n+ 240} // namespace Imp\n+ 241\n+ 242\n+ 243\n+ 262template<class Result, class C, class MultiIndex>\n+263Result hybridMultiIndexAccess(C&& c, const MultiIndex& index)\n+ 264{\n+ 265\n+ 266 Imp::MultiIndexResolver<Result, MultiIndex> multiIndexResolver(index);\n+ 267 return multiIndexResolver(c);\n+ 268}\n+ 269\n+ 270\n+ 271\n+ 272\n+ 273\n+ 274\n+ 275namespace Imp {\n+ 276\n+ 277 template<class C, class MultiIndex, class IsFinal>\n+ 278 constexpr decltype(auto) resolveDynamicMultiIndex(C&& c, const MultiIndex&\n+multiIndex, const IsFinal& isFinal)\n+ 279 {\n+ 280 // If c is already considered final simply return it,\n+ 281 // else resolve the next multiIndex entry.\n+ 282 return Hybrid::ifElse(isFinal(c), [&, c = forwardCapture(std::forward<C>\n+(c))](auto) -> decltype(auto) {\n+ 283 assert(multiIndex.size() == 0);\n+ 284 return c.forward();\n+ 285 }, [&](auto) -> decltype(auto) {\n+ 286 auto hasDynamicAccess = callableCheck([](auto&& cc) -> std::\n+void_t<decltype(cc[0])> {});\n+ 287\n+ 288 // Split multiIndex into first entry and remaining ones.\n+ 289 auto i = multiIndex[0];\n+ 290 auto tail = multiIndex.pop();\n+ 291\n+ 292 // Resolve first multiIndex entry by c[multiIndex[0]] and\n+ 293 // continue resolving with the remaining remaining ones.\n+ 294 // If c has a dynamic operator[] this is straight forward.\n+ 295 // Else the dynamic multiIndex[0] has to be translated into\n+ 296 // a static one using hybridIndexAccess.\n+ 297 return Hybrid::ifElse(hasDynamicAccess(c), [&](auto id) -> decltype(auto)\n+{\n+ 298 return Imp::resolveDynamicMultiIndex(id(c)[i], tail, isFinal);\n+ 299 }, [&](auto id) -> decltype(auto) {\n+ 300 // auto indexRange = range(Hybrid::size(id(c)));\n+ 301 auto indexRange = typename decltype(range(Hybrid::size(id(c))))::\n+integer_sequence();\n+ 302 return Hybrid::switchCases(indexRange, i, [&](auto static_i) -> decltype\n+(auto){\n+ 303 // Do rescursion with static version of i\n+ 304 return Imp::resolveDynamicMultiIndex(id(c)[static_i], tail, isFinal);\n+ 305 }, [&]() -> decltype(auto){\n+ 306 // As fallback we use c[0] this is needed, because there must be one\n+branch that matches.\n+ 307 return Imp::resolveDynamicMultiIndex(id(c)[Dune::Indices::_0], tail,\n+isFinal);\n+ 308 });\n+ 309 });\n+ 310 });\n+ 311 }\n+ 312\n+ 313 template<class C, class MultiIndex>\n+ 314 constexpr decltype(auto) resolveStaticMultiIndex(C&& c, const MultiIndex&\n+multiIndex)\n+ 315 {\n+ 316 auto isExhausted = Hybrid::equals(Hybrid::size(multiIndex), Dune::\n+Indices::_0);\n+ 317 return Hybrid::ifElse(isExhausted, [&, c = forwardCapture(std::forward<C>\n+(c))](auto) -> decltype(auto) {\n+ 318 return c.forward();\n+ 319 }, [&](auto id) -> decltype(auto) {\n+ 320 auto head = multiIndex[Dune::Indices::_0];\n+ 321 auto tail = multiIndex.pop();\n+ 322\n+ 323 return Imp::resolveStaticMultiIndex(id(c)[head], tail);\n+ 324 });\n+ 325 }\n+ 326\n+ 327} // namespace Imp\n+ 328\n+ 329\n+ 330\n+ 353template<class C, class MultiIndex, class IsFinal>\n+354constexpr decltype(auto) resolveDynamicMultiIndex(C&& c, const MultiIndex&\n+multiIndex, const IsFinal& isFinal)\n+ 355{\n+ 356 return Imp::resolveDynamicMultiIndex(std::forward<C>(c), Imp::\n+shiftedDynamicMultiIndex<0>(multiIndex), isFinal);\n+ 357}\n+ 358\n+ 375template<class C, class MultiIndex>\n+376constexpr decltype(auto) resolveDynamicMultiIndex(C&& c, const MultiIndex&\n+multiIndex)\n+ 377{\n+ 378 auto hasNoIndexAccess = negatePredicate(callableCheck([](auto&& cc) -\n+> std::void_t<decltype(cc[Dune::Indices::_0])> {}));\n+ 379 return Imp::resolveDynamicMultiIndex(std::forward<C>(c), Imp::\n+shiftedDynamicMultiIndex<0>(multiIndex), hasNoIndexAccess);\n+ 380}\n+ 381\n+ 397template<class C, class MultiIndex>\n+398constexpr decltype(auto) resolveStaticMultiIndex(C&& c, const MultiIndex&\n+multiIndex)\n+ 399{\n+ 400 return Imp::resolveStaticMultiIndex(std::forward<C>(c), Imp::\n+shiftedStaticMultiIndex<0>(multiIndex));\n+ 401}\n+ 402\n+ 403\n+ 404\n+ 405} // namespace Dune::Functions\n+ 406} // namespace Dune\n+ 407\n+ 408\n+ 409\n+ 410#endif // DUNE_FUNCTIONS_COMMON_INDEX_ACCESS_HH\n+utility.hh\n+Dune::Functions::hybridIndexAccess\n+auto hybridIndexAccess(C &&c, const I &i, F &&f) -> decltype(f(c[i]))\n+Provide operator[] index-access for containers.\n+Definition: indexaccess.hh:63\n+Dune::Functions::resolveStaticMultiIndex\n+constexpr decltype(auto) resolveStaticMultiIndex(C &&c, const MultiIndex\n+&multiIndex)\n+Provide multi-index access by chaining operator[].\n+Definition: indexaccess.hh:398\n+Dune::Functions::callableCheck\n+auto callableCheck(Expression f)\n+Create a predicate for checking validity of expressions.\n+Definition: utility.hh:279\n+Dune::Functions::resolveDynamicMultiIndex\n+constexpr decltype(auto) resolveDynamicMultiIndex(C &&c, const MultiIndex\n+&multiIndex)\n+Provide multi-index access by chaining operator[].\n+Definition: indexaccess.hh:376\n+Dune::Functions::resolveDynamicMultiIndex\n+constexpr decltype(auto) resolveDynamicMultiIndex(C &&c, const MultiIndex\n+&multiIndex, const IsFinal &isFinal)\n+Provide multi-index access by chaining operator[].\n+Definition: indexaccess.hh:354\n+Dune::Functions::hybridMultiIndexAccess\n+Result hybridMultiIndexAccess(C &&c, const MultiIndex &index)\n+Provide multi-index access by chaining operator[].\n+Definition: indexaccess.hh:263\n+Dune::Functions::negatePredicate\n+auto negatePredicate(Check check)\n+Negate given predicate.\n+Definition: utility.hh:304\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::PolymorphicSmallObject\n-A wrapper providing small object optimization with polymorphic types.\n-Definition: polymorphicsmallobject.hh:45\n-Dune::Functions::TypeErasureBase\n-Base class for type-erased interface wrapper.\n-Definition: typeerasure.hh:165\n-Dune::Functions::TypeErasureBase::target_type\n-const std::type_info & target_type() const\n-Get type of stored object.\n-Definition: typeerasure.hh:190\n-Dune::Functions::TypeErasureBase::TypeErasureBase\n-TypeErasureBase(T &&t)\n-Construct wrapper from object.\n-Definition: typeerasure.hh:170\n-Dune::Functions::TypeErasureBase::wrapped_\n-PolymorphicSmallObject< Imp::TypeErasureWrapperInterface< Interface >,\n-bufferSize > wrapped_\n-Definition: typeerasure.hh:196\n-Dune::Functions::TypeErasureBase::TypeErasureBase\n-TypeErasureBase()=default\n-Default constructor.\n-Dune::Functions::TypeErasureBase::asInterface\n-Interface & asInterface()\n-Get mutable reference to wrapped object.\n-Definition: typeerasure.hh:178\n-Dune::Functions::TypeErasureBase::asInterface\n-const Interface & asInterface() const\n-Get reference to wrapped object.\n-Definition: typeerasure.hh:184\n+Dune::Functions::forwardCapture\n+auto forwardCapture(T &&t)\n+Create a capture object for perfect forwarding.\n+Definition: utility.hh:372\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00065.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00065.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: localfunction.hh File Reference</title>\n+<title>dune-functions: treedata.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -65,33 +65,38 @@\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">localfunction.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">treedata.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <type_traits></code><br />\n-<code>#include <dune/common/typeutilities.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00080_source.html\">dune/functions/common/defaultderivativetraits.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00068_source.html\">dune/functions/common/differentiablefunction.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00077_source.html\">dune/functions/common/localfunction_imp.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00062_source.html\">dune/functions/common/typeerasure.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00053_source.html\">dune/functions/common/functionconcepts.hh</a>></code><br />\n+<div class=\"textblock\"><code>#include <memory></code><br />\n+<code>#include <dune/common/shared_ptr.hh></code><br />\n+<code>#include <dune/typetree/pairtraversal.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00083_source.html\">dune/functions/gridfunctions/gridviewentityset.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00098_source.html\">dune/functions/gridfunctions/gridfunction.hh</a>></code><br />\n </div>\n <p><a href=\"a00065_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01243.html\">Dune::Functions::LocalFunction< Signature, LocalContext, DerivativeTraits, bufferSize ></a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01311.html\">Dune::Functions::UniformNodeVisitor< SimpleNodeVisitorImp, leafOnly ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Mixin for visitors that should apply the same action on all nodes. <a href=\"a01311.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01251.html\">Dune::Functions::LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Class storing local functions using type erasure. <a href=\"a01251.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01315.html\">Dune::Functions::TreeData< T, ND, LO ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Container allowing to attach data to each node of a tree. <a href=\"a01315.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01319.html\">Dune::Functions::TreeData< T, ND, LO >::InitVisitor</a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01323.html\">Dune::Functions::TreeData< T, ND, LO >::DestroyVisitor</a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01327.html\">Dune::Functions::TreeData< T, ND, LO >::CopyVisitor</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -6,30 +6,34 @@\n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * common\n Classes | Namespaces\n-localfunction.hh File Reference\n-#include <type_traits>\n-#include <dune/common/typeutilities.hh>\n-#include <dune/functions/common/defaultderivativetraits.hh>\n-#include <dune/functions/common/differentiablefunction.hh>\n-#include <dune/functions/common/localfunction_imp.hh>\n-#include <dune/functions/common/typeerasure.hh>\n-#include <dune/functions/common/functionconcepts.hh>\n+treedata.hh File Reference\n+#include <memory>\n+#include <dune/common/shared_ptr.hh>\n+#include <dune/typetree/pairtraversal.hh>\n+#include <dune/functions/gridfunctions/gridviewentityset.hh>\n+#include <dune/functions/gridfunctions/gridfunction.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-class \u00a0Dune::Functions::LocalFunction<_Signature,_LocalContext,\n- DerivativeTraits,_bufferSize_>\n+struct \u00a0Dune::Functions::UniformNodeVisitor<_SimpleNodeVisitorImp,_leafOnly_>\n+\u00a0 Mixin for visitors that should apply the same action on all nodes.\n+ More...\n \u00a0\n-class \u00a0Dune::Functions::LocalFunction<_Range(Domain),_LocalContext,\n- DerivativeTraits,_bufferSize_>\n-\u00a0 Class storing local functions using type erasure. More...\n+ class \u00a0Dune::Functions::TreeData<_T,_ND,_LO_>\n+\u00a0 Container allowing to attach data to each node of a tree. More...\n+\u00a0\n+struct \u00a0Dune::Functions::TreeData<_T,_ND,_LO_>::InitVisitor\n+\u00a0\n+struct \u00a0Dune::Functions::TreeData<_T,_ND,_LO_>::DestroyVisitor\n+\u00a0\n+struct \u00a0Dune::Functions::TreeData<_T,_ND,_LO_>::CopyVisitor\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n \n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00065_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00065_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: localfunction.hh Source File</title>\n+<title>dune-functions: treedata.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,152 +62,256 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">localfunction.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">treedata.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00065.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_TREEDATA_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_TREEDATA_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <type_traits></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span> </div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <dune/common/typeutilities.hh></span></div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00080.html\">dune/functions/common/defaultderivativetraits.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00068.html\">dune/functions/common/differentiablefunction.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00077.html\">dune/functions/common/localfunction_imp.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00062.html\">dune/functions/common/typeerasure.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00053.html\">dune/functions/common/functionconcepts.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span> </div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#warning This file is deprecated. Please use TreeContainer from dune-typetree instead.</span></div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <memory></span></div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span> </div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/common/shared_ptr.hh></span></div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <dune/typetree/pairtraversal.hh></span></div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00083.html\">dune/functions/gridfunctions/gridviewentityset.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00098.html\">dune/functions/gridfunctions/gridfunction.hh</a>></span></div>\n <div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n <div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n <div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"keyword\">namespace </span>Functions {</div>\n <div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span> </div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> </div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> </div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"comment\">/*</span></div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"comment\"> * Default implementation is empty</span></div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span><span class=\"comment\"> * The actual implementation is only given if Signature is an type</span></div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"comment\"> * describing a function signature as Range(Domain).</span></div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span><span class=\"comment\"> */</span></div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> LocalContext, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits=DefaultDerivativeTraits, <span class=\"keywordtype\">size_t</span> bufferSize=56></div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01243.html\"> 29</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01243.html\">LocalFunction</a></div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span>{};</div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> </div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> </div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> </div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span><span class=\"keyword\">namespace </span>Imp</div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span>{</div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> </div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> S, <span class=\"keyword\">class</span> L, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits, <span class=\"keywordtype\">size_t</span> bufferSize></div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> <span class=\"keyword\">struct </span>LocalFunctionTraits :</div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize></div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> {</div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> <span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> <span class=\"keyword\">using </span>Base=DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize>;</div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> </div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> <span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> <span class=\"keyword\">using </span>LocalContext = L;</div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> </div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> <span class=\"keyword\">using </span>DerivativeSignature = <span class=\"keyword\">typename</span> Base::DerivativeSignature;</div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> </div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> <span class=\"keyword\">using </span>DerivativeInterface = <a class=\"code hl_class\" href=\"a01243.html\">LocalFunction<DerivativeSignature, L, DerivativeTraits, bufferSize></a>;</div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> </div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> <span class=\"keyword\">using </span>Concept = LocalFunctionWrapperInterface<S, DerivativeInterface, L>;</div>\n-<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> </div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> B></div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> <span class=\"keyword\">using </span>Model = LocalFunctionWrapperImplementation<S, DerivativeInterface, L, B>;</div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> };</div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span>}</div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SimpleNodeVisitorImp, <span class=\"keywordtype\">bool</span> leafOnly></div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01311.html\"> 35</a></span><span class=\"keyword\">struct</span></div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span>[[deprecated(<span class=\"stringliteral\">"This is an implementation detail of the deprecated class TreeDate and thus deprecated itself."</span>)]]</div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span><a class=\"code hl_struct\" href=\"a01311.html\">UniformNodeVisitor</a> :</div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> <span class=\"keyword\">public</span> TypeTree::TreeVisitor,</div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> <span class=\"keyword\">public</span> TypeTree::DynamicTraversal</div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span>{</div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> <span class=\"comment\">// This is only enabled, if we want to incorporate inner nodes.</span></div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> <span class=\"comment\">// Checking leafOnly would be sufficient, but for SFINAE the</span></div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> <span class=\"comment\">// the enable_if condition must depend on the template parameter.</span></div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath,</div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> <span class=\"keyword\">typename</span> std::enable_if<(not leafOnly) and (not Node::isLeaf), <span class=\"keywordtype\">int</span>>::type = 0></div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01311.html#a06f9e8d92b5769fff46163021a2175ce\"> 46</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01311.html#a06f9e8d92b5769fff46163021a2175ce\">pre</a>(Node& node, TreePath treePath)</div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> {</div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> <span class=\"keyword\">static_cast<</span>SimpleNodeVisitorImp*<span class=\"keyword\">></span>(<span class=\"keyword\">this</span>)->apply(node, treePath);</div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> }</div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> </div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath,</div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> <span class=\"keyword\">typename</span> std::enable_if<(leafOnly) and (not Node::isLeaf), <span class=\"keywordtype\">int</span>>::type = 0></div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01311.html#a06f9e8d92b5769fff46163021a2175ce\"> 53</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01311.html#a06f9e8d92b5769fff46163021a2175ce\">pre</a>(Node& node, TreePath treePath)</div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> {}</div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> </div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath></div>\n+<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01311.html#a16683785d8080c47936577796e64eb78\"> 57</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01311.html#a16683785d8080c47936577796e64eb78\">leaf</a>(Node& node, TreePath treePath)</div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> {</div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> <span class=\"keyword\">static_cast<</span>SimpleNodeVisitorImp*<span class=\"keyword\">></span>(<span class=\"keyword\">this</span>)->apply(node, treePath);</div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> }</div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span>};</div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> </div>\n <div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> </div>\n <div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> </div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> </div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">class</span> LocalContext, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits, <span class=\"keywordtype\">size_t</span> bufferSize></div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01251.html\"> 87</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01243.html\">LocalFunction</a>< Range(Domain), LocalContext, DerivativeTraits, bufferSize> :</div>\n-<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01351.html\">TypeErasureBase</a><</div>\n-<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> typename Imp::LocalFunctionTraits<Range(Domain), LocalContext, DerivativeTraits, bufferSize>::Concept,</div>\n-<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> Imp::LocalFunctionTraits<Range(Domain), LocalContext, DerivativeTraits, bufferSize>::template Model></div>\n-<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span>{</div>\n-<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> <span class=\"keyword\">using </span>Traits = Imp::LocalFunctionTraits<Range(Domain), LocalContext, DerivativeTraits, bufferSize>;</div>\n-<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> </div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01351.html\">Base</a> = <a class=\"code hl_class\" href=\"a01351.html\">TypeErasureBase<typename Traits::Concept, Traits::template Model></a>;</div>\n-<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> </div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> <span class=\"keyword\">using </span>DerivativeInterface = <span class=\"keyword\">typename</span> <a class=\"code hl_class\" href=\"a01243.html\">Traits::DerivativeInterface</a>;</div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> </div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> </div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F, disableCopyMove<LocalFunction, F> = 0 ></div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01251.html#a6d54d317a0068c6bcb27a937afac321d\"> 112</a></span> <a class=\"code hl_function\" href=\"a01251.html#a6d54d317a0068c6bcb27a937afac321d\">LocalFunction</a>(F&& f) :</div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> <a class=\"code hl_class\" href=\"a01351.html\">Base</a>(std::forward<F>(f))</div>\n-<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> {</div>\n-<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> <span class=\"keyword\">static_assert</span>(Dune::Functions::Concept::isLocalFunction<F, Range(Domain), LocalContext>(), <span class=\"stringliteral\">"Trying to construct a LocalFunction from type that does not model the LocalFunction concept"</span>);</div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> }</div>\n-<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> </div>\n-<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01251.html#af06e8ffc9fe0be67a76a17cbf6c86c90\"> 118</a></span> <a class=\"code hl_function\" href=\"a01251.html#af06e8ffc9fe0be67a76a17cbf6c86c90\">LocalFunction</a>() = <span class=\"keywordflow\">default</span>;</div>\n-<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> </div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01251.html#ad6810aaf520c4e4e99fe9d4343332dde\"> 123</a></span> Range operator() (<span class=\"keyword\">const</span> Domain& x)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> <span class=\"keywordflow\">return</span> this->asInterface().operator()(x);</div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> }</div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> </div>\n-<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00208.html#ga525e3415d41db7f6b4557e6bd5b88726\"> 135</a></span> <span class=\"keyword\">friend</span> DerivativeInterface <a class=\"code hl_friend\" href=\"a00208.html#ga525e3415d41db7f6b4557e6bd5b88726\">derivative</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01243.html\">LocalFunction</a>& t)</div>\n-<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> {</div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> <span class=\"keywordflow\">return</span> t.asInterface().derivative();</div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> }</div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> </div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01251.html#ade625720d01e11b8e0bcaf06322633d9\"> 146</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01251.html#ade625720d01e11b8e0bcaf06322633d9\">bind</a>(<span class=\"keyword\">const</span> LocalContext& context)</div>\n+<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>ND, <span class=\"keywordtype\">bool</span> LO></div>\n+<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01315.html\"> 92</a></span><span class=\"keyword\">class</span></div>\n+<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span>[[deprecated(<span class=\"stringliteral\">"This class is deprecated. Please use TreeContainer from dune-typetree instead."</span>)]]</div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span><a class=\"code hl_class\" href=\"a01315.html\">TreeData</a></div>\n+<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span>{</div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> </div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> </div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01315.html#a1935d801dae08dcf1211c99400e8201c\"> 100</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01315.html#a1935d801dae08dcf1211c99400e8201c\">Tree</a> = T;</div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> </div>\n+<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01315.html#aad999148c3cbb4423a440febc8fa892c\"> 103</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01315.html#aad999148c3cbb4423a440febc8fa892c\">size_type</a> = <span class=\"keyword\">typename</span> Tree::size_type;</div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> </div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01315.html#a1244c033abbc69a54440772bbda67099\"> 106</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">bool</span> leafOnly = LO;</div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> </div>\n+<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Node></div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01315.html#a98e841c3feef5258c0536cbc27b07c6d\"> 110</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01315.html#a98e841c3feef5258c0536cbc27b07c6d\">NodeData</a> = ND<Node>;</div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> </div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span><span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01315.html#aa1173c59bbddcbf9f29bf2e09478d277\"> 113</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01315.html#aa1173c59bbddcbf9f29bf2e09478d277\">RawContainer</a> = std::vector<void*>;</div>\n+<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> </div>\n+<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> </div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> <span class=\"comment\">// Since we can generate the node data type only if</span></div>\n+<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> <span class=\"comment\">// we know the type of the node, we have to do</span></div>\n+<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> <span class=\"comment\">// initialization, copy, and destruction via a</span></div>\n+<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> <span class=\"comment\">// tree traversal. Once we can use C++14 this can</span></div>\n+<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> <span class=\"comment\">// be written in a much easier and more selfcontained</span></div>\n+<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> <span class=\"comment\">// ways using generic lambda functions.</span></div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> <span class=\"comment\">// Until then we need explicit visitor classes for</span></div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> <span class=\"comment\">// each operation.</span></div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> </div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01319.html\"> 125</a></span> <span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01319.html\">InitVisitor</a> :</div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> <span class=\"keyword\">public</span> <a class=\"code hl_struct\" href=\"a01311.html\">UniformNodeVisitor</a><InitVisitor, leafOnly></div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> {</div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01319.html#a936aaecf0f2ccc0e52fa3fb5a02a0b73\"> 128</a></span> <a class=\"code hl_function\" href=\"a01319.html#a936aaecf0f2ccc0e52fa3fb5a02a0b73\">InitVisitor</a>(<a class=\"code hl_typedef\" href=\"a01315.html#aa1173c59bbddcbf9f29bf2e09478d277\">RawContainer</a>& data) :</div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> data_(data)</div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> {}</div>\n+<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> </div>\n+<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath></div>\n+<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01319.html#ac5ffe2a6bf083fedfea129594cb56195\"> 133</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01319.html#ac5ffe2a6bf083fedfea129594cb56195\">apply</a>(Node& node, TreePath treePath)</div>\n+<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> {</div>\n+<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> <span class=\"keyword\">auto</span>&& index = node.treeIndex();</div>\n+<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> <span class=\"keywordflow\">if</span> (data_.size() < index+1)</div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> data_.resize(index+1, <span class=\"keyword\">nullptr</span>);</div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> data_[index] = <span class=\"keyword\">new</span> <a class=\"code hl_typedef\" href=\"a01315.html#a98e841c3feef5258c0536cbc27b07c6d\">NodeData<Node></a>;</div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> }</div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> </div>\n+<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> </div>\n+<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01319.html#af151e4c9b20411936e4bed4edc6d5042\"> 142</a></span> <a class=\"code hl_typedef\" href=\"a01315.html#aa1173c59bbddcbf9f29bf2e09478d277\">RawContainer</a>& <a class=\"code hl_variable\" href=\"a01319.html#af151e4c9b20411936e4bed4edc6d5042\">data_</a>;</div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> };</div>\n+<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> </div>\n+<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01323.html\"> 145</a></span> <span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01323.html\">DestroyVisitor</a> :</div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> <span class=\"keyword\">public</span> <a class=\"code hl_struct\" href=\"a01311.html\">UniformNodeVisitor</a><DestroyVisitor, leafOnly></div>\n <div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> {</div>\n-<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> this->asInterface().bind(context);</div>\n-<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> }</div>\n-<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> </div>\n-<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01251.html#a81e2881a71c9c47c2524e6354c34a17b\"> 154</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01251.html#a81e2881a71c9c47c2524e6354c34a17b\">unbind</a>()</div>\n-<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> {</div>\n-<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> this->asInterface().unbind();</div>\n-<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> }</div>\n-<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> </div>\n-<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01251.html#aa107dc076a48e19c9a0d38747426080e\"> 161</a></span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a01251.html#aa107dc076a48e19c9a0d38747426080e\">bound</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> <span class=\"keywordflow\">return</span> this->asInterface().bound();</div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> }</div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> </div>\n-<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01251.html#a478edd79e31ff224240e32bba6068cb6\"> 169</a></span> <span class=\"keyword\">const</span> LocalContext& <a class=\"code hl_function\" href=\"a01251.html#a478edd79e31ff224240e32bba6068cb6\">localContext</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> <span class=\"keywordflow\">return</span> this->asInterface().localContext();</div>\n-<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> }</div>\n-<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span>};</div>\n-<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> </div>\n-<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> </div>\n-<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> </div>\n-<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span>}} <span class=\"comment\">// namespace Dune::Functions</span></div>\n-<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> </div>\n-<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> </div>\n-<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> </div>\n-<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH</span></div>\n-<div class=\"ttc\" id=\"aa00053_html\"><div class=\"ttname\"><a href=\"a00053.html\">functionconcepts.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00062_html\"><div class=\"ttname\"><a href=\"a00062.html\">typeerasure.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00068_html\"><div class=\"ttname\"><a href=\"a00068.html\">differentiablefunction.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00077_html\"><div class=\"ttname\"><a href=\"a00077.html\">localfunction_imp.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00080_html\"><div class=\"ttname\"><a href=\"a00080.html\">defaultderivativetraits.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00208_html_ga525e3415d41db7f6b4557e6bd5b88726\"><div class=\"ttname\"><a href=\"a00208.html#ga525e3415d41db7f6b4557e6bd5b88726\">Dune::Functions::LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize >::derivative</a></div><div class=\"ttdeci\">friend DerivativeInterface derivative(const LocalFunction &t)</div><div class=\"ttdoc\">Get derivative of wrapped function.</div><div class=\"ttdef\"><b>Definition:</b> localfunction.hh:135</div></div>\n+<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01323.html#a4e10bb17191a2a979935bc1c0dc3a973\"> 148</a></span> <a class=\"code hl_function\" href=\"a01323.html#a4e10bb17191a2a979935bc1c0dc3a973\">DestroyVisitor</a>(<a class=\"code hl_typedef\" href=\"a01315.html#aa1173c59bbddcbf9f29bf2e09478d277\">RawContainer</a>& data) :</div>\n+<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> data_(data)</div>\n+<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> {}</div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> </div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath></div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01323.html#aebdbfaf521e7d90a2c11d853cb033426\"> 153</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01323.html#aebdbfaf521e7d90a2c11d853cb033426\">apply</a>(Node& node, TreePath treePath)</div>\n+<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> {</div>\n+<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> <span class=\"keyword\">auto</span>&& index = node.treeIndex();</div>\n+<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> <span class=\"keyword\">auto</span> p = (<a class=\"code hl_typedef\" href=\"a01315.html#a98e841c3feef5258c0536cbc27b07c6d\">NodeData<Node></a>*)(data_[index]);</div>\n+<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> <span class=\"keyword\">delete</span> p;</div>\n+<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> data_[index] = <span class=\"keyword\">nullptr</span>;</div>\n+<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> }</div>\n+<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> </div>\n+<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01323.html#a2c5abbd0a0f898836a2296df6e0a368b\"> 161</a></span> <a class=\"code hl_typedef\" href=\"a01315.html#aa1173c59bbddcbf9f29bf2e09478d277\">RawContainer</a>& <a class=\"code hl_variable\" href=\"a01323.html#a2c5abbd0a0f898836a2296df6e0a368b\">data_</a>;</div>\n+<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> };</div>\n+<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> </div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01327.html\"> 164</a></span> <span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01327.html\">CopyVisitor</a> :</div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> <span class=\"keyword\">public</span> <a class=\"code hl_struct\" href=\"a01311.html\">UniformNodeVisitor</a><CopyVisitor, leafOnly></div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> {</div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01327.html#a371fc07bc59460e748e55a64ab1d4a72\"> 167</a></span> <a class=\"code hl_function\" href=\"a01327.html#a371fc07bc59460e748e55a64ab1d4a72\">CopyVisitor</a>(<a class=\"code hl_class\" href=\"a01315.html\">TreeData</a>& thisTD, <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01315.html\">TreeData</a>& otherTD) :</div>\n+<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> thisTD_(thisTD),</div>\n+<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> otherTD_(otherTD)</div>\n+<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> {}</div>\n+<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> </div>\n+<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath></div>\n+<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01327.html#a37f69fa7de18120c393d1664a49874e3\"> 173</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01327.html#a37f69fa7de18120c393d1664a49874e3\">apply</a>(Node& node, TreePath treePath)</div>\n+<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> {</div>\n+<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> thisTD_[node] = otherTD_[node];</div>\n+<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> }</div>\n+<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> </div>\n+<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01327.html#a4717f1783d3acf1b0bfb4638e38707e7\"> 178</a></span> <a class=\"code hl_class\" href=\"a01315.html\">TreeData</a>& <a class=\"code hl_variable\" href=\"a01327.html#a4717f1783d3acf1b0bfb4638e38707e7\">thisTD_</a>;</div>\n+<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01327.html#a6373804408e297824cc81d5db7b661ef\"> 179</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01315.html\">TreeData</a>& <a class=\"code hl_variable\" href=\"a01327.html#a6373804408e297824cc81d5db7b661ef\">otherTD_</a>;</div>\n+<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> };</div>\n+<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> </div>\n+<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span> </div>\n+<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01315.html#a9c9b9e575cf5319c6969c556ba1458b4\"> 185</a></span> <a class=\"code hl_function\" href=\"a01315.html#a9c9b9e575cf5319c6969c556ba1458b4\">TreeData</a>() :</div>\n+<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> tree_(nullptr)</div>\n+<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> {}</div>\n+<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> </div>\n+<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01315.html#a0c0e69c7c9428c632dc7b2f42a9a078c\"> 196</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01315.html#a0c0e69c7c9428c632dc7b2f42a9a078c\">init</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01315.html#a1935d801dae08dcf1211c99400e8201c\">Tree</a>& tree)</div>\n+<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> {</div>\n+<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> <span class=\"keywordflow\">if</span> (tree_)</div>\n+<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> destroy();</div>\n+<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> tree_ = &tree;</div>\n+<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> TypeTree::applyToTree(*tree_, <a class=\"code hl_struct\" href=\"a01319.html\">InitVisitor</a>(data_));</div>\n+<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> }</div>\n+<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> </div>\n+<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01315.html#a0403c44735e8cd8f092addb50e32ba13\"> 205</a></span> <a class=\"code hl_function\" href=\"a01315.html#a0403c44735e8cd8f092addb50e32ba13\">TreeData</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01315.html\">TreeData</a>& other) :</div>\n+<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> tree_(other.tree_)</div>\n+<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> {</div>\n+<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span> TypeTree::applyToTree(*tree_, <a class=\"code hl_struct\" href=\"a01319.html\">InitVisitor</a>(data_));</div>\n+<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> TypeTree::applyToTree(*tree_, <a class=\"code hl_struct\" href=\"a01327.html\">CopyVisitor</a>(*<span class=\"keyword\">this</span>, other));</div>\n+<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> }</div>\n+<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> </div>\n+<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01315.html#a53718e19bd6b98f142c74963c30eb82c\"> 213</a></span> <a class=\"code hl_class\" href=\"a01315.html\">TreeData</a>& <a class=\"code hl_function\" href=\"a01315.html#a53718e19bd6b98f142c74963c30eb82c\">operator=</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01315.html\">TreeData</a>& other)</div>\n+<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> {</div>\n+<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> <span class=\"keywordflow\">if</span> (tree_)</div>\n+<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span> TypeTree::applyToTree(*tree_, <a class=\"code hl_struct\" href=\"a01323.html\">DestroyVisitor</a>(data_));</div>\n+<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> tree_ = other.<a class=\"code hl_variable\" href=\"a01315.html#a440574f9dc85ea21a5ba0df06a2e303d\">tree_</a>;</div>\n+<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> TypeTree::applyToTree(*tree_, <a class=\"code hl_struct\" href=\"a01327.html\">CopyVisitor</a>(*<span class=\"keyword\">this</span>, other));</div>\n+<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>;</div>\n+<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span> }</div>\n+<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> </div>\n+<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01315.html#a452f0597967568ab66780a958fc90efb\"> 223</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01315.html#a452f0597967568ab66780a958fc90efb\">destroy</a>()</div>\n+<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> {</div>\n+<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span> <span class=\"keywordflow\">if</span> (tree_)</div>\n+<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> TypeTree::applyToTree(*tree_, <a class=\"code hl_struct\" href=\"a01323.html\">DestroyVisitor</a>(data_));</div>\n+<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> tree_ = <span class=\"keyword\">nullptr</span>;</div>\n+<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> }</div>\n+<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> </div>\n+<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01315.html#a7f29e97c75bd31b9b8c6133af501d3a6\"> 231</a></span> <a class=\"code hl_function\" href=\"a01315.html#a7f29e97c75bd31b9b8c6133af501d3a6\">~TreeData</a>()</div>\n+<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> {</div>\n+<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> <span class=\"keywordflow\">if</span> (tree_)</div>\n+<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> TypeTree::applyToTree(*tree_, <a class=\"code hl_struct\" href=\"a01323.html\">DestroyVisitor</a>(data_));</div>\n+<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> }</div>\n+<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span> </div>\n+<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Node></div>\n+<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01315.html#aacdd830a099653f49d0cfea67b9127b8\"> 239</a></span> <a class=\"code hl_typedef\" href=\"a01315.html#a98e841c3feef5258c0536cbc27b07c6d\">NodeData<Node></a>& <a class=\"code hl_function\" href=\"a01315.html#aacdd830a099653f49d0cfea67b9127b8\">operator[]</a>(<span class=\"keyword\">const</span> Node& node)</div>\n+<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"> 240</span> {</div>\n+<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span> <span class=\"keywordflow\">return</span> *(<a class=\"code hl_typedef\" href=\"a01315.html#a98e841c3feef5258c0536cbc27b07c6d\">NodeData<Node></a>*)(data_[node.treeIndex()]);</div>\n+<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span> }</div>\n+<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> </div>\n+<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Node></div>\n+<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01315.html#a47f292983a06816d28e799a9fc5bedbc\"> 246</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01315.html#a98e841c3feef5258c0536cbc27b07c6d\">NodeData<Node></a>& <a class=\"code hl_function\" href=\"a01315.html#a47f292983a06816d28e799a9fc5bedbc\">operator[]</a>(<span class=\"keyword\">const</span> Node& node)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00247\" name=\"l00247\"></a><span class=\"lineno\"> 247</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"> 248</span> <span class=\"keywordflow\">return</span> *(<a class=\"code hl_typedef\" href=\"a01315.html#a98e841c3feef5258c0536cbc27b07c6d\">NodeData<Node></a>*)(data_[node.treeIndex()]);</div>\n+<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span> }</div>\n+<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span> </div>\n+<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span><span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span> </div>\n+<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01315.html#a440574f9dc85ea21a5ba0df06a2e303d\"> 253</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01315.html#a1935d801dae08dcf1211c99400e8201c\">Tree</a>* <a class=\"code hl_variable\" href=\"a01315.html#a440574f9dc85ea21a5ba0df06a2e303d\">tree_</a>;</div>\n+<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01315.html#aef7d80f127d617683599911067a331e8\"> 254</a></span> <a class=\"code hl_typedef\" href=\"a01315.html#aa1173c59bbddcbf9f29bf2e09478d277\">RawContainer</a> <a class=\"code hl_variable\" href=\"a01315.html#aef7d80f127d617683599911067a331e8\">data_</a>;</div>\n+<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span>};</div>\n+<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"> 256</span> </div>\n+<div class=\"line\"><a id=\"l00257\" name=\"l00257\"></a><span class=\"lineno\"> 257</span> </div>\n+<div class=\"line\"><a id=\"l00258\" name=\"l00258\"></a><span class=\"lineno\"> 258</span> </div>\n+<div class=\"line\"><a id=\"l00259\" name=\"l00259\"></a><span class=\"lineno\"> 259</span>} <span class=\"comment\">// namespace Functions</span></div>\n+<div class=\"line\"><a id=\"l00260\" name=\"l00260\"></a><span class=\"lineno\"> 260</span>} <span class=\"comment\">// namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00261\" name=\"l00261\"></a><span class=\"lineno\"> 261</span> </div>\n+<div class=\"line\"><a id=\"l00262\" name=\"l00262\"></a><span class=\"lineno\"> 262</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_TREEDATA_HH</span></div>\n+<div class=\"ttc\" id=\"aa00083_html\"><div class=\"ttname\"><a href=\"a00083.html\">gridviewentityset.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00098_html\"><div class=\"ttname\"><a href=\"a00098.html\">gridfunction.hh</a></div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa01243_html\"><div class=\"ttname\"><a href=\"a01243.html\">Dune::Functions::LocalFunction</a></div><div class=\"ttdef\"><b>Definition:</b> localfunction.hh:30</div></div>\n-<div class=\"ttc\" id=\"aa01251_html_a478edd79e31ff224240e32bba6068cb6\"><div class=\"ttname\"><a href=\"a01251.html#a478edd79e31ff224240e32bba6068cb6\">Dune::Functions::LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize >::localContext</a></div><div class=\"ttdeci\">const LocalContext & localContext() const</div><div class=\"ttdoc\">Obtain local context this LocalFunction is bound to.</div><div class=\"ttdef\"><b>Definition:</b> localfunction.hh:169</div></div>\n-<div class=\"ttc\" id=\"aa01251_html_a6d54d317a0068c6bcb27a937afac321d\"><div class=\"ttname\"><a href=\"a01251.html#a6d54d317a0068c6bcb27a937afac321d\">Dune::Functions::LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize >::LocalFunction</a></div><div class=\"ttdeci\">LocalFunction(F &&f)</div><div class=\"ttdoc\">Construct from function.</div><div class=\"ttdef\"><b>Definition:</b> localfunction.hh:112</div></div>\n-<div class=\"ttc\" id=\"aa01251_html_a81e2881a71c9c47c2524e6354c34a17b\"><div class=\"ttname\"><a href=\"a01251.html#a81e2881a71c9c47c2524e6354c34a17b\">Dune::Functions::LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize >::unbind</a></div><div class=\"ttdeci\">void unbind()</div><div class=\"ttdoc\">Unbind from local context.</div><div class=\"ttdef\"><b>Definition:</b> localfunction.hh:154</div></div>\n-<div class=\"ttc\" id=\"aa01251_html_aa107dc076a48e19c9a0d38747426080e\"><div class=\"ttname\"><a href=\"a01251.html#aa107dc076a48e19c9a0d38747426080e\">Dune::Functions::LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize >::bound</a></div><div class=\"ttdeci\">bool bound() const</div><div class=\"ttdoc\">Return if the local function is bound to a grid element.</div><div class=\"ttdef\"><b>Definition:</b> localfunction.hh:161</div></div>\n-<div class=\"ttc\" id=\"aa01251_html_ade625720d01e11b8e0bcaf06322633d9\"><div class=\"ttname\"><a href=\"a01251.html#ade625720d01e11b8e0bcaf06322633d9\">Dune::Functions::LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize >::bind</a></div><div class=\"ttdeci\">void bind(const LocalContext &context)</div><div class=\"ttdoc\">Bind function to a local context.</div><div class=\"ttdef\"><b>Definition:</b> localfunction.hh:146</div></div>\n-<div class=\"ttc\" id=\"aa01251_html_af06e8ffc9fe0be67a76a17cbf6c86c90\"><div class=\"ttname\"><a href=\"a01251.html#af06e8ffc9fe0be67a76a17cbf6c86c90\">Dune::Functions::LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize >::LocalFunction</a></div><div class=\"ttdeci\">LocalFunction()=default</div></div>\n-<div class=\"ttc\" id=\"aa01351_html\"><div class=\"ttname\"><a href=\"a01351.html\">Dune::Functions::TypeErasureBase</a></div><div class=\"ttdoc\">Base class for type-erased interface wrapper.</div><div class=\"ttdef\"><b>Definition:</b> typeerasure.hh:165</div></div>\n+<div class=\"ttc\" id=\"aa01311_html\"><div class=\"ttname\"><a href=\"a01311.html\">Dune::Functions::UniformNodeVisitor</a></div><div class=\"ttdoc\">Mixin for visitors that should apply the same action on all nodes.</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:40</div></div>\n+<div class=\"ttc\" id=\"aa01311_html_a06f9e8d92b5769fff46163021a2175ce\"><div class=\"ttname\"><a href=\"a01311.html#a06f9e8d92b5769fff46163021a2175ce\">Dune::Functions::UniformNodeVisitor::pre</a></div><div class=\"ttdeci\">void pre(Node &node, TreePath treePath)</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:46</div></div>\n+<div class=\"ttc\" id=\"aa01311_html_a16683785d8080c47936577796e64eb78\"><div class=\"ttname\"><a href=\"a01311.html#a16683785d8080c47936577796e64eb78\">Dune::Functions::UniformNodeVisitor::leaf</a></div><div class=\"ttdeci\">void leaf(Node &node, TreePath treePath)</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:57</div></div>\n+<div class=\"ttc\" id=\"aa01315_html\"><div class=\"ttname\"><a href=\"a01315.html\">Dune::Functions::TreeData</a></div><div class=\"ttdoc\">Container allowing to attach data to each node of a tree.</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:95</div></div>\n+<div class=\"ttc\" id=\"aa01315_html_a0403c44735e8cd8f092addb50e32ba13\"><div class=\"ttname\"><a href=\"a01315.html#a0403c44735e8cd8f092addb50e32ba13\">Dune::Functions::TreeData::TreeData</a></div><div class=\"ttdeci\">TreeData(const TreeData &other)</div><div class=\"ttdoc\">Copy constructor.</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:205</div></div>\n+<div class=\"ttc\" id=\"aa01315_html_a0c0e69c7c9428c632dc7b2f42a9a078c\"><div class=\"ttname\"><a href=\"a01315.html#a0c0e69c7c9428c632dc7b2f42a9a078c\">Dune::Functions::TreeData::init</a></div><div class=\"ttdeci\">void init(const Tree &tree)</div><div class=\"ttdoc\">Initialize from tree.</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:196</div></div>\n+<div class=\"ttc\" id=\"aa01315_html_a1935d801dae08dcf1211c99400e8201c\"><div class=\"ttname\"><a href=\"a01315.html#a1935d801dae08dcf1211c99400e8201c\">Dune::Functions::TreeData::Tree</a></div><div class=\"ttdeci\">T Tree</div><div class=\"ttdoc\">Type of tree the data is associated with.</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:100</div></div>\n+<div class=\"ttc\" id=\"aa01315_html_a440574f9dc85ea21a5ba0df06a2e303d\"><div class=\"ttname\"><a href=\"a01315.html#a440574f9dc85ea21a5ba0df06a2e303d\">Dune::Functions::TreeData::tree_</a></div><div class=\"ttdeci\">const Tree * tree_</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:253</div></div>\n+<div class=\"ttc\" id=\"aa01315_html_a452f0597967568ab66780a958fc90efb\"><div class=\"ttname\"><a href=\"a01315.html#a452f0597967568ab66780a958fc90efb\">Dune::Functions::TreeData::destroy</a></div><div class=\"ttdeci\">void destroy()</div><div class=\"ttdoc\">Destroy data.</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:223</div></div>\n+<div class=\"ttc\" id=\"aa01315_html_a47f292983a06816d28e799a9fc5bedbc\"><div class=\"ttname\"><a href=\"a01315.html#a47f292983a06816d28e799a9fc5bedbc\">Dune::Functions::TreeData::operator[]</a></div><div class=\"ttdeci\">const NodeData< Node > & operator[](const Node &node) const</div><div class=\"ttdoc\">Get reference to data associated to given node.</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:246</div></div>\n+<div class=\"ttc\" id=\"aa01315_html_a53718e19bd6b98f142c74963c30eb82c\"><div class=\"ttname\"><a href=\"a01315.html#a53718e19bd6b98f142c74963c30eb82c\">Dune::Functions::TreeData::operator=</a></div><div class=\"ttdeci\">TreeData & operator=(const TreeData &other)</div><div class=\"ttdoc\">Copy assignment.</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:213</div></div>\n+<div class=\"ttc\" id=\"aa01315_html_a7f29e97c75bd31b9b8c6133af501d3a6\"><div class=\"ttname\"><a href=\"a01315.html#a7f29e97c75bd31b9b8c6133af501d3a6\">Dune::Functions::TreeData::~TreeData</a></div><div class=\"ttdeci\">~TreeData()</div><div class=\"ttdoc\">Destructor.</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:231</div></div>\n+<div class=\"ttc\" id=\"aa01315_html_a98e841c3feef5258c0536cbc27b07c6d\"><div class=\"ttname\"><a href=\"a01315.html#a98e841c3feef5258c0536cbc27b07c6d\">Dune::Functions::TreeData::NodeData</a></div><div class=\"ttdeci\">ND< Node > NodeData</div><div class=\"ttdoc\">Template to determine the data type for given node type.</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:110</div></div>\n+<div class=\"ttc\" id=\"aa01315_html_a9c9b9e575cf5319c6969c556ba1458b4\"><div class=\"ttname\"><a href=\"a01315.html#a9c9b9e575cf5319c6969c556ba1458b4\">Dune::Functions::TreeData::TreeData</a></div><div class=\"ttdeci\">TreeData()</div><div class=\"ttdoc\">Default constructor.</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:185</div></div>\n+<div class=\"ttc\" id=\"aa01315_html_aa1173c59bbddcbf9f29bf2e09478d277\"><div class=\"ttname\"><a href=\"a01315.html#aa1173c59bbddcbf9f29bf2e09478d277\">Dune::Functions::TreeData::RawContainer</a></div><div class=\"ttdeci\">std::vector< void * > RawContainer</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:113</div></div>\n+<div class=\"ttc\" id=\"aa01315_html_aacdd830a099653f49d0cfea67b9127b8\"><div class=\"ttname\"><a href=\"a01315.html#aacdd830a099653f49d0cfea67b9127b8\">Dune::Functions::TreeData::operator[]</a></div><div class=\"ttdeci\">NodeData< Node > & operator[](const Node &node)</div><div class=\"ttdoc\">Get mutable reference to data associated to given node.</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:239</div></div>\n+<div class=\"ttc\" id=\"aa01315_html_aad999148c3cbb4423a440febc8fa892c\"><div class=\"ttname\"><a href=\"a01315.html#aad999148c3cbb4423a440febc8fa892c\">Dune::Functions::TreeData::size_type</a></div><div class=\"ttdeci\">typename Tree::size_type size_type</div><div class=\"ttdoc\">Type used for indices and size information.</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:103</div></div>\n+<div class=\"ttc\" id=\"aa01315_html_aef7d80f127d617683599911067a331e8\"><div class=\"ttname\"><a href=\"a01315.html#aef7d80f127d617683599911067a331e8\">Dune::Functions::TreeData::data_</a></div><div class=\"ttdeci\">RawContainer data_</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:254</div></div>\n+<div class=\"ttc\" id=\"aa01319_html\"><div class=\"ttname\"><a href=\"a01319.html\">Dune::Functions::TreeData::InitVisitor</a></div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:127</div></div>\n+<div class=\"ttc\" id=\"aa01319_html_a936aaecf0f2ccc0e52fa3fb5a02a0b73\"><div class=\"ttname\"><a href=\"a01319.html#a936aaecf0f2ccc0e52fa3fb5a02a0b73\">Dune::Functions::TreeData::InitVisitor::InitVisitor</a></div><div class=\"ttdeci\">InitVisitor(RawContainer &data)</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:128</div></div>\n+<div class=\"ttc\" id=\"aa01319_html_ac5ffe2a6bf083fedfea129594cb56195\"><div class=\"ttname\"><a href=\"a01319.html#ac5ffe2a6bf083fedfea129594cb56195\">Dune::Functions::TreeData::InitVisitor::apply</a></div><div class=\"ttdeci\">void apply(Node &node, TreePath treePath)</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:133</div></div>\n+<div class=\"ttc\" id=\"aa01319_html_af151e4c9b20411936e4bed4edc6d5042\"><div class=\"ttname\"><a href=\"a01319.html#af151e4c9b20411936e4bed4edc6d5042\">Dune::Functions::TreeData::InitVisitor::data_</a></div><div class=\"ttdeci\">RawContainer & data_</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:142</div></div>\n+<div class=\"ttc\" id=\"aa01323_html\"><div class=\"ttname\"><a href=\"a01323.html\">Dune::Functions::TreeData::DestroyVisitor</a></div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:147</div></div>\n+<div class=\"ttc\" id=\"aa01323_html_a2c5abbd0a0f898836a2296df6e0a368b\"><div class=\"ttname\"><a href=\"a01323.html#a2c5abbd0a0f898836a2296df6e0a368b\">Dune::Functions::TreeData::DestroyVisitor::data_</a></div><div class=\"ttdeci\">RawContainer & data_</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:161</div></div>\n+<div class=\"ttc\" id=\"aa01323_html_a4e10bb17191a2a979935bc1c0dc3a973\"><div class=\"ttname\"><a href=\"a01323.html#a4e10bb17191a2a979935bc1c0dc3a973\">Dune::Functions::TreeData::DestroyVisitor::DestroyVisitor</a></div><div class=\"ttdeci\">DestroyVisitor(RawContainer &data)</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:148</div></div>\n+<div class=\"ttc\" id=\"aa01323_html_aebdbfaf521e7d90a2c11d853cb033426\"><div class=\"ttname\"><a href=\"a01323.html#aebdbfaf521e7d90a2c11d853cb033426\">Dune::Functions::TreeData::DestroyVisitor::apply</a></div><div class=\"ttdeci\">void apply(Node &node, TreePath treePath)</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:153</div></div>\n+<div class=\"ttc\" id=\"aa01327_html\"><div class=\"ttname\"><a href=\"a01327.html\">Dune::Functions::TreeData::CopyVisitor</a></div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:166</div></div>\n+<div class=\"ttc\" id=\"aa01327_html_a371fc07bc59460e748e55a64ab1d4a72\"><div class=\"ttname\"><a href=\"a01327.html#a371fc07bc59460e748e55a64ab1d4a72\">Dune::Functions::TreeData::CopyVisitor::CopyVisitor</a></div><div class=\"ttdeci\">CopyVisitor(TreeData &thisTD, const TreeData &otherTD)</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:167</div></div>\n+<div class=\"ttc\" id=\"aa01327_html_a37f69fa7de18120c393d1664a49874e3\"><div class=\"ttname\"><a href=\"a01327.html#a37f69fa7de18120c393d1664a49874e3\">Dune::Functions::TreeData::CopyVisitor::apply</a></div><div class=\"ttdeci\">void apply(Node &node, TreePath treePath)</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:173</div></div>\n+<div class=\"ttc\" id=\"aa01327_html_a4717f1783d3acf1b0bfb4638e38707e7\"><div class=\"ttname\"><a href=\"a01327.html#a4717f1783d3acf1b0bfb4638e38707e7\">Dune::Functions::TreeData::CopyVisitor::thisTD_</a></div><div class=\"ttdeci\">TreeData & thisTD_</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:178</div></div>\n+<div class=\"ttc\" id=\"aa01327_html_a6373804408e297824cc81d5db7b661ef\"><div class=\"ttname\"><a href=\"a01327.html#a6373804408e297824cc81d5db7b661ef\">Dune::Functions::TreeData::CopyVisitor::otherTD_</a></div><div class=\"ttdeci\">const TreeData & otherTD_</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:179</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,189 +5,326 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * common\n-localfunction.hh\n+treedata.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH\n- 4#define DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH\n+ 3#ifndef DUNE_FUNCTIONS_COMMON_TREEDATA_HH\n+ 4#define DUNE_FUNCTIONS_COMMON_TREEDATA_HH\n 5\n- 6#include <type_traits>\n- 7\n- 8#include <dune/common/typeutilities.hh>\n- 9\n- 10#include <dune/functions/common/defaultderivativetraits.hh>\n- 11#include <dune/functions/common/differentiablefunction.hh>\n- 12#include <dune/functions/common/localfunction_imp.hh>\n- 13#include <dune/functions/common/typeerasure.hh>\n- 14#include <dune/functions/common/functionconcepts.hh>\n- 15\n- 16\n+ 6\n+ 7#warning This file is deprecated. Please use TreeContainer from dune-typetree\n+instead.\n+ 8\n+ 9#include <memory>\n+ 10\n+ 11#include <dune/common/shared_ptr.hh>\n+ 12\n+ 13#include <dune/typetree/pairtraversal.hh>\n+ 14\n+ 15#include <dune/functions/gridfunctions/gridviewentityset.hh>\n+ 16#include <dune/functions/gridfunctions/gridfunction.hh>\n 17\n 18namespace Dune {\n 19namespace Functions {\n 20\n- 21\n- 22\n- 23/*\n- 24 * Default implementation is empty\n- 25 * The actual implementation is only given if Signature is an type\n- 26 * describing a function signature as Range(Domain).\n- 27 */\n- 28template<class Signature, class LocalContext, template<class> class\n-DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>\n-29class LocalFunction\n- 30{};\n- 31\n- 32\n- 33\n- 34namespace Imp\n- 35{\n- 36\n- 38 template<class S, class L, template<class> class DerivativeTraits, size_t\n-bufferSize>\n- 39 struct LocalFunctionTraits :\n- 40 DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize>\n- 41 {\n- 42 protected:\n- 43 using Base=DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize>;\n- 44\n- 45 public:\n- 47 using LocalContext = L;\n- 48\n- 50 using DerivativeSignature = typename Base::DerivativeSignature;\n- 51\n- 53 using DerivativeInterface = LocalFunction<DerivativeSignature,_L,\n-DerivativeTraits,_bufferSize>;\n- 54\n- 56 using Concept = LocalFunctionWrapperInterface<S, DerivativeInterface, L>;\n- 57\n- 59 template<class B>\n- 60 using Model = LocalFunctionWrapperImplementation<S, DerivativeInterface, L,\n-B>;\n- 61 };\n- 62}\n+ 34template<class SimpleNodeVisitorImp, bool leafOnly>\n+35struct\n+ 36[[deprecated(\"This is an implementation detail of the deprecated class\n+TreeDate and thus deprecated itself.\")]]\n+ 37UniformNodeVisitor :\n+ 38 public TypeTree::TreeVisitor,\n+ 39 public TypeTree::DynamicTraversal\n+ 40{\n+ 41 // This is only enabled, if we want to incorporate inner nodes.\n+ 42 // Checking leafOnly would be sufficient, but for SFINAE the\n+ 43 // the enable_if condition must depend on the template parameter.\n+ 44 template<typename Node, typename TreePath,\n+ 45 typename std::enable_if<(not leafOnly) and (not Node::isLeaf), int>::type =\n+0>\n+46 void pre(Node& node, TreePath treePath)\n+ 47 {\n+ 48 static_cast<SimpleNodeVisitorImp*>(this)->apply(node, treePath);\n+ 49 }\n+ 50\n+ 51 template<typename Node, typename TreePath,\n+ 52 typename std::enable_if<(leafOnly) and (not Node::isLeaf), int>::type = 0>\n+53 void pre(Node& node, TreePath treePath)\n+ 54 {}\n+ 55\n+ 56 template<typename Node, typename TreePath>\n+57 void leaf(Node& node, TreePath treePath)\n+ 58 {\n+ 59 static_cast<SimpleNodeVisitorImp*>(this)->apply(node, treePath);\n+ 60 }\n+ 61};\n+ 62\n 63\n 64\n- 65\n- 86template<class Range, class Domain, class LocalContext, template<class>\n-class DerivativeTraits, size_t bufferSize>\n-87class LocalFunction< Range(Domain), LocalContext, DerivativeTraits,\n-bufferSize> :\n- 88 public TypeErasureBase<\n- 89 typename Imp::LocalFunctionTraits<Range(Domain), LocalContext,\n-DerivativeTraits, bufferSize>::Concept,\n- 90 Imp::LocalFunctionTraits<Range(Domain), LocalContext, DerivativeTraits,\n-bufferSize>::template Model>\n- 91{\n- 92 using Traits = Imp::LocalFunctionTraits<Range(Domain), LocalContext,\n-DerivativeTraits, bufferSize>;\n- 93\n- 94 using Base = TypeErasureBase<typename_Traits::Concept,_Traits::template\n-Model>;\n- 95\n- 96 using DerivativeInterface = typename Traits::DerivativeInterface;\n- 97\n- 98public:\n- 99\n- 111 template<class F, disableCopyMove<LocalFunction, F> = 0 >\n-112 LocalFunction(F&& f) :\n- 113 Base(std::forward<F>(f))\n- 114 {\n- 115 static_assert(Dune::Functions::Concept::isLocalFunction<F, Range(Domain),\n-LocalContext>(), \"Trying to construct a LocalFunction from type that does not\n-model the LocalFunction concept\");\n- 116 }\n- 117\n-118 LocalFunction() = default;\n- 119\n-123 Range operator() (const Domain& x) const\n- 124 {\n- 125 return this->asInterface().operator()(x);\n- 126 }\n- 127\n-135 friend DerivativeInterface derivative(const LocalFunction& t)\n- 136 {\n- 137 return t.asInterface().derivative();\n- 138 }\n- 139\n-146 void bind(const LocalContext& context)\n+ 91template<class T, template<class> class ND, bool LO>\n+92class\n+ 93[[deprecated(\"This class is deprecated. Please use TreeContainer from dune-\n+typetree instead.\")]]\n+ 94TreeData\n+ 95{\n+ 96\n+ 97public:\n+ 98\n+100 using Tree = T;\n+ 101\n+103 using size_type = typename Tree::size_type;\n+ 104\n+106 static const bool leafOnly = LO;\n+ 107\n+ 109 template<class Node>\n+110 using NodeData = ND<Node>;\n+ 111\n+ 112protected:\n+113 using RawContainer = std::vector<void*>;\n+ 114\n+ 115\n+ 116 // Since we can generate the node data type only if\n+ 117 // we know the type of the node, we have to do\n+ 118 // initialization, copy, and destruction via a\n+ 119 // tree traversal. Once we can use C++14 this can\n+ 120 // be written in a much easier and more selfcontained\n+ 121 // ways using generic lambda functions.\n+ 122 // Until then we need explicit visitor classes for\n+ 123 // each operation.\n+ 124\n+125 struct InitVisitor :\n+ 126 public UniformNodeVisitor<InitVisitor, leafOnly>\n+ 127 {\n+128 InitVisitor(RawContainer& data) :\n+ 129 data_(data)\n+ 130 {}\n+ 131\n+ 132 template<typename Node, typename TreePath>\n+133 void apply(Node& node, TreePath treePath)\n+ 134 {\n+ 135 auto&& index = node.treeIndex();\n+ 136 if (data_.size() < index+1)\n+ 137 data_.resize(index+1, nullptr);\n+ 138 data_[index] = new NodeData<Node>;\n+ 139 }\n+ 140\n+ 141\n+142 RawContainer& data_;\n+ 143 };\n+ 144\n+145 struct DestroyVisitor :\n+ 146 public UniformNodeVisitor<DestroyVisitor, leafOnly>\n 147 {\n- 148 this->asInterface().bind(context);\n- 149 }\n- 150\n-154 void unbind()\n- 155 {\n- 156 this->asInterface().unbind();\n- 157 }\n- 158\n-161 bool bound() const\n- 162 {\n- 163 return this->asInterface().bound();\n- 164 }\n- 165\n-169 const LocalContext& localContext() const\n- 170 {\n- 171 return this->asInterface().localContext();\n- 172 }\n- 173};\n- 174\n- 175\n- 176\n- 177}} // namespace Dune::Functions\n- 178\n- 179\n- 180\n- 181#endif // DUNE_FUNCTIONS_COMMON_LOCAL_FUNCTION_HH\n-functionconcepts.hh\n-typeerasure.hh\n-differentiablefunction.hh\n-localfunction_imp.hh\n-defaultderivativetraits.hh\n-Dune::Functions::LocalFunction<_Range(Domain),_LocalContext,_DerivativeTraits,\n-bufferSize_>::derivative\n-friend DerivativeInterface derivative(const LocalFunction &t)\n-Get derivative of wrapped function.\n-Definition: localfunction.hh:135\n+148 DestroyVisitor(RawContainer& data) :\n+ 149 data_(data)\n+ 150 {}\n+ 151\n+ 152 template<typename Node, typename TreePath>\n+153 void apply(Node& node, TreePath treePath)\n+ 154 {\n+ 155 auto&& index = node.treeIndex();\n+ 156 auto p = (NodeData<Node>*)(data_[index]);\n+ 157 delete p;\n+ 158 data_[index] = nullptr;\n+ 159 }\n+ 160\n+161 RawContainer& data_;\n+ 162 };\n+ 163\n+164 struct CopyVisitor :\n+ 165 public UniformNodeVisitor<CopyVisitor, leafOnly>\n+ 166 {\n+167 CopyVisitor(TreeData& thisTD, const TreeData& otherTD) :\n+ 168 thisTD_(thisTD),\n+ 169 otherTD_(otherTD)\n+ 170 {}\n+ 171\n+ 172 template<typename Node, typename TreePath>\n+173 void apply(Node& node, TreePath treePath)\n+ 174 {\n+ 175 thisTD_[node] = otherTD_[node];\n+ 176 }\n+ 177\n+178 TreeData& thisTD_;\n+179 const TreeData& otherTD_;\n+ 180 };\n+ 181\n+ 182public:\n+ 183\n+185 TreeData() :\n+ 186 tree_(nullptr)\n+ 187 {}\n+ 188\n+196 void init(const Tree& tree)\n+ 197 {\n+ 198 if (tree_)\n+ 199 destroy();\n+ 200 tree_ = &tree;\n+ 201 TypeTree::applyToTree(*tree_, InitVisitor(data_));\n+ 202 }\n+ 203\n+205 TreeData(const TreeData& other) :\n+ 206 tree_(other.tree_)\n+ 207 {\n+ 208 TypeTree::applyToTree(*tree_, InitVisitor(data_));\n+ 209 TypeTree::applyToTree(*tree_, CopyVisitor(*this, other));\n+ 210 }\n+ 211\n+213 TreeData& operator=(const TreeData& other)\n+ 214 {\n+ 215 if (tree_)\n+ 216 TypeTree::applyToTree(*tree_, DestroyVisitor(data_));\n+ 217 tree_ = other.tree_;\n+ 218 TypeTree::applyToTree(*tree_, CopyVisitor(*this, other));\n+ 219 return *this;\n+ 220 }\n+ 221\n+223 void destroy()\n+ 224 {\n+ 225 if (tree_)\n+ 226 TypeTree::applyToTree(*tree_, DestroyVisitor(data_));\n+ 227 tree_ = nullptr;\n+ 228 }\n+ 229\n+231 ~TreeData()\n+ 232 {\n+ 233 if (tree_)\n+ 234 TypeTree::applyToTree(*tree_, DestroyVisitor(data_));\n+ 235 }\n+ 236\n+ 238 template<class Node>\n+239 NodeData<Node>& operator[](const Node& node)\n+ 240 {\n+ 241 return *(NodeData<Node>*)(data_[node.treeIndex()]);\n+ 242 }\n+ 243\n+ 245 template<class Node>\n+246 const NodeData<Node>& operator[](const Node& node) const\n+ 247 {\n+ 248 return *(NodeData<Node>*)(data_[node.treeIndex()]);\n+ 249 }\n+ 250\n+ 251protected:\n+ 252\n+253 const Tree* tree_;\n+254 RawContainer data_;\n+ 255};\n+ 256\n+ 257\n+ 258\n+ 259} // namespace Functions\n+ 260} // namespace Dune\n+ 261\n+ 262#endif // DUNE_FUNCTIONS_COMMON_TREEDATA_HH\n+gridviewentityset.hh\n+gridfunction.hh\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::LocalFunction\n-Definition: localfunction.hh:30\n-Dune::Functions::LocalFunction<_Range(Domain),_LocalContext,_DerivativeTraits,\n-bufferSize_>::localContext\n-const LocalContext & localContext() const\n-Obtain local context this LocalFunction is bound to.\n-Definition: localfunction.hh:169\n-Dune::Functions::LocalFunction<_Range(Domain),_LocalContext,_DerivativeTraits,\n-bufferSize_>::LocalFunction\n-LocalFunction(F &&f)\n-Construct from function.\n-Definition: localfunction.hh:112\n-Dune::Functions::LocalFunction<_Range(Domain),_LocalContext,_DerivativeTraits,\n-bufferSize_>::unbind\n-void unbind()\n-Unbind from local context.\n-Definition: localfunction.hh:154\n-Dune::Functions::LocalFunction<_Range(Domain),_LocalContext,_DerivativeTraits,\n-bufferSize_>::bound\n-bool bound() const\n-Return if the local function is bound to a grid element.\n-Definition: localfunction.hh:161\n-Dune::Functions::LocalFunction<_Range(Domain),_LocalContext,_DerivativeTraits,\n-bufferSize_>::bind\n-void bind(const LocalContext &context)\n-Bind function to a local context.\n-Definition: localfunction.hh:146\n-Dune::Functions::LocalFunction<_Range(Domain),_LocalContext,_DerivativeTraits,\n-bufferSize_>::LocalFunction\n-LocalFunction()=default\n-Dune::Functions::TypeErasureBase\n-Base class for type-erased interface wrapper.\n-Definition: typeerasure.hh:165\n+Dune::Functions::UniformNodeVisitor\n+Mixin for visitors that should apply the same action on all nodes.\n+Definition: treedata.hh:40\n+Dune::Functions::UniformNodeVisitor::pre\n+void pre(Node &node, TreePath treePath)\n+Definition: treedata.hh:46\n+Dune::Functions::UniformNodeVisitor::leaf\n+void leaf(Node &node, TreePath treePath)\n+Definition: treedata.hh:57\n+Dune::Functions::TreeData\n+Container allowing to attach data to each node of a tree.\n+Definition: treedata.hh:95\n+Dune::Functions::TreeData::TreeData\n+TreeData(const TreeData &other)\n+Copy constructor.\n+Definition: treedata.hh:205\n+Dune::Functions::TreeData::init\n+void init(const Tree &tree)\n+Initialize from tree.\n+Definition: treedata.hh:196\n+Dune::Functions::TreeData::Tree\n+T Tree\n+Type of tree the data is associated with.\n+Definition: treedata.hh:100\n+Dune::Functions::TreeData::tree_\n+const Tree * tree_\n+Definition: treedata.hh:253\n+Dune::Functions::TreeData::destroy\n+void destroy()\n+Destroy data.\n+Definition: treedata.hh:223\n+Dune::Functions::TreeData::operator[]\n+const NodeData< Node > & operator[](const Node &node) const\n+Get reference to data associated to given node.\n+Definition: treedata.hh:246\n+Dune::Functions::TreeData::operator=\n+TreeData & operator=(const TreeData &other)\n+Copy assignment.\n+Definition: treedata.hh:213\n+Dune::Functions::TreeData::~TreeData\n+~TreeData()\n+Destructor.\n+Definition: treedata.hh:231\n+Dune::Functions::TreeData::NodeData\n+ND< Node > NodeData\n+Template to determine the data type for given node type.\n+Definition: treedata.hh:110\n+Dune::Functions::TreeData::TreeData\n+TreeData()\n+Default constructor.\n+Definition: treedata.hh:185\n+Dune::Functions::TreeData::RawContainer\n+std::vector< void * > RawContainer\n+Definition: treedata.hh:113\n+Dune::Functions::TreeData::operator[]\n+NodeData< Node > & operator[](const Node &node)\n+Get mutable reference to data associated to given node.\n+Definition: treedata.hh:239\n+Dune::Functions::TreeData::size_type\n+typename Tree::size_type size_type\n+Type used for indices and size information.\n+Definition: treedata.hh:103\n+Dune::Functions::TreeData::data_\n+RawContainer data_\n+Definition: treedata.hh:254\n+Dune::Functions::TreeData::InitVisitor\n+Definition: treedata.hh:127\n+Dune::Functions::TreeData::InitVisitor::InitVisitor\n+InitVisitor(RawContainer &data)\n+Definition: treedata.hh:128\n+Dune::Functions::TreeData::InitVisitor::apply\n+void apply(Node &node, TreePath treePath)\n+Definition: treedata.hh:133\n+Dune::Functions::TreeData::InitVisitor::data_\n+RawContainer & data_\n+Definition: treedata.hh:142\n+Dune::Functions::TreeData::DestroyVisitor\n+Definition: treedata.hh:147\n+Dune::Functions::TreeData::DestroyVisitor::data_\n+RawContainer & data_\n+Definition: treedata.hh:161\n+Dune::Functions::TreeData::DestroyVisitor::DestroyVisitor\n+DestroyVisitor(RawContainer &data)\n+Definition: treedata.hh:148\n+Dune::Functions::TreeData::DestroyVisitor::apply\n+void apply(Node &node, TreePath treePath)\n+Definition: treedata.hh:153\n+Dune::Functions::TreeData::CopyVisitor\n+Definition: treedata.hh:166\n+Dune::Functions::TreeData::CopyVisitor::CopyVisitor\n+CopyVisitor(TreeData &thisTD, const TreeData &otherTD)\n+Definition: treedata.hh:167\n+Dune::Functions::TreeData::CopyVisitor::apply\n+void apply(Node &node, TreePath treePath)\n+Definition: treedata.hh:173\n+Dune::Functions::TreeData::CopyVisitor::thisTD_\n+TreeData & thisTD_\n+Definition: treedata.hh:178\n+Dune::Functions::TreeData::CopyVisitor::otherTD_\n+const TreeData & otherTD_\n+Definition: treedata.hh:179\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00068.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00068.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: differentiablefunction.hh File Reference</title>\n+<title>dune-functions: polymorphicsmallobject.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -65,34 +65,26 @@\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">differentiablefunction.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">polymorphicsmallobject.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <type_traits></code><br />\n-<code>#include <dune/common/typeutilities.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00092_source.html\">dune/functions/common/type_traits.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00080_source.html\">dune/functions/common/defaultderivativetraits.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00098_source.html\">dune/functions/common/differentiablefunction_imp.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00086_source.html\">dune/functions/common/signature.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00062_source.html\">dune/functions/common/typeerasure.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00053_source.html\">dune/functions/common/functionconcepts.hh</a>></code><br />\n+<div class=\"textblock\"><code>#include <utility></code><br />\n+<code>#include <type_traits></code><br />\n </div>\n <p><a href=\"a00068_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01095.html\">Dune::Functions::DifferentiableFunction< Signature, DerivativeTraits, bufferSize ></a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01103.html\">Dune::Functions::DifferentiableFunction< Range(Domain), DerivativeTraits, bufferSize ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Class storing differentiable functions using type erasure. <a href=\"a01103.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01279.html\">Dune::Functions::PolymorphicSmallObject< Base, bufferSize ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A wrapper providing small object optimization with polymorphic types. <a href=\"a01279.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -6,31 +6,22 @@\n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * common\n Classes | Namespaces\n-differentiablefunction.hh File Reference\n+polymorphicsmallobject.hh File Reference\n+#include <utility>\n #include <type_traits>\n-#include <dune/common/typeutilities.hh>\n-#include <dune/functions/common/type_traits.hh>\n-#include <dune/functions/common/defaultderivativetraits.hh>\n-#include <dune/functions/common/differentiablefunction_imp.hh>\n-#include <dune/functions/common/signature.hh>\n-#include <dune/functions/common/typeerasure.hh>\n-#include <dune/functions/common/functionconcepts.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-class \u00a0Dune::Functions::DifferentiableFunction<_Signature,_DerivativeTraits,\n- bufferSize_>\n-\u00a0\n-class \u00a0Dune::Functions::DifferentiableFunction<_Range(Domain),\n- DerivativeTraits,_bufferSize_>\n-\u00a0 Class storing differentiable functions using type erasure. More...\n+class \u00a0Dune::Functions::PolymorphicSmallObject<_Base,_bufferSize_>\n+\u00a0 A wrapper providing small object optimization with polymorphic types.\n+ More...\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n \n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00068_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00068_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: differentiablefunction.hh Source File</title>\n+<title>dune-functions: polymorphicsmallobject.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,128 +62,164 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">differentiablefunction.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">polymorphicsmallobject.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00068.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <type_traits></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span> </div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <dune/common/typeutilities.hh></span></div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00092.html\">dune/functions/common/type_traits.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00080.html\">dune/functions/common/defaultderivativetraits.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00098.html\">dune/functions/common/differentiablefunction_imp.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00086.html\">dune/functions/common/signature.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00062.html\">dune/functions/common/typeerasure.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00053.html\">dune/functions/common/functionconcepts.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span> </div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> </div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"comment\">/*</span></div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"comment\"> * Default implementation is empty</span></div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"comment\"> * The actual implementation is only given if Signature is an type</span></div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span><span class=\"comment\"> * describing a function signature as Range(Domain).</span></div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"comment\"> */</span></div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits=DefaultDerivativeTraits, <span class=\"keywordtype\">size_t</span> bufferSize=56></div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01095.html\"> 28</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01095.html\">DifferentiableFunction</a></div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span>{};</div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> </div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> </div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> </div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span><span class=\"keyword\">namespace </span>Imp</div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span>{</div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> </div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> S, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits, <span class=\"keywordtype\">size_t</span> bufferSize></div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> <span class=\"keyword\">struct </span>DifferentiableFunctionTraits</div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> {</div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> <span class=\"keyword\">using </span>Signature = S;</div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> </div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> <span class=\"keyword\">using </span>Range = <span class=\"keyword\">typename</span> <a class=\"code hl_struct\" href=\"a01291.html\">SignatureTraits<Signature>::Range</a>;</div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> </div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> <span class=\"keyword\">using </span>Domain = <span class=\"keyword\">typename</span> <a class=\"code hl_struct\" href=\"a01291.html\">SignatureTraits<Signature>::Domain</a>;</div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> </div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> <span class=\"keyword\">using </span>DerivativeSignature = <span class=\"keyword\">typename</span> <a class=\"code hl_struct\" href=\"a01291.html\">SignatureTraits<Signature>::template</a> DerivativeSignature<DerivativeTraits>;</div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> </div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> <span class=\"keyword\">using </span>DerivativeInterface = <a class=\"code hl_class\" href=\"a01095.html\">DifferentiableFunction<DerivativeSignature, DerivativeTraits, bufferSize></a>;</div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> </div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> <span class=\"keyword\">using </span>Concept = DifferentiableFunctionWrapperInterface<Signature, DerivativeInterface>;</div>\n-<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> </div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> B></div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> <span class=\"keyword\">using </span>Model = DifferentiableFunctionWrapperImplementation<Signature, DerivativeInterface, B>;</div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> };</div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span>}</div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> </div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> </div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> </div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits, <span class=\"keywordtype\">size_t</span> bufferSize></div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01103.html\"> 81</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01095.html\">DifferentiableFunction</a>< Range(Domain), DerivativeTraits, bufferSize> :</div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01351.html\">TypeErasureBase</a><</div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> typename Imp::DifferentiableFunctionTraits<Range(Domain), DerivativeTraits, bufferSize>::Concept,</div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> Imp::DifferentiableFunctionTraits<Range(Domain), DerivativeTraits, bufferSize>::template Model></div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span>{</div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> <span class=\"keyword\">using </span>Traits = Imp::DifferentiableFunctionTraits<Range(Domain), DerivativeTraits, bufferSize>;</div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> </div>\n-<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01351.html\">Base</a> = <a class=\"code hl_class\" href=\"a01351.html\">TypeErasureBase<typename Traits::Concept, Traits::template Model></a>;</div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <utility></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <type_traits></span></div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Base, <span class=\"keywordtype\">size_t</span> bufferSize></div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01279.html\"> 44</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01279.html\">PolymorphicSmallObject</a></div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span>{</div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01279.html#ab91da8192c7c5d7a796d79145ce97c84\"> 49</a></span> <a class=\"code hl_function\" href=\"a01279.html#ab91da8192c7c5d7a796d79145ce97c84\">PolymorphicSmallObject</a>() :</div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> p_(nullptr)</div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> {}</div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> </div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>Derived,</div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> <span class=\"keyword\">typename</span> std::enable_if<std::is_base_of<Base, std::remove_cv_t<</div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> std::remove_reference_t<Derived>>>::value, <span class=\"keywordtype\">int</span>>::type = 0></div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01279.html#a480e7b17ee91d54d4cf4c7d33bfd67d9\"> 62</a></span> <a class=\"code hl_function\" href=\"a01279.html#a480e7b17ee91d54d4cf4c7d33bfd67d9\">PolymorphicSmallObject</a>(Derived&& derived)</div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> {</div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> <span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span> useBuffer = <span class=\"keyword\">sizeof</span>(Derived) <= bufferSize;</div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> (useBuffer) {</div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> p_ = <span class=\"keyword\">new</span> (&buffer_) Derived(std::forward<Derived>(derived));</div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> } <span class=\"keywordflow\">else</span> {</div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> p_ = <span class=\"keyword\">new</span> Derived(std::forward<Derived>(derived));</div>\n+<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> }</div>\n+<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> }</div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> </div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01279.html#a4b1d4df1c0a49f22c3da8beff0412560\"> 73</a></span> <a class=\"code hl_function\" href=\"a01279.html#a4b1d4df1c0a49f22c3da8beff0412560\">PolymorphicSmallObject</a>(<a class=\"code hl_class\" href=\"a01279.html\">PolymorphicSmallObject</a>&& other) <span class=\"keyword\">noexcept</span></div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> {</div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> moveToWrappedObject(std::move(other));</div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> }</div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> </div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01279.html#a9d9b0d1436228de2c11df7acacad66ae\"> 79</a></span> <a class=\"code hl_function\" href=\"a01279.html#a9d9b0d1436228de2c11df7acacad66ae\">PolymorphicSmallObject</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01279.html\">PolymorphicSmallObject</a>& other)</div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> {</div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> copyToWrappedObject(other);</div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> }</div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> </div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01279.html#aa0714dd1c60221fbbd867f9796ccf722\"> 85</a></span> <a class=\"code hl_function\" href=\"a01279.html#aa0714dd1c60221fbbd867f9796ccf722\">~PolymorphicSmallObject</a>()</div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> {</div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> destroyWrappedObject();</div>\n+<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> }</div>\n <div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> </div>\n-<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> <span class=\"keyword\">using </span>DerivativeInterface = <span class=\"keyword\">typename</span> <a class=\"code hl_class\" href=\"a01095.html\">Traits::DerivativeInterface</a>;</div>\n-<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> </div>\n-<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> </div>\n-<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F, disableCopyMove<DifferentiableFunction, F> = 0 ></div>\n-<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01103.html#a2bfab7479475446c596aaa715e392e51\"> 106</a></span> <a class=\"code hl_function\" href=\"a01103.html#a2bfab7479475446c596aaa715e392e51\">DifferentiableFunction</a>(F&& f) :</div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> <a class=\"code hl_class\" href=\"a01351.html\">Base</a>(std::forward<F>(f))</div>\n-<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> {</div>\n-<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> <span class=\"keyword\">static_assert</span>(Dune::Functions::Concept::isFunction<F, Range(Domain)>(), <span class=\"stringliteral\">"Trying to construct a DifferentiableFunction from type that does not model the Function concept"</span>);</div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> }</div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> </div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01103.html#aeec09a544bd23e1fabc708ae576ebb91\"> 113</a></span> <a class=\"code hl_function\" href=\"a01103.html#aeec09a544bd23e1fabc708ae576ebb91\">DifferentiableFunction</a>() = <span class=\"keywordflow\">default</span>;</div>\n+<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01279.html#a540e643bdb360a590d5571d82509e119\"> 91</a></span> <a class=\"code hl_class\" href=\"a01279.html\">PolymorphicSmallObject</a>& <a class=\"code hl_function\" href=\"a01279.html#a540e643bdb360a590d5571d82509e119\">operator=</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01279.html\">PolymorphicSmallObject</a>& other)</div>\n+<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> {</div>\n+<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> <span class=\"keywordflow\">if</span> (&other!=<span class=\"keyword\">this</span>)</div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> {</div>\n+<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> destroyWrappedObject();</div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> copyToWrappedObject(other);</div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> }</div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>;</div>\n+<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> }</div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> </div>\n+<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01279.html#a88a795d1d9914c3ac19aa2b72ae16e81\"> 102</a></span> <a class=\"code hl_class\" href=\"a01279.html\">PolymorphicSmallObject</a>& <a class=\"code hl_function\" href=\"a01279.html#a88a795d1d9914c3ac19aa2b72ae16e81\">operator=</a>(<a class=\"code hl_class\" href=\"a01279.html\">PolymorphicSmallObject</a>&& other) <span class=\"keyword\">noexcept</span></div>\n+<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> {</div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> destroyWrappedObject();</div>\n+<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> moveToWrappedObject(std::move(other));</div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>;</div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> }</div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> </div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01279.html#a0cb41b8c9849201989384100e3d7409c\"> 110</a></span> <span class=\"keyword\">explicit</span> <span class=\"keyword\">operator</span> bool()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> <span class=\"keywordflow\">return</span> p_;</div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> }</div>\n <div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> </div>\n-<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01103.html#a92008c20202968cf4d5f7d705a06c1cc\"> 118</a></span> Range operator() (<span class=\"keyword\">const</span> Domain& x)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> <span class=\"keywordflow\">return</span> this->asInterface().operator()(x);</div>\n-<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> }</div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> </div>\n-<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00208.html#ga5f71e575dd0d9891e038c9b6d2ba7bdb\"> 130</a></span> <span class=\"keyword\">friend</span> DerivativeInterface <a class=\"code hl_friend\" href=\"a00208.html#ga5f71e575dd0d9891e038c9b6d2ba7bdb\">derivative</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01095.html\">DifferentiableFunction</a>& t)</div>\n-<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> {</div>\n-<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> <span class=\"keywordflow\">return</span> t.asInterface().derivative();</div>\n-<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> }</div>\n-<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span>};</div>\n-<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> </div>\n-<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> </div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> </div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span>}} <span class=\"comment\">// namespace Dune::Functions</span></div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> </div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> </div>\n-<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> </div>\n-<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_HH</span></div>\n-<div class=\"ttc\" id=\"aa00053_html\"><div class=\"ttname\"><a href=\"a00053.html\">functionconcepts.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00062_html\"><div class=\"ttname\"><a href=\"a00062.html\">typeerasure.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00080_html\"><div class=\"ttname\"><a href=\"a00080.html\">defaultderivativetraits.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00086_html\"><div class=\"ttname\"><a href=\"a00086.html\">signature.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00092_html\"><div class=\"ttname\"><a href=\"a00092.html\">type_traits.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00098_html\"><div class=\"ttname\"><a href=\"a00098.html\">differentiablefunction_imp.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00208_html_ga5f71e575dd0d9891e038c9b6d2ba7bdb\"><div class=\"ttname\"><a href=\"a00208.html#ga5f71e575dd0d9891e038c9b6d2ba7bdb\">Dune::Functions::DifferentiableFunction< Range(Domain), DerivativeTraits, bufferSize >::derivative</a></div><div class=\"ttdeci\">friend DerivativeInterface derivative(const DifferentiableFunction &t)</div><div class=\"ttdoc\">Get derivative of wrapped function.</div><div class=\"ttdef\"><b>Definition:</b> differentiablefunction.hh:130</div></div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01279.html#a40b4620d6b4cdf63072914d621059db0\"> 116</a></span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a01279.html#a40b4620d6b4cdf63072914d621059db0\">bufferUsed</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> <span class=\"keywordflow\">return</span> ((<span class=\"keywordtype\">void</span>*) (p_) == (<span class=\"keywordtype\">void</span>*)(&buffer_));</div>\n+<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> }</div>\n+<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> </div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01279.html#a194b49151e7264d77ca70777bf1c3d48\"> 122</a></span> <span class=\"keyword\">const</span> Base& <a class=\"code hl_function\" href=\"a01279.html#a194b49151e7264d77ca70777bf1c3d48\">get</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> <span class=\"keywordflow\">return</span> *p_;</div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> }</div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> </div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01279.html#aead63ee7264c3395258988ac2b319983\"> 128</a></span> Base& <a class=\"code hl_function\" href=\"a01279.html#aead63ee7264c3395258988ac2b319983\">get</a>()</div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> {</div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> <span class=\"keywordflow\">return</span> *p_;</div>\n+<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> }</div>\n+<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> </div>\n+<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> </div>\n+<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> <span class=\"keywordtype\">void</span> destroyWrappedObject() noexcept</div>\n+<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> {</div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> <span class=\"keywordflow\">if</span> (<span class=\"keyword\">operator</span> <span class=\"keywordtype\">bool</span>())</div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> {</div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> <span class=\"keywordflow\">if</span> (<a class=\"code hl_function\" href=\"a01279.html#a40b4620d6b4cdf63072914d621059db0\">bufferUsed</a>())</div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> p_->~Base();</div>\n+<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> <span class=\"keywordflow\">else</span></div>\n+<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> <span class=\"keyword\">delete</span> p_;</div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> }</div>\n+<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> }</div>\n+<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> </div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> <span class=\"keywordtype\">void</span> moveToWrappedObject(<a class=\"code hl_function\" href=\"a01279.html#ab91da8192c7c5d7a796d79145ce97c84\">PolymorphicSmallObject</a>&& other) <span class=\"keyword\">noexcept</span></div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> {</div>\n+<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> <span class=\"keywordflow\">if</span> (other.bufferUsed())</div>\n+<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> p_ = other.p_->move(&buffer_);</div>\n+<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> <span class=\"keywordflow\">else</span></div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> {</div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> <span class=\"comment\">// We don't need to check for &other_!=this, because you can't</span></div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> <span class=\"comment\">// have an rvalue to *this and call it's assignment/constructor</span></div>\n+<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> <span class=\"comment\">// at the same time. (Despite trying to shoot yourself in the foot</span></div>\n+<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> <span class=\"comment\">// with std::move explicitly.)</span></div>\n+<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> </div>\n+<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> <span class=\"comment\">// Take ownership of allocated object</span></div>\n+<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> p_ = other.p_;</div>\n+<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> </div>\n+<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> <span class=\"comment\">// Leave pointer in a clean state to avoid double freeing it.</span></div>\n+<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> other.p_ = 0;</div>\n+<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> }</div>\n+<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> }</div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> </div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> <span class=\"keywordtype\">void</span> copyToWrappedObject(<span class=\"keyword\">const</span> <a class=\"code hl_function\" href=\"a01279.html#ab91da8192c7c5d7a796d79145ce97c84\">PolymorphicSmallObject</a>& other)</div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> {</div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> <span class=\"keywordflow\">if</span> (other.bufferUsed())</div>\n+<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> p_ = other.p_->clone(&buffer_);</div>\n+<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> <span class=\"keywordflow\">else</span></div>\n+<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> p_ = other.p_->clone();</div>\n+<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> }</div>\n+<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> </div>\n+<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> std::aligned_storage_t<bufferSize> buffer_;</div>\n+<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> Base* p_;</div>\n+<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span>};</div>\n+<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> </div>\n+<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> </div>\n+<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span>} <span class=\"comment\">// namespace Functions</span></div>\n+<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span>} <span class=\"comment\">// namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> </div>\n+<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH</span></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa01095_html\"><div class=\"ttname\"><a href=\"a01095.html\">Dune::Functions::DifferentiableFunction</a></div><div class=\"ttdef\"><b>Definition:</b> differentiablefunction.hh:29</div></div>\n-<div class=\"ttc\" id=\"aa01103_html_a2bfab7479475446c596aaa715e392e51\"><div class=\"ttname\"><a href=\"a01103.html#a2bfab7479475446c596aaa715e392e51\">Dune::Functions::DifferentiableFunction< Range(Domain), DerivativeTraits, bufferSize >::DifferentiableFunction</a></div><div class=\"ttdeci\">DifferentiableFunction(F &&f)</div><div class=\"ttdoc\">Construct from function.</div><div class=\"ttdef\"><b>Definition:</b> differentiablefunction.hh:106</div></div>\n-<div class=\"ttc\" id=\"aa01103_html_aeec09a544bd23e1fabc708ae576ebb91\"><div class=\"ttname\"><a href=\"a01103.html#aeec09a544bd23e1fabc708ae576ebb91\">Dune::Functions::DifferentiableFunction< Range(Domain), DerivativeTraits, bufferSize >::DifferentiableFunction</a></div><div class=\"ttdeci\">DifferentiableFunction()=default</div><div class=\"ttdoc\">Default constructor.</div></div>\n-<div class=\"ttc\" id=\"aa01291_html\"><div class=\"ttname\"><a href=\"a01291.html\">Dune::Functions::SignatureTraits</a></div><div class=\"ttdoc\">Helper class to deduce the signature of a callable.</div><div class=\"ttdef\"><b>Definition:</b> signature.hh:56</div></div>\n-<div class=\"ttc\" id=\"aa01351_html\"><div class=\"ttname\"><a href=\"a01351.html\">Dune::Functions::TypeErasureBase</a></div><div class=\"ttdoc\">Base class for type-erased interface wrapper.</div><div class=\"ttdef\"><b>Definition:</b> typeerasure.hh:165</div></div>\n+<div class=\"ttc\" id=\"aa01279_html\"><div class=\"ttname\"><a href=\"a01279.html\">Dune::Functions::PolymorphicSmallObject</a></div><div class=\"ttdoc\">A wrapper providing small object optimization with polymorphic types.</div><div class=\"ttdef\"><b>Definition:</b> polymorphicsmallobject.hh:45</div></div>\n+<div class=\"ttc\" id=\"aa01279_html_a194b49151e7264d77ca70777bf1c3d48\"><div class=\"ttname\"><a href=\"a01279.html#a194b49151e7264d77ca70777bf1c3d48\">Dune::Functions::PolymorphicSmallObject::get</a></div><div class=\"ttdeci\">const Base & get() const</div><div class=\"ttdoc\">Obtain reference to stored object.</div><div class=\"ttdef\"><b>Definition:</b> polymorphicsmallobject.hh:122</div></div>\n+<div class=\"ttc\" id=\"aa01279_html_a40b4620d6b4cdf63072914d621059db0\"><div class=\"ttname\"><a href=\"a01279.html#a40b4620d6b4cdf63072914d621059db0\">Dune::Functions::PolymorphicSmallObject::bufferUsed</a></div><div class=\"ttdeci\">bool bufferUsed() const</div><div class=\"ttdoc\">Check if object is stored in internal stack buffer.</div><div class=\"ttdef\"><b>Definition:</b> polymorphicsmallobject.hh:116</div></div>\n+<div class=\"ttc\" id=\"aa01279_html_a480e7b17ee91d54d4cf4c7d33bfd67d9\"><div class=\"ttname\"><a href=\"a01279.html#a480e7b17ee91d54d4cf4c7d33bfd67d9\">Dune::Functions::PolymorphicSmallObject::PolymorphicSmallObject</a></div><div class=\"ttdeci\">PolymorphicSmallObject(Derived &&derived)</div><div class=\"ttdoc\">Construct from object.</div><div class=\"ttdef\"><b>Definition:</b> polymorphicsmallobject.hh:62</div></div>\n+<div class=\"ttc\" id=\"aa01279_html_a4b1d4df1c0a49f22c3da8beff0412560\"><div class=\"ttname\"><a href=\"a01279.html#a4b1d4df1c0a49f22c3da8beff0412560\">Dune::Functions::PolymorphicSmallObject::PolymorphicSmallObject</a></div><div class=\"ttdeci\">PolymorphicSmallObject(PolymorphicSmallObject &&other) noexcept</div><div class=\"ttdoc\">Move constructor from other PolymorphicSmallObject.</div><div class=\"ttdef\"><b>Definition:</b> polymorphicsmallobject.hh:73</div></div>\n+<div class=\"ttc\" id=\"aa01279_html_a540e643bdb360a590d5571d82509e119\"><div class=\"ttname\"><a href=\"a01279.html#a540e643bdb360a590d5571d82509e119\">Dune::Functions::PolymorphicSmallObject::operator=</a></div><div class=\"ttdeci\">PolymorphicSmallObject & operator=(const PolymorphicSmallObject &other)</div><div class=\"ttdoc\">Copy assignment from other PolymorphicSmallObject.</div><div class=\"ttdef\"><b>Definition:</b> polymorphicsmallobject.hh:91</div></div>\n+<div class=\"ttc\" id=\"aa01279_html_a88a795d1d9914c3ac19aa2b72ae16e81\"><div class=\"ttname\"><a href=\"a01279.html#a88a795d1d9914c3ac19aa2b72ae16e81\">Dune::Functions::PolymorphicSmallObject::operator=</a></div><div class=\"ttdeci\">PolymorphicSmallObject & operator=(PolymorphicSmallObject &&other) noexcept</div><div class=\"ttdoc\">Move assignment from other PolymorphicSmallObject.</div><div class=\"ttdef\"><b>Definition:</b> polymorphicsmallobject.hh:102</div></div>\n+<div class=\"ttc\" id=\"aa01279_html_a9d9b0d1436228de2c11df7acacad66ae\"><div class=\"ttname\"><a href=\"a01279.html#a9d9b0d1436228de2c11df7acacad66ae\">Dune::Functions::PolymorphicSmallObject::PolymorphicSmallObject</a></div><div class=\"ttdeci\">PolymorphicSmallObject(const PolymorphicSmallObject &other)</div><div class=\"ttdoc\">Copy constructor from other PolymorphicSmallObject.</div><div class=\"ttdef\"><b>Definition:</b> polymorphicsmallobject.hh:79</div></div>\n+<div class=\"ttc\" id=\"aa01279_html_aa0714dd1c60221fbbd867f9796ccf722\"><div class=\"ttname\"><a href=\"a01279.html#aa0714dd1c60221fbbd867f9796ccf722\">Dune::Functions::PolymorphicSmallObject::~PolymorphicSmallObject</a></div><div class=\"ttdeci\">~PolymorphicSmallObject()</div><div class=\"ttdoc\">Destructor.</div><div class=\"ttdef\"><b>Definition:</b> polymorphicsmallobject.hh:85</div></div>\n+<div class=\"ttc\" id=\"aa01279_html_ab91da8192c7c5d7a796d79145ce97c84\"><div class=\"ttname\"><a href=\"a01279.html#ab91da8192c7c5d7a796d79145ce97c84\">Dune::Functions::PolymorphicSmallObject::PolymorphicSmallObject</a></div><div class=\"ttdeci\">PolymorphicSmallObject()</div><div class=\"ttdoc\">Default constructor.</div><div class=\"ttdef\"><b>Definition:</b> polymorphicsmallobject.hh:49</div></div>\n+<div class=\"ttc\" id=\"aa01279_html_aead63ee7264c3395258988ac2b319983\"><div class=\"ttname\"><a href=\"a01279.html#aead63ee7264c3395258988ac2b319983\">Dune::Functions::PolymorphicSmallObject::get</a></div><div class=\"ttdeci\">Base & get()</div><div class=\"ttdoc\">Obtain mutable reference to stored object.</div><div class=\"ttdef\"><b>Definition:</b> polymorphicsmallobject.hh:128</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,153 +5,192 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * common\n-differentiablefunction.hh\n+polymorphicsmallobject.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_HH\n- 4#define DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_HH\n+ 3#ifndef DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH\n+ 4#define DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH\n 5\n- 6#include <type_traits>\n- 7\n- 8#include <dune/common/typeutilities.hh>\n- 9\n- 10#include <dune/functions/common/type_traits.hh>\n- 11#include <dune/functions/common/defaultderivativetraits.hh>\n- 12#include <dune/functions/common/differentiablefunction_imp.hh>\n- 13#include <dune/functions/common/signature.hh>\n- 14#include <dune/functions/common/typeerasure.hh>\n- 15#include <dune/functions/common/functionconcepts.hh>\n- 16\n- 17namespace Dune {\n- 18namespace Functions {\n- 19\n- 20\n- 21\n- 22/*\n- 23 * Default implementation is empty\n- 24 * The actual implementation is only given if Signature is an type\n- 25 * describing a function signature as Range(Domain).\n- 26 */\n- 27template<class Signature, template<class> class\n-DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>\n-28class DifferentiableFunction\n- 29{};\n- 30\n- 31\n- 32\n- 33namespace Imp\n- 34{\n- 35\n- 37 template<class S, template<class> class DerivativeTraits, size_t\n-bufferSize>\n- 38 struct DifferentiableFunctionTraits\n- 39 {\n- 41 using Signature = S;\n- 42\n- 44 using Range = typename SignatureTraits<Signature>::Range;\n- 45\n- 47 using Domain = typename SignatureTraits<Signature>::Domain;\n- 48\n- 50 using DerivativeSignature = typename SignatureTraits<Signature>::template\n-DerivativeSignature<DerivativeTraits>;\n- 51\n- 53 using DerivativeInterface = DifferentiableFunction<DerivativeSignature,\n-DerivativeTraits,_bufferSize>;\n- 54\n- 56 using Concept = DifferentiableFunctionWrapperInterface<Signature,\n-DerivativeInterface>;\n- 57\n- 59 template<class B>\n- 60 using Model = DifferentiableFunctionWrapperImplementation<Signature,\n-DerivativeInterface, B>;\n- 61 };\n- 62}\n- 63\n- 64\n- 65\n- 80template<class Range, class Domain, template<class> class DerivativeTraits,\n-size_t bufferSize>\n-81class DifferentiableFunction< Range(Domain), DerivativeTraits, bufferSize> :\n- 82 public TypeErasureBase<\n- 83 typename Imp::DifferentiableFunctionTraits<Range(Domain), DerivativeTraits,\n-bufferSize>::Concept,\n- 84 Imp::DifferentiableFunctionTraits<Range(Domain), DerivativeTraits,\n-bufferSize>::template Model>\n- 85{\n- 86 using Traits = Imp::DifferentiableFunctionTraits<Range(Domain),\n-DerivativeTraits, bufferSize>;\n- 87\n- 88 using Base = TypeErasureBase<typename_Traits::Concept,_Traits::template\n-Model>;\n+ 6#include <utility>\n+ 7#include <type_traits>\n+ 8\n+ 9namespace Dune {\n+ 10namespace Functions {\n+ 11\n+ 12\n+ 43template<class Base, size_t bufferSize>\n+44class PolymorphicSmallObject\n+ 45{\n+ 46public:\n+ 47\n+49 PolymorphicSmallObject() :\n+ 50 p_(nullptr)\n+ 51 {}\n+ 52\n+ 59 template<class Derived,\n+ 60 typename std::enable_if<std::is_base_of<Base, std::remove_cv_t<\n+ 61 std::remove_reference_t<Derived>>>::value, int>::type = 0>\n+62 PolymorphicSmallObject(Derived&& derived)\n+ 63 {\n+ 64 constexpr bool useBuffer = sizeof(Derived) <= bufferSize;\n+ 65 if constexpr (useBuffer) {\n+ 66 p_ = new (&buffer_) Derived(std::forward<Derived>(derived));\n+ 67 } else {\n+ 68 p_ = new Derived(std::forward<Derived>(derived));\n+ 69 }\n+ 70 }\n+ 71\n+73 PolymorphicSmallObject(PolymorphicSmallObject&& other) noexcept\n+ 74 {\n+ 75 moveToWrappedObject(std::move(other));\n+ 76 }\n+ 77\n+79 PolymorphicSmallObject(const PolymorphicSmallObject& other)\n+ 80 {\n+ 81 copyToWrappedObject(other);\n+ 82 }\n+ 83\n+85 ~PolymorphicSmallObject()\n+ 86 {\n+ 87 destroyWrappedObject();\n+ 88 }\n 89\n- 90 using DerivativeInterface = typename Traits::DerivativeInterface;\n- 91\n- 92public:\n- 93\n- 105 template<class F, disableCopyMove<DifferentiableFunction, F> = 0 >\n-106 DifferentiableFunction(F&& f) :\n- 107 Base(std::forward<F>(f))\n- 108 {\n- 109 static_assert(Dune::Functions::Concept::isFunction<F, Range(Domain)>(),\n-\"Trying to construct a DifferentiableFunction from type that does not model the\n-Function concept\");\n- 110 }\n- 111\n-113 DifferentiableFunction() = default;\n+91 PolymorphicSmallObject& operator=(const PolymorphicSmallObject& other)\n+ 92 {\n+ 93 if (&other!=this)\n+ 94 {\n+ 95 destroyWrappedObject();\n+ 96 copyToWrappedObject(other);\n+ 97 }\n+ 98 return *this;\n+ 99 }\n+ 100\n+102 PolymorphicSmallObject& operator=(PolymorphicSmallObject&& other) noexcept\n+ 103 {\n+ 104 destroyWrappedObject();\n+ 105 moveToWrappedObject(std::move(other));\n+ 106 return *this;\n+ 107 }\n+ 108\n+110 explicit operator bool() const\n+ 111 {\n+ 112 return p_;\n+ 113 }\n 114\n-118 Range operator() (const Domain& x) const\n- 119 {\n- 120 return this->asInterface().operator()(x);\n- 121 }\n- 122\n-130 friend DerivativeInterface derivative(const DifferentiableFunction& t)\n- 131 {\n- 132 return t.asInterface().derivative();\n- 133 }\n- 134};\n- 135\n- 136\n- 137\n- 138}} // namespace Dune::Functions\n- 139\n- 140\n- 141\n- 142#endif // DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_HH\n-functionconcepts.hh\n-typeerasure.hh\n-defaultderivativetraits.hh\n-signature.hh\n-type_traits.hh\n-differentiablefunction_imp.hh\n-Dune::Functions::DifferentiableFunction<_Range(Domain),_DerivativeTraits,\n-bufferSize_>::derivative\n-friend DerivativeInterface derivative(const DifferentiableFunction &t)\n-Get derivative of wrapped function.\n-Definition: differentiablefunction.hh:130\n+116 bool bufferUsed() const\n+ 117 {\n+ 118 return ((void*) (p_) == (void*)(&buffer_));\n+ 119 }\n+ 120\n+122 const Base& get() const\n+ 123 {\n+ 124 return *p_;\n+ 125 }\n+ 126\n+128 Base& get()\n+ 129 {\n+ 130 return *p_;\n+ 131 }\n+ 132\n+ 133private:\n+ 134\n+ 135 void destroyWrappedObject() noexcept\n+ 136 {\n+ 137 if (operator bool())\n+ 138 {\n+ 139 if (bufferUsed())\n+ 140 p_->~Base();\n+ 141 else\n+ 142 delete p_;\n+ 143 }\n+ 144 }\n+ 145\n+ 146 void moveToWrappedObject(PolymorphicSmallObject&& other) noexcept\n+ 147 {\n+ 148 if (other.bufferUsed())\n+ 149 p_ = other.p_->move(&buffer_);\n+ 150 else\n+ 151 {\n+ 152 // We don't need to check for &other_!=this, because you can't\n+ 153 // have an rvalue to *this and call it's assignment/constructor\n+ 154 // at the same time. (Despite trying to shoot yourself in the foot\n+ 155 // with std::move explicitly.)\n+ 156\n+ 157 // Take ownership of allocated object\n+ 158 p_ = other.p_;\n+ 159\n+ 160 // Leave pointer in a clean state to avoid double freeing it.\n+ 161 other.p_ = 0;\n+ 162 }\n+ 163 }\n+ 164\n+ 165 void copyToWrappedObject(const PolymorphicSmallObject& other)\n+ 166 {\n+ 167 if (other.bufferUsed())\n+ 168 p_ = other.p_->clone(&buffer_);\n+ 169 else\n+ 170 p_ = other.p_->clone();\n+ 171 }\n+ 172\n+ 173 std::aligned_storage_t<bufferSize> buffer_;\n+ 174 Base* p_;\n+ 175};\n+ 176\n+ 177\n+ 178} // namespace Functions\n+ 179} // namespace Dune\n+ 180\n+ 181#endif // DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::DifferentiableFunction\n-Definition: differentiablefunction.hh:29\n-Dune::Functions::DifferentiableFunction<_Range(Domain),_DerivativeTraits,\n-bufferSize_>::DifferentiableFunction\n-DifferentiableFunction(F &&f)\n-Construct from function.\n-Definition: differentiablefunction.hh:106\n-Dune::Functions::DifferentiableFunction<_Range(Domain),_DerivativeTraits,\n-bufferSize_>::DifferentiableFunction\n-DifferentiableFunction()=default\n+Dune::Functions::PolymorphicSmallObject\n+A wrapper providing small object optimization with polymorphic types.\n+Definition: polymorphicsmallobject.hh:45\n+Dune::Functions::PolymorphicSmallObject::get\n+const Base & get() const\n+Obtain reference to stored object.\n+Definition: polymorphicsmallobject.hh:122\n+Dune::Functions::PolymorphicSmallObject::bufferUsed\n+bool bufferUsed() const\n+Check if object is stored in internal stack buffer.\n+Definition: polymorphicsmallobject.hh:116\n+Dune::Functions::PolymorphicSmallObject::PolymorphicSmallObject\n+PolymorphicSmallObject(Derived &&derived)\n+Construct from object.\n+Definition: polymorphicsmallobject.hh:62\n+Dune::Functions::PolymorphicSmallObject::PolymorphicSmallObject\n+PolymorphicSmallObject(PolymorphicSmallObject &&other) noexcept\n+Move constructor from other PolymorphicSmallObject.\n+Definition: polymorphicsmallobject.hh:73\n+Dune::Functions::PolymorphicSmallObject::operator=\n+PolymorphicSmallObject & operator=(const PolymorphicSmallObject &other)\n+Copy assignment from other PolymorphicSmallObject.\n+Definition: polymorphicsmallobject.hh:91\n+Dune::Functions::PolymorphicSmallObject::operator=\n+PolymorphicSmallObject & operator=(PolymorphicSmallObject &&other) noexcept\n+Move assignment from other PolymorphicSmallObject.\n+Definition: polymorphicsmallobject.hh:102\n+Dune::Functions::PolymorphicSmallObject::PolymorphicSmallObject\n+PolymorphicSmallObject(const PolymorphicSmallObject &other)\n+Copy constructor from other PolymorphicSmallObject.\n+Definition: polymorphicsmallobject.hh:79\n+Dune::Functions::PolymorphicSmallObject::~PolymorphicSmallObject\n+~PolymorphicSmallObject()\n+Destructor.\n+Definition: polymorphicsmallobject.hh:85\n+Dune::Functions::PolymorphicSmallObject::PolymorphicSmallObject\n+PolymorphicSmallObject()\n Default constructor.\n-Dune::Functions::SignatureTraits\n-Helper class to deduce the signature of a callable.\n-Definition: signature.hh:56\n-Dune::Functions::TypeErasureBase\n-Base class for type-erased interface wrapper.\n-Definition: typeerasure.hh:165\n+Definition: polymorphicsmallobject.hh:49\n+Dune::Functions::PolymorphicSmallObject::get\n+Base & get()\n+Obtain mutable reference to stored object.\n+Definition: polymorphicsmallobject.hh:128\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00071.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00071.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: callable.hh File Reference</title>\n+<title>dune-functions: differentiablefunction_imp.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -63,50 +63,30 @@\n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n-<a href=\"#nested-classes\">Classes</a> |\n-<a href=\"#namespaces\">Namespaces</a> |\n-<a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">callable.hh File Reference</div></div>\n+<a href=\"#namespaces\">Namespaces</a> </div>\n+ <div class=\"headertitle\"><div class=\"title\">differentiablefunction_imp.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <memory></code><br />\n-<code>#include <functional></code><br />\n-<code>#include <dune/common/function.hh></code><br />\n-<code>#include <dune/common/shared_ptr.hh></code><br />\n+<div class=\"textblock\"><code>#include <dune/common/exceptions.hh></code><br />\n+<code>#include <dune/common/concept.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00029_source.html\">dune/functions/common/type_traits.hh</a>></code><br />\n </div>\n <p><a href=\"a00071_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n-Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01067.html\">Dune::Functions::CallableFunctionWrapper< F ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Wrap a Dune::VirtualFunction into a callable object. <a href=\"a01067.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-</table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-</table><table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n-Functions</h2></td></tr>\n-<tr class=\"memitem:gae3639def57e4833c434ae816ea82271e\"><td class=\"memTemplParams\" colspan=\"2\">template<class F > </td></tr>\n-<tr class=\"memitem:gae3639def57e4833c434ae816ea82271e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">CallableFunctionWrapper< F > </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00209.html#gae3639def57e4833c434ae816ea82271e\">Dune::Functions::callable</a> (const F &f)</td></tr>\n-<tr class=\"memdesc:gae3639def57e4833c434ae816ea82271e\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a callable object from some Dune::VirtualFunction. <a href=\"a00209.html#gae3639def57e4833c434ae816ea82271e\">More...</a><br /></td></tr>\n-<tr class=\"separator:gae3639def57e4833c434ae816ea82271e\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:ga5831245ed303c2103ab06af079cb8cf9\"><td class=\"memTemplParams\" colspan=\"2\">template<class F > </td></tr>\n-<tr class=\"memitem:ga5831245ed303c2103ab06af079cb8cf9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">CallableFunctionWrapper< F > </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00209.html#ga5831245ed303c2103ab06af079cb8cf9\">Dune::Functions::callable</a> (const std::shared_ptr< F > &fp)</td></tr>\n-<tr class=\"memdesc:ga5831245ed303c2103ab06af079cb8cf9\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a callable object from std::shared_ptr<F> <a href=\"a00209.html#ga5831245ed303c2103ab06af079cb8cf9\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga5831245ed303c2103ab06af079cb8cf9\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,38 +5,21 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * common\n-Classes | Namespaces | Functions\n-callable.hh File Reference\n-#include <memory>\n-#include <functional>\n-#include <dune/common/function.hh>\n-#include <dune/common/shared_ptr.hh>\n+Namespaces\n+differentiablefunction_imp.hh File Reference\n+#include <dune/common/exceptions.hh>\n+#include <dune/common/concept.hh>\n+#include <dune/functions/common/type_traits.hh>\n Go_to_the_source_code_of_this_file.\n- Classes\n-class \u00a0Dune::Functions::CallableFunctionWrapper<_F_>\n-\u00a0 Wrap a Dune::VirtualFunction into a callable object. More...\n-\u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n- Functions\n-template<class F >\n-CallableFunctionWrapper< F >\u00a0Dune::Functions::callable (const F &f)\n-\u00a0 Create a callable object from some Dune::\n- VirtualFunction. More...\n-\u00a0\n-template<class F >\n-CallableFunctionWrapper< F >\u00a0Dune::Functions::callable (const std::shared_ptr<\n- F > &fp)\n-\u00a0 Create a callable object from std::shared_ptr<F>\n- More...\n-\u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00071_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00071_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: callable.hh Source File</title>\n+<title>dune-functions: differentiablefunction_imp.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,90 +62,116 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">callable.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">differentiablefunction_imp.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00071.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_CALLABLE_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_CALLABLE_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <memory></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <functional></span></div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <dune/common/exceptions.hh></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <dune/common/concept.hh></span></div>\n <div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/common/function.hh></span></div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/shared_ptr.hh></span></div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00029.html\">dune/functions/common/type_traits.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span> </div>\n <div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"keyword\">namespace </span>Imp {</div>\n <div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F></div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01067.html\"> 37</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01067.html\">CallableFunctionWrapper</a></div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span>{</div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> <span class=\"keyword\">using </span>Range = <span class=\"keyword\">typename</span> F::RangeType;</div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> <span class=\"keyword\">using </span>Domain = <span class=\"keyword\">typename</span> F::DomainType;</div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> </div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> <span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> </div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01067.html#a488ad53137f6f83fd7efff332758bbf3\"> 50</a></span> <a class=\"code hl_function\" href=\"a01067.html#a488ad53137f6f83fd7efff332758bbf3\">CallableFunctionWrapper</a>(<span class=\"keyword\">const</span> F& f)</div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> {</div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> f_ = Dune::stackobject_to_shared_ptr(f);</div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> }</div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> </div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01067.html#af374bad6d7410748c48c4cfdf085fd56\"> 61</a></span> <a class=\"code hl_function\" href=\"a01067.html#af374bad6d7410748c48c4cfdf085fd56\">CallableFunctionWrapper</a>(<span class=\"keyword\">const</span> std::shared_ptr<const F>& f) :</div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> f_(f)</div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> {}</div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> </div>\n-<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01067.html#a08670433e1fd5804af96dfa0b73edea2\"> 70</a></span> Range <a class=\"code hl_function\" href=\"a01067.html#a08670433e1fd5804af96dfa0b73edea2\">operator()</a>(<span class=\"keyword\">const</span> Domain& x)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> Range y;</div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> f_->evaluate(x, y);</div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> <span class=\"keywordflow\">return</span> y;</div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> }</div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> </div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> <span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> std::shared_ptr<const F> f_;</div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span>};</div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> </div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"keyword\">struct </span>HasFreeDerivative</div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span>{</div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F></div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> <span class=\"keyword\">auto</span> require(F&& f) -> <span class=\"keyword\">decltype</span>(</div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span> <a class=\"code hl_function\" href=\"a00209.html#ga7ec424ff4be740ad675bd85750940472\">derivative</a>(f)</div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> );</div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span>};</div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> </div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> </div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> </div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>Dummy, <span class=\"keyword\">class </span>F,</div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> <span class=\"keyword\">typename</span> std::enable_if<</div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> models< HasFreeDerivative, F>() , <span class=\"keywordtype\">int</span>>::type = 0></div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span><span class=\"keyword\">auto</span> derivativeIfImplemented(<span class=\"keyword\">const</span> F& f) -> <span class=\"keyword\">decltype</span>(<a class=\"code hl_function\" href=\"a00209.html#ga7ec424ff4be740ad675bd85750940472\">derivative</a>(f))</div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span>{</div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00209.html#ga7ec424ff4be740ad675bd85750940472\">derivative</a>(f);</div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span>}</div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> </div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> </div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> </div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>Dummy, <span class=\"keyword\">class </span>F,</div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> <span class=\"keyword\">typename</span> std::enable_if<</div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> not(models< HasFreeDerivative, F>()) , <span class=\"keywordtype\">int</span>>::type = 0></div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span>Dummy derivativeIfImplemented(<span class=\"keyword\">const</span> F& f)</div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span>{</div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"Derivative not implemented"</span>);</div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span>}</div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> </div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> </div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> DerivativeInterface></div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span><span class=\"keyword\">class </span>DifferentiableFunctionWrapperInterface</div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span>{};</div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> </div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span><span class=\"comment\">// Interface of type erasure wrapper</span></div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span><span class=\"comment\">//</span></div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span><span class=\"comment\">// Notice that the basic interface of polymorphic classes (destructor, clone, ...)</span></div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span><span class=\"comment\">// will be added by the type erasure foundation classes.</span></div>\n+<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">class</span> DerivativeInterface></div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span><span class=\"keyword\">class </span>DifferentiableFunctionWrapperInterface<Range(Domain), DerivativeInterface></div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span>{</div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> <span class=\"keyword\">virtual</span> Range operator() (<span class=\"keyword\">const</span> Domain& x) <span class=\"keyword\">const</span> = 0;</div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> </div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> <span class=\"keyword\">virtual</span> DerivativeInterface <a class=\"code hl_function\" href=\"a00209.html#ga7ec424ff4be740ad675bd85750940472\">derivative</a>() <span class=\"keyword\">const</span> = 0;</div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span>};</div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> </div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> </div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> </div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> DerivativeInterface, <span class=\"keyword\">class</span> B></div>\n+<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span><span class=\"keyword\">class </span>DifferentiableFunctionWrapperImplementation</div>\n+<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span>{};</div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> </div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span><span class=\"comment\">// Implementation of type erasure wrapper</span></div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">class</span> DerivativeInterface, <span class=\"keyword\">class</span> B></div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span><span class=\"keyword\">class </span>DifferentiableFunctionWrapperImplementation< Range(Domain), DerivativeInterface, B> :</div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> <span class=\"keyword\">public</span> B</div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span>{</div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> </div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> <span class=\"keyword\">using </span>B::B;</div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> <span class=\"keyword\">using </span>Wrapped = <span class=\"keyword\">typename</span> B::Wrapped;</div>\n <div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> </div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> </div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F></div>\n-<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00209.html#gae3639def57e4833c434ae816ea82271e\"> 105</a></span><a class=\"code hl_class\" href=\"a01067.html\">CallableFunctionWrapper<F></a> <a class=\"code hl_function\" href=\"a00209.html#gae3639def57e4833c434ae816ea82271e\">callable</a>(<span class=\"keyword\">const</span> F& f)</div>\n-<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span>{</div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01067.html\">CallableFunctionWrapper<F></a>(f);</div>\n-<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span>}</div>\n-<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> </div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> </div>\n-<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F></div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00209.html#ga5831245ed303c2103ab06af079cb8cf9\"> 137</a></span><a class=\"code hl_class\" href=\"a01067.html\">CallableFunctionWrapper<F></a> <a class=\"code hl_function\" href=\"a00209.html#gae3639def57e4833c434ae816ea82271e\">callable</a>(<span class=\"keyword\">const</span> std::shared_ptr<F>& fp)</div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span>{</div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01067.html\">CallableFunctionWrapper<F></a>(fp);</div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span>}</div>\n-<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> </div>\n-<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> </div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> </div>\n-<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span>} <span class=\"comment\">// namespace Functions</span></div>\n-<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span>} <span class=\"comment\">// namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> </div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">//DUNE_FUNCTIONS_COMMON_CALLABLE_HH</span></div>\n-<div class=\"ttc\" id=\"aa00209_html_gae3639def57e4833c434ae816ea82271e\"><div class=\"ttname\"><a href=\"a00209.html#gae3639def57e4833c434ae816ea82271e\">Dune::Functions::callable</a></div><div class=\"ttdeci\">CallableFunctionWrapper< F > callable(const F &f)</div><div class=\"ttdoc\">Create a callable object from some Dune::VirtualFunction.</div><div class=\"ttdef\"><b>Definition:</b> callable.hh:105</div></div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> <span class=\"keyword\">virtual</span> Range operator() (<span class=\"keyword\">const</span> Domain& x)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> <span class=\"keywordflow\">return</span> this->get()(x);</div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> }</div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> </div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> <span class=\"keyword\">virtual</span> DerivativeInterface <a class=\"code hl_function\" href=\"a00209.html#ga7ec424ff4be740ad675bd85750940472\">derivative</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> <span class=\"keywordflow\">return</span> derivativeIfImplemented<DerivativeInterface, Wrapped>(this->get());</div>\n+<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> }</div>\n+<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span>};</div>\n+<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> </div>\n+<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> </div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> </div>\n+<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span>}}} <span class=\"comment\">// namespace Dune::Functions::Imp</span></div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> </div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> </div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> </div>\n+<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH</span></div>\n+<div class=\"ttc\" id=\"aa00029_html\"><div class=\"ttname\"><a href=\"a00029.html\">type_traits.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00209_html_ga7ec424ff4be740ad675bd85750940472\"><div class=\"ttname\"><a href=\"a00209.html#ga7ec424ff4be740ad675bd85750940472\">Dune::Functions::derivative</a></div><div class=\"ttdeci\">TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const TrigonometricFunction< K, sinFactor, cosFactor > &f)</div><div class=\"ttdoc\">Obtain derivative of TrigonometricFunction function.</div><div class=\"ttdef\"><b>Definition:</b> trigonometricfunction.hh:39</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa01067_html\"><div class=\"ttname\"><a href=\"a01067.html\">Dune::Functions::CallableFunctionWrapper</a></div><div class=\"ttdoc\">Wrap a Dune::VirtualFunction into a callable object.</div><div class=\"ttdef\"><b>Definition:</b> callable.hh:38</div></div>\n-<div class=\"ttc\" id=\"aa01067_html_a08670433e1fd5804af96dfa0b73edea2\"><div class=\"ttname\"><a href=\"a01067.html#a08670433e1fd5804af96dfa0b73edea2\">Dune::Functions::CallableFunctionWrapper::operator()</a></div><div class=\"ttdeci\">Range operator()(const Domain &x) const</div><div class=\"ttdoc\">Forward operator() to F::evaluate()</div><div class=\"ttdef\"><b>Definition:</b> callable.hh:70</div></div>\n-<div class=\"ttc\" id=\"aa01067_html_a488ad53137f6f83fd7efff332758bbf3\"><div class=\"ttname\"><a href=\"a01067.html#a488ad53137f6f83fd7efff332758bbf3\">Dune::Functions::CallableFunctionWrapper::CallableFunctionWrapper</a></div><div class=\"ttdeci\">CallableFunctionWrapper(const F &f)</div><div class=\"ttdoc\">Instantiate from reference to f.</div><div class=\"ttdef\"><b>Definition:</b> callable.hh:50</div></div>\n-<div class=\"ttc\" id=\"aa01067_html_af374bad6d7410748c48c4cfdf085fd56\"><div class=\"ttname\"><a href=\"a01067.html#af374bad6d7410748c48c4cfdf085fd56\">Dune::Functions::CallableFunctionWrapper::CallableFunctionWrapper</a></div><div class=\"ttdeci\">CallableFunctionWrapper(const std::shared_ptr< const F > &f)</div><div class=\"ttdoc\">Instantiate from std::shared_ptr to f.</div><div class=\"ttdef\"><b>Definition:</b> callable.hh:61</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,100 +5,119 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * common\n-callable.hh\n+differentiablefunction_imp.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_COMMON_CALLABLE_HH\n- 4#define DUNE_FUNCTIONS_COMMON_CALLABLE_HH\n+ 3#ifndef DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH\n+ 4#define DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH\n 5\n- 6#include <memory>\n- 7#include <functional>\n+ 6#include <dune/common/exceptions.hh>\n+ 7#include <dune/common/concept.hh>\n 8\n- 9#include <dune/common/function.hh>\n- 10#include <dune/common/shared_ptr.hh>\n+ 9#include <dune/functions/common/type_traits.hh>\n+ 10\n 11\n- 12\n- 13namespace Dune {\n- 14namespace Functions {\n+ 12namespace Dune {\n+ 13namespace Functions {\n+ 14namespace Imp {\n 15\n- 16\n- 17\n- 18\n- 36template<class F>\n-37class CallableFunctionWrapper\n- 38{\n- 39 using Range = typename F::RangeType;\n- 40 using Domain = typename F::DomainType;\n- 41\n- 42 public:\n- 43\n-50 CallableFunctionWrapper(const F& f)\n- 51 {\n- 52 f_ = Dune::stackobject_to_shared_ptr(f);\n- 53 }\n- 54\n-61 CallableFunctionWrapper(const std::shared_ptr<const F>& f) :\n- 62 f_(f)\n- 63 {}\n- 64\n-70 Range operator()(const Domain& x) const\n- 71 {\n- 72 Range y;\n- 73 f_->evaluate(x, y);\n- 74 return y;\n- 75 }\n- 76\n- 77 private:\n- 78 std::shared_ptr<const F> f_;\n- 79};\n- 80\n+ 19struct HasFreeDerivative\n+ 20{\n+ 21 template<class F>\n+ 22 auto require(F&& f) -> decltype(\n+ 23 derivative(f)\n+ 24 );\n+ 25};\n+ 26\n+ 27\n+ 28\n+ 29template<class Dummy, class F,\n+ 30 typename std::enable_if<\n+ 31 models< HasFreeDerivative, F>() , int>::type = 0>\n+ 32auto derivativeIfImplemented(const F& f) -> decltype(derivative(f))\n+ 33{\n+ 34 return derivative(f);\n+ 35}\n+ 36\n+ 37\n+ 38\n+ 39template<class Dummy, class F,\n+ 40 typename std::enable_if<\n+ 41 not(models< HasFreeDerivative, F>()) , int>::type = 0>\n+ 42Dummy derivativeIfImplemented(const F& f)\n+ 43{\n+ 44 DUNE_THROW(Dune::NotImplemented, \"Derivative not implemented\");\n+ 45}\n+ 46\n+ 47\n+ 48\n+ 49template<class Signature, class DerivativeInterface>\n+ 50class DifferentiableFunctionWrapperInterface\n+ 51{};\n+ 52\n+ 53// Interface of type erasure wrapper\n+ 54//\n+ 55// Notice that the basic interface of polymorphic classes (destructor,\n+clone, ...)\n+ 56// will be added by the type erasure foundation classes.\n+ 57template<class Range, class Domain, class DerivativeInterface>\n+ 58class DifferentiableFunctionWrapperInterface<Range(Domain),\n+DerivativeInterface>\n+ 59{\n+ 60public:\n+ 61 virtual Range operator() (const Domain& x) const = 0;\n+ 62\n+ 63 virtual DerivativeInterface derivative() const = 0;\n+ 64};\n+ 65\n+ 66\n+ 67\n+ 68template<class Signature, class DerivativeInterface, class B>\n+ 69class DifferentiableFunctionWrapperImplementation\n+ 70{};\n+ 71\n+ 72// Implementation of type erasure wrapper\n+ 73template<class Range, class Domain, class DerivativeInterface, class B>\n+ 74class DifferentiableFunctionWrapperImplementation< Range(Domain),\n+DerivativeInterface, B> :\n+ 75 public B\n+ 76{\n+ 77public:\n+ 78\n+ 79 using B::B;\n+ 80 using Wrapped = typename B::Wrapped;\n 81\n- 82\n- 104template<class F>\n-105CallableFunctionWrapper<F> callable(const F& f)\n- 106{\n- 107 return CallableFunctionWrapper<F>(f);\n- 108}\n- 109\n- 110\n- 136template<class F>\n-137CallableFunctionWrapper<F> callable(const std::shared_ptr<F>& fp)\n- 138{\n- 139 return CallableFunctionWrapper<F>(fp);\n- 140}\n- 141\n- 142\n- 143\n- 144} // namespace Functions\n- 145} // namespace Dune\n- 146\n- 147#endif //DUNE_FUNCTIONS_COMMON_CALLABLE_HH\n-Dune::Functions::callable\n-CallableFunctionWrapper< F > callable(const F &f)\n-Create a callable object from some Dune::VirtualFunction.\n-Definition: callable.hh:105\n+ 82 virtual Range operator() (const Domain& x) const\n+ 83 {\n+ 84 return this->get()(x);\n+ 85 }\n+ 86\n+ 87 virtual DerivativeInterface derivative() const\n+ 88 {\n+ 89 return derivativeIfImplemented<DerivativeInterface, Wrapped>(this->get());\n+ 90 }\n+ 91};\n+ 92\n+ 93\n+ 94\n+ 95}}} // namespace Dune::Functions::Imp\n+ 96\n+ 97\n+ 98\n+ 99#endif // DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH\n+type_traits.hh\n+Dune::Functions::derivative\n+TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const\n+TrigonometricFunction< K, sinFactor, cosFactor > &f)\n+Obtain derivative of TrigonometricFunction function.\n+Definition: trigonometricfunction.hh:39\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::CallableFunctionWrapper\n-Wrap a Dune::VirtualFunction into a callable object.\n-Definition: callable.hh:38\n-Dune::Functions::CallableFunctionWrapper::operator()\n-Range operator()(const Domain &x) const\n-Forward operator() to F::evaluate()\n-Definition: callable.hh:70\n-Dune::Functions::CallableFunctionWrapper::CallableFunctionWrapper\n-CallableFunctionWrapper(const F &f)\n-Instantiate from reference to f.\n-Definition: callable.hh:50\n-Dune::Functions::CallableFunctionWrapper::CallableFunctionWrapper\n-CallableFunctionWrapper(const std::shared_ptr< const F > &f)\n-Instantiate from std::shared_ptr to f.\n-Definition: callable.hh:61\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00074.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00074.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: overflowarray.hh File Reference</title>\n+<title>dune-functions: gridfunction_imp.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,39 +58,29 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n-<a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">overflowarray.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">gridfunction_imp.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <algorithm></code><br />\n-<code>#include <iostream></code><br />\n-<code>#include <cstddef></code><br />\n-<code>#include <array></code><br />\n-<code>#include <initializer_list></code><br />\n-<code>#include <dune/common/genericiterator.hh></code><br />\n+<div class=\"textblock\"><code>#include <<a class=\"el\" href=\"a00029_source.html\">dune/functions/common/type_traits.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00026_source.html\">dune/functions/common/interfaces.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00071_source.html\">dune/functions/common/differentiablefunction_imp.hh</a>></code><br />\n </div>\n <p><a href=\"a00074_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n-Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01275.html\">Dune::Functions::OverflowArray< BA, maxSize ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A dynamically sized array-like class with overflow. <a href=\"a01275.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-</table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,28 +4,21 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * common\n-Classes | Namespaces\n-overflowarray.hh File Reference\n-#include <algorithm>\n-#include <iostream>\n-#include <cstddef>\n-#include <array>\n-#include <initializer_list>\n-#include <dune/common/genericiterator.hh>\n+ * gridfunctions\n+Namespaces\n+gridfunction_imp.hh File Reference\n+#include <dune/functions/common/type_traits.hh>\n+#include <dune/functions/common/interfaces.hh>\n+#include <dune/functions/common/differentiablefunction_imp.hh>\n Go_to_the_source_code_of_this_file.\n- Classes\n-class \u00a0Dune::Functions::OverflowArray<_BA,_maxSize_>\n-\u00a0 A dynamically sized array-like class with overflow. More...\n-\u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n \n ===============================================================================\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00074_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00074_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: overflowarray.hh Source File</title>\n+<title>dune-functions: gridfunction_imp.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,234 +58,92 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">overflowarray.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">gridfunction_imp.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00074.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <algorithm></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <iostream></span></div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <cstddef></span></div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <array></span></div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <initializer_list></span></div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00029.html\">dune/functions/common/type_traits.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00026.html\">dune/functions/common/interfaces.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00071.html\">dune/functions/common/differentiablefunction_imp.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span> </div>\n <div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <dune/common/genericiterator.hh></span></div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"keyword\">namespace </span>Imp {</div>\n <div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00219.html\">Dune::Functions</a> {</div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> BA, std::<span class=\"keywordtype\">size_t</span> maxSize = std::tuple_size_v<BA>></div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html\"> 43</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01275.html\">OverflowArray</a> :</div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> <span class=\"keyword\">public</span> BA</div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span>{</div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> std::size_t baseSize = std::tuple_size_v<BA>;</div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a95296504e2bd12821b975daa3d2f9934\"> 49</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01275.html#a95296504e2bd12821b975daa3d2f9934\">BaseArray</a> = BA;</div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> </div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a67526616996e52fa0bc26046cf0a2485\"> 51</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01275.html#a67526616996e52fa0bc26046cf0a2485\">value_type</a> = <span class=\"keyword\">typename</span> BaseArray::value_type;</div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a057b2fd50430511a0c5697c8e271fd70\"> 52</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01275.html#a057b2fd50430511a0c5697c8e271fd70\">reference</a> = <a class=\"code hl_typedef\" href=\"a01275.html#a67526616996e52fa0bc26046cf0a2485\">value_type</a>&;</div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a040c3d78e6edfb6576a03b8be4f0e71c\"> 53</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01275.html#a040c3d78e6edfb6576a03b8be4f0e71c\">const_reference</a> = <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01275.html#a67526616996e52fa0bc26046cf0a2485\">value_type</a>&;</div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#ad6864fbd3a109a6b10b32af7e9c58b5b\"> 54</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01275.html#ad6864fbd3a109a6b10b32af7e9c58b5b\">pointer</a> = <a class=\"code hl_typedef\" href=\"a01275.html#a67526616996e52fa0bc26046cf0a2485\">value_type</a>*;</div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a87ef9a454715903d6832df402705780d\"> 55</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01275.html#a87ef9a454715903d6832df402705780d\">difference_type</a> = std::ptrdiff_t;</div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#ab600c0c276d09c1adfa934f77ca7c712\"> 56</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01275.html#ab600c0c276d09c1adfa934f77ca7c712\">size_type</a> = std::size_t;</div>\n-<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a72ffe9b324024906b65d3051ec1d199c\"> 57</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01275.html#a72ffe9b324024906b65d3051ec1d199c\">iterator</a> = Dune::GenericIterator<OverflowArray, value_type>;</div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#ad7feb14b245d1a17e13e690cf693aba7\"> 58</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01275.html#ad7feb14b245d1a17e13e690cf693aba7\">const_iterator</a> = Dune::GenericIterator<const OverflowArray, const value_type>;</div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> </div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span><span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> <span class=\"keyword\">using </span>OverflowBuffer = std::array<<a class=\"code hl_typedef\" href=\"a01275.html#a67526616996e52fa0bc26046cf0a2485\">value_type</a>, maxSize-baseSize>;</div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> </div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"keyword\">struct </span>HasFreeLocalFunction</div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span>{</div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F></div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> <span class=\"keyword\">auto</span> require(F&& f) -> <span class=\"keyword\">decltype</span>(</div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span> localFunction(f)</div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> );</div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span>};</div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> </div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> </div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> </div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span><span class=\"comment\">// Interface of type erasure wrapper</span></div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span><span class=\"comment\">//</span></div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span><span class=\"comment\">// Notice that the basic interface of polymorphic classes (destructor, clone, ...)</span></div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span><span class=\"comment\">// will be added by the type erasure foundation classes.</span></div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> DerivativeInterface, <span class=\"keyword\">class</span> LocalFunctionInterface, <span class=\"keyword\">class</span> EntitySet></div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span><span class=\"keyword\">class </span>GridFunctionWrapperInterface :</div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> <span class=\"keyword\">public</span> DifferentiableFunctionWrapperInterface<Signature, DerivativeInterface></div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span>{</div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> <span class=\"keyword\">virtual</span> LocalFunctionInterface wrappedLocalFunction() <span class=\"keyword\">const</span> = 0;</div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> </div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> <span class=\"keyword\">virtual</span> <span class=\"keyword\">const</span> EntitySet& wrappedEntitySet() <span class=\"keyword\">const</span> = 0;</div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span>};</div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> </div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> </div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span><span class=\"comment\">// Implementation of type erasure wrapper</span></div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> DerivativeInterface, <span class=\"keyword\">class</span> LocalFunctionInterface, <span class=\"keyword\">class</span> EntitySet, <span class=\"keyword\">class</span> B></div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span><span class=\"keyword\">class </span>GridFunctionWrapperImplementation :</div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> <span class=\"keyword\">public</span> DifferentiableFunctionWrapperImplementation<Signature, DerivativeInterface, B></div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span>{</div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> <span class=\"keyword\">using </span>Base = DifferentiableFunctionWrapperImplementation<Signature, DerivativeInterface, B>;</div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> <span class=\"keyword\">using </span>Base::Base;</div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> </div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> <span class=\"keyword\">virtual</span> LocalFunctionInterface wrappedLocalFunction()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> <span class=\"keywordflow\">return</span> localFunction(this->get());</div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> }</div>\n+<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> </div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> <span class=\"keyword\">virtual</span> <span class=\"keyword\">const</span> EntitySet& wrappedEntitySet()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> <span class=\"keywordflow\">return</span> this->get().entitySet();</div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> }</div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span>};</div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> </div>\n <div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> </div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a8ff4c2cab7f220136c0b072c6a055f34\"> 65</a></span> <a class=\"code hl_function\" href=\"a01275.html#a8ff4c2cab7f220136c0b072c6a055f34\">OverflowArray</a>() = <span class=\"keywordflow\">default</span>;</div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> </div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#aec5c016d84ff17d2c57dac741c1954b6\"> 67</a></span> <a class=\"code hl_function\" href=\"a01275.html#aec5c016d84ff17d2c57dac741c1954b6\">OverflowArray</a>(<span class=\"keyword\">const</span> std::initializer_list<value_type>& l) {</div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> assert(l.size() <= <a class=\"code hl_function\" href=\"a01275.html#a966efdb92bd58131b9960ca4c3afb792\">capacity</a>());</div>\n-<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> size_ = l.size();</div>\n-<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> std::copy_n(l.begin(), size_, <a class=\"code hl_function\" href=\"a01275.html#a4b246cb76dc8a3b81638052e5d3c4617\">begin</a>());</div>\n-<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> }</div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> </div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a0fb3877160f4a79b3f149a873ba6bc10\"> 73</a></span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a01275.html#a0fb3877160f4a79b3f149a873ba6bc10\">operator == </a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01275.html\">OverflowArray</a>& other)<span class=\"keyword\"> const </span>{</div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> <span class=\"keywordflow\">if</span> (<a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>() != other.<a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>())</div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> <span class=\"keywordflow\">for</span> (<a class=\"code hl_typedef\" href=\"a01275.html#ab600c0c276d09c1adfa934f77ca7c712\">size_type</a> i=0; i<<a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>(); ++i)</div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> <span class=\"keywordflow\">if</span> ((*<span class=\"keyword\">this</span>)[i] != other[i])</div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> }</div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> </div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#aac47600e996341476adeda5a998a6c4d\"> 83</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01275.html#aac47600e996341476adeda5a998a6c4d\">clear</a>() {</div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> size_ = 0;</div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> }</div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> </div>\n-<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#acb3c0d310f92e484249c69697210dd3b\"> 93</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01275.html#acb3c0d310f92e484249c69697210dd3b\">resize</a>(<a class=\"code hl_typedef\" href=\"a01275.html#ab600c0c276d09c1adfa934f77ca7c712\">size_type</a> n) {</div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> assert(n <= <a class=\"code hl_function\" href=\"a01275.html#a966efdb92bd58131b9960ca4c3afb792\">capacity</a>());</div>\n-<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> size_ = n;</div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> }</div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> </div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a267512305609933baab963caed1ccd41\"> 104</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01275.html#a267512305609933baab963caed1ccd41\">push_back</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01275.html#a67526616996e52fa0bc26046cf0a2485\">value_type</a>& t) {</div>\n-<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> assert(<a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>() < <a class=\"code hl_function\" href=\"a01275.html#a966efdb92bd58131b9960ca4c3afb792\">capacity</a>());</div>\n-<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> (*this)[size_++] = t;</div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> }</div>\n-<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> </div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a67ad7c3562178a61003cbd24b26011f8\"> 110</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01275.html#a67ad7c3562178a61003cbd24b26011f8\">pop_back</a>() {</div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> assert(<a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>() > 0);</div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> <span class=\"keywordflow\">if</span> (! <a class=\"code hl_function\" href=\"a01275.html#a5177f15acc922fbfeb20ac7ac57da093\">empty</a>())</div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> size_--;</div>\n-<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> }</div>\n-<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> </div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#af9483f104035eac50b90396d2ad4640c\"> 122</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01275.html#af9483f104035eac50b90396d2ad4640c\">push_front</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01275.html#a67526616996e52fa0bc26046cf0a2485\">value_type</a>& t) {</div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> assert(<a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>() < <a class=\"code hl_function\" href=\"a01275.html#a966efdb92bd58131b9960ca4c3afb792\">capacity</a>());</div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> <span class=\"keywordflow\">for</span> (<a class=\"code hl_typedef\" href=\"a01275.html#ab600c0c276d09c1adfa934f77ca7c712\">size_type</a> i=0; i<<a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>(); i++)</div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> (*<span class=\"keyword\">this</span>)[i+1] = (*this)[i];</div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> (*this)[0] = t;</div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> }</div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> </div>\n-<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a4b246cb76dc8a3b81638052e5d3c4617\"> 130</a></span> <a class=\"code hl_typedef\" href=\"a01275.html#a72ffe9b324024906b65d3051ec1d199c\">iterator</a> <a class=\"code hl_function\" href=\"a01275.html#a4b246cb76dc8a3b81638052e5d3c4617\">begin</a>() {</div>\n-<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_typedef\" href=\"a01275.html#a72ffe9b324024906b65d3051ec1d199c\">iterator</a>(*<span class=\"keyword\">this</span>, 0);</div>\n-<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> }</div>\n-<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> </div>\n-<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a77ba635703a41b09aab4f717714c8178\"> 135</a></span> <a class=\"code hl_typedef\" href=\"a01275.html#ad7feb14b245d1a17e13e690cf693aba7\">const_iterator</a> <a class=\"code hl_function\" href=\"a01275.html#a77ba635703a41b09aab4f717714c8178\">begin</a>()<span class=\"keyword\"> const </span>{</div>\n-<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_typedef\" href=\"a01275.html#ad7feb14b245d1a17e13e690cf693aba7\">const_iterator</a>(*<span class=\"keyword\">this</span>, 0);</div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> }</div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> </div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#aacc8b19785b09af92bb1e041609a7896\"> 140</a></span> <a class=\"code hl_typedef\" href=\"a01275.html#a72ffe9b324024906b65d3051ec1d199c\">iterator</a> <a class=\"code hl_function\" href=\"a01275.html#aacc8b19785b09af92bb1e041609a7896\">end</a>() {</div>\n-<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_typedef\" href=\"a01275.html#a72ffe9b324024906b65d3051ec1d199c\">iterator</a>(*<span class=\"keyword\">this</span>, <a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>());</div>\n-<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> }</div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> </div>\n-<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a0a564defa0c39ddf1690def7cb707db1\"> 145</a></span> <a class=\"code hl_typedef\" href=\"a01275.html#ad7feb14b245d1a17e13e690cf693aba7\">const_iterator</a> <a class=\"code hl_function\" href=\"a01275.html#a0a564defa0c39ddf1690def7cb707db1\">end</a>()<span class=\"keyword\"> const </span>{</div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_typedef\" href=\"a01275.html#ad7feb14b245d1a17e13e690cf693aba7\">const_iterator</a>(*<span class=\"keyword\">this</span>, <a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>());</div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> }</div>\n-<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> </div>\n-<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#aff8b6a5fa259da1688924f7bd6a3de0e\"> 150</a></span> <a class=\"code hl_typedef\" href=\"a01275.html#a057b2fd50430511a0c5697c8e271fd70\">reference</a> <a class=\"code hl_function\" href=\"a01275.html#aff8b6a5fa259da1688924f7bd6a3de0e\">operator[] </a>(<a class=\"code hl_typedef\" href=\"a01275.html#ab600c0c276d09c1adfa934f77ca7c712\">size_type</a> i) {</div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> assert(i < <a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>());</div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> <span class=\"comment\">// If there's no padding between the base class and the overflow_ member,</span></div>\n-<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> <span class=\"comment\">// the compiler should be able to optimize this to</span></div>\n-<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> <span class=\"comment\">// return *(&BaseArray::operator[](0) + i);</span></div>\n-<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> <span class=\"keywordflow\">if</span> (i<baseSize)</div>\n-<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> <span class=\"keywordflow\">return</span> BaseArray::operator[](i);</div>\n-<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> <span class=\"keywordflow\">return</span> overflow_[i-baseSize];</div>\n-<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> }</div>\n-<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> </div>\n-<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#adcdc5bae2f0fe4bb385a7e38ddc02b16\"> 161</a></span> <a class=\"code hl_typedef\" href=\"a01275.html#a040c3d78e6edfb6576a03b8be4f0e71c\">const_reference</a> <a class=\"code hl_function\" href=\"a01275.html#aff8b6a5fa259da1688924f7bd6a3de0e\">operator[] </a>(<a class=\"code hl_typedef\" href=\"a01275.html#ab600c0c276d09c1adfa934f77ca7c712\">size_type</a> i)<span class=\"keyword\"> const </span>{</div>\n-<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> assert(i < <a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>());</div>\n-<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> <span class=\"comment\">// If there's no padding between the base class and the overflow_ member,</span></div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> <span class=\"comment\">// the compiler should be able to optimize this to</span></div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> <span class=\"comment\">// return *(&BaseArray::operator[](0) + i);</span></div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> <span class=\"keywordflow\">if</span> (i<baseSize)</div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> <span class=\"keywordflow\">return</span> BaseArray::operator[](i);</div>\n-<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> <span class=\"keywordflow\">return</span> overflow_[i-baseSize];</div>\n-<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> }</div>\n-<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> </div>\n-<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#afc310b029604b09c928a99c341f0ac52\"> 172</a></span> <a class=\"code hl_typedef\" href=\"a01275.html#a057b2fd50430511a0c5697c8e271fd70\">reference</a> <a class=\"code hl_function\" href=\"a01275.html#afc310b029604b09c928a99c341f0ac52\">front</a>() {</div>\n-<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> assert(<a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>() > 0);</div>\n-<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> <span class=\"keywordflow\">return</span> (*<span class=\"keyword\">this</span>)[0];</div>\n-<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> }</div>\n-<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> </div>\n-<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a9a8d90c0aa530dda911b987d48db2f41\"> 178</a></span> <a class=\"code hl_typedef\" href=\"a01275.html#a040c3d78e6edfb6576a03b8be4f0e71c\">const_reference</a> <a class=\"code hl_function\" href=\"a01275.html#a9a8d90c0aa530dda911b987d48db2f41\">front</a>()<span class=\"keyword\"> const </span>{</div>\n-<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> assert(<a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>() > 0);</div>\n-<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> <span class=\"keywordflow\">return</span> (*<span class=\"keyword\">this</span>)[0];</div>\n-<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> }</div>\n-<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> </div>\n-<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#aeedca403252095b9f7d7b1aafcfd95d8\"> 184</a></span> <a class=\"code hl_typedef\" href=\"a01275.html#a057b2fd50430511a0c5697c8e271fd70\">reference</a> <a class=\"code hl_function\" href=\"a01275.html#aeedca403252095b9f7d7b1aafcfd95d8\">back</a>() {</div>\n-<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> assert(<a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>() > 0);</div>\n-<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> <span class=\"keywordflow\">return</span> (*<span class=\"keyword\">this</span>)[<a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>()-1];</div>\n-<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> }</div>\n-<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> </div>\n-<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#adda8f20adc81d38258794dc1d88dead3\"> 190</a></span> <a class=\"code hl_typedef\" href=\"a01275.html#a040c3d78e6edfb6576a03b8be4f0e71c\">const_reference</a> <a class=\"code hl_function\" href=\"a01275.html#adda8f20adc81d38258794dc1d88dead3\">back</a>()<span class=\"keyword\"> const </span>{</div>\n-<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> assert(<a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>() > 0);</div>\n-<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> <span class=\"keywordflow\">return</span> (*<span class=\"keyword\">this</span>)[<a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>()-1];</div>\n-<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> }</div>\n-<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> </div>\n-<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\"> 196</a></span> <a class=\"code hl_typedef\" href=\"a01275.html#ab600c0c276d09c1adfa934f77ca7c712\">size_type</a> <a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a> ()<span class=\"keyword\"> const </span>{</div>\n-<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> <span class=\"keywordflow\">return</span> size_;</div>\n-<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> }</div>\n-<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> </div>\n-<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a5177f15acc922fbfeb20ac7ac57da093\"> 201</a></span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a01275.html#a5177f15acc922fbfeb20ac7ac57da093\">empty</a>()<span class=\"keyword\"> const </span>{</div>\n-<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">size</a>() == 0;</div>\n-<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> }</div>\n-<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> </div>\n-<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a966efdb92bd58131b9960ca4c3afb792\"> 206</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01275.html#ab600c0c276d09c1adfa934f77ca7c712\">size_type</a> <a class=\"code hl_function\" href=\"a01275.html#a966efdb92bd58131b9960ca4c3afb792\">capacity</a>() {</div>\n-<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> <span class=\"keywordflow\">return</span> maxSize;</div>\n-<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span> }</div>\n-<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> </div>\n-<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a9a4101a7bcb022a9bf6842d33dca39c0\"> 211</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01275.html#ab600c0c276d09c1adfa934f77ca7c712\">size_type</a> <a class=\"code hl_function\" href=\"a01275.html#a9a4101a7bcb022a9bf6842d33dca39c0\">max_size</a>() {</div>\n-<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"> 212</span> <span class=\"keywordflow\">return</span> maxSize;</div>\n-<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span> }</div>\n-<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> </div>\n-<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a25221f9f42ef55ccc53f9fb91997b102\"> 216</a></span> <span class=\"keyword\">inline</span> <span class=\"keyword\">friend</span> std::size_t <a class=\"code hl_friend\" href=\"a01275.html#a25221f9f42ef55ccc53f9fb91997b102\">hash_value</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01275.html\">OverflowArray</a>& v) <span class=\"keyword\">noexcept</span> {</div>\n-<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> <span class=\"keywordflow\">return</span> hash_range(v.begin(), v.end());</div>\n-<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> }</div>\n-<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> </div>\n-<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01275.html#a3e35d413f76edbdefd484385a75060d7\"> 221</a></span> <span class=\"keyword\">friend</span> std::ostream& <a class=\"code hl_friend\" href=\"a01275.html#a3e35d413f76edbdefd484385a75060d7\">operator<< </a>(std::ostream& s, <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01275.html\">OverflowArray</a>& c) {</div>\n-<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span> <span class=\"keywordflow\">for</span> (<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& ci : c)</div>\n-<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> s << ci << <span class=\"stringliteral\">" "</span>;</div>\n-<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> <span class=\"keywordflow\">return</span> s;</div>\n-<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span> }</div>\n-<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> </div>\n-<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span><span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> OverflowBuffer overflow_;</div>\n-<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> <a class=\"code hl_typedef\" href=\"a01275.html#ab600c0c276d09c1adfa934f77ca7c712\">size_type</a> size_ = 0;</div>\n-<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span>};</div>\n-<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span> </div>\n-<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> </div>\n-<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> </div>\n-<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span>} <span class=\"comment\">// namespace Dune::Functions</span></div>\n-<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> </div>\n-<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span> </div>\n-<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span> </div>\n-<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH</span></div>\n-<div class=\"ttc\" id=\"aa00219_html\"><div class=\"ttname\"><a href=\"a00219.html\">Dune::Functions</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:11</div></div>\n-<div class=\"ttc\" id=\"aa01275_html\"><div class=\"ttname\"><a href=\"a01275.html\">Dune::Functions::OverflowArray</a></div><div class=\"ttdoc\">A dynamically sized array-like class with overflow.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:45</div></div>\n-<div class=\"ttc\" id=\"aa01275_html_a040c3d78e6edfb6576a03b8be4f0e71c\"><div class=\"ttname\"><a href=\"a01275.html#a040c3d78e6edfb6576a03b8be4f0e71c\">Dune::Functions::OverflowArray::const_reference</a></div><div class=\"ttdeci\">const value_type & const_reference</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:53</div></div>\n-<div class=\"ttc\" id=\"aa01275_html_a057b2fd50430511a0c5697c8e271fd70\"><div class=\"ttname\"><a href=\"a01275.html#a057b2fd50430511a0c5697c8e271fd70\">Dune::Functions::OverflowArray::reference</a></div><div class=\"ttdeci\">value_type & reference</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:52</div></div>\n-<div class=\"ttc\" id=\"aa01275_html_a0a564defa0c39ddf1690def7cb707db1\"><div class=\"ttname\"><a href=\"a01275.html#a0a564defa0c39ddf1690def7cb707db1\">Dune::Functions::OverflowArray::end</a></div><div class=\"ttdeci\">const_iterator end() const</div><div class=\"ttdoc\">Returns a const_iterator pointing to the end of the OverflowArray.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:145</div></div>\n-<div class=\"ttc\" id=\"aa01275_html_a0fb3877160f4a79b3f149a873ba6bc10\"><div class=\"ttname\"><a href=\"a01275.html#a0fb3877160f4a79b3f149a873ba6bc10\">Dune::Functions::OverflowArray::operator==</a></div><div class=\"ttdeci\">bool operator==(const OverflowArray &other) const</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:73</div></div>\n-<div class=\"ttc\" id=\"aa01275_html_a25221f9f42ef55ccc53f9fb91997b102\"><div class=\"ttname\"><a href=\"a01275.html#a25221f9f42ef55ccc53f9fb91997b102\">Dune::Functions::OverflowArray::hash_value</a></div><div class=\"ttdeci\">friend std::size_t hash_value(const OverflowArray &v) noexcept</div><div class=\"ttdoc\">Compute hash value.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:216</div></div>\n-<div class=\"ttc\" id=\"aa01275_html_a267512305609933baab963caed1ccd41\"><div class=\"ttname\"><a href=\"a01275.html#a267512305609933baab963caed1ccd41\">Dune::Functions::OverflowArray::push_back</a></div><div class=\"ttdeci\">void push_back(const value_type &t)</div><div class=\"ttdoc\">Appends an element to the end of the OverflowArray,.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:104</div></div>\n-<div class=\"ttc\" id=\"aa01275_html_a3e35d413f76edbdefd484385a75060d7\"><div class=\"ttname\"><a href=\"a01275.html#a3e35d413f76edbdefd484385a75060d7\">Dune::Functions::OverflowArray::operator<<</a></div><div class=\"ttdeci\">friend std::ostream & operator<<(std::ostream &s, const OverflowArray &c)</div><div class=\"ttdoc\">Write container to an output stream.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:221</div></div>\n-<div class=\"ttc\" id=\"aa01275_html_a4b246cb76dc8a3b81638052e5d3c4617\"><div class=\"ttname\"><a href=\"a01275.html#a4b246cb76dc8a3b81638052e5d3c4617\">Dune::Functions::OverflowArray::begin</a></div><div class=\"ttdeci\">iterator begin()</div><div class=\"ttdoc\">Returns a iterator pointing to the beginning of the OverflowArray.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:130</div></div>\n-<div class=\"ttc\" id=\"aa01275_html_a5177f15acc922fbfeb20ac7ac57da093\"><div class=\"ttname\"><a href=\"a01275.html#a5177f15acc922fbfeb20ac7ac57da093\">Dune::Functions::OverflowArray::empty</a></div><div class=\"ttdeci\">bool empty() const</div><div class=\"ttdoc\">Returns true if OverflowArray has no elements.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:201</div></div>\n-<div class=\"ttc\" id=\"aa01275_html_a6418868e96294c749e1f50b3f4e24e04\"><div class=\"ttname\"><a href=\"a01275.html#a6418868e96294c749e1f50b3f4e24e04\">Dune::Functions::OverflowArray::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdoc\">Returns number of elements in the OverflowArray.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:196</div></div>\n-<div class=\"ttc\" id=\"aa01275_html_a67526616996e52fa0bc26046cf0a2485\"><div class=\"ttname\"><a href=\"a01275.html#a67526616996e52fa0bc26046cf0a2485\">Dune::Functions::OverflowArray::value_type</a></div><div class=\"ttdeci\">typename BaseArray::value_type value_type</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:51</div></div>\n-<div class=\"ttc\" id=\"aa01275_html_a67ad7c3562178a61003cbd24b26011f8\"><div class=\"ttname\"><a href=\"a01275.html#a67ad7c3562178a61003cbd24b26011f8\">Dune::Functions::OverflowArray::pop_back</a></div><div class=\"ttdeci\">void pop_back()</div><div class=\"ttdoc\">Erases the last element of the OverflowArray, O(1) time.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:110</div></div>\n-<div class=\"ttc\" id=\"aa01275_html_a72ffe9b324024906b65d3051ec1d199c\"><div class=\"ttname\"><a href=\"a01275.html#a72ffe9b324024906b65d3051ec1d199c\">Dune::Functions::OverflowArray::iterator</a></div><div class=\"ttdeci\">Dune::GenericIterator< OverflowArray, value_type > iterator</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:57</div></div>\n-<div class=\"ttc\" id=\"aa01275_html_a77ba635703a41b09aab4f717714c8178\"><div class=\"ttname\"><a href=\"a01275.html#a77ba635703a41b09aab4f717714c8178\">Dune::Functions::OverflowArray::begin</a></div><div class=\"ttdeci\">const_iterator begin() const</div><div class=\"ttdoc\">Returns a const_iterator pointing to the beginning of the OverflowArray.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:135</div></div>\n-<div class=\"ttc\" id=\"aa01275_html_a87ef9a454715903d6832df402705780d\"><div class=\"ttname\"><a href=\"a01275.html#a87ef9a454715903d6832df402705780d\">Dune::Functions::OverflowArray::difference_type</a></div><div class=\"ttdeci\">std::ptrdiff_t difference_type</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:55</div></div>\n-<div class=\"ttc\" id=\"aa01275_html_a8ff4c2cab7f220136c0b072c6a055f34\"><div class=\"ttname\"><a href=\"a01275.html#a8ff4c2cab7f220136c0b072c6a055f34\">Dune::Functions::OverflowArray::OverflowArray</a></div><div class=\"ttdeci\">OverflowArray()=default</div></div>\n-<div class=\"ttc\" id=\"aa01275_html_a95296504e2bd12821b975daa3d2f9934\"><div class=\"ttname\"><a href=\"a01275.html#a95296504e2bd12821b975daa3d2f9934\">Dune::Functions::OverflowArray::BaseArray</a></div><div class=\"ttdeci\">BA BaseArray</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:49</div></div>\n-<div class=\"ttc\" id=\"aa01275_html_a966efdb92bd58131b9960ca4c3afb792\"><div class=\"ttname\"><a href=\"a01275.html#a966efdb92bd58131b9960ca4c3afb792\">Dune::Functions::OverflowArray::capacity</a></div><div class=\"ttdeci\">static constexpr size_type capacity()</div><div class=\"ttdoc\">Returns the capacity of the OverflowArray.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:206</div></div>\n-<div class=\"ttc\" id=\"aa01275_html_a9a4101a7bcb022a9bf6842d33dca39c0\"><div class=\"ttname\"><a href=\"a01275.html#a9a4101a7bcb022a9bf6842d33dca39c0\">Dune::Functions::OverflowArray::max_size</a></div><div class=\"ttdeci\">static constexpr size_type max_size()</div><div class=\"ttdoc\">Returns the maximum length of the OverflowArray.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:211</div></div>\n-<div class=\"ttc\" id=\"aa01275_html_a9a8d90c0aa530dda911b987d48db2f41\"><div class=\"ttname\"><a href=\"a01275.html#a9a8d90c0aa530dda911b987d48db2f41\">Dune::Functions::OverflowArray::front</a></div><div class=\"ttdeci\">const_reference front() const</div><div class=\"ttdoc\">Returns const reference to first element of OverflowArray.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:178</div></div>\n-<div class=\"ttc\" id=\"aa01275_html_aac47600e996341476adeda5a998a6c4d\"><div class=\"ttname\"><a href=\"a01275.html#aac47600e996341476adeda5a998a6c4d\">Dune::Functions::OverflowArray::clear</a></div><div class=\"ttdeci\">void clear()</div><div class=\"ttdoc\">Erases all elements.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:83</div></div>\n-<div class=\"ttc\" id=\"aa01275_html_aacc8b19785b09af92bb1e041609a7896\"><div class=\"ttname\"><a href=\"a01275.html#aacc8b19785b09af92bb1e041609a7896\">Dune::Functions::OverflowArray::end</a></div><div class=\"ttdeci\">iterator end()</div><div class=\"ttdoc\">Returns an iterator pointing to the end of the OverflowArray.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:140</div></div>\n-<div class=\"ttc\" id=\"aa01275_html_ab600c0c276d09c1adfa934f77ca7c712\"><div class=\"ttname\"><a href=\"a01275.html#ab600c0c276d09c1adfa934f77ca7c712\">Dune::Functions::OverflowArray::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:56</div></div>\n-<div class=\"ttc\" id=\"aa01275_html_acb3c0d310f92e484249c69697210dd3b\"><div class=\"ttname\"><a href=\"a01275.html#acb3c0d310f92e484249c69697210dd3b\">Dune::Functions::OverflowArray::resize</a></div><div class=\"ttdeci\">void resize(size_type n)</div><div class=\"ttdoc\">Specifies a new size for the OverflowArray.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:93</div></div>\n-<div class=\"ttc\" id=\"aa01275_html_ad6864fbd3a109a6b10b32af7e9c58b5b\"><div class=\"ttname\"><a href=\"a01275.html#ad6864fbd3a109a6b10b32af7e9c58b5b\">Dune::Functions::OverflowArray::pointer</a></div><div class=\"ttdeci\">value_type * pointer</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:54</div></div>\n-<div class=\"ttc\" id=\"aa01275_html_ad7feb14b245d1a17e13e690cf693aba7\"><div class=\"ttname\"><a href=\"a01275.html#ad7feb14b245d1a17e13e690cf693aba7\">Dune::Functions::OverflowArray::const_iterator</a></div><div class=\"ttdeci\">Dune::GenericIterator< const OverflowArray, const value_type > const_iterator</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:58</div></div>\n-<div class=\"ttc\" id=\"aa01275_html_adda8f20adc81d38258794dc1d88dead3\"><div class=\"ttname\"><a href=\"a01275.html#adda8f20adc81d38258794dc1d88dead3\">Dune::Functions::OverflowArray::back</a></div><div class=\"ttdeci\">const_reference back() const</div><div class=\"ttdoc\">Returns const reference to last element of OverflowArray.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:190</div></div>\n-<div class=\"ttc\" id=\"aa01275_html_aec5c016d84ff17d2c57dac741c1954b6\"><div class=\"ttname\"><a href=\"a01275.html#aec5c016d84ff17d2c57dac741c1954b6\">Dune::Functions::OverflowArray::OverflowArray</a></div><div class=\"ttdeci\">OverflowArray(const std::initializer_list< value_type > &l)</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:67</div></div>\n-<div class=\"ttc\" id=\"aa01275_html_aeedca403252095b9f7d7b1aafcfd95d8\"><div class=\"ttname\"><a href=\"a01275.html#aeedca403252095b9f7d7b1aafcfd95d8\">Dune::Functions::OverflowArray::back</a></div><div class=\"ttdeci\">reference back()</div><div class=\"ttdoc\">Returns reference to last element of OverflowArray.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:184</div></div>\n-<div class=\"ttc\" id=\"aa01275_html_af9483f104035eac50b90396d2ad4640c\"><div class=\"ttname\"><a href=\"a01275.html#af9483f104035eac50b90396d2ad4640c\">Dune::Functions::OverflowArray::push_front</a></div><div class=\"ttdeci\">void push_front(const value_type &t)</div><div class=\"ttdoc\">Inserts an element to the begin of the OverflowArray,.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:122</div></div>\n-<div class=\"ttc\" id=\"aa01275_html_afc310b029604b09c928a99c341f0ac52\"><div class=\"ttname\"><a href=\"a01275.html#afc310b029604b09c928a99c341f0ac52\">Dune::Functions::OverflowArray::front</a></div><div class=\"ttdeci\">reference front()</div><div class=\"ttdoc\">Returns reference to first element of OverflowArray.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:172</div></div>\n-<div class=\"ttc\" id=\"aa01275_html_aff8b6a5fa259da1688924f7bd6a3de0e\"><div class=\"ttname\"><a href=\"a01275.html#aff8b6a5fa259da1688924f7bd6a3de0e\">Dune::Functions::OverflowArray::operator[]</a></div><div class=\"ttdeci\">reference operator[](size_type i)</div><div class=\"ttdoc\">Returns reference to the i'th element.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:150</div></div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> </div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span>}}} <span class=\"comment\">// namespace Dune::Functions::Imp</span></div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> </div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> </div>\n+<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> </div>\n+<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH</span></div>\n+<div class=\"ttc\" id=\"aa00026_html\"><div class=\"ttname\"><a href=\"a00026.html\">interfaces.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00029_html\"><div class=\"ttname\"><a href=\"a00029.html\">type_traits.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00071_html\"><div class=\"ttname\"><a href=\"a00071.html\">differentiablefunction_imp.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,313 +4,91 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * common\n-overflowarray.hh\n+ * gridfunctions\n+gridfunction_imp.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH\n- 4#define DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH\n+ 3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH\n+ 4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH\n 5\n- 6#include <algorithm>\n- 7#include <iostream>\n- 8#include <cstddef>\n- 9#include <array>\n- 10#include <initializer_list>\n+ 6#include <dune/functions/common/type_traits.hh>\n+ 7#include <dune/functions/common/interfaces.hh>\n+ 8#include <dune/functions/common/differentiablefunction_imp.hh>\n+ 9\n+ 10\n 11\n- 12#include <dune/common/genericiterator.hh>\n- 13\n- 14\n+ 12namespace Dune {\n+ 13namespace Functions {\n+ 14namespace Imp {\n 15\n- 16namespace Dune::Functions {\n- 17\n- 18\n- 42template<class BA, std::size_t maxSize = std::tuple_size_v<BA>>\n-43class OverflowArray :\n- 44 public BA\n- 45{\n- 46 static constexpr std::size_t baseSize = std::tuple_size_v<BA>;\n- 47\n- 48public:\n-49 using BaseArray = BA;\n- 50\n-51 using value_type = typename BaseArray::value_type;\n-52 using reference = value_type&;\n-53 using const_reference = const value_type&;\n-54 using pointer = value_type*;\n-55 using difference_type = std::ptrdiff_t;\n-56 using size_type = std::size_t;\n-57 using iterator = Dune::GenericIterator<OverflowArray, value_type>;\n-58 using const_iterator = Dune::GenericIterator<const OverflowArray, const\n-value_type>;\n- 59\n- 60private:\n- 61 using OverflowBuffer = std::array<value_type, maxSize-baseSize>;\n- 62\n- 63public:\n+ 19struct HasFreeLocalFunction\n+ 20{\n+ 21 template<class F>\n+ 22 auto require(F&& f) -> decltype(\n+ 23 localFunction(f)\n+ 24 );\n+ 25};\n+ 26\n+ 27\n+ 28\n+ 29// Interface of type erasure wrapper\n+ 30//\n+ 31// Notice that the basic interface of polymorphic classes (destructor,\n+clone, ...)\n+ 32// will be added by the type erasure foundation classes.\n+ 33template<class Signature, class DerivativeInterface, class\n+LocalFunctionInterface, class EntitySet>\n+ 34class GridFunctionWrapperInterface :\n+ 35 public DifferentiableFunctionWrapperInterface<Signature,\n+DerivativeInterface>\n+ 36{\n+ 37public:\n+ 38 virtual LocalFunctionInterface wrappedLocalFunction() const = 0;\n+ 39\n+ 40 virtual const EntitySet& wrappedEntitySet() const = 0;\n+ 41};\n+ 42\n+ 43\n+ 44// Implementation of type erasure wrapper\n+ 45template<class Signature, class DerivativeInterface, class\n+LocalFunctionInterface, class EntitySet, class B>\n+ 46class GridFunctionWrapperImplementation :\n+ 47 public DifferentiableFunctionWrapperImplementation<Signature,\n+DerivativeInterface, B>\n+ 48{\n+ 49 using Base = DifferentiableFunctionWrapperImplementation<Signature,\n+DerivativeInterface, B>;\n+ 50public:\n+ 51 using Base::Base;\n+ 52\n+ 53 virtual LocalFunctionInterface wrappedLocalFunction() const\n+ 54 {\n+ 55 return localFunction(this->get());\n+ 56 }\n+ 57\n+ 58 virtual const EntitySet& wrappedEntitySet() const\n+ 59 {\n+ 60 return this->get().entitySet();\n+ 61 }\n+ 62};\n+ 63\n 64\n-65 OverflowArray() = default;\n- 66\n-67 OverflowArray(const std::initializer_list<value_type>& l) {\n- 68 assert(l.size() <= capacity());\n- 69 size_ = l.size();\n- 70 std::copy_n(l.begin(), size_, begin());\n- 71 }\n- 72\n-73 bool operator_==(const OverflowArray& other) const {\n- 74 if (size() != other.size())\n- 75 return false;\n- 76 for (size_type i=0; i<size(); ++i)\n- 77 if ((*this)[i] != other[i])\n- 78 return false;\n- 79 return true;\n- 80 }\n- 81\n-83 void clear() {\n- 84 size_ = 0;\n- 85 }\n- 86\n-93 void resize(size_type n) {\n- 94 assert(n <= capacity());\n- 95 size_ = n;\n- 96 }\n- 97\n-104 void push_back(const value_type& t) {\n- 105 assert(size() < capacity());\n- 106 (*this)[size_++] = t;\n- 107 }\n- 108\n-110 void pop_back() {\n- 111 assert(size() > 0);\n- 112 if (! empty())\n- 113 size_--;\n- 114 }\n- 115\n-122 void push_front(const value_type& t) {\n- 123 assert(size() < capacity());\n- 124 for (size_type i=0; i<size(); i++)\n- 125 (*this)[i+1] = (*this)[i];\n- 126 (*this)[0] = t;\n- 127 }\n- 128\n-130 iterator begin() {\n- 131 return iterator(*this, 0);\n- 132 }\n- 133\n-135 const_iterator begin() const {\n- 136 return const_iterator(*this, 0);\n- 137 }\n- 138\n-140 iterator end() {\n- 141 return iterator(*this, size());\n- 142 }\n- 143\n-145 const_iterator end() const {\n- 146 return const_iterator(*this, size());\n- 147 }\n- 148\n-150 reference operator[](size_type i) {\n- 151 assert(i < size());\n- 152 // If there's no padding between the base class and the overflow_ member,\n- 153 // the compiler should be able to optimize this to\n- 154 // return *(&BaseArray::operator[](0) + i);\n- 155 if (i<baseSize)\n- 156 return BaseArray::operator[](i);\n- 157 return overflow_[i-baseSize];\n- 158 }\n- 159\n-161 const_reference operator[](size_type i) const {\n- 162 assert(i < size());\n- 163 // If there's no padding between the base class and the overflow_ member,\n- 164 // the compiler should be able to optimize this to\n- 165 // return *(&BaseArray::operator[](0) + i);\n- 166 if (i<baseSize)\n- 167 return BaseArray::operator[](i);\n- 168 return overflow_[i-baseSize];\n- 169 }\n- 170\n-172 reference front() {\n- 173 assert(size() > 0);\n- 174 return (*this)[0];\n- 175 }\n- 176\n-178 const_reference front() const {\n- 179 assert(size() > 0);\n- 180 return (*this)[0];\n- 181 }\n- 182\n-184 reference back() {\n- 185 assert(size() > 0);\n- 186 return (*this)[size()-1];\n- 187 }\n- 188\n-190 const_reference back() const {\n- 191 assert(size() > 0);\n- 192 return (*this)[size()-1];\n- 193 }\n- 194\n-196 size_type size () const {\n- 197 return size_;\n- 198 }\n- 199\n-201 bool empty() const {\n- 202 return size() == 0;\n- 203 }\n- 204\n-206 static constexpr size_type capacity() {\n- 207 return maxSize;\n- 208 }\n- 209\n-211 static constexpr size_type max_size() {\n- 212 return maxSize;\n- 213 }\n- 214\n-216 inline friend std::size_t hash_value(const OverflowArray& v) noexcept {\n- 217 return hash_range(v.begin(), v.end());\n- 218 }\n- 219\n-221 friend std::ostream& operator<<(std::ostream& s, const OverflowArray& c) {\n- 222 for (const auto& ci : c)\n- 223 s << ci << \" \";\n- 224 return s;\n- 225 }\n- 226\n- 227private:\n- 228 OverflowBuffer overflow_;\n- 229 size_type size_ = 0;\n- 230};\n- 231\n- 232\n- 233\n- 234} // namespace Dune::Functions\n- 235\n- 236\n- 237\n- 238#endif // DUNE_FUNCTIONS_COMMON_OVERFLOWARRAY_HH\n-Dune::Functions\n-Definition: polynomial.hh:11\n-Dune::Functions::OverflowArray\n-A dynamically sized array-like class with overflow.\n-Definition: overflowarray.hh:45\n-Dune::Functions::OverflowArray::const_reference\n-const value_type & const_reference\n-Definition: overflowarray.hh:53\n-Dune::Functions::OverflowArray::reference\n-value_type & reference\n-Definition: overflowarray.hh:52\n-Dune::Functions::OverflowArray::end\n-const_iterator end() const\n-Returns a const_iterator pointing to the end of the OverflowArray.\n-Definition: overflowarray.hh:145\n-Dune::Functions::OverflowArray::operator==\n-bool operator==(const OverflowArray &other) const\n-Definition: overflowarray.hh:73\n-Dune::Functions::OverflowArray::hash_value\n-friend std::size_t hash_value(const OverflowArray &v) noexcept\n-Compute hash value.\n-Definition: overflowarray.hh:216\n-Dune::Functions::OverflowArray::push_back\n-void push_back(const value_type &t)\n-Appends an element to the end of the OverflowArray,.\n-Definition: overflowarray.hh:104\n-Dune::Functions::OverflowArray::operator<<\n-friend std::ostream & operator<<(std::ostream &s, const OverflowArray &c)\n-Write container to an output stream.\n-Definition: overflowarray.hh:221\n-Dune::Functions::OverflowArray::begin\n-iterator begin()\n-Returns a iterator pointing to the beginning of the OverflowArray.\n-Definition: overflowarray.hh:130\n-Dune::Functions::OverflowArray::empty\n-bool empty() const\n-Returns true if OverflowArray has no elements.\n-Definition: overflowarray.hh:201\n-Dune::Functions::OverflowArray::size\n-size_type size() const\n-Returns number of elements in the OverflowArray.\n-Definition: overflowarray.hh:196\n-Dune::Functions::OverflowArray::value_type\n-typename BaseArray::value_type value_type\n-Definition: overflowarray.hh:51\n-Dune::Functions::OverflowArray::pop_back\n-void pop_back()\n-Erases the last element of the OverflowArray, O(1) time.\n-Definition: overflowarray.hh:110\n-Dune::Functions::OverflowArray::iterator\n-Dune::GenericIterator< OverflowArray, value_type > iterator\n-Definition: overflowarray.hh:57\n-Dune::Functions::OverflowArray::begin\n-const_iterator begin() const\n-Returns a const_iterator pointing to the beginning of the OverflowArray.\n-Definition: overflowarray.hh:135\n-Dune::Functions::OverflowArray::difference_type\n-std::ptrdiff_t difference_type\n-Definition: overflowarray.hh:55\n-Dune::Functions::OverflowArray::OverflowArray\n-OverflowArray()=default\n-Dune::Functions::OverflowArray::BaseArray\n-BA BaseArray\n-Definition: overflowarray.hh:49\n-Dune::Functions::OverflowArray::capacity\n-static constexpr size_type capacity()\n-Returns the capacity of the OverflowArray.\n-Definition: overflowarray.hh:206\n-Dune::Functions::OverflowArray::max_size\n-static constexpr size_type max_size()\n-Returns the maximum length of the OverflowArray.\n-Definition: overflowarray.hh:211\n-Dune::Functions::OverflowArray::front\n-const_reference front() const\n-Returns const reference to first element of OverflowArray.\n-Definition: overflowarray.hh:178\n-Dune::Functions::OverflowArray::clear\n-void clear()\n-Erases all elements.\n-Definition: overflowarray.hh:83\n-Dune::Functions::OverflowArray::end\n-iterator end()\n-Returns an iterator pointing to the end of the OverflowArray.\n-Definition: overflowarray.hh:140\n-Dune::Functions::OverflowArray::size_type\n-std::size_t size_type\n-Definition: overflowarray.hh:56\n-Dune::Functions::OverflowArray::resize\n-void resize(size_type n)\n-Specifies a new size for the OverflowArray.\n-Definition: overflowarray.hh:93\n-Dune::Functions::OverflowArray::pointer\n-value_type * pointer\n-Definition: overflowarray.hh:54\n-Dune::Functions::OverflowArray::const_iterator\n-Dune::GenericIterator< const OverflowArray, const value_type > const_iterator\n-Definition: overflowarray.hh:58\n-Dune::Functions::OverflowArray::back\n-const_reference back() const\n-Returns const reference to last element of OverflowArray.\n-Definition: overflowarray.hh:190\n-Dune::Functions::OverflowArray::OverflowArray\n-OverflowArray(const std::initializer_list< value_type > &l)\n-Definition: overflowarray.hh:67\n-Dune::Functions::OverflowArray::back\n-reference back()\n-Returns reference to last element of OverflowArray.\n-Definition: overflowarray.hh:184\n-Dune::Functions::OverflowArray::push_front\n-void push_front(const value_type &t)\n-Inserts an element to the begin of the OverflowArray,.\n-Definition: overflowarray.hh:122\n-Dune::Functions::OverflowArray::front\n-reference front()\n-Returns reference to first element of OverflowArray.\n-Definition: overflowarray.hh:172\n-Dune::Functions::OverflowArray::operator[]\n-reference operator[](size_type i)\n-Returns reference to the i'th element.\n-Definition: overflowarray.hh:150\n+ 65\n+ 66}}} // namespace Dune::Functions::Imp\n+ 67\n+ 68\n+ 69\n+ 70#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_IMP_HH\n+interfaces.hh\n+type_traits.hh\n+differentiablefunction_imp.hh\n+Dune\n+Definition: polynomial.hh:10\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00077.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00077.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: localfunction_imp.hh File Reference</title>\n+<title>dune-functions: facenormalgridfunction.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,28 +58,41 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n+<a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">localfunction_imp.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">facenormalgridfunction.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <<a class=\"el\" href=\"a00092_source.html\">dune/functions/common/type_traits.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00098_source.html\">dune/functions/common/differentiablefunction_imp.hh</a>></code><br />\n+<div class=\"textblock\"><code>#include <type_traits></code><br />\n+<code>#include <optional></code><br />\n+<code>#include <dune/common/exceptions.hh></code><br />\n+<code>#include <dune/common/typeutilities.hh></code><br />\n+<code>#include <dune/common/rangeutilities.hh></code><br />\n+<code>#include <dune/geometry/referenceelements.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00098_source.html\">dune/functions/gridfunctions/gridfunction.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00083_source.html\">dune/functions/gridfunctions/gridviewentityset.hh</a>></code><br />\n </div>\n <p><a href=\"a00077_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n+Classes</h2></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01887.html\">Dune::Functions::FaceNormalGridFunction< GV ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Grid function implementing the piecewise element face normal. <a href=\"a01887.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+</table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,20 +4,30 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * common\n-Namespaces\n-localfunction_imp.hh File Reference\n-#include <dune/functions/common/type_traits.hh>\n-#include <dune/functions/common/differentiablefunction_imp.hh>\n+ * gridfunctions\n+Classes | Namespaces\n+facenormalgridfunction.hh File Reference\n+#include <type_traits>\n+#include <optional>\n+#include <dune/common/exceptions.hh>\n+#include <dune/common/typeutilities.hh>\n+#include <dune/common/rangeutilities.hh>\n+#include <dune/geometry/referenceelements.hh>\n+#include <dune/functions/gridfunctions/gridfunction.hh>\n+#include <dune/functions/gridfunctions/gridviewentityset.hh>\n Go_to_the_source_code_of_this_file.\n+ Classes\n+class \u00a0Dune::Functions::FaceNormalGridFunction<_GV_>\n+\u00a0 Grid function implementing the piecewise element face normal. More...\n+\u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n \n ===============================================================================\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00077_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00077_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: localfunction_imp.hh Source File</title>\n+<title>dune-functions: facenormalgridfunction.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,92 +58,195 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">localfunction_imp.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">facenormalgridfunction.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00077.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_LOCALFUNCTION_FUNCTION_IMP_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_LOCALFUNCTION_FUNCTION_IMP_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00092.html\">dune/functions/common/type_traits.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00098.html\">dune/functions/common/differentiablefunction_imp.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <type_traits></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <optional></span></div>\n <div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span> </div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"keyword\">namespace </span>Imp {</div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"comment\">// Interface of type erasure wrapper</span></div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"comment\">// Notice that the basic interface of polymorphic classes (destructor, clone, ...)</span></div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"comment\">// will be added by the type erasure foundation classes.</span></div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> DerivativeInterface, <span class=\"keyword\">class</span> LocalContext></div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"keyword\">class </span>LocalFunctionWrapperInterface :</div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> <span class=\"keyword\">public</span> DifferentiableFunctionWrapperInterface<Signature, DerivativeInterface></div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span>{</div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> bind(<span class=\"keyword\">const</span> LocalContext&) = 0;</div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> </div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> unbind() = 0;</div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> </div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> bound() <span class=\"keyword\">const</span> = 0;</div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span> </div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> <span class=\"keyword\">virtual</span> <span class=\"keyword\">const</span> LocalContext& localContext() <span class=\"keyword\">const</span> = 0;</div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span>};</div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> </div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> </div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span><span class=\"comment\">// Implementation of type erasure wrapper</span></div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> DerivativeInterface, <span class=\"keyword\">class</span> LocalContext, <span class=\"keyword\">class</span> B></div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span><span class=\"keyword\">class </span>LocalFunctionWrapperImplementation :</div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> <span class=\"keyword\">public</span> DifferentiableFunctionWrapperImplementation<Signature, DerivativeInterface, B></div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span>{</div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> <span class=\"keyword\">using </span>Base = DifferentiableFunctionWrapperImplementation<Signature, DerivativeInterface, B>;</div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> <span class=\"keyword\">using </span>Base::Base;</div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> </div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> bind(<span class=\"keyword\">const</span> LocalContext& context)</div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> {</div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> this->get().bind(context);</div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> }</div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">void</span> unbind()</div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> {</div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> this->get().unbind();</div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> }</div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> </div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> <span class=\"keyword\">virtual</span> <span class=\"keywordtype\">bool</span> bound()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> <span class=\"keywordflow\">return</span> this->get().bound();</div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> }</div>\n-<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> </div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> <span class=\"keyword\">virtual</span> <span class=\"keyword\">const</span> LocalContext& localContext()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> <span class=\"keywordflow\">return</span> this->get().localContext();</div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> }</div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span>};</div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> </div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span>}}} <span class=\"comment\">// namespace Dune::Functions::Imp</span></div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> </div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> </div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> </div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH</span></div>\n-<div class=\"ttc\" id=\"aa00092_html\"><div class=\"ttname\"><a href=\"a00092.html\">type_traits.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00098_html\"><div class=\"ttname\"><a href=\"a00098.html\">differentiablefunction_imp.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/common/exceptions.hh></span></div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/typeutilities.hh></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/common/rangeutilities.hh></span></div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <dune/geometry/referenceelements.hh></span></div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00098.html\">dune/functions/gridfunctions/gridfunction.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00083.html\">dune/functions/gridfunctions/gridviewentityset.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00219.html\">Dune::Functions</a> {</div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"keyword\">namespace </span>Impl {</div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> </div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"comment\">// Compute closest face to point</span></div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> ReferenceElement, <span class=\"keyword\">class</span> Coordinate></div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"keyword\">auto</span> closestFaceIndex(<span class=\"keyword\">const</span> ReferenceElement& re, <span class=\"keyword\">const</span> Coordinate& x)</div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span>{</div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> <span class=\"keyword\">auto</span> closestFaceIndex = <span class=\"keyword\">decltype</span>(re.subEntity(0,1,0,1)){};</div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> <span class=\"keywordtype\">double</span> closestFaceDistance = std::numeric_limits<double>::max();</div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">auto</span>&& faceIndex : Dune::range(re.size(1)))</div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span> {</div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> <span class=\"comment\">// For a face unit outer normal consider the orthogonal projection</span></div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> <span class=\"comment\">// Px = x + <c-x,n>*n into the face. Then the distance to the face</span></div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> <span class=\"comment\">// is given by |x-Px| = |<c-x,n>||n| = <c-x,n>.</span></div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> <span class=\"keyword\">auto</span> normal = re.integrationOuterNormal(faceIndex);</div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> normal /= normal.two_norm();</div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> <span class=\"keyword\">auto</span> c = re.position(faceIndex,1);</div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> c -= x;</div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> <span class=\"keyword\">auto</span> faceDistance = (c*normal);</div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> <span class=\"keywordflow\">if</span> (faceDistance<closestFaceDistance)</div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> {</div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> closestFaceDistance = faceDistance;</div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> closestFaceIndex = faceIndex;</div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> }</div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> }</div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> <span class=\"keywordflow\">return</span> closestFaceIndex;</div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span>}</div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> </div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span>} <span class=\"comment\">// end namespace Impl</span></div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> </div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> </div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> </div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> </div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> GV></div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01887.html\"> 65</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01887.html\">FaceNormalGridFunction</a></div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span>{</div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01887.html#a83c9500a49fbf25de2f8aaf04e422011\"> 68</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01887.html#a83c9500a49fbf25de2f8aaf04e422011\">GridView</a> = GV;</div>\n+<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01887.html#a0c37b830a7bbba309a4df30441de8b8e\"> 69</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01919.html\">EntitySet</a> = <a class=\"code hl_class\" href=\"a01919.html\">GridViewEntitySet<GridView, 0></a>;</div>\n+<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01887.html#abdec4f718f342e7b6ad20f26cc52a928\"> 70</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01887.html#abdec4f718f342e7b6ad20f26cc52a928\">Element</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01919.html#a1d5eaf3facd0219b2e150d964a664752\">EntitySet::Element</a>;</div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> </div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01887.html#a219d5fdf7e937595a134a106bab1cefa\"> 72</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01887.html#a219d5fdf7e937595a134a106bab1cefa\">LocalDomain</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01919.html#aa4368ad66f18ba8279f20ab7a794069d\">EntitySet::LocalCoordinate</a>;</div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01887.html#a35676aaf895f54191ad4dda5ed0bcfdd\"> 73</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01887.html#a35676aaf895f54191ad4dda5ed0bcfdd\">Domain</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01919.html#ac4e3d0188467b4be3d195c9f5729e629\">EntitySet::GlobalCoordinate</a>;</div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01887.html#a4d72e8da655bc11d728782fbd85b45f6\"> 74</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01887.html#a4d72e8da655bc11d728782fbd85b45f6\">Range</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01919.html#ac4e3d0188467b4be3d195c9f5729e629\">EntitySet::GlobalCoordinate</a>;</div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> </div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> </div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> <span class=\"keyword\">using </span>Traits = Imp::GridFunctionTraits<<a class=\"code hl_typedef\" href=\"a01887.html#a4d72e8da655bc11d728782fbd85b45f6\">Range</a>(<a class=\"code hl_typedef\" href=\"a01887.html#a35676aaf895f54191ad4dda5ed0bcfdd\">Domain</a>), <a class=\"code hl_typedef\" href=\"a01887.html#a0c37b830a7bbba309a4df30441de8b8e\">EntitySet</a>, <a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a>, 16>;</div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> </div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> <span class=\"keyword\">class </span>LocalFunction</div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> {</div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> <span class=\"keyword\">using </span>Geometry = <span class=\"keyword\">typename</span> Element::Geometry;</div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dimension = GV::dimension;</div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> <span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> </div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> <span class=\"keywordtype\">void</span> bind(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01887.html#abdec4f718f342e7b6ad20f26cc52a928\">Element</a>& element)</div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> {</div>\n+<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> element_ = element;</div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> geometry_.emplace(element_.geometry());</div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> }</div>\n+<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> </div>\n+<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> <span class=\"keywordtype\">void</span> unbind()</div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> {</div>\n+<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> geometry_.reset();</div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> }</div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> </div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> <span class=\"keywordtype\">bool</span> bound()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> <span class=\"keywordflow\">return</span> <span class=\"keyword\">static_cast<</span><span class=\"keywordtype\">bool</span><span class=\"keyword\">></span>(geometry_);</div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> }</div>\n+<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> </div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> <a class=\"code hl_typedef\" href=\"a01887.html#a4d72e8da655bc11d728782fbd85b45f6\">Range</a> <a class=\"code hl_function\" href=\"a01887.html#ac26dc0cc3ed5d93a8c8b9590f68d18c1\">operator()</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01887.html#a219d5fdf7e937595a134a106bab1cefa\">LocalDomain</a>& x)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> <span class=\"keyword\">auto</span>&& re = Dune::referenceElement(*geometry_);</div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> <span class=\"comment\">// Compute reference normal of closest face to given point</span></div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> <span class=\"keyword\">auto</span> face = Impl::closestFaceIndex(re, x);</div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> <span class=\"keyword\">auto</span> localNormal = re.integrationOuterNormal(face);</div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> </div>\n+<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> <span class=\"comment\">// Transform reference normal into global unit outer normal using</span></div>\n+<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> <span class=\"comment\">// covariant Piola transformation</span></div>\n+<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> <span class=\"keyword\">auto</span> normal = <a class=\"code hl_typedef\" href=\"a01887.html#a4d72e8da655bc11d728782fbd85b45f6\">Range</a>{};</div>\n+<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> geometry_->jacobianInverseTransposed(x).mv(localNormal, normal);</div>\n+<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> normal /= normal.two_norm();</div>\n+<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> <span class=\"keywordflow\">return</span> normal;</div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> }</div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> </div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01887.html#abdec4f718f342e7b6ad20f26cc52a928\">Element</a>& localContext()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> <span class=\"keywordflow\">return</span> element_;</div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> }</div>\n+<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> </div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> <span class=\"keyword\">friend</span> <span class=\"keyword\">typename</span> <a class=\"code hl_class\" href=\"a01895.html\">Traits::LocalFunctionTraits::DerivativeInterface</a> <a class=\"code hl_friend\" href=\"a01887.html#a77ece9d9cda9194701c9275f96c35be1\">derivative</a>(<span class=\"keyword\">const</span> LocalFunction& t)</div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> {</div>\n+<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> DUNE_THROW(NotImplemented,<span class=\"stringliteral\">"not implemented"</span>);</div>\n+<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> }</div>\n+<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> </div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> <span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> std::optional<Geometry> geometry_;</div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> <a class=\"code hl_typedef\" href=\"a01887.html#abdec4f718f342e7b6ad20f26cc52a928\">Element</a> element_;</div>\n+<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> };</div>\n+<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> </div>\n+<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01887.html#abc9d21b72e064c153dd02be2cce2f01c\"> 158</a></span> <a class=\"code hl_function\" href=\"a01887.html#abc9d21b72e064c153dd02be2cce2f01c\">FaceNormalGridFunction</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01887.html#a83c9500a49fbf25de2f8aaf04e422011\">GridView</a>& gridView) :</div>\n+<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> entitySet_(gridView)</div>\n+<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> {}</div>\n+<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> </div>\n+<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01887.html#ac26dc0cc3ed5d93a8c8b9590f68d18c1\"> 163</a></span> <a class=\"code hl_typedef\" href=\"a01887.html#a4d72e8da655bc11d728782fbd85b45f6\">Range</a> <a class=\"code hl_function\" href=\"a01887.html#ac26dc0cc3ed5d93a8c8b9590f68d18c1\">operator()</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01887.html#a35676aaf895f54191ad4dda5ed0bcfdd\">Domain</a>& x)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> DUNE_THROW(NotImplemented,<span class=\"stringliteral\">"not implemented"</span>);</div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> }</div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> </div>\n+<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01887.html#a77ece9d9cda9194701c9275f96c35be1\"> 169</a></span> <span class=\"keyword\">friend</span> <span class=\"keyword\">typename</span> <a class=\"code hl_class\" href=\"a01895.html\">Traits::DerivativeInterface</a> <a class=\"code hl_friend\" href=\"a01887.html#a77ece9d9cda9194701c9275f96c35be1\">derivative</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01887.html\">FaceNormalGridFunction</a>& t)</div>\n+<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> {</div>\n+<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> DUNE_THROW(NotImplemented,<span class=\"stringliteral\">"not implemented"</span>);</div>\n+<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> }</div>\n+<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> </div>\n+<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01887.html#ab4fe4a7e812cce916c62f77fd3235d5f\"> 175</a></span> <span class=\"keyword\">friend</span> LocalFunction <a class=\"code hl_friend\" href=\"a01887.html#ab4fe4a7e812cce916c62f77fd3235d5f\">localFunction</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01887.html\">FaceNormalGridFunction</a>& t)</div>\n+<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> {</div>\n+<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> <span class=\"keywordflow\">return</span> LocalFunction{};</div>\n+<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> }</div>\n+<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> </div>\n+<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01887.html#a6636ed4196fbc511a307c222533bd8c2\"> 181</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01919.html\">EntitySet</a>& <a class=\"code hl_function\" href=\"a01887.html#a6636ed4196fbc511a307c222533bd8c2\">entitySet</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span> <span class=\"keywordflow\">return</span> entitySet_;</div>\n+<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span> }</div>\n+<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> </div>\n+<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> <a class=\"code hl_typedef\" href=\"a01887.html#a0c37b830a7bbba309a4df30441de8b8e\">EntitySet</a> entitySet_;</div>\n+<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span>};</div>\n+<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> </div>\n+<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span> </div>\n+<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> </div>\n+<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span>} <span class=\"comment\">// namespace Dune::Functions</span></div>\n+<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> </div>\n+<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH</span></div>\n+<div class=\"ttc\" id=\"aa00083_html\"><div class=\"ttname\"><a href=\"a00083.html\">gridviewentityset.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00098_html\"><div class=\"ttname\"><a href=\"a00098.html\">gridfunction.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00219_html\"><div class=\"ttname\"><a href=\"a00219.html\">Dune::Functions</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:11</div></div>\n+<div class=\"ttc\" id=\"aa01075_html\"><div class=\"ttname\"><a href=\"a01075.html\">Dune::Functions::DefaultDerivativeTraits</a></div><div class=\"ttdoc\">Default implementation for derivative traits.</div><div class=\"ttdef\"><b>Definition:</b> defaultderivativetraits.hh:37</div></div>\n+<div class=\"ttc\" id=\"aa01887_html\"><div class=\"ttname\"><a href=\"a01887.html\">Dune::Functions::FaceNormalGridFunction</a></div><div class=\"ttdoc\">Grid function implementing the piecewise element face normal.</div><div class=\"ttdef\"><b>Definition:</b> facenormalgridfunction.hh:66</div></div>\n+<div class=\"ttc\" id=\"aa01887_html_a0c37b830a7bbba309a4df30441de8b8e\"><div class=\"ttname\"><a href=\"a01887.html#a0c37b830a7bbba309a4df30441de8b8e\">Dune::Functions::FaceNormalGridFunction::EntitySet</a></div><div class=\"ttdeci\">GridViewEntitySet< GridView, 0 > EntitySet</div><div class=\"ttdef\"><b>Definition:</b> facenormalgridfunction.hh:69</div></div>\n+<div class=\"ttc\" id=\"aa01887_html_a219d5fdf7e937595a134a106bab1cefa\"><div class=\"ttname\"><a href=\"a01887.html#a219d5fdf7e937595a134a106bab1cefa\">Dune::Functions::FaceNormalGridFunction::LocalDomain</a></div><div class=\"ttdeci\">typename EntitySet::LocalCoordinate LocalDomain</div><div class=\"ttdef\"><b>Definition:</b> facenormalgridfunction.hh:72</div></div>\n+<div class=\"ttc\" id=\"aa01887_html_a35676aaf895f54191ad4dda5ed0bcfdd\"><div class=\"ttname\"><a href=\"a01887.html#a35676aaf895f54191ad4dda5ed0bcfdd\">Dune::Functions::FaceNormalGridFunction::Domain</a></div><div class=\"ttdeci\">typename EntitySet::GlobalCoordinate Domain</div><div class=\"ttdef\"><b>Definition:</b> facenormalgridfunction.hh:73</div></div>\n+<div class=\"ttc\" id=\"aa01887_html_a4d72e8da655bc11d728782fbd85b45f6\"><div class=\"ttname\"><a href=\"a01887.html#a4d72e8da655bc11d728782fbd85b45f6\">Dune::Functions::FaceNormalGridFunction::Range</a></div><div class=\"ttdeci\">typename EntitySet::GlobalCoordinate Range</div><div class=\"ttdef\"><b>Definition:</b> facenormalgridfunction.hh:74</div></div>\n+<div class=\"ttc\" id=\"aa01887_html_a6636ed4196fbc511a307c222533bd8c2\"><div class=\"ttname\"><a href=\"a01887.html#a6636ed4196fbc511a307c222533bd8c2\">Dune::Functions::FaceNormalGridFunction::entitySet</a></div><div class=\"ttdeci\">const EntitySet & entitySet() const</div><div class=\"ttdoc\">Return the stored GridViewEntitySet.</div><div class=\"ttdef\"><b>Definition:</b> facenormalgridfunction.hh:181</div></div>\n+<div class=\"ttc\" id=\"aa01887_html_a77ece9d9cda9194701c9275f96c35be1\"><div class=\"ttname\"><a href=\"a01887.html#a77ece9d9cda9194701c9275f96c35be1\">Dune::Functions::FaceNormalGridFunction::derivative</a></div><div class=\"ttdeci\">friend Traits::DerivativeInterface derivative(const FaceNormalGridFunction &t)</div><div class=\"ttdoc\">Not implemented.</div><div class=\"ttdef\"><b>Definition:</b> facenormalgridfunction.hh:169</div></div>\n+<div class=\"ttc\" id=\"aa01887_html_a83c9500a49fbf25de2f8aaf04e422011\"><div class=\"ttname\"><a href=\"a01887.html#a83c9500a49fbf25de2f8aaf04e422011\">Dune::Functions::FaceNormalGridFunction::GridView</a></div><div class=\"ttdeci\">GV GridView</div><div class=\"ttdef\"><b>Definition:</b> facenormalgridfunction.hh:68</div></div>\n+<div class=\"ttc\" id=\"aa01887_html_ab4fe4a7e812cce916c62f77fd3235d5f\"><div class=\"ttname\"><a href=\"a01887.html#ab4fe4a7e812cce916c62f77fd3235d5f\">Dune::Functions::FaceNormalGridFunction::localFunction</a></div><div class=\"ttdeci\">friend LocalFunction localFunction(const FaceNormalGridFunction &t)</div><div class=\"ttdoc\">Return a local-function associated to FaceNormalGridFunction.</div><div class=\"ttdef\"><b>Definition:</b> facenormalgridfunction.hh:175</div></div>\n+<div class=\"ttc\" id=\"aa01887_html_abc9d21b72e064c153dd02be2cce2f01c\"><div class=\"ttname\"><a href=\"a01887.html#abc9d21b72e064c153dd02be2cce2f01c\">Dune::Functions::FaceNormalGridFunction::FaceNormalGridFunction</a></div><div class=\"ttdeci\">FaceNormalGridFunction(const GridView &gridView)</div><div class=\"ttdoc\">Construct the FaceNormalGridFunction.</div><div class=\"ttdef\"><b>Definition:</b> facenormalgridfunction.hh:158</div></div>\n+<div class=\"ttc\" id=\"aa01887_html_abdec4f718f342e7b6ad20f26cc52a928\"><div class=\"ttname\"><a href=\"a01887.html#abdec4f718f342e7b6ad20f26cc52a928\">Dune::Functions::FaceNormalGridFunction::Element</a></div><div class=\"ttdeci\">typename EntitySet::Element Element</div><div class=\"ttdef\"><b>Definition:</b> facenormalgridfunction.hh:70</div></div>\n+<div class=\"ttc\" id=\"aa01887_html_ac26dc0cc3ed5d93a8c8b9590f68d18c1\"><div class=\"ttname\"><a href=\"a01887.html#ac26dc0cc3ed5d93a8c8b9590f68d18c1\">Dune::Functions::FaceNormalGridFunction::operator()</a></div><div class=\"ttdeci\">Range operator()(const Domain &x) const</div><div class=\"ttdoc\">Not implemented.</div><div class=\"ttdef\"><b>Definition:</b> facenormalgridfunction.hh:163</div></div>\n+<div class=\"ttc\" id=\"aa01895_html\"><div class=\"ttname\"><a href=\"a01895.html\">Dune::Functions::GridFunction</a></div><div class=\"ttdef\"><b>Definition:</b> gridfunction.hh:32</div></div>\n+<div class=\"ttc\" id=\"aa01919_html\"><div class=\"ttname\"><a href=\"a01919.html\">Dune::Functions::GridViewEntitySet< GridView, 0 ></a></div></div>\n+<div class=\"ttc\" id=\"aa01919_html_a1d5eaf3facd0219b2e150d964a664752\"><div class=\"ttname\"><a href=\"a01919.html#a1d5eaf3facd0219b2e150d964a664752\">Dune::Functions::GridViewEntitySet< GridView, 0 >::Element</a></div><div class=\"ttdeci\">GridView::template Codim< codim >::Entity Element</div><div class=\"ttdoc\">Type of Elements contained in this EntitySet.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:32</div></div>\n+<div class=\"ttc\" id=\"aa01919_html_aa4368ad66f18ba8279f20ab7a794069d\"><div class=\"ttname\"><a href=\"a01919.html#aa4368ad66f18ba8279f20ab7a794069d\">Dune::Functions::GridViewEntitySet< GridView, 0 >::LocalCoordinate</a></div><div class=\"ttdeci\">Element::Geometry::LocalCoordinate LocalCoordinate</div><div class=\"ttdoc\">Type of local coordinates with respect to the Element.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:35</div></div>\n+<div class=\"ttc\" id=\"aa01919_html_ac4e3d0188467b4be3d195c9f5729e629\"><div class=\"ttname\"><a href=\"a01919.html#ac4e3d0188467b4be3d195c9f5729e629\">Dune::Functions::GridViewEntitySet< GridView, 0 >::GlobalCoordinate</a></div><div class=\"ttdeci\">Element::Geometry::GlobalCoordinate GlobalCoordinate</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:36</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,90 +4,231 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * common\n-localfunction_imp.hh\n+ * gridfunctions\n+facenormalgridfunction.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_COMMON_LOCALFUNCTION_FUNCTION_IMP_HH\n- 4#define DUNE_FUNCTIONS_COMMON_LOCALFUNCTION_FUNCTION_IMP_HH\n+ 3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH\n+ 4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH\n 5\n- 6#include <dune/functions/common/type_traits.hh>\n- 7#include <dune/functions/common/differentiablefunction_imp.hh>\n+ 6#include <type_traits>\n+ 7#include <optional>\n 8\n- 9\n- 10\n- 11namespace Dune {\n- 12namespace Functions {\n- 13namespace Imp {\n- 14\n- 15// Interface of type erasure wrapper\n- 16//\n- 17// Notice that the basic interface of polymorphic classes (destructor,\n-clone, ...)\n- 18// will be added by the type erasure foundation classes.\n- 19template<class Signature, class DerivativeInterface, class LocalContext>\n- 20class LocalFunctionWrapperInterface :\n- 21 public DifferentiableFunctionWrapperInterface<Signature,\n-DerivativeInterface>\n- 22{\n- 23public:\n- 24 virtual void bind(const LocalContext&) = 0;\n- 25\n- 26 virtual void unbind() = 0;\n- 27\n- 28 virtual bool bound() const = 0;\n- 29\n- 30 virtual const LocalContext& localContext() const = 0;\n- 31};\n- 32\n- 33\n- 34// Implementation of type erasure wrapper\n- 35template<class Signature, class DerivativeInterface, class LocalContext,\n-class B>\n- 36class LocalFunctionWrapperImplementation :\n- 37 public DifferentiableFunctionWrapperImplementation<Signature,\n-DerivativeInterface, B>\n- 38{\n- 39 using Base = DifferentiableFunctionWrapperImplementation<Signature,\n-DerivativeInterface, B>;\n- 40public:\n- 41 using Base::Base;\n- 42\n- 43 virtual void bind(const LocalContext& context)\n- 44 {\n- 45 this->get().bind(context);\n- 46 }\n- 47\n- 48 virtual void unbind()\n- 49 {\n- 50 this->get().unbind();\n- 51 }\n- 52\n- 53 virtual bool bound() const\n- 54 {\n- 55 return this->get().bound();\n- 56 }\n- 57\n- 58 virtual const LocalContext& localContext() const\n- 59 {\n- 60 return this->get().localContext();\n- 61 }\n- 62};\n- 63\n- 64}}} // namespace Dune::Functions::Imp\n- 65\n- 66\n- 67\n- 68#endif // DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH\n-type_traits.hh\n-differentiablefunction_imp.hh\n-Dune\n-Definition: polynomial.hh:10\n+ 9#include <dune/common/exceptions.hh>\n+ 10#include <dune/common/typeutilities.hh>\n+ 11#include <dune/common/rangeutilities.hh>\n+ 12#include <dune/geometry/referenceelements.hh>\n+ 13\n+ 14#include <dune/functions/gridfunctions/gridfunction.hh>\n+ 15#include <dune/functions/gridfunctions/gridviewentityset.hh>\n+ 16\n+ 17\n+ 18namespace Dune::Functions {\n+ 19\n+ 20namespace Impl {\n+ 21\n+ 22// Compute closest face to point\n+ 23template<class ReferenceElement, class Coordinate>\n+ 24auto closestFaceIndex(const ReferenceElement& re, const Coordinate& x)\n+ 25{\n+ 26 auto closestFaceIndex = decltype(re.subEntity(0,1,0,1)){};\n+ 27 double closestFaceDistance = std::numeric_limits<double>::max();\n+ 28 for(auto&& faceIndex : Dune::range(re.size(1)))\n+ 29 {\n+ 30 // For a face unit outer normal consider the orthogonal projection\n+ 31 // Px = x + <c-x,n>*n into the face. Then the distance to the face\n+ 32 // is given by |x-Px| = |<c-x,n>||n| = <c-x,n>.\n+ 33 auto normal = re.integrationOuterNormal(faceIndex);\n+ 34 normal /= normal.two_norm();\n+ 35 auto c = re.position(faceIndex,1);\n+ 36 c -= x;\n+ 37 auto faceDistance = (c*normal);\n+ 38 if (faceDistance<closestFaceDistance)\n+ 39 {\n+ 40 closestFaceDistance = faceDistance;\n+ 41 closestFaceIndex = faceIndex;\n+ 42 }\n+ 43 }\n+ 44 return closestFaceIndex;\n+ 45}\n+ 46\n+ 47} // end namespace Impl\n+ 48\n+ 49\n+ 50\n+ 51\n+ 64template<class GV>\n+65class FaceNormalGridFunction\n+ 66{\n+ 67public:\n+68 using GridView = GV;\n+69 using EntitySet = GridViewEntitySet<GridView,_0>;\n+70 using Element = typename EntitySet::Element;\n+ 71\n+72 using LocalDomain = typename EntitySet::LocalCoordinate;\n+73 using Domain = typename EntitySet::GlobalCoordinate;\n+74 using Range = typename EntitySet::GlobalCoordinate;\n+ 75\n+ 76private:\n+ 77\n+ 78 using Traits = Imp::GridFunctionTraits<Range(Domain), EntitySet,\n+DefaultDerivativeTraits, 16>;\n+ 79\n+ 80 class LocalFunction\n+ 81 {\n+ 82 using Geometry = typename Element::Geometry;\n+ 83 static const int dimension = GV::dimension;\n+ 84 public:\n+ 85\n+ 97 void bind(const Element& element)\n+ 98 {\n+ 99 element_ = element;\n+ 100 geometry_.emplace(element_.geometry());\n+ 101 }\n+ 102\n+ 103 void unbind()\n+ 104 {\n+ 105 geometry_.reset();\n+ 106 }\n+ 107\n+ 110 bool bound() const\n+ 111 {\n+ 112 return static_cast<bool>(geometry_);\n+ 113 }\n+ 114\n+ 124 Range operator()(const LocalDomain& x) const\n+ 125 {\n+ 126 auto&& re = Dune::referenceElement(*geometry_);\n+ 127 // Compute reference normal of closest face to given point\n+ 128 auto face = Impl::closestFaceIndex(re, x);\n+ 129 auto localNormal = re.integrationOuterNormal(face);\n+ 130\n+ 131 // Transform reference normal into global unit outer normal using\n+ 132 // covariant Piola transformation\n+ 133 auto normal = Range{};\n+ 134 geometry_->jacobianInverseTransposed(x).mv(localNormal, normal);\n+ 135 normal /= normal.two_norm();\n+ 136 return normal;\n+ 137 }\n+ 138\n+ 140 const Element& localContext() const\n+ 141 {\n+ 142 return element_;\n+ 143 }\n+ 144\n+ 146 friend typename Traits::LocalFunctionTraits::DerivativeInterface\n+derivative(const LocalFunction& t)\n+ 147 {\n+ 148 DUNE_THROW(NotImplemented,\"not implemented\");\n+ 149 }\n+ 150\n+ 151 private:\n+ 152 std::optional<Geometry> geometry_;\n+ 153 Element element_;\n+ 154 };\n+ 155\n+ 156public:\n+158 FaceNormalGridFunction(const GridView& gridView) :\n+ 159 entitySet_(gridView)\n+ 160 {}\n+ 161\n+163 Range operator()(const Domain& x) const\n+ 164 {\n+ 165 DUNE_THROW(NotImplemented,\"not implemented\");\n+ 166 }\n+ 167\n+169 friend typename Traits::DerivativeInterface derivative(const\n+FaceNormalGridFunction& t)\n+ 170 {\n+ 171 DUNE_THROW(NotImplemented,\"not implemented\");\n+ 172 }\n+ 173\n+175 friend LocalFunction localFunction(const FaceNormalGridFunction& t)\n+ 176 {\n+ 177 return LocalFunction{};\n+ 178 }\n+ 179\n+181 const EntitySet& entitySet() const\n+ 182 {\n+ 183 return entitySet_;\n+ 184 }\n+ 185\n+ 186private:\n+ 187 EntitySet entitySet_;\n+ 188};\n+ 189\n+ 190\n+ 191\n+ 192} // namespace Dune::Functions\n+ 193\n+ 194#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_FACENORMALGRIDFUNCTION_HH\n+gridviewentityset.hh\n+gridfunction.hh\n+Dune::Functions\n+Definition: polynomial.hh:11\n+Dune::Functions::DefaultDerivativeTraits\n+Default implementation for derivative traits.\n+Definition: defaultderivativetraits.hh:37\n+Dune::Functions::FaceNormalGridFunction\n+Grid function implementing the piecewise element face normal.\n+Definition: facenormalgridfunction.hh:66\n+Dune::Functions::FaceNormalGridFunction::EntitySet\n+GridViewEntitySet< GridView, 0 > EntitySet\n+Definition: facenormalgridfunction.hh:69\n+Dune::Functions::FaceNormalGridFunction::LocalDomain\n+typename EntitySet::LocalCoordinate LocalDomain\n+Definition: facenormalgridfunction.hh:72\n+Dune::Functions::FaceNormalGridFunction::Domain\n+typename EntitySet::GlobalCoordinate Domain\n+Definition: facenormalgridfunction.hh:73\n+Dune::Functions::FaceNormalGridFunction::Range\n+typename EntitySet::GlobalCoordinate Range\n+Definition: facenormalgridfunction.hh:74\n+Dune::Functions::FaceNormalGridFunction::entitySet\n+const EntitySet & entitySet() const\n+Return the stored GridViewEntitySet.\n+Definition: facenormalgridfunction.hh:181\n+Dune::Functions::FaceNormalGridFunction::derivative\n+friend Traits::DerivativeInterface derivative(const FaceNormalGridFunction &t)\n+Not implemented.\n+Definition: facenormalgridfunction.hh:169\n+Dune::Functions::FaceNormalGridFunction::GridView\n+GV GridView\n+Definition: facenormalgridfunction.hh:68\n+Dune::Functions::FaceNormalGridFunction::localFunction\n+friend LocalFunction localFunction(const FaceNormalGridFunction &t)\n+Return a local-function associated to FaceNormalGridFunction.\n+Definition: facenormalgridfunction.hh:175\n+Dune::Functions::FaceNormalGridFunction::FaceNormalGridFunction\n+FaceNormalGridFunction(const GridView &gridView)\n+Construct the FaceNormalGridFunction.\n+Definition: facenormalgridfunction.hh:158\n+Dune::Functions::FaceNormalGridFunction::Element\n+typename EntitySet::Element Element\n+Definition: facenormalgridfunction.hh:70\n+Dune::Functions::FaceNormalGridFunction::operator()\n+Range operator()(const Domain &x) const\n+Not implemented.\n+Definition: facenormalgridfunction.hh:163\n+Dune::Functions::GridFunction\n+Definition: gridfunction.hh:32\n+Dune::Functions::GridViewEntitySet<_GridView,_0_>\n+Dune::Functions::GridViewEntitySet<_GridView,_0_>::Element\n+GridView::template Codim< codim >::Entity Element\n+Type of Elements contained in this EntitySet.\n+Definition: gridviewentityset.hh:32\n+Dune::Functions::GridViewEntitySet<_GridView,_0_>::LocalCoordinate\n+Element::Geometry::LocalCoordinate LocalCoordinate\n+Type of local coordinates with respect to the Element.\n+Definition: gridviewentityset.hh:35\n+Dune::Functions::GridViewEntitySet<_GridView,_0_>::GlobalCoordinate\n+Element::Geometry::GlobalCoordinate GlobalCoordinate\n+Definition: gridviewentityset.hh:36\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00080.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00080.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: defaultderivativetraits.hh File Reference</title>\n+<title>dune-functions: analyticgridviewfunction.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,58 +58,56 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n-<a href=\"#namespaces\">Namespaces</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">defaultderivativetraits.hh File Reference</div></div>\n+<a href=\"#namespaces\">Namespaces</a> |\n+<a href=\"#func-members\">Functions</a> </div>\n+ <div class=\"headertitle\"><div class=\"title\">analyticgridviewfunction.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <div class=\"textblock\"><code>#include <type_traits></code><br />\n-<code>#include <utility></code><br />\n-<code>#include <dune/common/fvector.hh></code><br />\n-<code>#include <dune/common/fmatrix.hh></code><br />\n+<code>#include <optional></code><br />\n+<code>#include <dune/common/typeutilities.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00008_source.html\">dune/functions/common/signature.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00035_source.html\">dune/functions/common/defaultderivativetraits.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00071_source.html\">dune/functions/common/differentiablefunction_imp.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00011_source.html\">dune/functions/common/differentiablefunction.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00083_source.html\">dune/functions/gridfunctions/gridviewentityset.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00095_source.html\">dune/functions/gridfunctions/localderivativetraits.hh</a>></code><br />\n </div>\n <p><a href=\"a00080_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01071.html\">Dune::Functions::InvalidRange</a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Dummy range class to be used if no proper type is available. <a href=\"a01071.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01075.html\">Dune::Functions::DefaultDerivativeTraits< Signature ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Default implementation for derivative traits. <a href=\"a01075.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01079.html\">Dune::Functions::DefaultDerivativeTraits< double(double) ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Default implementation for derivative traits. <a href=\"a01079.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01083.html\">Dune::Functions::DefaultDerivativeTraits< K(FieldVector< K, n >)></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Default implementation for derivative traits. <a href=\"a01083.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01087.html\">Dune::Functions::DefaultDerivativeTraits< FieldVector< K, m >(FieldVector< K, n >)></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Default implementation for derivative traits. <a href=\"a01087.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01091.html\">Dune::Functions::DefaultDerivativeTraits< FieldMatrix< K, 1, m >(FieldVector< K, n >)></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Default implementation for derivative traits. <a href=\"a01091.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01847.html\">Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Class wrapping any differentiable function as grid function. <a href=\"a01847.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+</table><table class=\"memberdecls\">\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n+Functions</h2></td></tr>\n+<tr class=\"memitem:gafe8f06fb6d4027bfaf39e0971d8eb3c6\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class GridView > </td></tr>\n+<tr class=\"memitem:gafe8f06fb6d4027bfaf39e0971d8eb3c6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">AnalyticGridViewFunction< typename std::invoke_result< F, typename GridView::template Codim< 0 >::Geometry::GlobalCoordinate >::type(typename GridView::template Codim< 0 >::Geometry::GlobalCoordinate), GridView, typename std::decay< F >::type > </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00209.html#gafe8f06fb6d4027bfaf39e0971d8eb3c6\">Dune::Functions::makeAnalyticGridViewFunction</a> (F &&f, const GridView &gridView)</td></tr>\n+<tr class=\"memdesc:gafe8f06fb6d4027bfaf39e0971d8eb3c6\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create an <a class=\"el\" href=\"a01843.html\">AnalyticGridViewFunction</a> from a function and a grid view. <a href=\"a00209.html#gafe8f06fb6d4027bfaf39e0971d8eb3c6\">More...</a><br /></td></tr>\n+<tr class=\"separator:gafe8f06fb6d4027bfaf39e0971d8eb3c6\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,44 +4,46 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * common\n-Classes | Namespaces\n-defaultderivativetraits.hh File Reference\n+ * gridfunctions\n+Classes | Namespaces | Functions\n+analyticgridviewfunction.hh File Reference\n #include <type_traits>\n-#include <utility>\n-#include <dune/common/fvector.hh>\n-#include <dune/common/fmatrix.hh>\n+#include <optional>\n+#include <dune/common/typeutilities.hh>\n+#include <dune/functions/common/signature.hh>\n+#include <dune/functions/common/defaultderivativetraits.hh>\n+#include <dune/functions/common/differentiablefunction_imp.hh>\n+#include <dune/functions/common/differentiablefunction.hh>\n+#include <dune/functions/gridfunctions/gridviewentityset.hh>\n+#include <dune/functions/gridfunctions/localderivativetraits.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n- class \u00a0Dune::Functions::InvalidRange\n-\u00a0 Dummy range class to be used if no proper type is available. More...\n-\u00a0\n-struct \u00a0Dune::Functions::DefaultDerivativeTraits<_Signature_>\n-\u00a0 Default implementation for derivative traits. More...\n-\u00a0\n-struct \u00a0Dune::Functions::DefaultDerivativeTraits<_double(double)_>\n-\u00a0 Default implementation for derivative traits. More...\n-\u00a0\n-struct \u00a0Dune::Functions::DefaultDerivativeTraits<_K(FieldVector<_K,_n_>)>\n-\u00a0 Default implementation for derivative traits. More...\n-\u00a0\n-struct \u00a0Dune::Functions::DefaultDerivativeTraits<_FieldVector<_K,_m_>\n- (FieldVector<_K,_n_>)>\n-\u00a0 Default implementation for derivative traits. More...\n-\u00a0\n-struct \u00a0Dune::Functions::DefaultDerivativeTraits<_FieldMatrix<_K,_1,_m_>\n- (FieldVector<_K,_n_>)>\n-\u00a0 Default implementation for derivative traits. More...\n+class \u00a0Dune::Functions::AnalyticGridViewFunction<_Range(Domain),_GV,_F,\n+ DerivativeTraits_>\n+\u00a0 Class wrapping any differentiable function as grid function. More...\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n+ Functions\n+template<class F , class GridView >\n+ AnalyticGridViewFunction< typename\n+ std::invoke_result< F, typename\n+ GridView::template Codim< 0 >::\n+ Geometry::GlobalCoordinate >::type\n+(typename GridView::template Codim< 0\n+ >::Geometry::GlobalCoordinate), Dune::Functions::\n+ GridView, typename std::decay< F >:: makeAnalyticGridViewFunction (F &&f,\n+ type >\u00a0const GridView &gridView)\n+\u00a0 Create an AnalyticGridViewFunction from\n+ a function and a grid view. More...\n+\u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00080_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00080_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: defaultderivativetraits.hh Source File</title>\n+<title>dune-functions: analyticgridviewfunction.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,85 +58,239 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">defaultderivativetraits.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">analyticgridviewfunction.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00080.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n <div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <type_traits></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <utility></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <optional></span></div>\n <div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/common/fvector.hh></span></div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/fmatrix.hh></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01071.html\"> 22</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01071.html\">InvalidRange</a></div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span>{};</div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> </div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> </div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature></div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01075.html\"> 36</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a></div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span>{</div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01075.html#a3f8978146cb9b334705b651d84194b98\"> 39</a></span> <span class=\"keyword\">typedef</span> <a class=\"code hl_class\" href=\"a01071.html\">InvalidRange</a> <a class=\"code hl_typedef\" href=\"a01075.html#a3f8978146cb9b334705b651d84194b98\">Range</a>;</div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span>};</div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> </div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> </div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span><span class=\"keyword\">template</span><></div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01079.html\"> 51</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a>< double(double) ></div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span>{</div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01079.html#a801e37f182d8c16ba1cfd72de1f17688\"> 54</a></span> <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span> <a class=\"code hl_typedef\" href=\"a01079.html#a801e37f182d8c16ba1cfd72de1f17688\">Range</a>;</div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span>};</div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> </div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> K, <span class=\"keywordtype\">int</span> n></div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01083.html\"> 67</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a><K(FieldVector<K,n>)></div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span>{</div>\n-<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01083.html#ad1603332ee1c64f89c0fc18a8ee273d6\"> 70</a></span> <span class=\"keyword\">typedef</span> FieldVector<K,n> <a class=\"code hl_typedef\" href=\"a01083.html#ad1603332ee1c64f89c0fc18a8ee273d6\">Range</a>;</div>\n-<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span>};</div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> </div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> K, <span class=\"keywordtype\">int</span> n, <span class=\"keywordtype\">int</span> m></div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01087.html\"> 83</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a><FieldVector<K,m>(FieldVector<K,n>)></div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span>{</div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01087.html#ace3fbe5caed8c848072466ff723e82ab\"> 86</a></span> <span class=\"keyword\">typedef</span> FieldMatrix<K,m,n> <a class=\"code hl_typedef\" href=\"a01087.html#ace3fbe5caed8c848072466ff723e82ab\">Range</a>;</div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span>};</div>\n-<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> </div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> K, <span class=\"keywordtype\">int</span> n, <span class=\"keywordtype\">int</span> m></div>\n-<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01091.html\"> 99</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a><FieldMatrix<K,1,m>(FieldVector<K,n>)></div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span>{</div>\n-<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01091.html#a5379bc605e79658f7a54ec17e3946e9b\"> 102</a></span> <span class=\"keyword\">typedef</span> FieldMatrix<K,m,n> <a class=\"code hl_typedef\" href=\"a01091.html#a5379bc605e79658f7a54ec17e3946e9b\">Range</a>;</div>\n-<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span>};</div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> </div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/common/typeutilities.hh></span></div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span> </div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00008.html\">dune/functions/common/signature.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00035.html\">dune/functions/common/defaultderivativetraits.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00071.html\">dune/functions/common/differentiablefunction_imp.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00011.html\">dune/functions/common/differentiablefunction.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00083.html\">dune/functions/gridfunctions/gridviewentityset.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00095.html\">dune/functions/gridfunctions/localderivativetraits.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> </div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"keyword\">namespace </span>Imp {</div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span> </div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> GV, <span class=\"keyword\">class</span> FLocal, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits=DefaultDerivativeTraits></div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span><span class=\"keyword\">class </span>LocalAnalyticGridViewFunction;</div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> </div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> LocalDomain, <span class=\"keyword\">class</span> GV, <span class=\"keyword\">class</span> F, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits></div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span><span class=\"keyword\">class </span>LocalAnalyticGridViewFunction<Range(LocalDomain), GV, F, DerivativeTraits></div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span>{</div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> <span class=\"keyword\">using </span>Signature = Range(LocalDomain);</div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> <span class=\"keyword\">using </span>RawSignature = <span class=\"keyword\">typename</span> SignatureTraits<Signature>::RawSignature;</div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> <span class=\"keyword\">using </span>DerivativeSignature = <span class=\"keyword\">typename</span> DerivativeTraits<RawSignature>::Range(LocalDomain);</div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> </div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> <span class=\"keyword\">using </span>GridView = GV;</div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> <span class=\"keyword\">using </span>EntitySet = GridViewEntitySet<GridView, 0>;</div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> <span class=\"keyword\">using </span>Element = <span class=\"keyword\">typename</span> EntitySet::Element;</div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span><span class=\"comment\">// using Geometry = typename Element::Geometry;</span></div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> <span class=\"keyword\">using </span>Geometry = <span class=\"keyword\">typename</span> std::decay<typename Element::Geometry>::type;</div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> </div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> <span class=\"comment\">// Use the indirection via derivativeIfImplemented to also support</span></div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> <span class=\"comment\">// function types F that do not implement derivative. In this case</span></div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> <span class=\"comment\">// the interface type DifferentiableFunction is using a dummy for</span></div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> <span class=\"comment\">// the derivative type</span></div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> <span class=\"keyword\">using </span>DerivativeDummy = DifferentiableFunction<DerivativeSignature>;</div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> <span class=\"keyword\">using </span>GlobalRawDerivative = <span class=\"keyword\">decltype</span>(Imp::derivativeIfImplemented<DerivativeDummy, F>(std::declval<F>()));</div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> <span class=\"keyword\">using </span>LocalDerivative = LocalAnalyticGridViewFunction<DerivativeSignature, GridView, GlobalRawDerivative, DerivativeTraits>;</div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> </div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> FT, disableCopyMove<LocalAnalyticGr<span class=\"keywordtype\">id</span>ViewFunction, FT> = 0></div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> LocalAnalyticGridViewFunction(FT&& f) :</div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> f_(std::forward<FT>(f))</div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> {}</div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> </div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> FT></div>\n+<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> LocalAnalyticGridViewFunction(FT&& f, <span class=\"keyword\">const</span> Element& element, <span class=\"keyword\">const</span> std::optional<Geometry>& geometry) :</div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> f_(std::forward<FT>(f)),</div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> element_(element),</div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> geometry_(geometry)</div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> {}</div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> </div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> </div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> <span class=\"keywordtype\">void</span> bind(<span class=\"keyword\">const</span> Element& element)</div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> {</div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> element_ = element;</div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> geometry_.emplace(element_.geometry());</div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> }</div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> </div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> <span class=\"keywordtype\">void</span> unbind()</div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> {</div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> geometry_.reset();</div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> }</div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> </div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> <span class=\"keywordtype\">bool</span> bound()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> <span class=\"keywordflow\">return</span> <span class=\"keyword\">static_cast<</span><span class=\"keywordtype\">bool</span><span class=\"keyword\">></span>(geometry_);</div>\n+<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> }</div>\n+<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> </div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> Range operator()(<span class=\"keyword\">const</span> LocalDomain& x)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> assert(!!geometry_);</div>\n+<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> <span class=\"keywordflow\">return</span> f_(geometry_->global(x));</div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> }</div>\n <div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> </div>\n-<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span>}} <span class=\"comment\">// namespace Dune::Functions</span></div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> </div>\n-<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> </div>\n-<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH</span></div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> <span class=\"keyword\">const</span> Element& localContext()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> assert(!!geometry_);</div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> <span class=\"keywordflow\">return</span> element_;</div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> }</div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> </div>\n+<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> <span class=\"keyword\">friend</span> LocalDerivative <a class=\"code hl_function\" href=\"a00209.html#ga7ec424ff4be740ad675bd85750940472\">derivative</a>(<span class=\"keyword\">const</span> LocalAnalyticGridViewFunction& t)</div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> {</div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> <span class=\"keywordflow\">return</span> LocalDerivative(Imp::derivativeIfImplemented<DerivativeDummy, F>(t.f_), t.element_, t.geometry_);</div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> }</div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> </div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> F f_;</div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> Element element_;</div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> std::optional<Geometry> geometry_ = std::nullopt;</div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span>};</div>\n+<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> </div>\n+<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span>} <span class=\"comment\">// end namespace Imp</span></div>\n+<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> </div>\n+<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> </div>\n+<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> </div>\n+<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> </div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> GV, <span class=\"keyword\">class</span> F, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits=DefaultDerivativeTraits></div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01843.html\"> 138</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01843.html\">AnalyticGridViewFunction</a>;</div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> </div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> </div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">class</span> GV, <span class=\"keyword\">class</span> F, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits></div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html\"> 147</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01843.html\">AnalyticGridViewFunction</a><Range(Domain), GV, F, DerivativeTraits></div>\n+<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span>{</div>\n+<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#aa2e57079e8165771b468b0f8ec045543\"> 150</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01847.html#aa2e57079e8165771b468b0f8ec045543\">Signature</a> = Range(Domain);</div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#ad2d85b10863874dd3e2776713d5076e9\"> 151</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01847.html#ad2d85b10863874dd3e2776713d5076e9\">RawSignature</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_struct\" href=\"a01291.html\">SignatureTraits<Signature>::RawSignature</a>;</div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#afcaf671c34c3553f4d420211028dab76\"> 152</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01847.html#afcaf671c34c3553f4d420211028dab76\">DerivativeSignature</a> = <span class=\"keyword\">typename</span> DerivativeTraits<RawSignature>::Range(Domain);</div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> </div>\n+<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#a3ab08bad4d12b17d8c8f7c8e7b1bbc69\"> 154</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01847.html#a3ab08bad4d12b17d8c8f7c8e7b1bbc69\">GridView</a> = GV;</div>\n+<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#aed254f1cdaa3f08febd06e909d35b3cd\"> 155</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01919.html\">EntitySet</a> = <a class=\"code hl_class\" href=\"a01919.html\">GridViewEntitySet<GridView, 0></a>;</div>\n+<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#a36bf73d91911801df4dcaa5ae961d0b0\"> 156</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01847.html#a36bf73d91911801df4dcaa5ae961d0b0\">Element</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01919.html#a1d5eaf3facd0219b2e150d964a664752\">EntitySet::Element</a>;</div>\n+<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#a2d4c287ddf9b17b7d6320dd572ddfcf1\"> 157</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01847.html#a2d4c287ddf9b17b7d6320dd572ddfcf1\">Geometry</a> = <span class=\"keyword\">typename</span> Element::Geometry;</div>\n+<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> </div>\n+<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> <span class=\"comment\">// Use the indirection via derivativeIfImplemented to also support</span></div>\n+<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> <span class=\"comment\">// function types F that do not implement derivative. In this case</span></div>\n+<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> <span class=\"comment\">// the interface type DifferentiableFunction is used a dummy for</span></div>\n+<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> <span class=\"comment\">// the derivative type</span></div>\n+<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#a68a3493c4e43d6c64410275156852ac2\"> 163</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01095.html\">DerivativeDummy</a> = <a class=\"code hl_class\" href=\"a01095.html\">DifferentiableFunction<DerivativeSignature></a>;</div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#a4c8813afc37057a21fc7536d9a18685e\"> 164</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01847.html#a4c8813afc37057a21fc7536d9a18685e\">GlobalRawDerivative</a> = <span class=\"keyword\">decltype</span>(Imp::derivativeIfImplemented<DerivativeDummy, F>(std::declval<F>()));</div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#afe9abda88e9aa9396e3485ea5475b31e\"> 165</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01843.html\">Derivative</a> = <a class=\"code hl_class\" href=\"a01843.html\">AnalyticGridViewFunction<DerivativeSignature, GridView, GlobalRawDerivative, DerivativeTraits></a>;</div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> </div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#a2644d1c93770a9a8ad1931c8f1cdc7f8\"> 167</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01847.html#a2644d1c93770a9a8ad1931c8f1cdc7f8\">LocalDomain</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01919.html#aa4368ad66f18ba8279f20ab7a794069d\">EntitySet::LocalCoordinate</a>;</div>\n+<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#ab92fb33a585d4dfdbe78dd0e77993d7a\"> 168</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01847.html#ab92fb33a585d4dfdbe78dd0e77993d7a\">LocalFunction</a> = <span class=\"keyword\">typename</span> Imp::LocalAnalyticGridViewFunction<Range(<a class=\"code hl_typedef\" href=\"a01847.html#a2644d1c93770a9a8ad1931c8f1cdc7f8\">LocalDomain</a>), <a class=\"code hl_typedef\" href=\"a01847.html#a3ab08bad4d12b17d8c8f7c8e7b1bbc69\">GridView</a>, F, <a class=\"code hl_struct\" href=\"a01931.html\">LocalDerivativeTraits<EntitySet, DerivativeTraits>::template</a> Traits>;</div>\n+<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> </div>\n+<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> FT></div>\n+<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#aa421b38ced5abc500288056268631b3e\"> 172</a></span> <a class=\"code hl_function\" href=\"a01847.html#aa421b38ced5abc500288056268631b3e\">AnalyticGridViewFunction</a>(FT&& f, <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01847.html#a3ab08bad4d12b17d8c8f7c8e7b1bbc69\">GridView</a>& gridView) :</div>\n+<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> f_(std::forward<FT>(f)),</div>\n+<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> entitySet_(gridView)</div>\n+<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> {}</div>\n+<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> </div>\n+<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#a05726b187a479456361f58e9d4b2fa34\"> 178</a></span> Range <a class=\"code hl_function\" href=\"a01847.html#a05726b187a479456361f58e9d4b2fa34\">operator()</a>(<span class=\"keyword\">const</span> Domain& x)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> <span class=\"keywordflow\">return</span> f_(x);</div>\n+<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> }</div>\n+<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> </div>\n+<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#a2ceb0428654441ce8a49031580a04146\"> 184</a></span> <span class=\"keyword\">friend</span> <a class=\"code hl_class\" href=\"a01843.html\">Derivative</a> <a class=\"code hl_friend\" href=\"a01847.html#a2ceb0428654441ce8a49031580a04146\">derivative</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01843.html\">AnalyticGridViewFunction</a>& t)</div>\n+<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> {</div>\n+<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01843.html\">Derivative</a>(Imp::derivativeIfImplemented<DerivativeDummy, F>(t.f_), t.entitySet_.gridView());</div>\n+<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> }</div>\n+<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> </div>\n+<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#aa46d871f99ccc78e6864cf4d69944af6\"> 190</a></span> <span class=\"keyword\">friend</span> <a class=\"code hl_typedef\" href=\"a01847.html#ab92fb33a585d4dfdbe78dd0e77993d7a\">LocalFunction</a> <a class=\"code hl_friend\" href=\"a01847.html#aa46d871f99ccc78e6864cf4d69944af6\">localFunction</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01843.html\">AnalyticGridViewFunction</a>& t)</div>\n+<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> {</div>\n+<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_typedef\" href=\"a01847.html#ab92fb33a585d4dfdbe78dd0e77993d7a\">LocalFunction</a>(t.f_);</div>\n+<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> }</div>\n+<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> </div>\n+<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01847.html#af1cac33f34632fa23f5763d282c4d17e\"> 196</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01919.html\">EntitySet</a>& <a class=\"code hl_function\" href=\"a01847.html#af1cac33f34632fa23f5763d282c4d17e\">entitySet</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> <span class=\"keywordflow\">return</span> entitySet_;</div>\n+<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> }</div>\n+<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> </div>\n+<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> F f_;</div>\n+<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> EntitySet entitySet_;</div>\n+<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span>};</div>\n+<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span> </div>\n+<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> </div>\n+<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> </div>\n+<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F, <span class=\"keyword\">class</span> Gr<span class=\"keywordtype\">id</span>View></div>\n+<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span>AnalyticGridViewFunction<</div>\n+<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> <span class=\"keyword\">typename</span> std::invoke_result<F, typename GridView::template Codim<0>::Geometry::GlobalCoordinate>::type <span class=\"comment\">// Range</span></div>\n+<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> (<span class=\"keyword\">typename</span> GridView::template Codim<0>::Geometry::GlobalCoordinate), <span class=\"comment\">// Domain</span></div>\n+<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> GridView,</div>\n+<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> <span class=\"keyword\">typename</span> std::decay<F>::type > <span class=\"comment\">// Raw type of F (without & or &&)</span></div>\n+<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00209.html#gafe8f06fb6d4027bfaf39e0971d8eb3c6\"> 230</a></span> <a class=\"code hl_function\" href=\"a00209.html#gafe8f06fb6d4027bfaf39e0971d8eb3c6\">makeAnalyticGridViewFunction</a>(F&& f, <span class=\"keyword\">const</span> GridView& gridView)</div>\n+<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span>{</div>\n+<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> <span class=\"keyword\">using </span>Domain = <span class=\"keyword\">typename</span> GridView::template Codim<0>::Geometry::GlobalCoordinate;</div>\n+<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> <span class=\"keyword\">using </span>Range = <span class=\"keyword\">typename</span> std::invoke_result<F, Domain>::type;</div>\n+<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> <span class=\"keyword\">using </span>FRaw = <span class=\"keyword\">typename</span> std::decay<F>::type;</div>\n+<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> </div>\n+<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01843.html\">AnalyticGridViewFunction<Range(Domain), GridView, FRaw></a>(std::forward<F>(f), gridView);</div>\n+<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span>}</div>\n+<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span> </div>\n+<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span> </div>\n+<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"> 240</span> </div>\n+<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span>}} <span class=\"comment\">// namespace Dune::Functions</span></div>\n+<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span> </div>\n+<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> </div>\n+<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> </div>\n+<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH</span></div>\n+<div class=\"ttc\" id=\"aa00008_html\"><div class=\"ttname\"><a href=\"a00008.html\">signature.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00011_html\"><div class=\"ttname\"><a href=\"a00011.html\">differentiablefunction.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00035_html\"><div class=\"ttname\"><a href=\"a00035.html\">defaultderivativetraits.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00071_html\"><div class=\"ttname\"><a href=\"a00071.html\">differentiablefunction_imp.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00083_html\"><div class=\"ttname\"><a href=\"a00083.html\">gridviewentityset.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00095_html\"><div class=\"ttname\"><a href=\"a00095.html\">localderivativetraits.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00209_html_ga7ec424ff4be740ad675bd85750940472\"><div class=\"ttname\"><a href=\"a00209.html#ga7ec424ff4be740ad675bd85750940472\">Dune::Functions::derivative</a></div><div class=\"ttdeci\">TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const TrigonometricFunction< K, sinFactor, cosFactor > &f)</div><div class=\"ttdoc\">Obtain derivative of TrigonometricFunction function.</div><div class=\"ttdef\"><b>Definition:</b> trigonometricfunction.hh:39</div></div>\n+<div class=\"ttc\" id=\"aa00209_html_gafe8f06fb6d4027bfaf39e0971d8eb3c6\"><div class=\"ttname\"><a href=\"a00209.html#gafe8f06fb6d4027bfaf39e0971d8eb3c6\">Dune::Functions::AnalyticGridViewFunction::makeAnalyticGridViewFunction</a></div><div class=\"ttdeci\">AnalyticGridViewFunction< typename std::invoke_result< F, typename GridView::template Codim< 0 >::Geometry::GlobalCoordinate >::type(typename GridView::template Codim< 0 >::Geometry::GlobalCoordinate), GridView, typename std::decay< F >::type > makeAnalyticGridViewFunction(F &&f, const GridView &gridView)</div><div class=\"ttdoc\">Create an AnalyticGridViewFunction from a function and a grid view.</div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:230</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa01071_html\"><div class=\"ttname\"><a href=\"a01071.html\">Dune::Functions::InvalidRange</a></div><div class=\"ttdoc\">Dummy range class to be used if no proper type is available.</div><div class=\"ttdef\"><b>Definition:</b> defaultderivativetraits.hh:23</div></div>\n-<div class=\"ttc\" id=\"aa01075_html\"><div class=\"ttname\"><a href=\"a01075.html\">Dune::Functions::DefaultDerivativeTraits</a></div><div class=\"ttdoc\">Default implementation for derivative traits.</div><div class=\"ttdef\"><b>Definition:</b> defaultderivativetraits.hh:37</div></div>\n-<div class=\"ttc\" id=\"aa01075_html_a3f8978146cb9b334705b651d84194b98\"><div class=\"ttname\"><a href=\"a01075.html#a3f8978146cb9b334705b651d84194b98\">Dune::Functions::DefaultDerivativeTraits::Range</a></div><div class=\"ttdeci\">InvalidRange Range</div><div class=\"ttdoc\">Range of derivative for function with given signature.</div><div class=\"ttdef\"><b>Definition:</b> defaultderivativetraits.hh:39</div></div>\n-<div class=\"ttc\" id=\"aa01079_html_a801e37f182d8c16ba1cfd72de1f17688\"><div class=\"ttname\"><a href=\"a01079.html#a801e37f182d8c16ba1cfd72de1f17688\">Dune::Functions::DefaultDerivativeTraits< double(double) >::Range</a></div><div class=\"ttdeci\">double Range</div><div class=\"ttdoc\">Range of derivative for function with given signature.</div><div class=\"ttdef\"><b>Definition:</b> defaultderivativetraits.hh:54</div></div>\n-<div class=\"ttc\" id=\"aa01083_html_ad1603332ee1c64f89c0fc18a8ee273d6\"><div class=\"ttname\"><a href=\"a01083.html#ad1603332ee1c64f89c0fc18a8ee273d6\">Dune::Functions::DefaultDerivativeTraits< K(FieldVector< K, n >)>::Range</a></div><div class=\"ttdeci\">FieldVector< K, n > Range</div><div class=\"ttdoc\">Range of derivative for function with given signature.</div><div class=\"ttdef\"><b>Definition:</b> defaultderivativetraits.hh:70</div></div>\n-<div class=\"ttc\" id=\"aa01087_html_ace3fbe5caed8c848072466ff723e82ab\"><div class=\"ttname\"><a href=\"a01087.html#ace3fbe5caed8c848072466ff723e82ab\">Dune::Functions::DefaultDerivativeTraits< FieldVector< K, m >(FieldVector< K, n >)>::Range</a></div><div class=\"ttdeci\">FieldMatrix< K, m, n > Range</div><div class=\"ttdoc\">Range of derivative for function with given signature.</div><div class=\"ttdef\"><b>Definition:</b> defaultderivativetraits.hh:86</div></div>\n-<div class=\"ttc\" id=\"aa01091_html_a5379bc605e79658f7a54ec17e3946e9b\"><div class=\"ttname\"><a href=\"a01091.html#a5379bc605e79658f7a54ec17e3946e9b\">Dune::Functions::DefaultDerivativeTraits< FieldMatrix< K, 1, m >(FieldVector< K, n >)>::Range</a></div><div class=\"ttdeci\">FieldMatrix< K, m, n > Range</div><div class=\"ttdoc\">Range of derivative for function with given signature.</div><div class=\"ttdef\"><b>Definition:</b> defaultderivativetraits.hh:102</div></div>\n+<div class=\"ttc\" id=\"aa01095_html\"><div class=\"ttname\"><a href=\"a01095.html\">Dune::Functions::DifferentiableFunction</a></div><div class=\"ttdef\"><b>Definition:</b> differentiablefunction.hh:29</div></div>\n+<div class=\"ttc\" id=\"aa01291_html\"><div class=\"ttname\"><a href=\"a01291.html\">Dune::Functions::SignatureTraits</a></div><div class=\"ttdoc\">Helper class to deduce the signature of a callable.</div><div class=\"ttdef\"><b>Definition:</b> signature.hh:56</div></div>\n+<div class=\"ttc\" id=\"aa01843_html\"><div class=\"ttname\"><a href=\"a01843.html\">Dune::Functions::AnalyticGridViewFunction</a></div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:138</div></div>\n+<div class=\"ttc\" id=\"aa01847_html_a05726b187a479456361f58e9d4b2fa34\"><div class=\"ttname\"><a href=\"a01847.html#a05726b187a479456361f58e9d4b2fa34\">Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits >::operator()</a></div><div class=\"ttdeci\">Range operator()(const Domain &x) const</div><div class=\"ttdoc\">Evaluate the wrapped function f directly in global coordinates x.</div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:178</div></div>\n+<div class=\"ttc\" id=\"aa01847_html_a2644d1c93770a9a8ad1931c8f1cdc7f8\"><div class=\"ttname\"><a href=\"a01847.html#a2644d1c93770a9a8ad1931c8f1cdc7f8\">Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits >::LocalDomain</a></div><div class=\"ttdeci\">typename EntitySet::LocalCoordinate LocalDomain</div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:167</div></div>\n+<div class=\"ttc\" id=\"aa01847_html_a2ceb0428654441ce8a49031580a04146\"><div class=\"ttname\"><a href=\"a01847.html#a2ceb0428654441ce8a49031580a04146\">Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits >::derivative</a></div><div class=\"ttdeci\">friend Derivative derivative(const AnalyticGridViewFunction &t)</div><div class=\"ttdoc\">Create a derivative grid-function by wrapping the derivative of f.</div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:184</div></div>\n+<div class=\"ttc\" id=\"aa01847_html_a2d4c287ddf9b17b7d6320dd572ddfcf1\"><div class=\"ttname\"><a href=\"a01847.html#a2d4c287ddf9b17b7d6320dd572ddfcf1\">Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits >::Geometry</a></div><div class=\"ttdeci\">typename Element::Geometry Geometry</div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:157</div></div>\n+<div class=\"ttc\" id=\"aa01847_html_a36bf73d91911801df4dcaa5ae961d0b0\"><div class=\"ttname\"><a href=\"a01847.html#a36bf73d91911801df4dcaa5ae961d0b0\">Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits >::Element</a></div><div class=\"ttdeci\">typename EntitySet::Element Element</div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:156</div></div>\n+<div class=\"ttc\" id=\"aa01847_html_a3ab08bad4d12b17d8c8f7c8e7b1bbc69\"><div class=\"ttname\"><a href=\"a01847.html#a3ab08bad4d12b17d8c8f7c8e7b1bbc69\">Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits >::GridView</a></div><div class=\"ttdeci\">GV GridView</div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:154</div></div>\n+<div class=\"ttc\" id=\"aa01847_html_a4c8813afc37057a21fc7536d9a18685e\"><div class=\"ttname\"><a href=\"a01847.html#a4c8813afc37057a21fc7536d9a18685e\">Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits >::GlobalRawDerivative</a></div><div class=\"ttdeci\">decltype(Imp::derivativeIfImplemented< DerivativeDummy, F >(std::declval< F >())) GlobalRawDerivative</div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:164</div></div>\n+<div class=\"ttc\" id=\"aa01847_html_aa2e57079e8165771b468b0f8ec045543\"><div class=\"ttname\"><a href=\"a01847.html#aa2e57079e8165771b468b0f8ec045543\">Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits >::Signature</a></div><div class=\"ttdeci\">Range(Domain) Signature</div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:150</div></div>\n+<div class=\"ttc\" id=\"aa01847_html_aa421b38ced5abc500288056268631b3e\"><div class=\"ttname\"><a href=\"a01847.html#aa421b38ced5abc500288056268631b3e\">Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits >::AnalyticGridViewFunction</a></div><div class=\"ttdeci\">AnalyticGridViewFunction(FT &&f, const GridView &gridView)</div><div class=\"ttdoc\">Create the grid-function by wrapping a function f and create a GridViewEntitySet.</div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:172</div></div>\n+<div class=\"ttc\" id=\"aa01847_html_aa46d871f99ccc78e6864cf4d69944af6\"><div class=\"ttname\"><a href=\"a01847.html#aa46d871f99ccc78e6864cf4d69944af6\">Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits >::localFunction</a></div><div class=\"ttdeci\">friend LocalFunction localFunction(const AnalyticGridViewFunction &t)</div><div class=\"ttdoc\">Construct the associated local-function.</div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:190</div></div>\n+<div class=\"ttc\" id=\"aa01847_html_ab92fb33a585d4dfdbe78dd0e77993d7a\"><div class=\"ttname\"><a href=\"a01847.html#ab92fb33a585d4dfdbe78dd0e77993d7a\">Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits >::LocalFunction</a></div><div class=\"ttdeci\">typename Imp::LocalAnalyticGridViewFunction< Range(LocalDomain), GridView, F, LocalDerivativeTraits< EntitySet, DerivativeTraits >::template Traits > LocalFunction</div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:168</div></div>\n+<div class=\"ttc\" id=\"aa01847_html_ad2d85b10863874dd3e2776713d5076e9\"><div class=\"ttname\"><a href=\"a01847.html#ad2d85b10863874dd3e2776713d5076e9\">Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits >::RawSignature</a></div><div class=\"ttdeci\">typename SignatureTraits< Signature >::RawSignature RawSignature</div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:151</div></div>\n+<div class=\"ttc\" id=\"aa01847_html_af1cac33f34632fa23f5763d282c4d17e\"><div class=\"ttname\"><a href=\"a01847.html#af1cac33f34632fa23f5763d282c4d17e\">Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits >::entitySet</a></div><div class=\"ttdeci\">const EntitySet & entitySet() const</div><div class=\"ttdoc\">Return the set of entities this local-function can be bound to.</div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:196</div></div>\n+<div class=\"ttc\" id=\"aa01847_html_afcaf671c34c3553f4d420211028dab76\"><div class=\"ttname\"><a href=\"a01847.html#afcaf671c34c3553f4d420211028dab76\">Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits >::DerivativeSignature</a></div><div class=\"ttdeci\">typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature</div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:152</div></div>\n+<div class=\"ttc\" id=\"aa01919_html\"><div class=\"ttname\"><a href=\"a01919.html\">Dune::Functions::GridViewEntitySet< GridView, 0 ></a></div></div>\n+<div class=\"ttc\" id=\"aa01919_html_a1d5eaf3facd0219b2e150d964a664752\"><div class=\"ttname\"><a href=\"a01919.html#a1d5eaf3facd0219b2e150d964a664752\">Dune::Functions::GridViewEntitySet< GridView, 0 >::Element</a></div><div class=\"ttdeci\">GridView::template Codim< codim >::Entity Element</div><div class=\"ttdoc\">Type of Elements contained in this EntitySet.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:32</div></div>\n+<div class=\"ttc\" id=\"aa01919_html_aa4368ad66f18ba8279f20ab7a794069d\"><div class=\"ttname\"><a href=\"a01919.html#aa4368ad66f18ba8279f20ab7a794069d\">Dune::Functions::GridViewEntitySet< GridView, 0 >::LocalCoordinate</a></div><div class=\"ttdeci\">Element::Geometry::LocalCoordinate LocalCoordinate</div><div class=\"ttdoc\">Type of local coordinates with respect to the Element.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:35</div></div>\n+<div class=\"ttc\" id=\"aa01931_html\"><div class=\"ttname\"><a href=\"a01931.html\">Dune::Functions::LocalDerivativeTraits</a></div><div class=\"ttdoc\">Derivative traits for local functions.</div><div class=\"ttdef\"><b>Definition:</b> localderivativetraits.hh:28</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,99 +4,326 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * common\n-defaultderivativetraits.hh\n+ * gridfunctions\n+analyticgridviewfunction.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH\n- 4#define DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH\n+ 3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH\n+ 4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH\n 5\n 6#include <type_traits>\n- 7#include <utility>\n+ 7#include <optional>\n 8\n- 9#include <dune/common/fvector.hh>\n- 10#include <dune/common/fmatrix.hh>\n- 11\n- 12namespace Dune {\n- 13namespace Functions {\n- 14\n- 15\n- 16\n-22class InvalidRange\n- 23{};\n- 24\n- 25\n- 35template<class Signature>\n-36struct DefaultDerivativeTraits\n- 37{\n-39 typedef InvalidRange Range;\n- 40};\n- 41\n- 42\n- 50template<>\n-51struct DefaultDerivativeTraits< double(double) >\n- 52{\n-54 typedef double Range;\n- 55};\n- 56\n- 66template<typename K, int n>\n-67struct DefaultDerivativeTraits<K(FieldVector<K,n>)>\n- 68{\n-70 typedef FieldVector<K,n> Range;\n- 71};\n- 72\n- 82template<typename K, int n, int m>\n-83struct DefaultDerivativeTraits<FieldVector<K,m>(FieldVector<K,n>)>\n- 84{\n-86 typedef FieldMatrix<K,m,n> Range;\n- 87};\n- 88\n- 98template<typename K, int n, int m>\n-99struct DefaultDerivativeTraits<FieldMatrix<K,1,m>(FieldVector<K,n>)>\n- 100{\n-102 typedef FieldMatrix<K,m,n> Range;\n- 103};\n- 104\n+ 9#include <dune/common/typeutilities.hh>\n+ 10\n+ 11#include <dune/functions/common/signature.hh>\n+ 12#include <dune/functions/common/defaultderivativetraits.hh>\n+ 13#include <dune/functions/common/differentiablefunction_imp.hh>\n+ 14#include <dune/functions/common/differentiablefunction.hh>\n+ 15#include <dune/functions/gridfunctions/gridviewentityset.hh>\n+ 16#include <dune/functions/gridfunctions/localderivativetraits.hh>\n+ 17\n+ 18\n+ 19namespace Dune {\n+ 20namespace Functions {\n+ 21\n+ 22namespace Imp {\n+ 23\n+ 24template<class Signature, class GV, class FLocal, template<class> class\n+DerivativeTraits=DefaultDerivativeTraits>\n+ 25class LocalAnalyticGridViewFunction;\n+ 26\n+ 27template<class Range, class LocalDomain, class GV, class F, template<class>\n+class DerivativeTraits>\n+ 28class LocalAnalyticGridViewFunction<Range(LocalDomain), GV, F,\n+DerivativeTraits>\n+ 29{\n+ 30public:\n+ 31 using Signature = Range(LocalDomain);\n+ 32 using RawSignature = typename SignatureTraits<Signature>::RawSignature;\n+ 33 using DerivativeSignature = typename DerivativeTraits<RawSignature>::Range\n+(LocalDomain);\n+ 34\n+ 35 using GridView = GV;\n+ 36 using EntitySet = GridViewEntitySet<GridView, 0>;\n+ 37 using Element = typename EntitySet::Element;\n+ 38// using Geometry = typename Element::Geometry;\n+ 39 using Geometry = typename std::decay<typename Element::Geometry>::type;\n+ 40\n+ 41 // Use the indirection via derivativeIfImplemented to also support\n+ 42 // function types F that do not implement derivative. In this case\n+ 43 // the interface type DifferentiableFunction is using a dummy for\n+ 44 // the derivative type\n+ 45 using DerivativeDummy = DifferentiableFunction<DerivativeSignature>;\n+ 46 using GlobalRawDerivative = decltype(Imp::\n+derivativeIfImplemented<DerivativeDummy, F>(std::declval<F>()));\n+ 47 using LocalDerivative = LocalAnalyticGridViewFunction<DerivativeSignature,\n+GridView, GlobalRawDerivative, DerivativeTraits>;\n+ 48\n+ 50 template<class FT, disableCopyMove<LocalAnalyticGridViewFunction, FT> = 0>\n+ 51 LocalAnalyticGridViewFunction(FT&& f) :\n+ 52 f_(std::forward<FT>(f))\n+ 53 {}\n+ 54\n+ 56 template<class FT>\n+ 57 LocalAnalyticGridViewFunction(FT&& f, const Element& element, const std::\n+optional<Geometry>& geometry) :\n+ 58 f_(std::forward<FT>(f)),\n+ 59 element_(element),\n+ 60 geometry_(geometry)\n+ 61 {}\n+ 62\n+ 63\n+ 72 void bind(const Element& element)\n+ 73 {\n+ 74 element_ = element;\n+ 75 geometry_.emplace(element_.geometry());\n+ 76 }\n+ 77\n+ 79 void unbind()\n+ 80 {\n+ 81 geometry_.reset();\n+ 82 }\n+ 83\n+ 86 bool bound() const\n+ 87 {\n+ 88 return static_cast<bool>(geometry_);\n+ 89 }\n+ 90\n+ 100 Range operator()(const LocalDomain& x) const\n+ 101 {\n+ 102 assert(!!geometry_);\n+ 103 return f_(geometry_->global(x));\n+ 104 }\n 105\n- 106}} // namespace Dune::Functions\n- 107\n- 108\n- 109#endif // DUNE_FUNCTIONS_COMMON_DEFAULT_DERIVATIVE_TRAITS_HH\n+ 107 const Element& localContext() const\n+ 108 {\n+ 109 assert(!!geometry_);\n+ 110 return element_;\n+ 111 }\n+ 112\n+ 121 friend LocalDerivative derivative(const LocalAnalyticGridViewFunction& t)\n+ 122 {\n+ 123 return LocalDerivative(Imp::derivativeIfImplemented<DerivativeDummy, F>\n+(t.f_), t.element_, t.geometry_);\n+ 124 }\n+ 125\n+ 126private:\n+ 127 F f_;\n+ 128 Element element_;\n+ 129 std::optional<Geometry> geometry_ = std::nullopt;\n+ 130};\n+ 131\n+ 132} // end namespace Imp\n+ 133\n+ 134\n+ 135\n+ 136\n+ 137template<class Signature, class GV, class F, template<class> class\n+DerivativeTraits=DefaultDerivativeTraits>\n+138class AnalyticGridViewFunction;\n+ 139\n+ 140\n+ 146template<class Range, class Domain, class GV, class F, template<class>\n+class DerivativeTraits>\n+147class AnalyticGridViewFunction<Range(Domain), GV, F, DerivativeTraits>\n+ 148{\n+ 149public:\n+150 using Signature = Range(Domain);\n+151 using RawSignature = typename SignatureTraits<Signature>::RawSignature;\n+152 using DerivativeSignature = typename DerivativeTraits<RawSignature>::Range\n+(Domain);\n+ 153\n+154 using GridView = GV;\n+155 using EntitySet = GridViewEntitySet<GridView,_0>;\n+156 using Element = typename EntitySet::Element;\n+157 using Geometry = typename Element::Geometry;\n+ 158\n+ 159 // Use the indirection via derivativeIfImplemented to also support\n+ 160 // function types F that do not implement derivative. In this case\n+ 161 // the interface type DifferentiableFunction is used a dummy for\n+ 162 // the derivative type\n+163 using DerivativeDummy = DifferentiableFunction<DerivativeSignature>;\n+164 using GlobalRawDerivative = decltype(Imp::\n+derivativeIfImplemented<DerivativeDummy, F>(std::declval<F>()));\n+165 using Derivative = AnalyticGridViewFunction<DerivativeSignature,_GridView,\n+GlobalRawDerivative,_DerivativeTraits>;\n+ 166\n+167 using LocalDomain = typename EntitySet::LocalCoordinate;\n+168 using LocalFunction = typename Imp::LocalAnalyticGridViewFunction<Range\n+(LocalDomain), GridView, F, LocalDerivativeTraits<EntitySet,\n+DerivativeTraits>::template Traits>;\n+ 169\n+ 171 template<class FT>\n+172 AnalyticGridViewFunction(FT&& f, const GridView& gridView) :\n+ 173 f_(std::forward<FT>(f)),\n+ 174 entitySet_(gridView)\n+ 175 {}\n+ 176\n+178 Range operator()(const Domain& x) const\n+ 179 {\n+ 180 return f_(x);\n+ 181 }\n+ 182\n+184 friend Derivative derivative(const AnalyticGridViewFunction& t)\n+ 185 {\n+ 186 return Derivative(Imp::derivativeIfImplemented<DerivativeDummy, F>(t.f_),\n+t.entitySet_.gridView());\n+ 187 }\n+ 188\n+190 friend LocalFunction localFunction(const AnalyticGridViewFunction& t)\n+ 191 {\n+ 192 return LocalFunction(t.f_);\n+ 193 }\n+ 194\n+196 const EntitySet& entitySet() const\n+ 197 {\n+ 198 return entitySet_;\n+ 199 }\n+ 200\n+ 201private:\n+ 202 F f_;\n+ 203 EntitySet entitySet_;\n+ 204};\n+ 205\n+ 206\n+ 207\n+ 224template<class F, class GridView>\n+ 225AnalyticGridViewFunction<\n+ 226 typename std::invoke_result<F, typename GridView::template Codim<0>::\n+Geometry::GlobalCoordinate>::type // Range\n+ 227 (typename GridView::template Codim<0>::Geometry::GlobalCoordinate), /\n+/ Domain\n+ 228 GridView,\n+ 229 typename std::decay<F>::type > // Raw type of F (without & or &&)\n+230 makeAnalyticGridViewFunction(F&& f, const GridView& gridView)\n+ 231{\n+ 232 using Domain = typename GridView::template Codim<0>::Geometry::\n+GlobalCoordinate;\n+ 233 using Range = typename std::invoke_result<F, Domain>::type;\n+ 234 using FRaw = typename std::decay<F>::type;\n+ 235\n+ 236 return AnalyticGridViewFunction<Range(Domain),_GridView,_FRaw>(std::\n+forward<F>(f), gridView);\n+ 237}\n+ 238\n+ 239\n+ 240\n+ 241}} // namespace Dune::Functions\n+ 242\n+ 243\n+ 244\n+ 245#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_ANALYTICGRIDVIEWFUNCTION_HH\n+signature.hh\n+differentiablefunction.hh\n+defaultderivativetraits.hh\n+differentiablefunction_imp.hh\n+gridviewentityset.hh\n+localderivativetraits.hh\n+Dune::Functions::derivative\n+TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const\n+TrigonometricFunction< K, sinFactor, cosFactor > &f)\n+Obtain derivative of TrigonometricFunction function.\n+Definition: trigonometricfunction.hh:39\n+Dune::Functions::AnalyticGridViewFunction::makeAnalyticGridViewFunction\n+AnalyticGridViewFunction< typename std::invoke_result< F, typename GridView::\n+template Codim< 0 >::Geometry::GlobalCoordinate >::type(typename GridView::\n+template Codim< 0 >::Geometry::GlobalCoordinate), GridView, typename std::\n+decay< F >::type > makeAnalyticGridViewFunction(F &&f, const GridView\n+&gridView)\n+Create an AnalyticGridViewFunction from a function and a grid view.\n+Definition: analyticgridviewfunction.hh:230\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::InvalidRange\n-Dummy range class to be used if no proper type is available.\n-Definition: defaultderivativetraits.hh:23\n-Dune::Functions::DefaultDerivativeTraits\n-Default implementation for derivative traits.\n-Definition: defaultderivativetraits.hh:37\n-Dune::Functions::DefaultDerivativeTraits::Range\n-InvalidRange Range\n-Range of derivative for function with given signature.\n-Definition: defaultderivativetraits.hh:39\n-Dune::Functions::DefaultDerivativeTraits<_double(double)_>::Range\n-double Range\n-Range of derivative for function with given signature.\n-Definition: defaultderivativetraits.hh:54\n-Dune::Functions::DefaultDerivativeTraits<_K(FieldVector<_K,_n_>)>::Range\n-FieldVector< K, n > Range\n-Range of derivative for function with given signature.\n-Definition: defaultderivativetraits.hh:70\n-Dune::Functions::DefaultDerivativeTraits<_FieldVector<_K,_m_>(FieldVector<_K,_n\n->)>::Range\n-FieldMatrix< K, m, n > Range\n-Range of derivative for function with given signature.\n-Definition: defaultderivativetraits.hh:86\n-Dune::Functions::DefaultDerivativeTraits<_FieldMatrix<_K,_1,_m_>(FieldVector<\n-K,_n_>)>::Range\n-FieldMatrix< K, m, n > Range\n-Range of derivative for function with given signature.\n-Definition: defaultderivativetraits.hh:102\n+Dune::Functions::DifferentiableFunction\n+Definition: differentiablefunction.hh:29\n+Dune::Functions::SignatureTraits\n+Helper class to deduce the signature of a callable.\n+Definition: signature.hh:56\n+Dune::Functions::AnalyticGridViewFunction\n+Definition: analyticgridviewfunction.hh:138\n+Dune::Functions::AnalyticGridViewFunction<_Range(Domain),_GV,_F,\n+DerivativeTraits_>::operator()\n+Range operator()(const Domain &x) const\n+Evaluate the wrapped function f directly in global coordinates x.\n+Definition: analyticgridviewfunction.hh:178\n+Dune::Functions::AnalyticGridViewFunction<_Range(Domain),_GV,_F,\n+DerivativeTraits_>::LocalDomain\n+typename EntitySet::LocalCoordinate LocalDomain\n+Definition: analyticgridviewfunction.hh:167\n+Dune::Functions::AnalyticGridViewFunction<_Range(Domain),_GV,_F,\n+DerivativeTraits_>::derivative\n+friend Derivative derivative(const AnalyticGridViewFunction &t)\n+Create a derivative grid-function by wrapping the derivative of f.\n+Definition: analyticgridviewfunction.hh:184\n+Dune::Functions::AnalyticGridViewFunction<_Range(Domain),_GV,_F,\n+DerivativeTraits_>::Geometry\n+typename Element::Geometry Geometry\n+Definition: analyticgridviewfunction.hh:157\n+Dune::Functions::AnalyticGridViewFunction<_Range(Domain),_GV,_F,\n+DerivativeTraits_>::Element\n+typename EntitySet::Element Element\n+Definition: analyticgridviewfunction.hh:156\n+Dune::Functions::AnalyticGridViewFunction<_Range(Domain),_GV,_F,\n+DerivativeTraits_>::GridView\n+GV GridView\n+Definition: analyticgridviewfunction.hh:154\n+Dune::Functions::AnalyticGridViewFunction<_Range(Domain),_GV,_F,\n+DerivativeTraits_>::GlobalRawDerivative\n+decltype(Imp::derivativeIfImplemented< DerivativeDummy, F >(std::declval< F >\n+())) GlobalRawDerivative\n+Definition: analyticgridviewfunction.hh:164\n+Dune::Functions::AnalyticGridViewFunction<_Range(Domain),_GV,_F,\n+DerivativeTraits_>::Signature\n+Range(Domain) Signature\n+Definition: analyticgridviewfunction.hh:150\n+Dune::Functions::AnalyticGridViewFunction<_Range(Domain),_GV,_F,\n+DerivativeTraits_>::AnalyticGridViewFunction\n+AnalyticGridViewFunction(FT &&f, const GridView &gridView)\n+Create the grid-function by wrapping a function f and create a\n+GridViewEntitySet.\n+Definition: analyticgridviewfunction.hh:172\n+Dune::Functions::AnalyticGridViewFunction<_Range(Domain),_GV,_F,\n+DerivativeTraits_>::localFunction\n+friend LocalFunction localFunction(const AnalyticGridViewFunction &t)\n+Construct the associated local-function.\n+Definition: analyticgridviewfunction.hh:190\n+Dune::Functions::AnalyticGridViewFunction<_Range(Domain),_GV,_F,\n+DerivativeTraits_>::LocalFunction\n+typename Imp::LocalAnalyticGridViewFunction< Range(LocalDomain), GridView, F,\n+LocalDerivativeTraits< EntitySet, DerivativeTraits >::template Traits >\n+LocalFunction\n+Definition: analyticgridviewfunction.hh:168\n+Dune::Functions::AnalyticGridViewFunction<_Range(Domain),_GV,_F,\n+DerivativeTraits_>::RawSignature\n+typename SignatureTraits< Signature >::RawSignature RawSignature\n+Definition: analyticgridviewfunction.hh:151\n+Dune::Functions::AnalyticGridViewFunction<_Range(Domain),_GV,_F,\n+DerivativeTraits_>::entitySet\n+const EntitySet & entitySet() const\n+Return the set of entities this local-function can be bound to.\n+Definition: analyticgridviewfunction.hh:196\n+Dune::Functions::AnalyticGridViewFunction<_Range(Domain),_GV,_F,\n+DerivativeTraits_>::DerivativeSignature\n+typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature\n+Definition: analyticgridviewfunction.hh:152\n+Dune::Functions::GridViewEntitySet<_GridView,_0_>\n+Dune::Functions::GridViewEntitySet<_GridView,_0_>::Element\n+GridView::template Codim< codim >::Entity Element\n+Type of Elements contained in this EntitySet.\n+Definition: gridviewentityset.hh:32\n+Dune::Functions::GridViewEntitySet<_GridView,_0_>::LocalCoordinate\n+Element::Geometry::LocalCoordinate LocalCoordinate\n+Type of local coordinates with respect to the Element.\n+Definition: gridviewentityset.hh:35\n+Dune::Functions::LocalDerivativeTraits\n+Derivative traits for local functions.\n+Definition: localderivativetraits.hh:28\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00083.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00083.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: treedata.hh File Reference</title>\n+<title>dune-functions: gridviewentityset.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,45 +58,32 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">treedata.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">gridviewentityset.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <div class=\"textblock\"><code>#include <memory></code><br />\n-<code>#include <dune/common/shared_ptr.hh></code><br />\n-<code>#include <dune/typetree/pairtraversal.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00023_source.html\">dune/functions/gridfunctions/gridviewentityset.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00017_source.html\">dune/functions/gridfunctions/gridfunction.hh</a>></code><br />\n </div>\n <p><a href=\"a00083_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01311.html\">Dune::Functions::UniformNodeVisitor< SimpleNodeVisitorImp, leafOnly ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Mixin for visitors that should apply the same action on all nodes. <a href=\"a01311.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01315.html\">Dune::Functions::TreeData< T, ND, LO ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Container allowing to attach data to each node of a tree. <a href=\"a01315.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01319.html\">Dune::Functions::TreeData< T, ND, LO >::InitVisitor</a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01323.html\">Dune::Functions::TreeData< T, ND, LO >::DestroyVisitor</a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01327.html\">Dune::Functions::TreeData< T, ND, LO >::CopyVisitor</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01919.html\">Dune::Functions::GridViewEntitySet< GV, cd ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">An entity set for all entities of given codim in a grid view. <a href=\"a01919.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,36 +4,22 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * common\n+ * gridfunctions\n Classes | Namespaces\n-treedata.hh File Reference\n+gridviewentityset.hh File Reference\n #include <memory>\n-#include <dune/common/shared_ptr.hh>\n-#include <dune/typetree/pairtraversal.hh>\n-#include <dune/functions/gridfunctions/gridviewentityset.hh>\n-#include <dune/functions/gridfunctions/gridfunction.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-struct \u00a0Dune::Functions::UniformNodeVisitor<_SimpleNodeVisitorImp,_leafOnly_>\n-\u00a0 Mixin for visitors that should apply the same action on all nodes.\n- More...\n-\u00a0\n- class \u00a0Dune::Functions::TreeData<_T,_ND,_LO_>\n-\u00a0 Container allowing to attach data to each node of a tree. More...\n-\u00a0\n-struct \u00a0Dune::Functions::TreeData<_T,_ND,_LO_>::InitVisitor\n-\u00a0\n-struct \u00a0Dune::Functions::TreeData<_T,_ND,_LO_>::DestroyVisitor\n-\u00a0\n-struct \u00a0Dune::Functions::TreeData<_T,_ND,_LO_>::CopyVisitor\n+class \u00a0Dune::Functions::GridViewEntitySet<_GV,_cd_>\n+\u00a0 An entity set for all entities of given codim in a grid view. More...\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n \n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00083_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00083_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: treedata.hh Source File</title>\n+<title>dune-functions: gridviewentityset.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,260 +58,109 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">treedata.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">gridviewentityset.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00083.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_TREEDATA_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_TREEDATA_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span> </div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#warning This file is deprecated. Please use TreeContainer from dune-typetree instead.</span></div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <memory></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span> </div>\n <div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <memory></span></div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n <div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span> </div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/common/shared_ptr.hh></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"keyword\">namespace </span>Functions {</div>\n <div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <dune/typetree/pairtraversal.hh></span></div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00023.html\">dune/functions/gridfunctions/gridviewentityset.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00017.html\">dune/functions/gridfunctions/gridfunction.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span> </div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SimpleNodeVisitorImp, <span class=\"keywordtype\">bool</span> leafOnly></div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01311.html\"> 35</a></span><span class=\"keyword\">struct</span></div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span>[[deprecated(<span class=\"stringliteral\">"This is an implementation detail of the deprecated class TreeDate and thus deprecated itself."</span>)]]</div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span><a class=\"code hl_struct\" href=\"a01311.html\">UniformNodeVisitor</a> :</div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> <span class=\"keyword\">public</span> TypeTree::TreeVisitor,</div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> <span class=\"keyword\">public</span> TypeTree::DynamicTraversal</div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span>{</div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> <span class=\"comment\">// This is only enabled, if we want to incorporate inner nodes.</span></div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> <span class=\"comment\">// Checking leafOnly would be sufficient, but for SFINAE the</span></div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> <span class=\"comment\">// the enable_if condition must depend on the template parameter.</span></div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath,</div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> <span class=\"keyword\">typename</span> std::enable_if<(not leafOnly) and (not Node::isLeaf), <span class=\"keywordtype\">int</span>>::type = 0></div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01311.html#a06f9e8d92b5769fff46163021a2175ce\"> 46</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01311.html#a06f9e8d92b5769fff46163021a2175ce\">pre</a>(Node& node, TreePath treePath)</div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> {</div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> <span class=\"keyword\">static_cast<</span>SimpleNodeVisitorImp*<span class=\"keyword\">></span>(<span class=\"keyword\">this</span>)->apply(node, treePath);</div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> }</div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> GV, <span class=\"keywordtype\">int</span> cd></div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01919.html\"> 22</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01919.html\">GridViewEntitySet</a></div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span>{</div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> </div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01919.html#a1952f7f975b409a9fb7cac45d2dd13c0\"> 26</a></span> <span class=\"keyword\">typedef</span> GV <a class=\"code hl_typedef\" href=\"a01919.html#a1952f7f975b409a9fb7cac45d2dd13c0\">GridView</a>;</div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> <span class=\"keyword\">enum</span> {</div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> <a class=\"code hl_enumvalue\" href=\"a01919.html#adfa21b864d2fe7e5f1e2a1c35df59de1a641d7f1200046247691c0b3e24fbebc6\">codim</a> = cd</div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01919.html#adfa21b864d2fe7e5f1e2a1c35df59de1a641d7f1200046247691c0b3e24fbebc6\"> 29</a></span> };</div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> </div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01919.html#a1d5eaf3facd0219b2e150d964a664752\"> 32</a></span> <span class=\"keyword\">typedef</span> <span class=\"keyword\">typename</span> GridView::template Codim<codim>::Entity <a class=\"code hl_typedef\" href=\"a01919.html#a1d5eaf3facd0219b2e150d964a664752\">Element</a>;</div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> </div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01919.html#aa4368ad66f18ba8279f20ab7a794069d\"> 35</a></span> <span class=\"keyword\">typedef</span> <span class=\"keyword\">typename</span> Element::Geometry::LocalCoordinate <a class=\"code hl_typedef\" href=\"a01919.html#aa4368ad66f18ba8279f20ab7a794069d\">LocalCoordinate</a>;</div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01919.html#ac4e3d0188467b4be3d195c9f5729e629\"> 36</a></span> <span class=\"keyword\">typedef</span> <span class=\"keyword\">typename</span> Element::Geometry::GlobalCoordinate <a class=\"code hl_typedef\" href=\"a01919.html#ac4e3d0188467b4be3d195c9f5729e629\">GlobalCoordinate</a>;</div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> </div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01919.html#a64c695239c50f85f3c3ac009e0d28ec5\"> 38</a></span> <span class=\"keyword\">typedef</span> <a class=\"code hl_typedef\" href=\"a01919.html#a1d5eaf3facd0219b2e150d964a664752\">Element</a> <a class=\"code hl_typedef\" href=\"a01919.html#a64c695239c50f85f3c3ac009e0d28ec5\">value_type</a>;</div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> </div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01919.html#a82d03b324e66290459b11d00f549eca2\"> 41</a></span> <span class=\"keyword\">typedef</span> <span class=\"keyword\">typename</span> GridView::template Codim<codim>::Iterator <a class=\"code hl_typedef\" href=\"a01919.html#a82d03b324e66290459b11d00f549eca2\">const_iterator</a>;</div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> </div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01919.html#af641ddccfd83eac1935a39604afd4335\"> 44</a></span> <span class=\"keyword\">typedef</span> <a class=\"code hl_typedef\" href=\"a01919.html#a82d03b324e66290459b11d00f549eca2\">const_iterator</a> <a class=\"code hl_typedef\" href=\"a01919.html#af641ddccfd83eac1935a39604afd4335\">iterator</a>;</div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> </div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01919.html#a03a85089dbc09737fa68ee0643f253e8\"> 47</a></span> <a class=\"code hl_function\" href=\"a01919.html#a03a85089dbc09737fa68ee0643f253e8\">GridViewEntitySet</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01919.html#a1952f7f975b409a9fb7cac45d2dd13c0\">GridView</a>& gv) :</div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> gv_(gv)</div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> {}</div>\n <div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> </div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath,</div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> <span class=\"keyword\">typename</span> std::enable_if<(leafOnly) and (not Node::isLeaf), <span class=\"keywordtype\">int</span>>::type = 0></div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01311.html#a06f9e8d92b5769fff46163021a2175ce\"> 53</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01311.html#a06f9e8d92b5769fff46163021a2175ce\">pre</a>(Node& node, TreePath treePath)</div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> {}</div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> </div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath></div>\n-<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01311.html#a16683785d8080c47936577796e64eb78\"> 57</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01311.html#a16683785d8080c47936577796e64eb78\">leaf</a>(Node& node, TreePath treePath)</div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> {</div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> <span class=\"keyword\">static_cast<</span>SimpleNodeVisitorImp*<span class=\"keyword\">></span>(<span class=\"keyword\">this</span>)->apply(node, treePath);</div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> }</div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span>};</div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01919.html#aecef1420c439c2cae8ae253822257318\"> 52</a></span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a01919.html#aecef1420c439c2cae8ae253822257318\">contains</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01919.html#a1d5eaf3facd0219b2e150d964a664752\">Element</a>& e)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> <span class=\"keywordflow\">return</span> gv_.contains(e);</div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> }</div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> </div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01919.html#aa53cd545677269ae1e19dda2a02f48dd\"> 58</a></span> <span class=\"keywordtype\">size_t</span> <a class=\"code hl_function\" href=\"a01919.html#aa53cd545677269ae1e19dda2a02f48dd\">size</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> <span class=\"keywordflow\">return</span> gv_.size(<a class=\"code hl_enumvalue\" href=\"a01919.html#adfa21b864d2fe7e5f1e2a1c35df59de1a641d7f1200046247691c0b3e24fbebc6\">codim</a>);</div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> }</div>\n <div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> </div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> </div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> </div>\n-<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>ND, <span class=\"keywordtype\">bool</span> LO></div>\n-<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01315.html\"> 92</a></span><span class=\"keyword\">class</span></div>\n-<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span>[[deprecated(<span class=\"stringliteral\">"This class is deprecated. Please use TreeContainer from dune-typetree instead."</span>)]]</div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span><a class=\"code hl_class\" href=\"a01315.html\">TreeData</a></div>\n-<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span>{</div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> </div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> </div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01315.html#a1935d801dae08dcf1211c99400e8201c\"> 100</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01315.html#a1935d801dae08dcf1211c99400e8201c\">Tree</a> = T;</div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> </div>\n-<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01315.html#aad999148c3cbb4423a440febc8fa892c\"> 103</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01315.html#aad999148c3cbb4423a440febc8fa892c\">size_type</a> = <span class=\"keyword\">typename</span> Tree::size_type;</div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> </div>\n-<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01315.html#a1244c033abbc69a54440772bbda67099\"> 106</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">bool</span> leafOnly = LO;</div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> </div>\n-<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Node></div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01315.html#a98e841c3feef5258c0536cbc27b07c6d\"> 110</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01315.html#a98e841c3feef5258c0536cbc27b07c6d\">NodeData</a> = ND<Node>;</div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> </div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span><span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01315.html#aa1173c59bbddcbf9f29bf2e09478d277\"> 113</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01315.html#aa1173c59bbddcbf9f29bf2e09478d277\">RawContainer</a> = std::vector<void*>;</div>\n-<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> </div>\n-<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> </div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> <span class=\"comment\">// Since we can generate the node data type only if</span></div>\n-<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> <span class=\"comment\">// we know the type of the node, we have to do</span></div>\n-<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> <span class=\"comment\">// initialization, copy, and destruction via a</span></div>\n-<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> <span class=\"comment\">// tree traversal. Once we can use C++14 this can</span></div>\n-<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> <span class=\"comment\">// be written in a much easier and more selfcontained</span></div>\n-<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> <span class=\"comment\">// ways using generic lambda functions.</span></div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> <span class=\"comment\">// Until then we need explicit visitor classes for</span></div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> <span class=\"comment\">// each operation.</span></div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> </div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01319.html\"> 125</a></span> <span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01319.html\">InitVisitor</a> :</div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> <span class=\"keyword\">public</span> <a class=\"code hl_struct\" href=\"a01311.html\">UniformNodeVisitor</a><InitVisitor, leafOnly></div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> {</div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01319.html#a936aaecf0f2ccc0e52fa3fb5a02a0b73\"> 128</a></span> <a class=\"code hl_function\" href=\"a01319.html#a936aaecf0f2ccc0e52fa3fb5a02a0b73\">InitVisitor</a>(<a class=\"code hl_typedef\" href=\"a01315.html#aa1173c59bbddcbf9f29bf2e09478d277\">RawContainer</a>& data) :</div>\n-<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> data_(data)</div>\n-<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> {}</div>\n-<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> </div>\n-<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath></div>\n-<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01319.html#ac5ffe2a6bf083fedfea129594cb56195\"> 133</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01319.html#ac5ffe2a6bf083fedfea129594cb56195\">apply</a>(Node& node, TreePath treePath)</div>\n-<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> {</div>\n-<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> <span class=\"keyword\">auto</span>&& index = node.treeIndex();</div>\n-<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> <span class=\"keywordflow\">if</span> (data_.size() < index+1)</div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> data_.resize(index+1, <span class=\"keyword\">nullptr</span>);</div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> data_[index] = <span class=\"keyword\">new</span> <a class=\"code hl_typedef\" href=\"a01315.html#a98e841c3feef5258c0536cbc27b07c6d\">NodeData<Node></a>;</div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> }</div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> </div>\n-<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> </div>\n-<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01319.html#af151e4c9b20411936e4bed4edc6d5042\"> 142</a></span> <a class=\"code hl_typedef\" href=\"a01315.html#aa1173c59bbddcbf9f29bf2e09478d277\">RawContainer</a>& <a class=\"code hl_variable\" href=\"a01319.html#af151e4c9b20411936e4bed4edc6d5042\">data_</a>;</div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> };</div>\n-<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> </div>\n-<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01323.html\"> 145</a></span> <span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01323.html\">DestroyVisitor</a> :</div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> <span class=\"keyword\">public</span> <a class=\"code hl_struct\" href=\"a01311.html\">UniformNodeVisitor</a><DestroyVisitor, leafOnly></div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> {</div>\n-<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01323.html#a4e10bb17191a2a979935bc1c0dc3a973\"> 148</a></span> <a class=\"code hl_function\" href=\"a01323.html#a4e10bb17191a2a979935bc1c0dc3a973\">DestroyVisitor</a>(<a class=\"code hl_typedef\" href=\"a01315.html#aa1173c59bbddcbf9f29bf2e09478d277\">RawContainer</a>& data) :</div>\n-<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> data_(data)</div>\n-<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> {}</div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> </div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath></div>\n-<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01323.html#aebdbfaf521e7d90a2c11d853cb033426\"> 153</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01323.html#aebdbfaf521e7d90a2c11d853cb033426\">apply</a>(Node& node, TreePath treePath)</div>\n-<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> {</div>\n-<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> <span class=\"keyword\">auto</span>&& index = node.treeIndex();</div>\n-<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> <span class=\"keyword\">auto</span> p = (<a class=\"code hl_typedef\" href=\"a01315.html#a98e841c3feef5258c0536cbc27b07c6d\">NodeData<Node></a>*)(data_[index]);</div>\n-<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> <span class=\"keyword\">delete</span> p;</div>\n-<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> data_[index] = <span class=\"keyword\">nullptr</span>;</div>\n-<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> }</div>\n-<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> </div>\n-<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01323.html#a2c5abbd0a0f898836a2296df6e0a368b\"> 161</a></span> <a class=\"code hl_typedef\" href=\"a01315.html#aa1173c59bbddcbf9f29bf2e09478d277\">RawContainer</a>& <a class=\"code hl_variable\" href=\"a01323.html#a2c5abbd0a0f898836a2296df6e0a368b\">data_</a>;</div>\n-<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> };</div>\n-<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> </div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01327.html\"> 164</a></span> <span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01327.html\">CopyVisitor</a> :</div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> <span class=\"keyword\">public</span> <a class=\"code hl_struct\" href=\"a01311.html\">UniformNodeVisitor</a><CopyVisitor, leafOnly></div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> {</div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01327.html#a371fc07bc59460e748e55a64ab1d4a72\"> 167</a></span> <a class=\"code hl_function\" href=\"a01327.html#a371fc07bc59460e748e55a64ab1d4a72\">CopyVisitor</a>(<a class=\"code hl_class\" href=\"a01315.html\">TreeData</a>& thisTD, <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01315.html\">TreeData</a>& otherTD) :</div>\n-<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> thisTD_(thisTD),</div>\n-<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> otherTD_(otherTD)</div>\n-<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> {}</div>\n-<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> </div>\n-<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath></div>\n-<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01327.html#a37f69fa7de18120c393d1664a49874e3\"> 173</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01327.html#a37f69fa7de18120c393d1664a49874e3\">apply</a>(Node& node, TreePath treePath)</div>\n-<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> {</div>\n-<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> thisTD_[node] = otherTD_[node];</div>\n-<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> }</div>\n-<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> </div>\n-<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01327.html#a4717f1783d3acf1b0bfb4638e38707e7\"> 178</a></span> <a class=\"code hl_class\" href=\"a01315.html\">TreeData</a>& <a class=\"code hl_variable\" href=\"a01327.html#a4717f1783d3acf1b0bfb4638e38707e7\">thisTD_</a>;</div>\n-<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01327.html#a6373804408e297824cc81d5db7b661ef\"> 179</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01315.html\">TreeData</a>& <a class=\"code hl_variable\" href=\"a01327.html#a6373804408e297824cc81d5db7b661ef\">otherTD_</a>;</div>\n-<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> };</div>\n-<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> </div>\n-<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span> </div>\n-<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01315.html#a9c9b9e575cf5319c6969c556ba1458b4\"> 185</a></span> <a class=\"code hl_function\" href=\"a01315.html#a9c9b9e575cf5319c6969c556ba1458b4\">TreeData</a>() :</div>\n-<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> tree_(nullptr)</div>\n-<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> {}</div>\n-<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> </div>\n-<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01315.html#a0c0e69c7c9428c632dc7b2f42a9a078c\"> 196</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01315.html#a0c0e69c7c9428c632dc7b2f42a9a078c\">init</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01315.html#a1935d801dae08dcf1211c99400e8201c\">Tree</a>& tree)</div>\n-<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> {</div>\n-<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> <span class=\"keywordflow\">if</span> (tree_)</div>\n-<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> destroy();</div>\n-<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> tree_ = &tree;</div>\n-<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> TypeTree::applyToTree(*tree_, <a class=\"code hl_struct\" href=\"a01319.html\">InitVisitor</a>(data_));</div>\n-<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> }</div>\n-<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> </div>\n-<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01315.html#a0403c44735e8cd8f092addb50e32ba13\"> 205</a></span> <a class=\"code hl_function\" href=\"a01315.html#a0403c44735e8cd8f092addb50e32ba13\">TreeData</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01315.html\">TreeData</a>& other) :</div>\n-<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> tree_(other.tree_)</div>\n-<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> {</div>\n-<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span> TypeTree::applyToTree(*tree_, <a class=\"code hl_struct\" href=\"a01319.html\">InitVisitor</a>(data_));</div>\n-<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> TypeTree::applyToTree(*tree_, <a class=\"code hl_struct\" href=\"a01327.html\">CopyVisitor</a>(*<span class=\"keyword\">this</span>, other));</div>\n-<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> }</div>\n-<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> </div>\n-<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01315.html#a53718e19bd6b98f142c74963c30eb82c\"> 213</a></span> <a class=\"code hl_class\" href=\"a01315.html\">TreeData</a>& <a class=\"code hl_function\" href=\"a01315.html#a53718e19bd6b98f142c74963c30eb82c\">operator=</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01315.html\">TreeData</a>& other)</div>\n-<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> {</div>\n-<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> <span class=\"keywordflow\">if</span> (tree_)</div>\n-<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span> TypeTree::applyToTree(*tree_, <a class=\"code hl_struct\" href=\"a01323.html\">DestroyVisitor</a>(data_));</div>\n-<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> tree_ = other.<a class=\"code hl_variable\" href=\"a01315.html#a440574f9dc85ea21a5ba0df06a2e303d\">tree_</a>;</div>\n-<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> TypeTree::applyToTree(*tree_, <a class=\"code hl_struct\" href=\"a01327.html\">CopyVisitor</a>(*<span class=\"keyword\">this</span>, other));</div>\n-<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>;</div>\n-<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span> }</div>\n-<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> </div>\n-<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01315.html#a452f0597967568ab66780a958fc90efb\"> 223</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01315.html#a452f0597967568ab66780a958fc90efb\">destroy</a>()</div>\n-<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> {</div>\n-<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span> <span class=\"keywordflow\">if</span> (tree_)</div>\n-<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> TypeTree::applyToTree(*tree_, <a class=\"code hl_struct\" href=\"a01323.html\">DestroyVisitor</a>(data_));</div>\n-<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> tree_ = <span class=\"keyword\">nullptr</span>;</div>\n-<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> }</div>\n-<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> </div>\n-<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01315.html#a7f29e97c75bd31b9b8c6133af501d3a6\"> 231</a></span> <a class=\"code hl_function\" href=\"a01315.html#a7f29e97c75bd31b9b8c6133af501d3a6\">~TreeData</a>()</div>\n-<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> {</div>\n-<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> <span class=\"keywordflow\">if</span> (tree_)</div>\n-<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> TypeTree::applyToTree(*tree_, <a class=\"code hl_struct\" href=\"a01323.html\">DestroyVisitor</a>(data_));</div>\n-<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> }</div>\n-<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span> </div>\n-<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Node></div>\n-<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01315.html#aacdd830a099653f49d0cfea67b9127b8\"> 239</a></span> <a class=\"code hl_typedef\" href=\"a01315.html#a98e841c3feef5258c0536cbc27b07c6d\">NodeData<Node></a>& <a class=\"code hl_function\" href=\"a01315.html#aacdd830a099653f49d0cfea67b9127b8\">operator[]</a>(<span class=\"keyword\">const</span> Node& node)</div>\n-<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"> 240</span> {</div>\n-<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span> <span class=\"keywordflow\">return</span> *(<a class=\"code hl_typedef\" href=\"a01315.html#a98e841c3feef5258c0536cbc27b07c6d\">NodeData<Node></a>*)(data_[node.treeIndex()]);</div>\n-<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span> }</div>\n-<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> </div>\n-<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Node></div>\n-<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01315.html#a47f292983a06816d28e799a9fc5bedbc\"> 246</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01315.html#a98e841c3feef5258c0536cbc27b07c6d\">NodeData<Node></a>& <a class=\"code hl_function\" href=\"a01315.html#a47f292983a06816d28e799a9fc5bedbc\">operator[]</a>(<span class=\"keyword\">const</span> Node& node)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00247\" name=\"l00247\"></a><span class=\"lineno\"> 247</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"> 248</span> <span class=\"keywordflow\">return</span> *(<a class=\"code hl_typedef\" href=\"a01315.html#a98e841c3feef5258c0536cbc27b07c6d\">NodeData<Node></a>*)(data_[node.treeIndex()]);</div>\n-<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span> }</div>\n-<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span> </div>\n-<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span><span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span> </div>\n-<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01315.html#a440574f9dc85ea21a5ba0df06a2e303d\"> 253</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01315.html#a1935d801dae08dcf1211c99400e8201c\">Tree</a>* <a class=\"code hl_variable\" href=\"a01315.html#a440574f9dc85ea21a5ba0df06a2e303d\">tree_</a>;</div>\n-<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01315.html#aef7d80f127d617683599911067a331e8\"> 254</a></span> <a class=\"code hl_typedef\" href=\"a01315.html#aa1173c59bbddcbf9f29bf2e09478d277\">RawContainer</a> <a class=\"code hl_variable\" href=\"a01315.html#aef7d80f127d617683599911067a331e8\">data_</a>;</div>\n-<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span>};</div>\n-<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"> 256</span> </div>\n-<div class=\"line\"><a id=\"l00257\" name=\"l00257\"></a><span class=\"lineno\"> 257</span> </div>\n-<div class=\"line\"><a id=\"l00258\" name=\"l00258\"></a><span class=\"lineno\"> 258</span> </div>\n-<div class=\"line\"><a id=\"l00259\" name=\"l00259\"></a><span class=\"lineno\"> 259</span>} <span class=\"comment\">// namespace Functions</span></div>\n-<div class=\"line\"><a id=\"l00260\" name=\"l00260\"></a><span class=\"lineno\"> 260</span>} <span class=\"comment\">// namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00261\" name=\"l00261\"></a><span class=\"lineno\"> 261</span> </div>\n-<div class=\"line\"><a id=\"l00262\" name=\"l00262\"></a><span class=\"lineno\"> 262</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_TREEDATA_HH</span></div>\n-<div class=\"ttc\" id=\"aa00017_html\"><div class=\"ttname\"><a href=\"a00017.html\">gridfunction.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00023_html\"><div class=\"ttname\"><a href=\"a00023.html\">gridviewentityset.hh</a></div></div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01919.html#a6eacf8355789441dabcf555e0c89c967\"> 64</a></span> <a class=\"code hl_typedef\" href=\"a01919.html#a82d03b324e66290459b11d00f549eca2\">const_iterator</a> <a class=\"code hl_function\" href=\"a01919.html#a6eacf8355789441dabcf555e0c89c967\">begin</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> <span class=\"keywordflow\">return</span> gv_.template begin<codim>();</div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> }</div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> </div>\n+<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01919.html#a1e115d056b4517cbef7a2c2007132ab7\"> 70</a></span> <a class=\"code hl_typedef\" href=\"a01919.html#a82d03b324e66290459b11d00f549eca2\">const_iterator</a> <a class=\"code hl_function\" href=\"a01919.html#a1e115d056b4517cbef7a2c2007132ab7\">end</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> <span class=\"keywordflow\">return</span> gv_.template end<codim>();</div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> }</div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> </div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01919.html#a3f882a9eb425fd9dae3c23c829512642\"> 76</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01919.html#a1952f7f975b409a9fb7cac45d2dd13c0\">GridView</a>& <a class=\"code hl_function\" href=\"a01919.html#a3f882a9eb425fd9dae3c23c829512642\">gridView</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> <span class=\"keywordflow\">return</span> gv_;</div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> }</div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> </div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> <a class=\"code hl_typedef\" href=\"a01919.html#a1952f7f975b409a9fb7cac45d2dd13c0\">GridView</a> gv_;</div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span>};</div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> </div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> </div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span>} <span class=\"comment\">// end of namespace Dune::Functions</span></div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span>} <span class=\"comment\">// end of namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> </div>\n+<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH</span></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa01311_html\"><div class=\"ttname\"><a href=\"a01311.html\">Dune::Functions::UniformNodeVisitor</a></div><div class=\"ttdoc\">Mixin for visitors that should apply the same action on all nodes.</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:40</div></div>\n-<div class=\"ttc\" id=\"aa01311_html_a06f9e8d92b5769fff46163021a2175ce\"><div class=\"ttname\"><a href=\"a01311.html#a06f9e8d92b5769fff46163021a2175ce\">Dune::Functions::UniformNodeVisitor::pre</a></div><div class=\"ttdeci\">void pre(Node &node, TreePath treePath)</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:46</div></div>\n-<div class=\"ttc\" id=\"aa01311_html_a16683785d8080c47936577796e64eb78\"><div class=\"ttname\"><a href=\"a01311.html#a16683785d8080c47936577796e64eb78\">Dune::Functions::UniformNodeVisitor::leaf</a></div><div class=\"ttdeci\">void leaf(Node &node, TreePath treePath)</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:57</div></div>\n-<div class=\"ttc\" id=\"aa01315_html\"><div class=\"ttname\"><a href=\"a01315.html\">Dune::Functions::TreeData</a></div><div class=\"ttdoc\">Container allowing to attach data to each node of a tree.</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:95</div></div>\n-<div class=\"ttc\" id=\"aa01315_html_a0403c44735e8cd8f092addb50e32ba13\"><div class=\"ttname\"><a href=\"a01315.html#a0403c44735e8cd8f092addb50e32ba13\">Dune::Functions::TreeData::TreeData</a></div><div class=\"ttdeci\">TreeData(const TreeData &other)</div><div class=\"ttdoc\">Copy constructor.</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:205</div></div>\n-<div class=\"ttc\" id=\"aa01315_html_a0c0e69c7c9428c632dc7b2f42a9a078c\"><div class=\"ttname\"><a href=\"a01315.html#a0c0e69c7c9428c632dc7b2f42a9a078c\">Dune::Functions::TreeData::init</a></div><div class=\"ttdeci\">void init(const Tree &tree)</div><div class=\"ttdoc\">Initialize from tree.</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:196</div></div>\n-<div class=\"ttc\" id=\"aa01315_html_a1935d801dae08dcf1211c99400e8201c\"><div class=\"ttname\"><a href=\"a01315.html#a1935d801dae08dcf1211c99400e8201c\">Dune::Functions::TreeData::Tree</a></div><div class=\"ttdeci\">T Tree</div><div class=\"ttdoc\">Type of tree the data is associated with.</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:100</div></div>\n-<div class=\"ttc\" id=\"aa01315_html_a440574f9dc85ea21a5ba0df06a2e303d\"><div class=\"ttname\"><a href=\"a01315.html#a440574f9dc85ea21a5ba0df06a2e303d\">Dune::Functions::TreeData::tree_</a></div><div class=\"ttdeci\">const Tree * tree_</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:253</div></div>\n-<div class=\"ttc\" id=\"aa01315_html_a452f0597967568ab66780a958fc90efb\"><div class=\"ttname\"><a href=\"a01315.html#a452f0597967568ab66780a958fc90efb\">Dune::Functions::TreeData::destroy</a></div><div class=\"ttdeci\">void destroy()</div><div class=\"ttdoc\">Destroy data.</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:223</div></div>\n-<div class=\"ttc\" id=\"aa01315_html_a47f292983a06816d28e799a9fc5bedbc\"><div class=\"ttname\"><a href=\"a01315.html#a47f292983a06816d28e799a9fc5bedbc\">Dune::Functions::TreeData::operator[]</a></div><div class=\"ttdeci\">const NodeData< Node > & operator[](const Node &node) const</div><div class=\"ttdoc\">Get reference to data associated to given node.</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:246</div></div>\n-<div class=\"ttc\" id=\"aa01315_html_a53718e19bd6b98f142c74963c30eb82c\"><div class=\"ttname\"><a href=\"a01315.html#a53718e19bd6b98f142c74963c30eb82c\">Dune::Functions::TreeData::operator=</a></div><div class=\"ttdeci\">TreeData & operator=(const TreeData &other)</div><div class=\"ttdoc\">Copy assignment.</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:213</div></div>\n-<div class=\"ttc\" id=\"aa01315_html_a7f29e97c75bd31b9b8c6133af501d3a6\"><div class=\"ttname\"><a href=\"a01315.html#a7f29e97c75bd31b9b8c6133af501d3a6\">Dune::Functions::TreeData::~TreeData</a></div><div class=\"ttdeci\">~TreeData()</div><div class=\"ttdoc\">Destructor.</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:231</div></div>\n-<div class=\"ttc\" id=\"aa01315_html_a98e841c3feef5258c0536cbc27b07c6d\"><div class=\"ttname\"><a href=\"a01315.html#a98e841c3feef5258c0536cbc27b07c6d\">Dune::Functions::TreeData::NodeData</a></div><div class=\"ttdeci\">ND< Node > NodeData</div><div class=\"ttdoc\">Template to determine the data type for given node type.</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:110</div></div>\n-<div class=\"ttc\" id=\"aa01315_html_a9c9b9e575cf5319c6969c556ba1458b4\"><div class=\"ttname\"><a href=\"a01315.html#a9c9b9e575cf5319c6969c556ba1458b4\">Dune::Functions::TreeData::TreeData</a></div><div class=\"ttdeci\">TreeData()</div><div class=\"ttdoc\">Default constructor.</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:185</div></div>\n-<div class=\"ttc\" id=\"aa01315_html_aa1173c59bbddcbf9f29bf2e09478d277\"><div class=\"ttname\"><a href=\"a01315.html#aa1173c59bbddcbf9f29bf2e09478d277\">Dune::Functions::TreeData::RawContainer</a></div><div class=\"ttdeci\">std::vector< void * > RawContainer</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:113</div></div>\n-<div class=\"ttc\" id=\"aa01315_html_aacdd830a099653f49d0cfea67b9127b8\"><div class=\"ttname\"><a href=\"a01315.html#aacdd830a099653f49d0cfea67b9127b8\">Dune::Functions::TreeData::operator[]</a></div><div class=\"ttdeci\">NodeData< Node > & operator[](const Node &node)</div><div class=\"ttdoc\">Get mutable reference to data associated to given node.</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:239</div></div>\n-<div class=\"ttc\" id=\"aa01315_html_aad999148c3cbb4423a440febc8fa892c\"><div class=\"ttname\"><a href=\"a01315.html#aad999148c3cbb4423a440febc8fa892c\">Dune::Functions::TreeData::size_type</a></div><div class=\"ttdeci\">typename Tree::size_type size_type</div><div class=\"ttdoc\">Type used for indices and size information.</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:103</div></div>\n-<div class=\"ttc\" id=\"aa01315_html_aef7d80f127d617683599911067a331e8\"><div class=\"ttname\"><a href=\"a01315.html#aef7d80f127d617683599911067a331e8\">Dune::Functions::TreeData::data_</a></div><div class=\"ttdeci\">RawContainer data_</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:254</div></div>\n-<div class=\"ttc\" id=\"aa01319_html\"><div class=\"ttname\"><a href=\"a01319.html\">Dune::Functions::TreeData::InitVisitor</a></div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:127</div></div>\n-<div class=\"ttc\" id=\"aa01319_html_a936aaecf0f2ccc0e52fa3fb5a02a0b73\"><div class=\"ttname\"><a href=\"a01319.html#a936aaecf0f2ccc0e52fa3fb5a02a0b73\">Dune::Functions::TreeData::InitVisitor::InitVisitor</a></div><div class=\"ttdeci\">InitVisitor(RawContainer &data)</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:128</div></div>\n-<div class=\"ttc\" id=\"aa01319_html_ac5ffe2a6bf083fedfea129594cb56195\"><div class=\"ttname\"><a href=\"a01319.html#ac5ffe2a6bf083fedfea129594cb56195\">Dune::Functions::TreeData::InitVisitor::apply</a></div><div class=\"ttdeci\">void apply(Node &node, TreePath treePath)</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:133</div></div>\n-<div class=\"ttc\" id=\"aa01319_html_af151e4c9b20411936e4bed4edc6d5042\"><div class=\"ttname\"><a href=\"a01319.html#af151e4c9b20411936e4bed4edc6d5042\">Dune::Functions::TreeData::InitVisitor::data_</a></div><div class=\"ttdeci\">RawContainer & data_</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:142</div></div>\n-<div class=\"ttc\" id=\"aa01323_html\"><div class=\"ttname\"><a href=\"a01323.html\">Dune::Functions::TreeData::DestroyVisitor</a></div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:147</div></div>\n-<div class=\"ttc\" id=\"aa01323_html_a2c5abbd0a0f898836a2296df6e0a368b\"><div class=\"ttname\"><a href=\"a01323.html#a2c5abbd0a0f898836a2296df6e0a368b\">Dune::Functions::TreeData::DestroyVisitor::data_</a></div><div class=\"ttdeci\">RawContainer & data_</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:161</div></div>\n-<div class=\"ttc\" id=\"aa01323_html_a4e10bb17191a2a979935bc1c0dc3a973\"><div class=\"ttname\"><a href=\"a01323.html#a4e10bb17191a2a979935bc1c0dc3a973\">Dune::Functions::TreeData::DestroyVisitor::DestroyVisitor</a></div><div class=\"ttdeci\">DestroyVisitor(RawContainer &data)</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:148</div></div>\n-<div class=\"ttc\" id=\"aa01323_html_aebdbfaf521e7d90a2c11d853cb033426\"><div class=\"ttname\"><a href=\"a01323.html#aebdbfaf521e7d90a2c11d853cb033426\">Dune::Functions::TreeData::DestroyVisitor::apply</a></div><div class=\"ttdeci\">void apply(Node &node, TreePath treePath)</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:153</div></div>\n-<div class=\"ttc\" id=\"aa01327_html\"><div class=\"ttname\"><a href=\"a01327.html\">Dune::Functions::TreeData::CopyVisitor</a></div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:166</div></div>\n-<div class=\"ttc\" id=\"aa01327_html_a371fc07bc59460e748e55a64ab1d4a72\"><div class=\"ttname\"><a href=\"a01327.html#a371fc07bc59460e748e55a64ab1d4a72\">Dune::Functions::TreeData::CopyVisitor::CopyVisitor</a></div><div class=\"ttdeci\">CopyVisitor(TreeData &thisTD, const TreeData &otherTD)</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:167</div></div>\n-<div class=\"ttc\" id=\"aa01327_html_a37f69fa7de18120c393d1664a49874e3\"><div class=\"ttname\"><a href=\"a01327.html#a37f69fa7de18120c393d1664a49874e3\">Dune::Functions::TreeData::CopyVisitor::apply</a></div><div class=\"ttdeci\">void apply(Node &node, TreePath treePath)</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:173</div></div>\n-<div class=\"ttc\" id=\"aa01327_html_a4717f1783d3acf1b0bfb4638e38707e7\"><div class=\"ttname\"><a href=\"a01327.html#a4717f1783d3acf1b0bfb4638e38707e7\">Dune::Functions::TreeData::CopyVisitor::thisTD_</a></div><div class=\"ttdeci\">TreeData & thisTD_</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:178</div></div>\n-<div class=\"ttc\" id=\"aa01327_html_a6373804408e297824cc81d5db7b661ef\"><div class=\"ttname\"><a href=\"a01327.html#a6373804408e297824cc81d5db7b661ef\">Dune::Functions::TreeData::CopyVisitor::otherTD_</a></div><div class=\"ttdeci\">const TreeData & otherTD_</div><div class=\"ttdef\"><b>Definition:</b> treedata.hh:179</div></div>\n+<div class=\"ttc\" id=\"aa01919_html\"><div class=\"ttname\"><a href=\"a01919.html\">Dune::Functions::GridViewEntitySet</a></div><div class=\"ttdoc\">An entity set for all entities of given codim in a grid view.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:23</div></div>\n+<div class=\"ttc\" id=\"aa01919_html_a03a85089dbc09737fa68ee0643f253e8\"><div class=\"ttname\"><a href=\"a01919.html#a03a85089dbc09737fa68ee0643f253e8\">Dune::Functions::GridViewEntitySet::GridViewEntitySet</a></div><div class=\"ttdeci\">GridViewEntitySet(const GridView &gv)</div><div class=\"ttdoc\">Construct GridViewEntitySet for a GridView.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:47</div></div>\n+<div class=\"ttc\" id=\"aa01919_html_a1952f7f975b409a9fb7cac45d2dd13c0\"><div class=\"ttname\"><a href=\"a01919.html#a1952f7f975b409a9fb7cac45d2dd13c0\">Dune::Functions::GridViewEntitySet::GridView</a></div><div class=\"ttdeci\">GV GridView</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:26</div></div>\n+<div class=\"ttc\" id=\"aa01919_html_a1d5eaf3facd0219b2e150d964a664752\"><div class=\"ttname\"><a href=\"a01919.html#a1d5eaf3facd0219b2e150d964a664752\">Dune::Functions::GridViewEntitySet::Element</a></div><div class=\"ttdeci\">GridView::template Codim< codim >::Entity Element</div><div class=\"ttdoc\">Type of Elements contained in this EntitySet.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:32</div></div>\n+<div class=\"ttc\" id=\"aa01919_html_a1e115d056b4517cbef7a2c2007132ab7\"><div class=\"ttname\"><a href=\"a01919.html#a1e115d056b4517cbef7a2c2007132ab7\">Dune::Functions::GridViewEntitySet::end</a></div><div class=\"ttdeci\">const_iterator end() const</div><div class=\"ttdoc\">Create an end iterator.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:70</div></div>\n+<div class=\"ttc\" id=\"aa01919_html_a3f882a9eb425fd9dae3c23c829512642\"><div class=\"ttname\"><a href=\"a01919.html#a3f882a9eb425fd9dae3c23c829512642\">Dune::Functions::GridViewEntitySet::gridView</a></div><div class=\"ttdeci\">const GridView & gridView() const</div><div class=\"ttdoc\">Return the associated GridView.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:76</div></div>\n+<div class=\"ttc\" id=\"aa01919_html_a64c695239c50f85f3c3ac009e0d28ec5\"><div class=\"ttname\"><a href=\"a01919.html#a64c695239c50f85f3c3ac009e0d28ec5\">Dune::Functions::GridViewEntitySet::value_type</a></div><div class=\"ttdeci\">Element value_type</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:38</div></div>\n+<div class=\"ttc\" id=\"aa01919_html_a6eacf8355789441dabcf555e0c89c967\"><div class=\"ttname\"><a href=\"a01919.html#a6eacf8355789441dabcf555e0c89c967\">Dune::Functions::GridViewEntitySet::begin</a></div><div class=\"ttdeci\">const_iterator begin() const</div><div class=\"ttdoc\">Create a begin iterator.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:64</div></div>\n+<div class=\"ttc\" id=\"aa01919_html_a82d03b324e66290459b11d00f549eca2\"><div class=\"ttname\"><a href=\"a01919.html#a82d03b324e66290459b11d00f549eca2\">Dune::Functions::GridViewEntitySet::const_iterator</a></div><div class=\"ttdeci\">GridView::template Codim< codim >::Iterator const_iterator</div><div class=\"ttdoc\">A forward iterator.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:41</div></div>\n+<div class=\"ttc\" id=\"aa01919_html_aa4368ad66f18ba8279f20ab7a794069d\"><div class=\"ttname\"><a href=\"a01919.html#aa4368ad66f18ba8279f20ab7a794069d\">Dune::Functions::GridViewEntitySet::LocalCoordinate</a></div><div class=\"ttdeci\">Element::Geometry::LocalCoordinate LocalCoordinate</div><div class=\"ttdoc\">Type of local coordinates with respect to the Element.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:35</div></div>\n+<div class=\"ttc\" id=\"aa01919_html_aa53cd545677269ae1e19dda2a02f48dd\"><div class=\"ttname\"><a href=\"a01919.html#aa53cd545677269ae1e19dda2a02f48dd\">Dune::Functions::GridViewEntitySet::size</a></div><div class=\"ttdeci\">size_t size() const</div><div class=\"ttdoc\">Return number of Elements visited by an iterator.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:58</div></div>\n+<div class=\"ttc\" id=\"aa01919_html_ac4e3d0188467b4be3d195c9f5729e629\"><div class=\"ttname\"><a href=\"a01919.html#ac4e3d0188467b4be3d195c9f5729e629\">Dune::Functions::GridViewEntitySet::GlobalCoordinate</a></div><div class=\"ttdeci\">Element::Geometry::GlobalCoordinate GlobalCoordinate</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:36</div></div>\n+<div class=\"ttc\" id=\"aa01919_html_adfa21b864d2fe7e5f1e2a1c35df59de1a641d7f1200046247691c0b3e24fbebc6\"><div class=\"ttname\"><a href=\"a01919.html#adfa21b864d2fe7e5f1e2a1c35df59de1a641d7f1200046247691c0b3e24fbebc6\">Dune::Functions::GridViewEntitySet::codim</a></div><div class=\"ttdeci\">@ codim</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:28</div></div>\n+<div class=\"ttc\" id=\"aa01919_html_aecef1420c439c2cae8ae253822257318\"><div class=\"ttname\"><a href=\"a01919.html#aecef1420c439c2cae8ae253822257318\">Dune::Functions::GridViewEntitySet::contains</a></div><div class=\"ttdeci\">bool contains(const Element &e) const</div><div class=\"ttdoc\">Return true if e is contained in the EntitySet.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:52</div></div>\n+<div class=\"ttc\" id=\"aa01919_html_af641ddccfd83eac1935a39604afd4335\"><div class=\"ttname\"><a href=\"a01919.html#af641ddccfd83eac1935a39604afd4335\">Dune::Functions::GridViewEntitySet::iterator</a></div><div class=\"ttdeci\">const_iterator iterator</div><div class=\"ttdoc\">Same as const_iterator.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:44</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,327 +4,142 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * common\n-treedata.hh\n+ * gridfunctions\n+gridviewentityset.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_COMMON_TREEDATA_HH\n- 4#define DUNE_FUNCTIONS_COMMON_TREEDATA_HH\n+ 3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH\n+ 4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH\n 5\n- 6\n- 7#warning This file is deprecated. Please use TreeContainer from dune-typetree\n-instead.\n+ 6#include <memory>\n+ 7\n 8\n- 9#include <memory>\n+ 9namespace Dune {\n 10\n- 11#include <dune/common/shared_ptr.hh>\n+ 11namespace Functions {\n 12\n- 13#include <dune/typetree/pairtraversal.hh>\n- 14\n- 15#include <dune/functions/gridfunctions/gridviewentityset.hh>\n- 16#include <dune/functions/gridfunctions/gridfunction.hh>\n- 17\n- 18namespace Dune {\n- 19namespace Functions {\n- 20\n- 34template<class SimpleNodeVisitorImp, bool leafOnly>\n-35struct\n- 36[[deprecated(\"This is an implementation detail of the deprecated class\n-TreeDate and thus deprecated itself.\")]]\n- 37UniformNodeVisitor :\n- 38 public TypeTree::TreeVisitor,\n- 39 public TypeTree::DynamicTraversal\n- 40{\n- 41 // This is only enabled, if we want to incorporate inner nodes.\n- 42 // Checking leafOnly would be sufficient, but for SFINAE the\n- 43 // the enable_if condition must depend on the template parameter.\n- 44 template<typename Node, typename TreePath,\n- 45 typename std::enable_if<(not leafOnly) and (not Node::isLeaf), int>::type =\n-0>\n-46 void pre(Node& node, TreePath treePath)\n- 47 {\n- 48 static_cast<SimpleNodeVisitorImp*>(this)->apply(node, treePath);\n- 49 }\n+ 13\n+ 21template<class GV, int cd>\n+22class GridViewEntitySet\n+ 23{\n+ 24public:\n+ 25\n+26 typedef GV GridView;\n+ 27 enum {\n+ 28 codim = cd\n+29 };\n+ 30\n+32 typedef typename GridView::template Codim<codim>::Entity Element;\n+ 33\n+35 typedef typename Element::Geometry::LocalCoordinate LocalCoordinate;\n+36 typedef typename Element::Geometry::GlobalCoordinate GlobalCoordinate;\n+ 37\n+38 typedef Element value_type;\n+ 39\n+41 typedef typename GridView::template Codim<codim>::Iterator const_iterator;\n+ 42\n+44 typedef const_iterator iterator;\n+ 45\n+47 GridViewEntitySet(const GridView& gv) :\n+ 48 gv_(gv)\n+ 49 {}\n 50\n- 51 template<typename Node, typename TreePath,\n- 52 typename std::enable_if<(leafOnly) and (not Node::isLeaf), int>::type = 0>\n-53 void pre(Node& node, TreePath treePath)\n- 54 {}\n- 55\n- 56 template<typename Node, typename TreePath>\n-57 void leaf(Node& node, TreePath treePath)\n- 58 {\n- 59 static_cast<SimpleNodeVisitorImp*>(this)->apply(node, treePath);\n- 60 }\n- 61};\n+52 bool contains(const Element& e) const\n+ 53 {\n+ 54 return gv_.contains(e);\n+ 55 }\n+ 56\n+58 size_t size() const\n+ 59 {\n+ 60 return gv_.size(codim);\n+ 61 }\n 62\n- 63\n- 64\n- 91template<class T, template<class> class ND, bool LO>\n-92class\n- 93[[deprecated(\"This class is deprecated. Please use TreeContainer from dune-\n-typetree instead.\")]]\n- 94TreeData\n- 95{\n- 96\n- 97public:\n- 98\n-100 using Tree = T;\n- 101\n-103 using size_type = typename Tree::size_type;\n- 104\n-106 static const bool leafOnly = LO;\n- 107\n- 109 template<class Node>\n-110 using NodeData = ND<Node>;\n- 111\n- 112protected:\n-113 using RawContainer = std::vector<void*>;\n- 114\n- 115\n- 116 // Since we can generate the node data type only if\n- 117 // we know the type of the node, we have to do\n- 118 // initialization, copy, and destruction via a\n- 119 // tree traversal. Once we can use C++14 this can\n- 120 // be written in a much easier and more selfcontained\n- 121 // ways using generic lambda functions.\n- 122 // Until then we need explicit visitor classes for\n- 123 // each operation.\n- 124\n-125 struct InitVisitor :\n- 126 public UniformNodeVisitor<InitVisitor, leafOnly>\n- 127 {\n-128 InitVisitor(RawContainer& data) :\n- 129 data_(data)\n- 130 {}\n- 131\n- 132 template<typename Node, typename TreePath>\n-133 void apply(Node& node, TreePath treePath)\n- 134 {\n- 135 auto&& index = node.treeIndex();\n- 136 if (data_.size() < index+1)\n- 137 data_.resize(index+1, nullptr);\n- 138 data_[index] = new NodeData<Node>;\n- 139 }\n- 140\n- 141\n-142 RawContainer& data_;\n- 143 };\n- 144\n-145 struct DestroyVisitor :\n- 146 public UniformNodeVisitor<DestroyVisitor, leafOnly>\n- 147 {\n-148 DestroyVisitor(RawContainer& data) :\n- 149 data_(data)\n- 150 {}\n- 151\n- 152 template<typename Node, typename TreePath>\n-153 void apply(Node& node, TreePath treePath)\n- 154 {\n- 155 auto&& index = node.treeIndex();\n- 156 auto p = (NodeData<Node>*)(data_[index]);\n- 157 delete p;\n- 158 data_[index] = nullptr;\n- 159 }\n- 160\n-161 RawContainer& data_;\n- 162 };\n- 163\n-164 struct CopyVisitor :\n- 165 public UniformNodeVisitor<CopyVisitor, leafOnly>\n- 166 {\n-167 CopyVisitor(TreeData& thisTD, const TreeData& otherTD) :\n- 168 thisTD_(thisTD),\n- 169 otherTD_(otherTD)\n- 170 {}\n- 171\n- 172 template<typename Node, typename TreePath>\n-173 void apply(Node& node, TreePath treePath)\n- 174 {\n- 175 thisTD_[node] = otherTD_[node];\n- 176 }\n- 177\n-178 TreeData& thisTD_;\n-179 const TreeData& otherTD_;\n- 180 };\n- 181\n- 182public:\n- 183\n-185 TreeData() :\n- 186 tree_(nullptr)\n- 187 {}\n- 188\n-196 void init(const Tree& tree)\n- 197 {\n- 198 if (tree_)\n- 199 destroy();\n- 200 tree_ = &tree;\n- 201 TypeTree::applyToTree(*tree_, InitVisitor(data_));\n- 202 }\n- 203\n-205 TreeData(const TreeData& other) :\n- 206 tree_(other.tree_)\n- 207 {\n- 208 TypeTree::applyToTree(*tree_, InitVisitor(data_));\n- 209 TypeTree::applyToTree(*tree_, CopyVisitor(*this, other));\n- 210 }\n- 211\n-213 TreeData& operator=(const TreeData& other)\n- 214 {\n- 215 if (tree_)\n- 216 TypeTree::applyToTree(*tree_, DestroyVisitor(data_));\n- 217 tree_ = other.tree_;\n- 218 TypeTree::applyToTree(*tree_, CopyVisitor(*this, other));\n- 219 return *this;\n- 220 }\n- 221\n-223 void destroy()\n- 224 {\n- 225 if (tree_)\n- 226 TypeTree::applyToTree(*tree_, DestroyVisitor(data_));\n- 227 tree_ = nullptr;\n- 228 }\n- 229\n-231 ~TreeData()\n- 232 {\n- 233 if (tree_)\n- 234 TypeTree::applyToTree(*tree_, DestroyVisitor(data_));\n- 235 }\n- 236\n- 238 template<class Node>\n-239 NodeData<Node>& operator[](const Node& node)\n- 240 {\n- 241 return *(NodeData<Node>*)(data_[node.treeIndex()]);\n- 242 }\n- 243\n- 245 template<class Node>\n-246 const NodeData<Node>& operator[](const Node& node) const\n- 247 {\n- 248 return *(NodeData<Node>*)(data_[node.treeIndex()]);\n- 249 }\n- 250\n- 251protected:\n- 252\n-253 const Tree* tree_;\n-254 RawContainer data_;\n- 255};\n- 256\n- 257\n- 258\n- 259} // namespace Functions\n- 260} // namespace Dune\n- 261\n- 262#endif // DUNE_FUNCTIONS_COMMON_TREEDATA_HH\n-gridfunction.hh\n-gridviewentityset.hh\n+64 const_iterator begin() const\n+ 65 {\n+ 66 return gv_.template begin<codim>();\n+ 67 }\n+ 68\n+70 const_iterator end() const\n+ 71 {\n+ 72 return gv_.template end<codim>();\n+ 73 }\n+ 74\n+76 const GridView& gridView() const\n+ 77 {\n+ 78 return gv_;\n+ 79 }\n+ 80\n+ 81private:\n+ 82 GridView gv_;\n+ 83};\n+ 84\n+ 85\n+ 86} // end of namespace Dune::Functions\n+ 87} // end of namespace Dune\n+ 88\n+ 89#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWENTITYSET_HH\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::UniformNodeVisitor\n-Mixin for visitors that should apply the same action on all nodes.\n-Definition: treedata.hh:40\n-Dune::Functions::UniformNodeVisitor::pre\n-void pre(Node &node, TreePath treePath)\n-Definition: treedata.hh:46\n-Dune::Functions::UniformNodeVisitor::leaf\n-void leaf(Node &node, TreePath treePath)\n-Definition: treedata.hh:57\n-Dune::Functions::TreeData\n-Container allowing to attach data to each node of a tree.\n-Definition: treedata.hh:95\n-Dune::Functions::TreeData::TreeData\n-TreeData(const TreeData &other)\n-Copy constructor.\n-Definition: treedata.hh:205\n-Dune::Functions::TreeData::init\n-void init(const Tree &tree)\n-Initialize from tree.\n-Definition: treedata.hh:196\n-Dune::Functions::TreeData::Tree\n-T Tree\n-Type of tree the data is associated with.\n-Definition: treedata.hh:100\n-Dune::Functions::TreeData::tree_\n-const Tree * tree_\n-Definition: treedata.hh:253\n-Dune::Functions::TreeData::destroy\n-void destroy()\n-Destroy data.\n-Definition: treedata.hh:223\n-Dune::Functions::TreeData::operator[]\n-const NodeData< Node > & operator[](const Node &node) const\n-Get reference to data associated to given node.\n-Definition: treedata.hh:246\n-Dune::Functions::TreeData::operator=\n-TreeData & operator=(const TreeData &other)\n-Copy assignment.\n-Definition: treedata.hh:213\n-Dune::Functions::TreeData::~TreeData\n-~TreeData()\n-Destructor.\n-Definition: treedata.hh:231\n-Dune::Functions::TreeData::NodeData\n-ND< Node > NodeData\n-Template to determine the data type for given node type.\n-Definition: treedata.hh:110\n-Dune::Functions::TreeData::TreeData\n-TreeData()\n-Default constructor.\n-Definition: treedata.hh:185\n-Dune::Functions::TreeData::RawContainer\n-std::vector< void * > RawContainer\n-Definition: treedata.hh:113\n-Dune::Functions::TreeData::operator[]\n-NodeData< Node > & operator[](const Node &node)\n-Get mutable reference to data associated to given node.\n-Definition: treedata.hh:239\n-Dune::Functions::TreeData::size_type\n-typename Tree::size_type size_type\n-Type used for indices and size information.\n-Definition: treedata.hh:103\n-Dune::Functions::TreeData::data_\n-RawContainer data_\n-Definition: treedata.hh:254\n-Dune::Functions::TreeData::InitVisitor\n-Definition: treedata.hh:127\n-Dune::Functions::TreeData::InitVisitor::InitVisitor\n-InitVisitor(RawContainer &data)\n-Definition: treedata.hh:128\n-Dune::Functions::TreeData::InitVisitor::apply\n-void apply(Node &node, TreePath treePath)\n-Definition: treedata.hh:133\n-Dune::Functions::TreeData::InitVisitor::data_\n-RawContainer & data_\n-Definition: treedata.hh:142\n-Dune::Functions::TreeData::DestroyVisitor\n-Definition: treedata.hh:147\n-Dune::Functions::TreeData::DestroyVisitor::data_\n-RawContainer & data_\n-Definition: treedata.hh:161\n-Dune::Functions::TreeData::DestroyVisitor::DestroyVisitor\n-DestroyVisitor(RawContainer &data)\n-Definition: treedata.hh:148\n-Dune::Functions::TreeData::DestroyVisitor::apply\n-void apply(Node &node, TreePath treePath)\n-Definition: treedata.hh:153\n-Dune::Functions::TreeData::CopyVisitor\n-Definition: treedata.hh:166\n-Dune::Functions::TreeData::CopyVisitor::CopyVisitor\n-CopyVisitor(TreeData &thisTD, const TreeData &otherTD)\n-Definition: treedata.hh:167\n-Dune::Functions::TreeData::CopyVisitor::apply\n-void apply(Node &node, TreePath treePath)\n-Definition: treedata.hh:173\n-Dune::Functions::TreeData::CopyVisitor::thisTD_\n-TreeData & thisTD_\n-Definition: treedata.hh:178\n-Dune::Functions::TreeData::CopyVisitor::otherTD_\n-const TreeData & otherTD_\n-Definition: treedata.hh:179\n+Dune::Functions::GridViewEntitySet\n+An entity set for all entities of given codim in a grid view.\n+Definition: gridviewentityset.hh:23\n+Dune::Functions::GridViewEntitySet::GridViewEntitySet\n+GridViewEntitySet(const GridView &gv)\n+Construct GridViewEntitySet for a GridView.\n+Definition: gridviewentityset.hh:47\n+Dune::Functions::GridViewEntitySet::GridView\n+GV GridView\n+Definition: gridviewentityset.hh:26\n+Dune::Functions::GridViewEntitySet::Element\n+GridView::template Codim< codim >::Entity Element\n+Type of Elements contained in this EntitySet.\n+Definition: gridviewentityset.hh:32\n+Dune::Functions::GridViewEntitySet::end\n+const_iterator end() const\n+Create an end iterator.\n+Definition: gridviewentityset.hh:70\n+Dune::Functions::GridViewEntitySet::gridView\n+const GridView & gridView() const\n+Return the associated GridView.\n+Definition: gridviewentityset.hh:76\n+Dune::Functions::GridViewEntitySet::value_type\n+Element value_type\n+Definition: gridviewentityset.hh:38\n+Dune::Functions::GridViewEntitySet::begin\n+const_iterator begin() const\n+Create a begin iterator.\n+Definition: gridviewentityset.hh:64\n+Dune::Functions::GridViewEntitySet::const_iterator\n+GridView::template Codim< codim >::Iterator const_iterator\n+A forward iterator.\n+Definition: gridviewentityset.hh:41\n+Dune::Functions::GridViewEntitySet::LocalCoordinate\n+Element::Geometry::LocalCoordinate LocalCoordinate\n+Type of local coordinates with respect to the Element.\n+Definition: gridviewentityset.hh:35\n+Dune::Functions::GridViewEntitySet::size\n+size_t size() const\n+Return number of Elements visited by an iterator.\n+Definition: gridviewentityset.hh:58\n+Dune::Functions::GridViewEntitySet::GlobalCoordinate\n+Element::Geometry::GlobalCoordinate GlobalCoordinate\n+Definition: gridviewentityset.hh:36\n+Dune::Functions::GridViewEntitySet::codim\n+@ codim\n+Definition: gridviewentityset.hh:28\n+Dune::Functions::GridViewEntitySet::contains\n+bool contains(const Element &e) const\n+Return true if e is contained in the EntitySet.\n+Definition: gridviewentityset.hh:52\n+Dune::Functions::GridViewEntitySet::iterator\n+const_iterator iterator\n+Same as const_iterator.\n+Definition: gridviewentityset.hh:44\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00086.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00086.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: signature.hh File Reference</title>\n+<title>dune-functions: gridviewfunction.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,57 +58,58 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> |\n <a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">signature.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">gridviewfunction.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <type_traits></code><br />\n-<code>#include <tuple></code><br />\n-<code>#include <<a class=\"el\" href=\"a00080_source.html\">dune/functions/common/defaultderivativetraits.hh</a>></code><br />\n+<div class=\"textblock\"><code>#include <memory></code><br />\n+<code>#include <dune/common/concept.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00098_source.html\">dune/functions/gridfunctions/gridfunction.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00083_source.html\">dune/functions/gridfunctions/gridviewentityset.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00080_source.html\">dune/functions/gridfunctions/analyticgridviewfunction.hh</a>></code><br />\n </div>\n <p><a href=\"a00086_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01291.html\">Dune::Functions::SignatureTraits< Signature, isCallable ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Helper class to deduce the signature of a callable. <a href=\"a01291.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01923.html\">Dune::Functions::GridViewFunction< Signature, GridView, DerivativeTraits, bufferSize ></a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01299.html\">Dune::Functions::SignatureTag< Range(Domain), DerivativeTraitsT ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Tag-class to encapsulate signature information. <a href=\"a01299.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01927.html\">Dune::Functions::GridViewFunction< Range(Domain), GV, DerivativeTraits, bufferSize ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Wrapper class for functions defined on a GridView. <a href=\"a01927.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n Functions</h2></td></tr>\n-<tr class=\"memitem:ga18b2a675f9153814c422d33878daebb2\"><td class=\"memTemplParams\" colspan=\"2\">template<class Range , class Domain , template< class > class DerivativeTraits> </td></tr>\n-<tr class=\"memitem:ga18b2a675f9153814c422d33878daebb2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00210.html#ga18b2a675f9153814c422d33878daebb2\">Dune::Functions::derivativeSignatureTag</a> (SignatureTag< Range(Domain), DerivativeTraits > tag)</td></tr>\n-<tr class=\"memdesc:ga18b2a675f9153814c422d33878daebb2\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Construct <a class=\"el\" href=\"a01295.html\">SignatureTag</a> for derivative. <a href=\"a00210.html#ga18b2a675f9153814c422d33878daebb2\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga18b2a675f9153814c422d33878daebb2\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:ga95d38d90c6b8ee6d3a2a0202cb80b56d\"><td class=\"memTemplParams\" colspan=\"2\">template<std::size_t maxOrder, class Signature , template< class > class DerivativeTraits> </td></tr>\n-<tr class=\"memitem:ga95d38d90c6b8ee6d3a2a0202cb80b56d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00210.html#ga95d38d90c6b8ee6d3a2a0202cb80b56d\">Dune::Functions::derivativeSignatureTags</a> (<a class=\"el\" href=\"a01295.html\">Dune::Functions::SignatureTag</a>< Signature, DerivativeTraits > tag)</td></tr>\n-<tr class=\"memdesc:ga95d38d90c6b8ee6d3a2a0202cb80b56d\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Construct SignatureTags for derivatives. <a href=\"a00210.html#ga95d38d90c6b8ee6d3a2a0202cb80b56d\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga95d38d90c6b8ee6d3a2a0202cb80b56d\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ab31121faf1c753f425b7360cedeb9a6a\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class GridView , typename std::enable_if< models< Imp::HasFreeLocalFunction, F >(), int >::type = 0> </td></tr>\n+<tr class=\"memitem:ab31121faf1c753f425b7360cedeb9a6a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">std::decay< F >::type </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#ab31121faf1c753f425b7360cedeb9a6a\">Dune::Functions::makeGridViewFunction</a> (F &&f, const GridView &gridView)</td></tr>\n+<tr class=\"memdesc:ab31121faf1c753f425b7360cedeb9a6a\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Construct a function modeling <a class=\"el\" href=\"a01923.html\">GridViewFunction</a> from function and grid view. <a href=\"a00219.html#ab31121faf1c753f425b7360cedeb9a6a\">More...</a><br /></td></tr>\n+<tr class=\"separator:ab31121faf1c753f425b7360cedeb9a6a\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a34f2d140a1fed46862286f68d26c9975\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class GridView , typename std::enable_if< not(models< Imp::HasFreeLocalFunction, F >()), int >::type = 0> </td></tr>\n+<tr class=\"memitem:a34f2d140a1fed46862286f68d26c9975\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a34f2d140a1fed46862286f68d26c9975\">Dune::Functions::makeGridViewFunction</a> (F &&f, const GridView &gridView) -> decltype(<a class=\"el\" href=\"a00209.html#gafe8f06fb6d4027bfaf39e0971d8eb3c6\">makeAnalyticGridViewFunction</a>(std::forward< F >(f), gridView))</td></tr>\n+<tr class=\"memdesc:a34f2d140a1fed46862286f68d26c9975\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Construct a function modeling <a class=\"el\" href=\"a01923.html\">GridViewFunction</a> from function and grid view. <a href=\"a00219.html#a34f2d140a1fed46862286f68d26c9975\">More...</a><br /></td></tr>\n+<tr class=\"separator:a34f2d140a1fed46862286f68d26c9975\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,42 +4,49 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * common\n+ * gridfunctions\n Classes | Namespaces | Functions\n-signature.hh File Reference\n-#include <type_traits>\n-#include <tuple>\n-#include <dune/functions/common/defaultderivativetraits.hh>\n+gridviewfunction.hh File Reference\n+#include <memory>\n+#include <dune/common/concept.hh>\n+#include <dune/functions/gridfunctions/gridfunction.hh>\n+#include <dune/functions/gridfunctions/gridviewentityset.hh>\n+#include <dune/functions/gridfunctions/analyticgridviewfunction.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-struct \u00a0Dune::Functions::SignatureTraits<_Signature,_isCallable_>\n-\u00a0 Helper class to deduce the signature of a callable. More...\n+class \u00a0Dune::Functions::GridViewFunction<_Signature,_GridView,\n+ DerivativeTraits,_bufferSize_>\n \u00a0\n-struct \u00a0Dune::Functions::SignatureTag<_Range(Domain),_DerivativeTraitsT_>\n-\u00a0 Tag-class to encapsulate signature information. More...\n+class \u00a0Dune::Functions::GridViewFunction<_Range(Domain),_GV,_DerivativeTraits,\n+ bufferSize_>\n+\u00a0 Wrapper class for functions defined on a GridView. More...\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n Functions\n-template<class Range , class Domain , template< class > class\n-DerivativeTraits>\n-auto\u00a0Dune::Functions::derivativeSignatureTag (SignatureTag< Range(Domain),\n- DerivativeTraits > tag)\n-\u00a0 Construct SignatureTag for derivative. More...\n-\u00a0\n-template<std::size_t maxOrder, class Signature , template< class > class\n-DerivativeTraits>\n-auto\u00a0Dune::Functions::derivativeSignatureTags (Dune::Functions::SignatureTag<\n- Signature, DerivativeTraits > tag)\n-\u00a0 Construct SignatureTags for derivatives. More...\n+template<class F , class GridView , typename std::enable_if< models< Imp::\n+HasFreeLocalFunction, F >(), int >::type = 0>\n+std::decay< F >::type\u00a0Dune::Functions::makeGridViewFunction (F &&f, const\n+ GridView &gridView)\n+\u00a0 Construct a function modeling GridViewFunction from\n+ function and grid view. More...\n+\u00a0\n+template<class F , class GridView , typename std::enable_if< not(models< Imp::\n+HasFreeLocalFunction, F >()), int >::type = 0>\n+ auto\u00a0Dune::Functions::makeGridViewFunction (F &&f, const\n+ GridView &gridView) -> decltype\n+ (makeAnalyticGridViewFunction(std::forward< F >(f),\n+ gridView))\n+\u00a0 Construct a function modeling GridViewFunction from\n+ function and grid view. More...\n \u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00086_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00086_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: signature.hh Source File</title>\n+<title>dune-functions: gridviewfunction.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,162 +58,95 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">signature.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">gridviewfunction.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00086.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_SIGNATURE_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_SIGNATURE_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <type_traits></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <tuple></span></div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00080.html\">dune/functions/common/defaultderivativetraits.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span> </div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <memory></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span> </div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <dune/common/concept.hh></span></div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00098.html\">dune/functions/gridfunctions/gridfunction.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00083.html\">dune/functions/gridfunctions/gridviewentityset.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00080.html\">dune/functions/gridfunctions/analyticgridviewfunction.hh</a>></span></div>\n <div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> F></div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01287.html\"> 20</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01287.html\">IsCallable</a>;</div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> </div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"preprocessor\">#ifndef DOXYGEN</span></div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> F></div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01287.html\">IsCallable</a></div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span>{</div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> <span class=\"keyword\">struct </span>yes { std::size_t dummy[2]; };</div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> <span class=\"keyword\">struct </span>no { std::size_t dummy[1]; };</div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> </div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> C></div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> <span class=\"keyword\">static</span> yes test(<span class=\"keyword\">const</span> <span class=\"keyword\">decltype</span>(&C::operator()) *);</div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> C></div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> <span class=\"keyword\">static</span> no test(...);</div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> </div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> <span class=\"keyword\">enum</span> { value = (<span class=\"keyword\">sizeof</span>(test<F>(0)) == <span class=\"keyword\">sizeof</span>(yes)) };</div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span>};</div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> </div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> R, <span class=\"keyword\">typename</span> D></div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span><span class=\"keyword\">struct </span>IsCallable<R(D)></div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span>{</div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> <span class=\"keyword\">enum</span> { value = <span class=\"keyword\">true</span> };</div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span>};</div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> </div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> R, <span class=\"keyword\">typename</span> D></div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span><span class=\"keyword\">struct </span>IsCallable<R(*)(D)></div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span>{</div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> <span class=\"keyword\">enum</span> { value = <span class=\"keyword\">true</span> };</div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span>};</div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span><span class=\"preprocessor\">#endif</span></div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> </div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span>template<class Signature, bool isCallable = IsCallable<Signature>::value ></div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01291.html\"> 56</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01291.html\">SignatureTraits</a> {};</div>\n-<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> </div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span><span class=\"preprocessor\">#ifndef DOXYGEN</span></div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01291.html\">SignatureTraits</a><T, true></div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> : <span class=\"keyword\">public</span> <a class=\"code hl_struct\" href=\"a01291.html\">SignatureTraits</a><decltype(&T::operator()), true></div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span>{};</div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> </div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span><span class=\"keyword\">template</span> <<span class=\"keyword\">typename</span> C, <span class=\"keyword\">typename</span> R, <span class=\"keyword\">typename</span> D></div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span><span class=\"keyword\">struct </span>SignatureTraits<R(C::*)(D) const, true></div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> : <span class=\"keyword\">public</span> SignatureTraits<R(D), true></div>\n-<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span>{};</div>\n-<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> </div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span><span class=\"keyword\">template</span> <<span class=\"keyword\">typename</span> C, <span class=\"keyword\">typename</span> R, <span class=\"keyword\">typename</span> D></div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span><span class=\"keyword\">struct </span>SignatureTraits<R(C::*)(D), true></div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> : <span class=\"keyword\">public</span> SignatureTraits<R(D), true></div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span>{};</div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> </div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span><span class=\"keyword\">template</span> <<span class=\"keyword\">typename</span> R, <span class=\"keyword\">typename</span> D></div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span><span class=\"keyword\">struct </span>SignatureTraits<R(*)(D), <span class=\"keyword\">true</span>></div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> : <span class=\"keyword\">public</span> SignatureTraits<R(D), <span class=\"keyword\">true</span>></div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span>{};</div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> </div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> R, <span class=\"keyword\">class</span> D></div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span><span class=\"keyword\">struct </span>SignatureTraits<R(D), true></div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span>{</div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> <span class=\"keyword\">using </span>Range = R;</div>\n-<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> <span class=\"keyword\">using </span>Domain = D;</div>\n-<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> </div>\n-<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> <span class=\"keyword\">using </span>RawRange = <span class=\"keyword\">typename</span> std::decay<Range>::type;</div>\n-<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> <span class=\"keyword\">using </span>RawDomain = <span class=\"keyword\">typename</span> std::decay<Domain>::type;</div>\n-<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> </div>\n-<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> <span class=\"keyword\">using </span>RawSignature = RawRange(RawDomain);</div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> </div>\n-<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> <span class=\"keyword\">template</span><<span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits=DefaultDerivativeTraits></div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> <span class=\"keyword\">using </span>DerivativeSignature = <span class=\"keyword\">typename</span> DerivativeTraits<RawSignature>::Range(Domain);</div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span>};</div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span><span class=\"preprocessor\">#endif</span></div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> Gr<span class=\"keywordtype\">id</span>View, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits=DefaultDerivativeTraits, <span class=\"keywordtype\">size_t</span> bufferSize=56></div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01923.html\"> 21</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01923.html\">GridViewFunction</a></div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span>{};</div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span> </div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> </div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> </div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">class</span> GV, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits, <span class=\"keywordtype\">size_t</span> bufferSize></div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01927.html\"> 41</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01923.html\">GridViewFunction</a><Range(Domain), GV, DerivativeTraits, bufferSize> :</div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01895.html\">GridFunction</a><Range(Domain), GridViewEntitySet<GV, 0>, DerivativeTraits, bufferSize></div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span>{</div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01895.html\">Base</a> = <a class=\"code hl_class\" href=\"a01895.html\">GridFunction</a><Range(Domain), <a class=\"code hl_class\" href=\"a01919.html\">GridViewEntitySet<GV, 0></a>, DerivativeTraits, bufferSize>;</div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01927.html#a9bd9a49e5cf7ebebfa78433dbe8e7de5\"> 46</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01927.html#a9bd9a49e5cf7ebebfa78433dbe8e7de5\">GridView</a> = GV;</div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> <span class=\"keyword\">using </span>Base::Base;</div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span>};</div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> </div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> </div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> </div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>F, <span class=\"keyword\">class </span>GridView,</div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> <span class=\"keyword\">typename</span> std::enable_if<</div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> models< Imp::HasFreeLocalFunction, F>() , <span class=\"keywordtype\">int</span>>::type = 0></div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span><span class=\"keyword\">typename</span> std::decay<F>::type</div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#ab31121faf1c753f425b7360cedeb9a6a\"> 68</a></span> <a class=\"code hl_function\" href=\"a00219.html#ab31121faf1c753f425b7360cedeb9a6a\">makeGridViewFunction</a>(F&& f, <span class=\"keyword\">const</span> GridView& gridView)</div>\n+<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span>{</div>\n+<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> <span class=\"keywordflow\">return</span> std::forward<F>(f);</div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span>}</div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> </div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> </div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> </div>\n+<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>F, <span class=\"keyword\">class </span>GridView,</div>\n+<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> <span class=\"keyword\">typename</span> std::enable_if<</div>\n+<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> not(models< Imp::HasFreeLocalFunction, F>()) , <span class=\"keywordtype\">int</span>>::type = 0></div>\n+<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a34f2d140a1fed46862286f68d26c9975\"> 93</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00219.html#ab31121faf1c753f425b7360cedeb9a6a\">makeGridViewFunction</a>(F&& f, <span class=\"keyword\">const</span> GridView& gridView)</div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> -> <span class=\"keyword\">decltype</span>(<a class=\"code hl_function\" href=\"a00209.html#gafe8f06fb6d4027bfaf39e0971d8eb3c6\">makeAnalyticGridViewFunction</a>(std::forward<F>(f), gridView))</div>\n+<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span>{</div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00209.html#gafe8f06fb6d4027bfaf39e0971d8eb3c6\">makeAnalyticGridViewFunction</a>(std::forward<F>(f), gridView);</div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span>}</div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> </div>\n <div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> </div>\n <div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> </div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits=DefaultDerivativeTraits></div>\n-<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01295.html\"> 102</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01295.html\">SignatureTag</a>;</div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span>} <span class=\"comment\">// end of namespace Dune::Functions</span></div>\n+<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span>} <span class=\"comment\">// end of namespace Dune</span></div>\n <div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> </div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraitsT></div>\n-<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01299.html\"> 114</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01295.html\">SignatureTag</a><Range(Domain), DerivativeTraitsT></div>\n-<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span>{</div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01299.html#ab8b3a06d19393ab1c7ef395359aaa7ea\"> 116</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01299.html#ab8b3a06d19393ab1c7ef395359aaa7ea\">Signature</a> = Range(Domain);</div>\n-<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> </div>\n-<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n-<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01299.html#a24e64af41789cc4c921669e46676a05d\"> 119</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01299.html#a24e64af41789cc4c921669e46676a05d\">DerivativeTraits</a> = DerivativeTraitsT<T>;</div>\n-<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span>};</div>\n-<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> </div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> </div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> </div>\n-<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits></div>\n-<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00210.html#ga18b2a675f9153814c422d33878daebb2\"> 133</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00210.html#ga18b2a675f9153814c422d33878daebb2\">derivativeSignatureTag</a>(<a class=\"code hl_struct\" href=\"a01295.html\">SignatureTag</a><Range(Domain), DerivativeTraits> tag)</div>\n-<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span>{</div>\n-<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> <span class=\"keyword\">using </span>DerivativeRange = <span class=\"keyword\">typename</span> DerivativeTraits<Range(Domain)>::Range;</div>\n-<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_struct\" href=\"a01295.html\">SignatureTag<DerivativeRange(Domain), DerivativeTraits></a>();</div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span>}</div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> </div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> </div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> </div>\n-<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span><span class=\"keyword\">template</span><std::<span class=\"keywordtype\">size_t</span> maxOrder, <span class=\"keyword\">class</span> Signature, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits></div>\n-<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00210.html#ga95d38d90c6b8ee6d3a2a0202cb80b56d\"> 155</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00210.html#ga95d38d90c6b8ee6d3a2a0202cb80b56d\">derivativeSignatureTags</a>(<a class=\"code hl_struct\" href=\"a01295.html\">Dune::Functions::SignatureTag<Signature, DerivativeTraits></a> tag)</div>\n-<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span>{</div>\n-<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> (maxOrder==0) {</div>\n-<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> <span class=\"comment\">// If maxOrder== 0 we just need the given SignatureTag</span></div>\n-<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> <span class=\"keywordflow\">return</span> std::make_tuple(tag);</div>\n-<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> } <span class=\"keywordflow\">else</span> {</div>\n-<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> <span class=\"comment\">// else we first construct the tail tuple with SignatureTags for derivatives</span></div>\n-<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> <span class=\"comment\">// of order 1 to maxOrder</span></div>\n-<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> <span class=\"keyword\">auto</span> tailTagsTuple = <a class=\"code hl_function\" href=\"a00210.html#ga95d38d90c6b8ee6d3a2a0202cb80b56d\">derivativeSignatureTags</a><std::size_t(maxOrder-1)>(<a class=\"code hl_function\" href=\"a00210.html#ga18b2a675f9153814c422d33878daebb2\">derivativeSignatureTag</a>(tag));</div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> <span class=\"comment\">// and prepend this with the given SignatureTag.</span></div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> <span class=\"comment\">// This is done by unpacking the tail tuple with apply().</span></div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> <span class=\"keywordflow\">return</span> std::apply([&](<span class=\"keyword\">auto</span>&&... tailTags){</div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> <span class=\"keywordflow\">return</span> std::make_tuple(tag, tailTags...);</div>\n-<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> }, tailTagsTuple);</div>\n-<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> }</div>\n-<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span>}</div>\n-<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> </div>\n-<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> </div>\n-<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> </div>\n-<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span>} <span class=\"comment\">// namespace Functions</span></div>\n-<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span>} <span class=\"comment\">// namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> </div>\n-<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_SIGNATURE_HH</span></div>\n-<div class=\"ttc\" id=\"aa00080_html\"><div class=\"ttname\"><a href=\"a00080.html\">defaultderivativetraits.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00210_html_ga18b2a675f9153814c422d33878daebb2\"><div class=\"ttname\"><a href=\"a00210.html#ga18b2a675f9153814c422d33878daebb2\">Dune::Functions::derivativeSignatureTag</a></div><div class=\"ttdeci\">auto derivativeSignatureTag(SignatureTag< Range(Domain), DerivativeTraits > tag)</div><div class=\"ttdoc\">Construct SignatureTag for derivative.</div><div class=\"ttdef\"><b>Definition:</b> signature.hh:133</div></div>\n-<div class=\"ttc\" id=\"aa00210_html_ga95d38d90c6b8ee6d3a2a0202cb80b56d\"><div class=\"ttname\"><a href=\"a00210.html#ga95d38d90c6b8ee6d3a2a0202cb80b56d\">Dune::Functions::derivativeSignatureTags</a></div><div class=\"ttdeci\">auto derivativeSignatureTags(Dune::Functions::SignatureTag< Signature, DerivativeTraits > tag)</div><div class=\"ttdoc\">Construct SignatureTags for derivatives.</div><div class=\"ttdef\"><b>Definition:</b> signature.hh:155</div></div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH</span></div>\n+<div class=\"ttc\" id=\"aa00080_html\"><div class=\"ttname\"><a href=\"a00080.html\">analyticgridviewfunction.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00083_html\"><div class=\"ttname\"><a href=\"a00083.html\">gridviewentityset.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00098_html\"><div class=\"ttname\"><a href=\"a00098.html\">gridfunction.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00209_html_gafe8f06fb6d4027bfaf39e0971d8eb3c6\"><div class=\"ttname\"><a href=\"a00209.html#gafe8f06fb6d4027bfaf39e0971d8eb3c6\">Dune::Functions::makeAnalyticGridViewFunction</a></div><div class=\"ttdeci\">AnalyticGridViewFunction< typename std::invoke_result< F, typename GridView::template Codim< 0 >::Geometry::GlobalCoordinate >::type(typename GridView::template Codim< 0 >::Geometry::GlobalCoordinate), GridView, typename std::decay< F >::type > makeAnalyticGridViewFunction(F &&f, const GridView &gridView)</div><div class=\"ttdoc\">Create an AnalyticGridViewFunction from a function and a grid view.</div><div class=\"ttdef\"><b>Definition:</b> analyticgridviewfunction.hh:230</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa01287_html\"><div class=\"ttname\"><a href=\"a01287.html\">Dune::Functions::IsCallable</a></div><div class=\"ttdoc\">Helper class to check that F is callable.</div><div class=\"ttdef\"><b>Definition:</b> signature.hh:20</div></div>\n-<div class=\"ttc\" id=\"aa01291_html\"><div class=\"ttname\"><a href=\"a01291.html\">Dune::Functions::SignatureTraits</a></div><div class=\"ttdoc\">Helper class to deduce the signature of a callable.</div><div class=\"ttdef\"><b>Definition:</b> signature.hh:56</div></div>\n-<div class=\"ttc\" id=\"aa01295_html\"><div class=\"ttname\"><a href=\"a01295.html\">Dune::Functions::SignatureTag</a></div><div class=\"ttdef\"><b>Definition:</b> signature.hh:102</div></div>\n-<div class=\"ttc\" id=\"aa01299_html_a24e64af41789cc4c921669e46676a05d\"><div class=\"ttname\"><a href=\"a01299.html#a24e64af41789cc4c921669e46676a05d\">Dune::Functions::SignatureTag< Range(Domain), DerivativeTraitsT >::DerivativeTraits</a></div><div class=\"ttdeci\">DerivativeTraitsT< T > DerivativeTraits</div><div class=\"ttdef\"><b>Definition:</b> signature.hh:119</div></div>\n-<div class=\"ttc\" id=\"aa01299_html_ab8b3a06d19393ab1c7ef395359aaa7ea\"><div class=\"ttname\"><a href=\"a01299.html#ab8b3a06d19393ab1c7ef395359aaa7ea\">Dune::Functions::SignatureTag< Range(Domain), DerivativeTraitsT >::Signature</a></div><div class=\"ttdeci\">Range(Domain) Signature</div><div class=\"ttdef\"><b>Definition:</b> signature.hh:116</div></div>\n+<div class=\"ttc\" id=\"aa00219_html_ab31121faf1c753f425b7360cedeb9a6a\"><div class=\"ttname\"><a href=\"a00219.html#ab31121faf1c753f425b7360cedeb9a6a\">Dune::Functions::makeGridViewFunction</a></div><div class=\"ttdeci\">std::decay< F >::type makeGridViewFunction(F &&f, const GridView &gridView)</div><div class=\"ttdoc\">Construct a function modeling GridViewFunction from function and grid view.</div><div class=\"ttdef\"><b>Definition:</b> gridviewfunction.hh:68</div></div>\n+<div class=\"ttc\" id=\"aa01895_html\"><div class=\"ttname\"><a href=\"a01895.html\">Dune::Functions::GridFunction</a></div><div class=\"ttdef\"><b>Definition:</b> gridfunction.hh:32</div></div>\n+<div class=\"ttc\" id=\"aa01919_html\"><div class=\"ttname\"><a href=\"a01919.html\">Dune::Functions::GridViewEntitySet</a></div><div class=\"ttdoc\">An entity set for all entities of given codim in a grid view.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:23</div></div>\n+<div class=\"ttc\" id=\"aa01923_html\"><div class=\"ttname\"><a href=\"a01923.html\">Dune::Functions::GridViewFunction</a></div><div class=\"ttdef\"><b>Definition:</b> gridviewfunction.hh:22</div></div>\n+<div class=\"ttc\" id=\"aa01927_html_a9bd9a49e5cf7ebebfa78433dbe8e7de5\"><div class=\"ttname\"><a href=\"a01927.html#a9bd9a49e5cf7ebebfa78433dbe8e7de5\">Dune::Functions::GridViewFunction< Range(Domain), GV, DerivativeTraits, bufferSize >::GridView</a></div><div class=\"ttdeci\">GV GridView</div><div class=\"ttdef\"><b>Definition:</b> gridviewfunction.hh:46</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,181 +4,109 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * common\n-signature.hh\n+ * gridfunctions\n+gridviewfunction.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_COMMON_SIGNATURE_HH\n- 4#define DUNE_FUNCTIONS_COMMON_SIGNATURE_HH\n+ 3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH\n+ 4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH\n 5\n- 6#include <type_traits>\n- 7#include <tuple>\n- 8\n- 9#include <dune/functions/common/defaultderivativetraits.hh>\n- 10\n- 11namespace Dune {\n- 12namespace Functions {\n+ 6#include <memory>\n+ 7\n+ 8#include <dune/common/concept.hh>\n+ 9\n+ 10#include <dune/functions/gridfunctions/gridfunction.hh>\n+ 11#include <dune/functions/gridfunctions/gridviewentityset.hh>\n+ 12#include <dune/functions/gridfunctions/analyticgridviewfunction.hh>\n 13\n- 19template<typename F>\n-20struct IsCallable;\n- 21\n- 22#ifndef DOXYGEN\n- 23template<typename F>\n- 24struct IsCallable\n- 25{\n- 26 struct yes { std::size_t dummy[2]; };\n- 27 struct no { std::size_t dummy[1]; };\n- 28\n- 29 template<typename C>\n- 30 static yes test(const decltype(&C::operator()) *);\n- 31 template<typename C>\n- 32 static no test(...);\n- 33\n- 34 enum { value = (sizeof(test<F>(0)) == sizeof(yes)) };\n- 35};\n- 36\n- 37template<typename R, typename D>\n- 38struct IsCallable<R(D)>\n- 39{\n- 40 enum { value = true };\n- 41};\n- 42\n- 43template<typename R, typename D>\n- 44struct IsCallable<R(*)(D)>\n- 45{\n- 46 enum { value = true };\n- 47};\n- 48#endif\n- 49\n- 55template<class Signature, bool isCallable = IsCallable<Signature>::value >\n-56struct SignatureTraits {};\n- 57\n- 58#ifndef DOXYGEN\n- 60template<class T>\n- 61struct SignatureTraits<T, true>\n- 62 : public SignatureTraits<decltype(&T::operator()), true>\n- 63{};\n- 64\n- 66template <typename C, typename R, typename D>\n- 67struct SignatureTraits<R(C::*)(D) const, true>\n- 68 : public SignatureTraits<R(D), true>\n- 69{};\n- 70\n- 72template <typename C, typename R, typename D>\n- 73struct SignatureTraits<R(C::*)(D), true>\n- 74 : public SignatureTraits<R(D), true>\n- 75{};\n- 76\n- 78template <typename R, typename D>\n- 79struct SignatureTraits<R(*)(D), true>\n- 80 : public SignatureTraits<R(D), true>\n- 81{};\n- 82\n- 84template<class R, class D>\n- 85struct SignatureTraits<R(D), true>\n- 86{\n- 87 using Range = R;\n- 88 using Domain = D;\n- 89\n- 90 using RawRange = typename std::decay<Range>::type;\n- 91 using RawDomain = typename std::decay<Domain>::type;\n- 92\n- 93 using RawSignature = RawRange(RawDomain);\n- 94\n- 95 template<template<class> class DerivativeTraits=DefaultDerivativeTraits>\n- 96 using DerivativeSignature = typename DerivativeTraits<RawSignature>::Range\n-(Domain);\n- 97};\n- 98#endif\n+ 14\n+ 15namespace Dune {\n+ 16namespace Functions {\n+ 17\n+ 18\n+ 19\n+ 20template<class Signature, class GridView, template<class> class\n+DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>\n+21class GridViewFunction\n+ 22{};\n+ 23\n+ 24\n+ 25\n+ 40template<class Range, class Domain, class GV, template<class> class\n+DerivativeTraits, size_t bufferSize>\n+41class GridViewFunction<Range(Domain), GV, DerivativeTraits, bufferSize> :\n+ 42 public GridFunction<Range(Domain), GridViewEntitySet<GV, 0>,\n+DerivativeTraits, bufferSize>\n+ 43{\n+ 44 using Base = GridFunction<Range(Domain), GridViewEntitySet<GV,_0>,\n+DerivativeTraits, bufferSize>;\n+ 45public:\n+46 using GridView = GV;\n+ 47\n+ 48 using Base::Base;\n+ 49};\n+ 50\n+ 51\n+ 52\n+ 64template<class F, class GridView,\n+ 65 typename std::enable_if<\n+ 66 models< Imp::HasFreeLocalFunction, F>() , int>::type = 0>\n+ 67typename std::decay<F>::type\n+68 makeGridViewFunction(F&& f, const GridView& gridView)\n+ 69{\n+ 70 return std::forward<F>(f);\n+ 71}\n+ 72\n+ 73\n+ 74\n+ 90template<class F, class GridView,\n+ 91 typename std::enable_if<\n+ 92 not(models< Imp::HasFreeLocalFunction, F>()) , int>::type = 0>\n+93auto makeGridViewFunction(F&& f, const GridView& gridView)\n+ 94 -> decltype(makeAnalyticGridViewFunction(std::forward<F>(f), gridView))\n+ 95{\n+ 96 return makeAnalyticGridViewFunction(std::forward<F>(f), gridView);\n+ 97}\n+ 98\n 99\n 100\n- 101template<class Signature, template<class> class\n-DerivativeTraits=DefaultDerivativeTraits>\n-102struct SignatureTag;\n+ 101} // end of namespace Dune::Functions\n+ 102} // end of namespace Dune\n 103\n- 113template<class Range, class Domain, template<class> class\n-DerivativeTraitsT>\n-114struct SignatureTag<Range(Domain), DerivativeTraitsT>\n- 115{\n-116 using Signature = Range(Domain);\n- 117\n- 118 template<class T>\n-119 using DerivativeTraits = DerivativeTraitsT<T>;\n- 120};\n- 121\n- 122\n- 123\n- 132template<class Range, class Domain, template<class> class DerivativeTraits>\n-133auto derivativeSignatureTag(SignatureTag<Range(Domain), DerivativeTraits>\n-tag)\n- 134{\n- 135 using DerivativeRange = typename DerivativeTraits<Range(Domain)>::Range;\n- 136 return SignatureTag<DerivativeRange(Domain),_DerivativeTraits>();\n- 137}\n- 138\n- 139\n- 140\n- 154template<std::size_t maxOrder, class Signature, template<class> class\n-DerivativeTraits>\n-155auto derivativeSignatureTags(Dune::Functions::SignatureTag<Signature,\n-DerivativeTraits> tag)\n- 156{\n- 157 if constexpr (maxOrder==0) {\n- 158 // If maxOrder== 0 we just need the given SignatureTag\n- 159 return std::make_tuple(tag);\n- 160 } else {\n- 161 // else we first construct the tail tuple with SignatureTags for\n-derivatives\n- 162 // of order 1 to maxOrder\n- 163 auto tailTagsTuple = derivativeSignatureTags<std::size_t(maxOrder-1)>\n-(derivativeSignatureTag(tag));\n- 164 // and prepend this with the given SignatureTag.\n- 165 // This is done by unpacking the tail tuple with apply().\n- 166 return std::apply([&](auto&&... tailTags){\n- 167 return std::make_tuple(tag, tailTags...);\n- 168 }, tailTagsTuple);\n- 169 }\n- 170}\n- 171\n- 172\n- 173\n- 174} // namespace Functions\n- 175} // namespace Dune\n- 176\n- 177#endif // DUNE_FUNCTIONS_COMMON_SIGNATURE_HH\n-defaultderivativetraits.hh\n-Dune::Functions::derivativeSignatureTag\n-auto derivativeSignatureTag(SignatureTag< Range(Domain), DerivativeTraits >\n-tag)\n-Construct SignatureTag for derivative.\n-Definition: signature.hh:133\n-Dune::Functions::derivativeSignatureTags\n-auto derivativeSignatureTags(Dune::Functions::SignatureTag< Signature,\n-DerivativeTraits > tag)\n-Construct SignatureTags for derivatives.\n-Definition: signature.hh:155\n+ 104#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRIDVIEWFUNCTION_HH\n+analyticgridviewfunction.hh\n+gridviewentityset.hh\n+gridfunction.hh\n+Dune::Functions::makeAnalyticGridViewFunction\n+AnalyticGridViewFunction< typename std::invoke_result< F, typename GridView::\n+template Codim< 0 >::Geometry::GlobalCoordinate >::type(typename GridView::\n+template Codim< 0 >::Geometry::GlobalCoordinate), GridView, typename std::\n+decay< F >::type > makeAnalyticGridViewFunction(F &&f, const GridView\n+&gridView)\n+Create an AnalyticGridViewFunction from a function and a grid view.\n+Definition: analyticgridviewfunction.hh:230\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::IsCallable\n-Helper class to check that F is callable.\n-Definition: signature.hh:20\n-Dune::Functions::SignatureTraits\n-Helper class to deduce the signature of a callable.\n-Definition: signature.hh:56\n-Dune::Functions::SignatureTag\n-Definition: signature.hh:102\n-Dune::Functions::SignatureTag<_Range(Domain),_DerivativeTraitsT_>::\n-DerivativeTraits\n-DerivativeTraitsT< T > DerivativeTraits\n-Definition: signature.hh:119\n-Dune::Functions::SignatureTag<_Range(Domain),_DerivativeTraitsT_>::Signature\n-Range(Domain) Signature\n-Definition: signature.hh:116\n+Dune::Functions::makeGridViewFunction\n+std::decay< F >::type makeGridViewFunction(F &&f, const GridView &gridView)\n+Construct a function modeling GridViewFunction from function and grid view.\n+Definition: gridviewfunction.hh:68\n+Dune::Functions::GridFunction\n+Definition: gridfunction.hh:32\n+Dune::Functions::GridViewEntitySet\n+An entity set for all entities of given codim in a grid view.\n+Definition: gridviewentityset.hh:23\n+Dune::Functions::GridViewFunction\n+Definition: gridviewfunction.hh:22\n+Dune::Functions::GridViewFunction<_Range(Domain),_GV,_DerivativeTraits,\n+bufferSize_>::GridView\n+GV GridView\n+Definition: gridviewfunction.hh:46\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00089.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00089.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: polymorphicsmallobject.hh File Reference</title>\n+<title>dune-functions: discreteglobalbasisfunction.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,41 +58,73 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n-<a href=\"#namespaces\">Namespaces</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">polymorphicsmallobject.hh File Reference</div></div>\n+<a href=\"#namespaces\">Namespaces</a> |\n+<a href=\"#func-members\">Functions</a> </div>\n+ <div class=\"headertitle\"><div class=\"title\">discreteglobalbasisfunction.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <utility></code><br />\n-<code>#include <type_traits></code><br />\n+<div class=\"textblock\"><code>#include <memory></code><br />\n+<code>#include <optional></code><br />\n+<code>#include <dune/common/typetraits.hh></code><br />\n+<code>#include <dune/typetree/treecontainer.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00170_source.html\">dune/functions/functionspacebases/hierarchicnodetorangemap.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00155_source.html\">dune/functions/functionspacebases/flatvectorview.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00083_source.html\">dune/functions/gridfunctions/gridviewentityset.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00098_source.html\">dune/functions/gridfunctions/gridfunction.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a02873_source.html\">dune/functions/backends/concepts.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00191_source.html\">dune/functions/backends/istlvectorbackend.hh</a>></code><br />\n </div>\n <p><a href=\"a00089_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01279.html\">Dune::Functions::PolymorphicSmallObject< Base, bufferSize ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A wrapper providing small object optimization with polymorphic types. <a href=\"a01279.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01859.html\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase< B, V, NTRE ></a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01863.html\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase< B, V, NTRE >::Data</a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01867.html\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase< B, V, NTRE >::LocalFunctionBase</a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01875.html\">Dune::Functions::DiscreteGlobalBasisFunction< B, V, NTRE, R ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A grid function induced by a global basis and a coefficient vector. <a href=\"a01875.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01879.html\">Dune::Functions::DiscreteGlobalBasisFunction< B, V, NTRE, R >::LocalFunction</a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01871.html\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative< DGBF ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Derivative of a <code><a class=\"el\" href=\"a01875.html\" title=\"A grid function induced by a global basis and a coefficient vector.\">DiscreteGlobalBasisFunction</a></code> <a href=\"a01871.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01883.html\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative< DGBF >::LocalFunction</a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">local function evaluating the derivative in reference coordinates <a href=\"a01883.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a00230\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00230.html\">Dune::Functions::ImplDoc</a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+</table><table class=\"memberdecls\">\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n+Functions</h2></td></tr>\n+<tr class=\"memitem:ga9f1a8d6ac1558adad6150feb9b4e3168\"><td class=\"memTemplParams\" colspan=\"2\">template<typename R , typename B , typename V > </td></tr>\n+<tr class=\"memitem:ga9f1a8d6ac1558adad6150feb9b4e3168\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00209.html#ga9f1a8d6ac1558adad6150feb9b4e3168\">Dune::Functions::makeDiscreteGlobalBasisFunction</a> (B &&basis, V &&vector)</td></tr>\n+<tr class=\"memdesc:ga9f1a8d6ac1558adad6150feb9b4e3168\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Generate a <a class=\"el\" href=\"a01875.html\" title=\"A grid function induced by a global basis and a coefficient vector.\">DiscreteGlobalBasisFunction</a>. <a href=\"a00209.html#ga9f1a8d6ac1558adad6150feb9b4e3168\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga9f1a8d6ac1558adad6150feb9b4e3168\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,26 +4,61 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * common\n-Classes | Namespaces\n-polymorphicsmallobject.hh File Reference\n-#include <utility>\n-#include <type_traits>\n+ * gridfunctions\n+Classes | Namespaces | Functions\n+discreteglobalbasisfunction.hh File Reference\n+#include <memory>\n+#include <optional>\n+#include <dune/common/typetraits.hh>\n+#include <dune/typetree/treecontainer.hh>\n+#include <dune/functions/functionspacebases/hierarchicnodetorangemap.hh>\n+#include <dune/functions/functionspacebases/flatvectorview.hh>\n+#include <dune/functions/gridfunctions/gridviewentityset.hh>\n+#include <dune/functions/gridfunctions/gridfunction.hh>\n+#include <dune/functions/backends/concepts.hh>\n+#include <dune/functions/backends/istlvectorbackend.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-class \u00a0Dune::Functions::PolymorphicSmallObject<_Base,_bufferSize_>\n-\u00a0 A wrapper providing small object optimization with polymorphic types.\n- More...\n+ class \u00a0Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase<_B,_V,_NTRE\n+ >\n+\u00a0\n+struct \u00a0Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase<_B,_V,_NTRE\n+ >::Data\n+\u00a0\n+ class \u00a0Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase<_B,_V,_NTRE\n+ >::LocalFunctionBase\n+\u00a0\n+ class \u00a0Dune::Functions::DiscreteGlobalBasisFunction<_B,_V,_NTRE,_R_>\n+\u00a0 A grid function induced by a global basis and a coefficient vector.\n+ More...\n+\u00a0\n+ class \u00a0Dune::Functions::DiscreteGlobalBasisFunction<_B,_V,_NTRE,_R_>::\n+ LocalFunction\n+\u00a0\n+ class \u00a0Dune::Functions::DiscreteGlobalBasisFunctionDerivative<_DGBF_>\n+\u00a0 Derivative of a DiscreteGlobalBasisFunction More...\n+\u00a0\n+ class \u00a0Dune::Functions::DiscreteGlobalBasisFunctionDerivative<_DGBF_>::\n+ LocalFunction\n+\u00a0 local function evaluating the derivative in reference coordinates\n+ More...\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n+namespace \u00a0Dune::Functions::ImplDoc\n+\u00a0\n+ Functions\n+template<typename R , typename B , typename V >\n+auto\u00a0Dune::Functions::makeDiscreteGlobalBasisFunction (B &&basis, V &&vector)\n+\u00a0 Generate a DiscreteGlobalBasisFunction. More...\n+\u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00089_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00089_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: polymorphicsmallobject.hh Source File</title>\n+<title>dune-functions: discreteglobalbasisfunction.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,168 +58,597 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">polymorphicsmallobject.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">discreteglobalbasisfunction.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00089.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_DISCRETEGLOBALBASISFUNCTIONS_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_GRIDFUNCTIONS_DISCRETEGLOBALBASISFUNCTIONS_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <utility></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <type_traits></span></div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <memory></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <optional></span></div>\n <div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/common/typetraits.hh></span></div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span> </div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/typetree/treecontainer.hh></span></div>\n <div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Base, <span class=\"keywordtype\">size_t</span> bufferSize></div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01279.html\"> 44</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01279.html\">PolymorphicSmallObject</a></div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span>{</div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01279.html#ab91da8192c7c5d7a796d79145ce97c84\"> 49</a></span> <a class=\"code hl_function\" href=\"a01279.html#ab91da8192c7c5d7a796d79145ce97c84\">PolymorphicSmallObject</a>() :</div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> p_(nullptr)</div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> {}</div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> </div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>Derived,</div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> <span class=\"keyword\">typename</span> std::enable_if<std::is_base_of<Base, std::remove_cv_t<</div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> std::remove_reference_t<Derived>>>::value, <span class=\"keywordtype\">int</span>>::type = 0></div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01279.html#a480e7b17ee91d54d4cf4c7d33bfd67d9\"> 62</a></span> <a class=\"code hl_function\" href=\"a01279.html#a480e7b17ee91d54d4cf4c7d33bfd67d9\">PolymorphicSmallObject</a>(Derived&& derived)</div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> {</div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> <span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span> useBuffer = <span class=\"keyword\">sizeof</span>(Derived) <= bufferSize;</div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> (useBuffer) {</div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> p_ = <span class=\"keyword\">new</span> (&buffer_) Derived(std::forward<Derived>(derived));</div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> } <span class=\"keywordflow\">else</span> {</div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> p_ = <span class=\"keyword\">new</span> Derived(std::forward<Derived>(derived));</div>\n-<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> }</div>\n-<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> }</div>\n-<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> </div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01279.html#a4b1d4df1c0a49f22c3da8beff0412560\"> 73</a></span> <a class=\"code hl_function\" href=\"a01279.html#a4b1d4df1c0a49f22c3da8beff0412560\">PolymorphicSmallObject</a>(<a class=\"code hl_class\" href=\"a01279.html\">PolymorphicSmallObject</a>&& other) <span class=\"keyword\">noexcept</span></div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> {</div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> moveToWrappedObject(std::move(other));</div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> }</div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00170.html\">dune/functions/functionspacebases/hierarchicnodetorangemap.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00155.html\">dune/functions/functionspacebases/flatvectorview.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00083.html\">dune/functions/gridfunctions/gridviewentityset.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00098.html\">dune/functions/gridfunctions/gridfunction.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a02873.html\">dune/functions/backends/concepts.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00191.html\">dune/functions/backends/istlvectorbackend.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> </div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span> </div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00230.html\"> 24</a></span><span class=\"keyword\">namespace </span>ImplDoc {</div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> </div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> B, <span class=\"keyword\">typename</span> V, <span class=\"keyword\">typename</span> NTRE></div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html\"> 27</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01859.html\">DiscreteGlobalBasisFunctionBase</a></div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span>{</div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html#a3692f2d61e9901fcc190337eb0c8d2c3\"> 30</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01859.html#a3692f2d61e9901fcc190337eb0c8d2c3\">Basis</a> = B;</div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html#a4f1c5b75cd112f7524b65de9e68c6f4c\"> 31</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01859.html#a4f1c5b75cd112f7524b65de9e68c6f4c\">Vector</a> = V;</div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> </div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> <span class=\"comment\">// In order to make the cache work for proxy-references</span></div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> <span class=\"comment\">// we have to use AutonomousValue<T> instead of std::decay_t<T></span></div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html#ad8324d107176745d5db37c17e160fb51\"> 35</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01859.html#ad8324d107176745d5db37c17e160fb51\">Coefficient</a> = Dune::AutonomousValue<decltype(std::declval<Vector>()[std::declval<typename Basis::MultiIndex>()])>;</div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> </div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html#a94980a3da72955394fdf377b328aa6cd\"> 37</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01859.html#a94980a3da72955394fdf377b328aa6cd\">GridView</a> = <span class=\"keyword\">typename</span> Basis::GridView;</div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html#aa0f3fc49504b54be8b78cb443b447747\"> 38</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01919.html\">EntitySet</a> = <a class=\"code hl_class\" href=\"a01919.html\">GridViewEntitySet<GridView, 0></a>;</div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html#a3a7684473e5977409b31ad9954d60b17\"> 39</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01859.html#a3a7684473e5977409b31ad9954d60b17\">Tree</a> = <span class=\"keyword\">typename</span> Basis::LocalView::Tree;</div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html#a919c73d3602d7770ab2aa6ec9beaa2df\"> 40</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01859.html#a919c73d3602d7770ab2aa6ec9beaa2df\">NodeToRangeEntry</a> = NTRE;</div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> </div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html#ac531ebbef4d77df5dd685f2f26024f95\"> 42</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01859.html#ac531ebbef4d77df5dd685f2f26024f95\">Domain</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01919.html#ac4e3d0188467b4be3d195c9f5729e629\">EntitySet::GlobalCoordinate</a>;</div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> </div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html#a778a8d51295ab8988578c8ec5c80f15a\"> 44</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01859.html#a778a8d51295ab8988578c8ec5c80f15a\">LocalDomain</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01919.html#aa4368ad66f18ba8279f20ab7a794069d\">EntitySet::LocalCoordinate</a>;</div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html#a7669d95a17a5a94621074923290978b7\"> 45</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01859.html#a7669d95a17a5a94621074923290978b7\">Element</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01919.html#a1d5eaf3facd0219b2e150d964a664752\">EntitySet::Element</a>;</div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> </div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span><span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> </div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> <span class=\"comment\">// This collects all data that is shared by all related</span></div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> <span class=\"comment\">// global and local functions. This way we don't need to</span></div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> <span class=\"comment\">// keep track of it individually.</span></div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01863.html\"> 52</a></span> <span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01863.html\">Data</a></div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> {</div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01863.html#a869d1890dea002afea9673d30bf7a6f9\"> 54</a></span> <a class=\"code hl_class\" href=\"a01919.html\">EntitySet</a> <a class=\"code hl_variable\" href=\"a01863.html#a869d1890dea002afea9673d30bf7a6f9\">entitySet</a>;</div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01863.html#aa8af2b92d6781bed52269bfaf15a03d7\"> 55</a></span> std::shared_ptr<const Basis> <a class=\"code hl_variable\" href=\"a01863.html#aa8af2b92d6781bed52269bfaf15a03d7\">basis</a>;</div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01863.html#ab0ba9b881560f475ebfbc8245e898f06\"> 56</a></span> std::shared_ptr<const Vector> <a class=\"code hl_variable\" href=\"a01863.html#ab0ba9b881560f475ebfbc8245e898f06\">coefficients</a>;</div>\n+<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01863.html#a8806af774b27a785e8a4eb0d58df560c\"> 57</a></span> std::shared_ptr<const NodeToRangeEntry> <a class=\"code hl_variable\" href=\"a01863.html#a8806af774b27a785e8a4eb0d58df560c\">nodeToRangeEntry</a>;</div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> };</div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> </div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01867.html\"> 61</a></span> <span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01867.html\">LocalFunctionBase</a></div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> {</div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> <span class=\"keyword\">using </span>LocalView = <span class=\"keyword\">typename</span> Basis::LocalView;</div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> <span class=\"keyword\">using </span>size_type = <span class=\"keyword\">typename</span> Tree::size_type;</div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> </div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> <span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01867.html#aed06cdee2f1095692d99f2b70b9e08cf\"> 67</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01867.html#aed06cdee2f1095692d99f2b70b9e08cf\">Domain</a> = <a class=\"code hl_typedef\" href=\"a01859.html#a778a8d51295ab8988578c8ec5c80f15a\">LocalDomain</a>;</div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01867.html#a8d6caba81e31526ba3a7d66b1ab299a3\"> 68</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01867.html#a8d6caba81e31526ba3a7d66b1ab299a3\">Element</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01919.html#a1d5eaf3facd0219b2e150d964a664752\">EntitySet::Element</a>;</div>\n+<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> </div>\n+<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> <span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01867.html#afabe7cb22621b6a62e3b2f58b2ce9a96\"> 71</a></span> <a class=\"code hl_function\" href=\"a01867.html#afabe7cb22621b6a62e3b2f58b2ce9a96\">LocalFunctionBase</a>(<span class=\"keyword\">const</span> std::shared_ptr<const Data>& data)</div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> : <a class=\"code hl_variable\" href=\"a01867.html#ac19ebafe7e6f57872bf25b9c91718487\">data_</a>(data)</div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> , <a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>(<a class=\"code hl_variable\" href=\"a01867.html#ac19ebafe7e6f57872bf25b9c91718487\">data_</a>-><a class=\"code hl_function\" href=\"a01859.html#a99bd572882384ae95a30297f0797d769\">basis</a>->localView())</div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> {</div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> <a class=\"code hl_variable\" href=\"a01867.html#aa62fc9b9cfde610dea2e5fedfc5c6f83\">localDoFs_</a>.reserve(<a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>.maxSize());</div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> }</div>\n <div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> </div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01279.html#a9d9b0d1436228de2c11df7acacad66ae\"> 79</a></span> <a class=\"code hl_function\" href=\"a01279.html#a9d9b0d1436228de2c11df7acacad66ae\">PolymorphicSmallObject</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01279.html\">PolymorphicSmallObject</a>& other)</div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> {</div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> copyToWrappedObject(other);</div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> }</div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> </div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01279.html#aa0714dd1c60221fbbd867f9796ccf722\"> 85</a></span> <a class=\"code hl_function\" href=\"a01279.html#aa0714dd1c60221fbbd867f9796ccf722\">~PolymorphicSmallObject</a>()</div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> {</div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> destroyWrappedObject();</div>\n-<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> }</div>\n-<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> </div>\n-<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01279.html#a540e643bdb360a590d5571d82509e119\"> 91</a></span> <a class=\"code hl_class\" href=\"a01279.html\">PolymorphicSmallObject</a>& <a class=\"code hl_function\" href=\"a01279.html#a540e643bdb360a590d5571d82509e119\">operator=</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01279.html\">PolymorphicSmallObject</a>& other)</div>\n-<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> {</div>\n-<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> <span class=\"keywordflow\">if</span> (&other!=<span class=\"keyword\">this</span>)</div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> {</div>\n-<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> destroyWrappedObject();</div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> copyToWrappedObject(other);</div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> }</div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>;</div>\n-<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> }</div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> </div>\n-<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01279.html#a88a795d1d9914c3ac19aa2b72ae16e81\"> 102</a></span> <a class=\"code hl_class\" href=\"a01279.html\">PolymorphicSmallObject</a>& <a class=\"code hl_function\" href=\"a01279.html#a88a795d1d9914c3ac19aa2b72ae16e81\">operator=</a>(<a class=\"code hl_class\" href=\"a01279.html\">PolymorphicSmallObject</a>&& other) <span class=\"keyword\">noexcept</span></div>\n-<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> {</div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> destroyWrappedObject();</div>\n-<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> moveToWrappedObject(std::move(other));</div>\n-<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>;</div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> }</div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01867.html#aa33d4463ef895fc15aba8b8eaedf3506\"> 84</a></span> <a class=\"code hl_function\" href=\"a01867.html#aa33d4463ef895fc15aba8b8eaedf3506\">LocalFunctionBase</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01867.html\">LocalFunctionBase</a>& other)</div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> : <a class=\"code hl_variable\" href=\"a01867.html#ac19ebafe7e6f57872bf25b9c91718487\">data_</a>(other.<a class=\"code hl_variable\" href=\"a01867.html#ac19ebafe7e6f57872bf25b9c91718487\">data_</a>)</div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> , <a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>(other.<a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>)</div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> {</div>\n+<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> <a class=\"code hl_variable\" href=\"a01867.html#aa62fc9b9cfde610dea2e5fedfc5c6f83\">localDoFs_</a>.reserve(<a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>.maxSize());</div>\n+<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> <span class=\"keywordflow\">if</span> (<a class=\"code hl_function\" href=\"a01867.html#a28431fd8e25a148fc8c203a0b8394ac5\">bound</a>())</div>\n+<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> <a class=\"code hl_variable\" href=\"a01867.html#aa62fc9b9cfde610dea2e5fedfc5c6f83\">localDoFs_</a> = other.<a class=\"code hl_variable\" href=\"a01867.html#aa62fc9b9cfde610dea2e5fedfc5c6f83\">localDoFs_</a>;</div>\n+<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> }</div>\n+<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> </div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01867.html#a253e2dcc1809bca0e981c132e6d4770c\"> 100</a></span> <a class=\"code hl_class\" href=\"a01867.html\">LocalFunctionBase</a>& <a class=\"code hl_function\" href=\"a01867.html#a253e2dcc1809bca0e981c132e6d4770c\">operator=</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01867.html\">LocalFunctionBase</a>& other)</div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> {</div>\n+<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> <a class=\"code hl_variable\" href=\"a01867.html#ac19ebafe7e6f57872bf25b9c91718487\">data_</a> = other.<a class=\"code hl_variable\" href=\"a01867.html#ac19ebafe7e6f57872bf25b9c91718487\">data_</a>;</div>\n+<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> <a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a> = other.<a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>;</div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> <span class=\"keywordflow\">if</span> (<a class=\"code hl_function\" href=\"a01867.html#a28431fd8e25a148fc8c203a0b8394ac5\">bound</a>())</div>\n+<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> <a class=\"code hl_variable\" href=\"a01867.html#aa62fc9b9cfde610dea2e5fedfc5c6f83\">localDoFs_</a> = other.<a class=\"code hl_variable\" href=\"a01867.html#aa62fc9b9cfde610dea2e5fedfc5c6f83\">localDoFs_</a>;</div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>;</div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> }</div>\n <div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> </div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01279.html#a0cb41b8c9849201989384100e3d7409c\"> 110</a></span> <span class=\"keyword\">explicit</span> <span class=\"keyword\">operator</span> bool()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> <span class=\"keywordflow\">return</span> p_;</div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> }</div>\n-<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> </div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01279.html#a40b4620d6b4cdf63072914d621059db0\"> 116</a></span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a01279.html#a40b4620d6b4cdf63072914d621059db0\">bufferUsed</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> <span class=\"keywordflow\">return</span> ((<span class=\"keywordtype\">void</span>*) (p_) == (<span class=\"keywordtype\">void</span>*)(&buffer_));</div>\n-<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> }</div>\n-<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> </div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01279.html#a194b49151e7264d77ca70777bf1c3d48\"> 122</a></span> <span class=\"keyword\">const</span> Base& <a class=\"code hl_function\" href=\"a01279.html#a194b49151e7264d77ca70777bf1c3d48\">get</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> <span class=\"keywordflow\">return</span> *p_;</div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> }</div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> </div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01279.html#aead63ee7264c3395258988ac2b319983\"> 128</a></span> Base& <a class=\"code hl_function\" href=\"a01279.html#aead63ee7264c3395258988ac2b319983\">get</a>()</div>\n-<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> {</div>\n-<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> <span class=\"keywordflow\">return</span> *p_;</div>\n-<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> }</div>\n-<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> </div>\n-<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span><span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> </div>\n-<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> <span class=\"keywordtype\">void</span> destroyWrappedObject() noexcept</div>\n-<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> {</div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> <span class=\"keywordflow\">if</span> (<span class=\"keyword\">operator</span> <span class=\"keywordtype\">bool</span>())</div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> {</div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> <span class=\"keywordflow\">if</span> (<a class=\"code hl_function\" href=\"a01279.html#a40b4620d6b4cdf63072914d621059db0\">bufferUsed</a>())</div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> p_->~Base();</div>\n-<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> <span class=\"keywordflow\">else</span></div>\n-<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> <span class=\"keyword\">delete</span> p_;</div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> }</div>\n-<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> }</div>\n-<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> </div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> <span class=\"keywordtype\">void</span> moveToWrappedObject(<a class=\"code hl_function\" href=\"a01279.html#ab91da8192c7c5d7a796d79145ce97c84\">PolymorphicSmallObject</a>&& other) <span class=\"keyword\">noexcept</span></div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> {</div>\n-<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> <span class=\"keywordflow\">if</span> (other.bufferUsed())</div>\n-<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> p_ = other.p_->move(&buffer_);</div>\n-<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> <span class=\"keywordflow\">else</span></div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> {</div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> <span class=\"comment\">// We don't need to check for &other_!=this, because you can't</span></div>\n-<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> <span class=\"comment\">// have an rvalue to *this and call it's assignment/constructor</span></div>\n-<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> <span class=\"comment\">// at the same time. (Despite trying to shoot yourself in the foot</span></div>\n-<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> <span class=\"comment\">// with std::move explicitly.)</span></div>\n-<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> </div>\n-<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> <span class=\"comment\">// Take ownership of allocated object</span></div>\n-<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> p_ = other.p_;</div>\n+<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> <span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01867.html#a67e646a96343c7f80528fe2f82a7ee54\"> 116</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01867.html#a67e646a96343c7f80528fe2f82a7ee54\">bind</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01867.html#a8d6caba81e31526ba3a7d66b1ab299a3\">Element</a>& element)</div>\n+<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> {</div>\n+<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> <a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>.bind(element);</div>\n+<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> <span class=\"comment\">// Use cache of full local view size. For a subspace basis,</span></div>\n+<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> <span class=\"comment\">// this may be larger than the number of local DOFs in the</span></div>\n+<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> <span class=\"comment\">// tree. In this case only cache entries associated to local</span></div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> <span class=\"comment\">// DOFs in the subspace are filled. Cache entries associated</span></div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> <span class=\"comment\">// to local DOFs which are not contained in the subspace will</span></div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> <span class=\"comment\">// not be touched.</span></div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> <span class=\"comment\">//</span></div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> <span class=\"comment\">// Alternatively one could use a cache that exactly fits</span></div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> <span class=\"comment\">// the size of the tree. However, this would require to</span></div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> <span class=\"comment\">// subtract an offset from localIndex(i) on each cache</span></div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> <span class=\"comment\">// access in operator().</span></div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> <a class=\"code hl_variable\" href=\"a01867.html#aa62fc9b9cfde610dea2e5fedfc5c6f83\">localDoFs_</a>.resize(<a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>.size());</div>\n+<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& <a class=\"code hl_function\" href=\"a01859.html#a185c69d8397b09a1b74eb56cf62f40c6\">dofs</a> = *<a class=\"code hl_variable\" href=\"a01867.html#ac19ebafe7e6f57872bf25b9c91718487\">data_</a>->coefficients;</div>\n+<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> <span class=\"keywordflow\">for</span> (size_type i = 0; i < <a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>.tree().size(); ++i)</div>\n+<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> {</div>\n+<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> <span class=\"comment\">// For a subspace basis the index-within-tree i</span></div>\n+<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> <span class=\"comment\">// is not the same as the localIndex within the</span></div>\n+<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> <span class=\"comment\">// full local view.</span></div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> <span class=\"keywordtype\">size_t</span> localIndex = <a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>.tree().localIndex(i);</div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> <a class=\"code hl_variable\" href=\"a01867.html#aa62fc9b9cfde610dea2e5fedfc5c6f83\">localDoFs_</a>[localIndex] = <a class=\"code hl_function\" href=\"a01859.html#a185c69d8397b09a1b74eb56cf62f40c6\">dofs</a>[<a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>.index(localIndex)];</div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> }</div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> }</div>\n+<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> </div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01867.html#ae5b6f77f23f1f5f28db616390dfa5d95\"> 143</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01867.html#ae5b6f77f23f1f5f28db616390dfa5d95\">unbind</a>()</div>\n+<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> {</div>\n+<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> <a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>.unbind();</div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> }</div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> </div>\n+<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01867.html#a28431fd8e25a148fc8c203a0b8394ac5\"> 149</a></span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a01867.html#a28431fd8e25a148fc8c203a0b8394ac5\">bound</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>.bound();</div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> }</div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> </div>\n+<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01867.html#a8daa49aa0c6c0d333460ebe354c3988b\"> 155</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01867.html#a8d6caba81e31526ba3a7d66b1ab299a3\">Element</a>& <a class=\"code hl_function\" href=\"a01867.html#a8daa49aa0c6c0d333460ebe354c3988b\">localContext</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>.element();</div>\n+<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> }</div>\n <div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> </div>\n-<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> <span class=\"comment\">// Leave pointer in a clean state to avoid double freeing it.</span></div>\n-<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> other.p_ = 0;</div>\n-<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> }</div>\n-<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> }</div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> </div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> <span class=\"keywordtype\">void</span> copyToWrappedObject(<span class=\"keyword\">const</span> <a class=\"code hl_function\" href=\"a01279.html#ab91da8192c7c5d7a796d79145ce97c84\">PolymorphicSmallObject</a>& other)</div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> {</div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> <span class=\"keywordflow\">if</span> (other.bufferUsed())</div>\n-<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> p_ = other.p_->clone(&buffer_);</div>\n-<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> <span class=\"keywordflow\">else</span></div>\n-<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> p_ = other.p_->clone();</div>\n-<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> }</div>\n-<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> </div>\n-<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> std::aligned_storage_t<bufferSize> buffer_;</div>\n-<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> Base* p_;</div>\n-<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span>};</div>\n-<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> </div>\n+<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> <span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> </div>\n+<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> To, <span class=\"keyword\">class</span> From></div>\n+<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01867.html#abf8dc20ea65b2fd88df03377f9a703dc\"> 163</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01867.html#abf8dc20ea65b2fd88df03377f9a703dc\">assignWith</a>(To& to, <span class=\"keyword\">const</span> From& from)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> <span class=\"keyword\">auto</span> from_flat = <a class=\"code hl_function\" href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\">flatVectorView</a>(from);</div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> <span class=\"keyword\">auto</span> to_flat = <a class=\"code hl_function\" href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\">flatVectorView</a>(to);</div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> assert(from_flat.size() == to_flat.size());</div>\n+<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> <span class=\"keywordflow\">for</span> (size_type i = 0; i < to_flat.size(); ++i)</div>\n+<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> to_flat[i] = from_flat[i];</div>\n+<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> }</div>\n+<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> </div>\n+<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Node, <span class=\"keyword\">class</span> TreePath, <span class=\"keyword\">class</span> Range></div>\n+<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01867.html#ac929b2a99a94dc5e5c5f4bd1404716c5\"> 173</a></span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <a class=\"code hl_function\" href=\"a01867.html#ac929b2a99a94dc5e5c5f4bd1404716c5\">nodeToRangeEntry</a>(<span class=\"keyword\">const</span> Node& node, <span class=\"keyword\">const</span> TreePath& treePath, Range& y) <span class=\"keyword\">const</span></div>\n+<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> {</div>\n+<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> <span class=\"keywordflow\">return</span> (*<a class=\"code hl_variable\" href=\"a01867.html#ac19ebafe7e6f57872bf25b9c91718487\">data_</a>->nodeToRangeEntry)(node, treePath, y);</div>\n+<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> }</div>\n <div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> </div>\n-<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span>} <span class=\"comment\">// namespace Functions</span></div>\n-<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span>} <span class=\"comment\">// namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> </div>\n-<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH</span></div>\n+<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01867.html#ac19ebafe7e6f57872bf25b9c91718487\"> 178</a></span> std::shared_ptr<const Data> <a class=\"code hl_variable\" href=\"a01867.html#ac19ebafe7e6f57872bf25b9c91718487\">data_</a>;</div>\n+<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\"> 179</a></span> LocalView <a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>;</div>\n+<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01867.html#aa62fc9b9cfde610dea2e5fedfc5c6f83\"> 180</a></span> std::vector<Coefficient> <a class=\"code hl_variable\" href=\"a01867.html#aa62fc9b9cfde610dea2e5fedfc5c6f83\">localDoFs_</a>;</div>\n+<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> };</div>\n+<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> </div>\n+<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span><span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html#a91a8cf0d245095a4c91615f42ffb4f4c\"> 184</a></span> <a class=\"code hl_function\" href=\"a01859.html#a91a8cf0d245095a4c91615f42ffb4f4c\">DiscreteGlobalBasisFunctionBase</a>(<span class=\"keyword\">const</span> std::shared_ptr<const Data>& data)</div>\n+<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> : <a class=\"code hl_variable\" href=\"a01859.html#a0251d9a5ba7ae012993ed75089870604\">data_</a>(data)</div>\n+<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> {</div>\n+<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> <span class=\"comment\">/* Nothing. */</span></div>\n+<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> }</div>\n+<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> </div>\n+<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> </div>\n+<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html#a99bd572882384ae95a30297f0797d769\"> 193</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01859.html#a3692f2d61e9901fcc190337eb0c8d2c3\">Basis</a>& <a class=\"code hl_function\" href=\"a01859.html#a99bd572882384ae95a30297f0797d769\">basis</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> <span class=\"keywordflow\">return</span> *<a class=\"code hl_variable\" href=\"a01859.html#a0251d9a5ba7ae012993ed75089870604\">data_</a>->basis;</div>\n+<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> }</div>\n+<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> </div>\n+<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html#a185c69d8397b09a1b74eb56cf62f40c6\"> 199</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01859.html#a4f1c5b75cd112f7524b65de9e68c6f4c\">Vector</a>& <a class=\"code hl_function\" href=\"a01859.html#a185c69d8397b09a1b74eb56cf62f40c6\">dofs</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> <span class=\"keywordflow\">return</span> *<a class=\"code hl_variable\" href=\"a01859.html#a0251d9a5ba7ae012993ed75089870604\">data_</a>->coefficients;</div>\n+<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> }</div>\n+<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> </div>\n+<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html#a8b079bb398dc95ba48399e66e05aa0fa\"> 205</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01859.html#a919c73d3602d7770ab2aa6ec9beaa2df\">NodeToRangeEntry</a>& <a class=\"code hl_function\" href=\"a01859.html#a8b079bb398dc95ba48399e66e05aa0fa\">nodeToRangeEntry</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> <span class=\"keywordflow\">return</span> *<a class=\"code hl_variable\" href=\"a01859.html#a0251d9a5ba7ae012993ed75089870604\">data_</a>->nodeToRangeEntry;</div>\n+<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span> }</div>\n+<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> </div>\n+<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html#ab0e59b1504a825f12634528b132a1448\"> 211</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01919.html\">EntitySet</a>& <a class=\"code hl_function\" href=\"a01859.html#ab0e59b1504a825f12634528b132a1448\">entitySet</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"> 212</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01859.html#a0251d9a5ba7ae012993ed75089870604\">data_</a>->entitySet;</div>\n+<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> }</div>\n+<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> </div>\n+<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span><span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01859.html#a0251d9a5ba7ae012993ed75089870604\"> 217</a></span> std::shared_ptr<const Data> <a class=\"code hl_variable\" href=\"a01859.html#a0251d9a5ba7ae012993ed75089870604\">data_</a>;</div>\n+<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span>};</div>\n+<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> </div>\n+<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span>} <span class=\"comment\">// namespace ImplDoc</span></div>\n+<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> </div>\n+<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span> </div>\n+<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> </div>\n+<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> DGBF></div>\n+<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01871.html\">DiscreteGlobalBasisFunctionDerivative</a>;</div>\n+<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> </div>\n+<div class=\"line\"><a id=\"l00264\" name=\"l00264\"></a><span class=\"lineno\"> 264</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> B, <span class=\"keyword\">typename</span> V,</div>\n+<div class=\"line\"><a id=\"l00265\" name=\"l00265\"></a><span class=\"lineno\"> 265</span> <span class=\"keyword\">typename</span> NTRE = <a class=\"code hl_struct\" href=\"a01627.html\">HierarchicNodeToRangeMap</a>,</div>\n+<div class=\"line\"><a id=\"l00266\" name=\"l00266\"></a><span class=\"lineno\"> 266</span> <span class=\"keyword\">typename</span> R = <span class=\"keyword\">typename</span> V::value_type></div>\n+<div class=\"line\"><a id=\"l00267\" name=\"l00267\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01875.html\"> 267</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01875.html\">DiscreteGlobalBasisFunction</a></div>\n+<div class=\"line\"><a id=\"l00268\" name=\"l00268\"></a><span class=\"lineno\"> 268</span> : <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01859.html\">ImplDoc::DiscreteGlobalBasisFunctionBase</a><B, V, NTRE></div>\n+<div class=\"line\"><a id=\"l00269\" name=\"l00269\"></a><span class=\"lineno\"> 269</span>{</div>\n+<div class=\"line\"><a id=\"l00270\" name=\"l00270\"></a><span class=\"lineno\"> 270</span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01859.html\">Base</a> = <a class=\"code hl_class\" href=\"a01859.html\">ImplDoc::DiscreteGlobalBasisFunctionBase<B, V, NTRE></a>;</div>\n+<div class=\"line\"><a id=\"l00271\" name=\"l00271\"></a><span class=\"lineno\"> 271</span> <span class=\"keyword\">using </span>Data = <span class=\"keyword\">typename</span> <a class=\"code hl_struct\" href=\"a01863.html\">Base::Data</a>;</div>\n+<div class=\"line\"><a id=\"l00272\" name=\"l00272\"></a><span class=\"lineno\"> 272</span> </div>\n+<div class=\"line\"><a id=\"l00273\" name=\"l00273\"></a><span class=\"lineno\"> 273</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00274\" name=\"l00274\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01875.html#a762b42975185ccea60c8197341862cca\"> 274</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01875.html#a762b42975185ccea60c8197341862cca\">Basis</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01859.html#a3692f2d61e9901fcc190337eb0c8d2c3\">Base::Basis</a>;</div>\n+<div class=\"line\"><a id=\"l00275\" name=\"l00275\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01875.html#ace9d1aac90e09365577516e06fb148a4\"> 275</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01875.html#ace9d1aac90e09365577516e06fb148a4\">Vector</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01859.html#a4f1c5b75cd112f7524b65de9e68c6f4c\">Base::Vector</a>;</div>\n+<div class=\"line\"><a id=\"l00276\" name=\"l00276\"></a><span class=\"lineno\"> 276</span> </div>\n+<div class=\"line\"><a id=\"l00277\" name=\"l00277\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01875.html#aeb0a34de4cd353524e324cc57591a432\"> 277</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01875.html#aeb0a34de4cd353524e324cc57591a432\">Domain</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01859.html#ac531ebbef4d77df5dd685f2f26024f95\">Base::Domain</a>;</div>\n+<div class=\"line\"><a id=\"l00278\" name=\"l00278\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01875.html#aca6beda0ac337eb862bd6540f71f7d29\"> 278</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01875.html#aca6beda0ac337eb862bd6540f71f7d29\">Range</a> = R;</div>\n+<div class=\"line\"><a id=\"l00279\" name=\"l00279\"></a><span class=\"lineno\"> 279</span> </div>\n+<div class=\"line\"><a id=\"l00280\" name=\"l00280\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01875.html#ab308263b7fd188c267709c7bc0b47568\"> 280</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01875.html#ab308263b7fd188c267709c7bc0b47568\">Traits</a> = Imp::GridFunctionTraits<<a class=\"code hl_typedef\" href=\"a01875.html#aca6beda0ac337eb862bd6540f71f7d29\">Range</a>(<a class=\"code hl_typedef\" href=\"a01875.html#aeb0a34de4cd353524e324cc57591a432\">Domain</a>), <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01859.html#aa0f3fc49504b54be8b78cb443b447747\">Base::EntitySet</a>, <a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a>, 16>;</div>\n+<div class=\"line\"><a id=\"l00281\" name=\"l00281\"></a><span class=\"lineno\"> 281</span> </div>\n+<div class=\"line\"><a id=\"l00282\" name=\"l00282\"></a><span class=\"lineno\"> 282</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00283\" name=\"l00283\"></a><span class=\"lineno\"> 283</span> </div>\n+<div class=\"line\"><a id=\"l00284\" name=\"l00284\"></a><span class=\"lineno\"> 284</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Node></div>\n+<div class=\"line\"><a id=\"l00285\" name=\"l00285\"></a><span class=\"lineno\"> 285</span> <span class=\"keyword\">using </span>LocalBasisRange = <span class=\"keyword\">typename</span> Node::FiniteElement::Traits::LocalBasisType::Traits::RangeType;</div>\n+<div class=\"line\"><a id=\"l00286\" name=\"l00286\"></a><span class=\"lineno\"> 286</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Node></div>\n+<div class=\"line\"><a id=\"l00287\" name=\"l00287\"></a><span class=\"lineno\"> 287</span> <span class=\"keyword\">using </span>NodeData = <span class=\"keyword\">typename</span> std::vector<LocalBasisRange<Node>>;</div>\n+<div class=\"line\"><a id=\"l00288\" name=\"l00288\"></a><span class=\"lineno\"> 288</span> <span class=\"keyword\">using </span>PerNodeEvaluationBuffer = <span class=\"keyword\">typename</span> TypeTree::TreeContainer<NodeData, typename Base::Tree>;</div>\n+<div class=\"line\"><a id=\"l00289\" name=\"l00289\"></a><span class=\"lineno\"> 289</span> </div>\n+<div class=\"line\"><a id=\"l00290\" name=\"l00290\"></a><span class=\"lineno\"> 290</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00291\" name=\"l00291\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01879.html\"> 291</a></span> <span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01879.html\">LocalFunction</a></div>\n+<div class=\"line\"><a id=\"l00292\" name=\"l00292\"></a><span class=\"lineno\"> 292</span> : <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01867.html\">Base::LocalFunctionBase</a></div>\n+<div class=\"line\"><a id=\"l00293\" name=\"l00293\"></a><span class=\"lineno\"> 293</span> {</div>\n+<div class=\"line\"><a id=\"l00294\" name=\"l00294\"></a><span class=\"lineno\"> 294</span> <span class=\"keyword\">using </span>LocalBase = <span class=\"keyword\">typename</span> <a class=\"code hl_class\" href=\"a01867.html\">Base::LocalFunctionBase</a>;</div>\n+<div class=\"line\"><a id=\"l00295\" name=\"l00295\"></a><span class=\"lineno\"> 295</span> <span class=\"keyword\">using </span>size_type = <span class=\"keyword\">typename</span> Base::Tree::size_type;</div>\n+<div class=\"line\"><a id=\"l00296\" name=\"l00296\"></a><span class=\"lineno\"> 296</span> <span class=\"keyword\">using </span>LocalBase::nodeToRangeEntry;</div>\n+<div class=\"line\"><a id=\"l00297\" name=\"l00297\"></a><span class=\"lineno\"> 297</span> </div>\n+<div class=\"line\"><a id=\"l00298\" name=\"l00298\"></a><span class=\"lineno\"> 298</span> <span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00299\" name=\"l00299\"></a><span class=\"lineno\"> 299</span> </div>\n+<div class=\"line\"><a id=\"l00300\" name=\"l00300\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01879.html#ad174c6153326476457e6f51bca4a282d\"> 300</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01875.html\">GlobalFunction</a> = <a class=\"code hl_function\" href=\"a01875.html#a51960f49c44a04d5381bbe370a8d6faf\">DiscreteGlobalBasisFunction</a>;</div>\n+<div class=\"line\"><a id=\"l00301\" name=\"l00301\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01879.html#aa94028ce59c8f84dd0fd0b9681af6b90\"> 301</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01867.html#aed06cdee2f1095692d99f2b70b9e08cf\">Domain</a> = <span class=\"keyword\">typename</span> LocalBase::Domain;</div>\n+<div class=\"line\"><a id=\"l00302\" name=\"l00302\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01879.html#a8b339405cc5358cfdac2d3775c590acd\"> 302</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01879.html#a8b339405cc5358cfdac2d3775c590acd\">Range</a> = <a class=\"code hl_typedef\" href=\"a01875.html#aca6beda0ac337eb862bd6540f71f7d29\">GlobalFunction::Range</a>;</div>\n+<div class=\"line\"><a id=\"l00303\" name=\"l00303\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01879.html#aeee5259672e13f6a96cc80af2179a49b\"> 303</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01867.html#a8d6caba81e31526ba3a7d66b1ab299a3\">Element</a> = <span class=\"keyword\">typename</span> LocalBase::Element;</div>\n+<div class=\"line\"><a id=\"l00304\" name=\"l00304\"></a><span class=\"lineno\"> 304</span> </div>\n+<div class=\"line\"><a id=\"l00306\" name=\"l00306\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01879.html#ab5ae226004affb757598beabae1ff888\"> 306</a></span> <a class=\"code hl_function\" href=\"a01879.html#ab5ae226004affb757598beabae1ff888\">LocalFunction</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01875.html\">DiscreteGlobalBasisFunction</a>& globalFunction)</div>\n+<div class=\"line\"><a id=\"l00307\" name=\"l00307\"></a><span class=\"lineno\"> 307</span> : LocalBase(globalFunction.<a class=\"code hl_variable\" href=\"a01867.html#ac19ebafe7e6f57872bf25b9c91718487\">data_</a>)</div>\n+<div class=\"line\"><a id=\"l00308\" name=\"l00308\"></a><span class=\"lineno\"> 308</span> , evaluationBuffer_(this-><a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>.tree())</div>\n+<div class=\"line\"><a id=\"l00309\" name=\"l00309\"></a><span class=\"lineno\"> 309</span> {</div>\n+<div class=\"line\"><a id=\"l00310\" name=\"l00310\"></a><span class=\"lineno\"> 310</span> <span class=\"comment\">/* Nothing. */</span></div>\n+<div class=\"line\"><a id=\"l00311\" name=\"l00311\"></a><span class=\"lineno\"> 311</span> }</div>\n+<div class=\"line\"><a id=\"l00312\" name=\"l00312\"></a><span class=\"lineno\"> 312</span> </div>\n+<div class=\"line\"><a id=\"l00322\" name=\"l00322\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01879.html#adb064f66b447712a2c36534c2256c357\"> 322</a></span> <a class=\"code hl_typedef\" href=\"a01879.html#a8b339405cc5358cfdac2d3775c590acd\">Range</a> <a class=\"code hl_function\" href=\"a01879.html#adb064f66b447712a2c36534c2256c357\">operator()</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01867.html#aed06cdee2f1095692d99f2b70b9e08cf\">Domain</a>& x)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00323\" name=\"l00323\"></a><span class=\"lineno\"> 323</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00324\" name=\"l00324\"></a><span class=\"lineno\"> 324</span> <a class=\"code hl_typedef\" href=\"a01879.html#a8b339405cc5358cfdac2d3775c590acd\">Range</a> y;</div>\n+<div class=\"line\"><a id=\"l00325\" name=\"l00325\"></a><span class=\"lineno\"> 325</span> <a class=\"code hl_function\" href=\"a00214.html#gae5b9f62f85e3d638423142695a74d056\">istlVectorBackend</a>(y) = 0;</div>\n+<div class=\"line\"><a id=\"l00326\" name=\"l00326\"></a><span class=\"lineno\"> 326</span> </div>\n+<div class=\"line\"><a id=\"l00327\" name=\"l00327\"></a><span class=\"lineno\"> 327</span> TypeTree::forEachLeafNode(this-><a class=\"code hl_variable\" href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">localView_</a>.tree(), [&](<span class=\"keyword\">auto</span>&& node, <span class=\"keyword\">auto</span>&& treePath) {</div>\n+<div class=\"line\"><a id=\"l00328\" name=\"l00328\"></a><span class=\"lineno\"> 328</span> const auto& fe = node.finiteElement();</div>\n+<div class=\"line\"><a id=\"l00329\" name=\"l00329\"></a><span class=\"lineno\"> 329</span> const auto& localBasis = fe.localBasis();</div>\n+<div class=\"line\"><a id=\"l00330\" name=\"l00330\"></a><span class=\"lineno\"> 330</span> auto& shapeFunctionValues = evaluationBuffer_[treePath];</div>\n+<div class=\"line\"><a id=\"l00331\" name=\"l00331\"></a><span class=\"lineno\"> 331</span> </div>\n+<div class=\"line\"><a id=\"l00332\" name=\"l00332\"></a><span class=\"lineno\"> 332</span> localBasis.evaluateFunction(x, shapeFunctionValues);</div>\n+<div class=\"line\"><a id=\"l00333\" name=\"l00333\"></a><span class=\"lineno\"> 333</span> </div>\n+<div class=\"line\"><a id=\"l00334\" name=\"l00334\"></a><span class=\"lineno\"> 334</span> <span class=\"comment\">// Compute linear combinations of basis function jacobian.</span></div>\n+<div class=\"line\"><a id=\"l00335\" name=\"l00335\"></a><span class=\"lineno\"> 335</span> <span class=\"comment\">// Non-scalar coefficients of dimension coeffDim are handled by</span></div>\n+<div class=\"line\"><a id=\"l00336\" name=\"l00336\"></a><span class=\"lineno\"> 336</span> <span class=\"comment\">// processing the coeffDim linear combinations independently</span></div>\n+<div class=\"line\"><a id=\"l00337\" name=\"l00337\"></a><span class=\"lineno\"> 337</span> <span class=\"comment\">// and storing them as entries of an array.</span></div>\n+<div class=\"line\"><a id=\"l00338\" name=\"l00338\"></a><span class=\"lineno\"> 338</span> using Value = LocalBasisRange< std::decay_t<decltype(node)> >;</div>\n+<div class=\"line\"><a id=\"l00339\" name=\"l00339\"></a><span class=\"lineno\"> 339</span> static constexpr auto coeffDim = decltype(flatVectorView(this->localDoFs_[node.localIndex(0)]).size())::value;</div>\n+<div class=\"line\"><a id=\"l00340\" name=\"l00340\"></a><span class=\"lineno\"> 340</span> auto values = std::array<Value, coeffDim>{};</div>\n+<div class=\"line\"><a id=\"l00341\" name=\"l00341\"></a><span class=\"lineno\"> 341</span> <a class=\"code hl_function\" href=\"a00214.html#gae5b9f62f85e3d638423142695a74d056\">istlVectorBackend</a>(values) = 0;</div>\n+<div class=\"line\"><a id=\"l00342\" name=\"l00342\"></a><span class=\"lineno\"> 342</span> <span class=\"keywordflow\">for</span> (size_type i = 0; i < localBasis.size(); ++i)</div>\n+<div class=\"line\"><a id=\"l00343\" name=\"l00343\"></a><span class=\"lineno\"> 343</span> {</div>\n+<div class=\"line\"><a id=\"l00344\" name=\"l00344\"></a><span class=\"lineno\"> 344</span> <span class=\"keyword\">auto</span> c = <a class=\"code hl_function\" href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\">flatVectorView</a>(this-><a class=\"code hl_variable\" href=\"a01867.html#aa62fc9b9cfde610dea2e5fedfc5c6f83\">localDoFs_</a>[node.localIndex(i)]);</div>\n+<div class=\"line\"><a id=\"l00345\" name=\"l00345\"></a><span class=\"lineno\"> 345</span> <span class=\"keywordflow\">for</span> (std::size_t j = 0; j < coeffDim; ++j)</div>\n+<div class=\"line\"><a id=\"l00346\" name=\"l00346\"></a><span class=\"lineno\"> 346</span> values[j].axpy(c[j], shapeFunctionValues[i]);</div>\n+<div class=\"line\"><a id=\"l00347\" name=\"l00347\"></a><span class=\"lineno\"> 347</span> }</div>\n+<div class=\"line\"><a id=\"l00348\" name=\"l00348\"></a><span class=\"lineno\"> 348</span> </div>\n+<div class=\"line\"><a id=\"l00349\" name=\"l00349\"></a><span class=\"lineno\"> 349</span> <span class=\"comment\">// Assign computed values to node entry of range.</span></div>\n+<div class=\"line\"><a id=\"l00350\" name=\"l00350\"></a><span class=\"lineno\"> 350</span> <span class=\"comment\">// Types are matched using the lexicographic ordering provided by flatVectorView.</span></div>\n+<div class=\"line\"><a id=\"l00351\" name=\"l00351\"></a><span class=\"lineno\"> 351</span> LocalBase::assignWith(<a class=\"code hl_function\" href=\"a01867.html#ac929b2a99a94dc5e5c5f4bd1404716c5\">nodeToRangeEntry</a>(node, treePath, y), values);</div>\n+<div class=\"line\"><a id=\"l00352\" name=\"l00352\"></a><span class=\"lineno\"> 352</span> });</div>\n+<div class=\"line\"><a id=\"l00353\" name=\"l00353\"></a><span class=\"lineno\"> 353</span> </div>\n+<div class=\"line\"><a id=\"l00354\" name=\"l00354\"></a><span class=\"lineno\"> 354</span> <span class=\"keywordflow\">return</span> y;</div>\n+<div class=\"line\"><a id=\"l00355\" name=\"l00355\"></a><span class=\"lineno\"> 355</span> }</div>\n+<div class=\"line\"><a id=\"l00356\" name=\"l00356\"></a><span class=\"lineno\"> 356</span> </div>\n+<div class=\"line\"><a id=\"l00358\" name=\"l00358\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01879.html#abcf8db8c634fdb5cfd2a6af1767b6445\"> 358</a></span> <span class=\"keyword\">friend</span> <span class=\"keyword\">typename</span> <a class=\"code hl_class\" href=\"a01883.html\">DiscreteGlobalBasisFunctionDerivative<DiscreteGlobalBasisFunction>::LocalFunction</a> <a class=\"code hl_friend\" href=\"a01879.html#abcf8db8c634fdb5cfd2a6af1767b6445\">derivative</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01879.html\">LocalFunction</a>& lf)</div>\n+<div class=\"line\"><a id=\"l00359\" name=\"l00359\"></a><span class=\"lineno\"> 359</span> {</div>\n+<div class=\"line\"><a id=\"l00360\" name=\"l00360\"></a><span class=\"lineno\"> 360</span> <span class=\"keyword\">auto</span> dlf = <a class=\"code hl_friend\" href=\"a01875.html#a5f39570268385d3bfc1e3b5565e9bd9f\">localFunction</a>(<a class=\"code hl_class\" href=\"a01871.html\">DiscreteGlobalBasisFunctionDerivative<DiscreteGlobalBasisFunction></a>(lf.<a class=\"code hl_variable\" href=\"a01867.html#ac19ebafe7e6f57872bf25b9c91718487\">data_</a>));</div>\n+<div class=\"line\"><a id=\"l00361\" name=\"l00361\"></a><span class=\"lineno\"> 361</span> <span class=\"keywordflow\">if</span> (lf.<a class=\"code hl_function\" href=\"a01867.html#a28431fd8e25a148fc8c203a0b8394ac5\">bound</a>())</div>\n+<div class=\"line\"><a id=\"l00362\" name=\"l00362\"></a><span class=\"lineno\"> 362</span> dlf.bind(lf.<a class=\"code hl_function\" href=\"a01867.html#a8daa49aa0c6c0d333460ebe354c3988b\">localContext</a>());</div>\n+<div class=\"line\"><a id=\"l00363\" name=\"l00363\"></a><span class=\"lineno\"> 363</span> <span class=\"keywordflow\">return</span> dlf;</div>\n+<div class=\"line\"><a id=\"l00364\" name=\"l00364\"></a><span class=\"lineno\"> 364</span> }</div>\n+<div class=\"line\"><a id=\"l00365\" name=\"l00365\"></a><span class=\"lineno\"> 365</span> </div>\n+<div class=\"line\"><a id=\"l00366\" name=\"l00366\"></a><span class=\"lineno\"> 366</span> <span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00367\" name=\"l00367\"></a><span class=\"lineno\"> 367</span> <span class=\"keyword\">mutable</span> PerNodeEvaluationBuffer evaluationBuffer_;</div>\n+<div class=\"line\"><a id=\"l00368\" name=\"l00368\"></a><span class=\"lineno\"> 368</span> };</div>\n+<div class=\"line\"><a id=\"l00369\" name=\"l00369\"></a><span class=\"lineno\"> 369</span> </div>\n+<div class=\"line\"><a id=\"l00371\" name=\"l00371\"></a><span class=\"lineno\"> 371</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> B_T, <span class=\"keyword\">class</span> V_T, <span class=\"keyword\">class</span> NTRE_T></div>\n+<div class=\"line\"><a id=\"l00372\" name=\"l00372\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01875.html#a51960f49c44a04d5381bbe370a8d6faf\"> 372</a></span> <a class=\"code hl_function\" href=\"a01875.html#a51960f49c44a04d5381bbe370a8d6faf\">DiscreteGlobalBasisFunction</a>(B_T && basis, V_T && coefficients, NTRE_T&& nodeToRangeEntry)</div>\n+<div class=\"line\"><a id=\"l00373\" name=\"l00373\"></a><span class=\"lineno\"> 373</span> : <a class=\"code hl_class\" href=\"a01859.html\">Base</a>(std::make_shared<Data>(Data{{basis.gridView()}, wrap_or_move(std::forward<B_T>(basis)), wrap_or_move(std::forward<V_T>(coefficients)), wrap_or_move(std::forward<NTRE_T>(nodeToRangeEntry))}))</div>\n+<div class=\"line\"><a id=\"l00374\" name=\"l00374\"></a><span class=\"lineno\"> 374</span> {}</div>\n+<div class=\"line\"><a id=\"l00375\" name=\"l00375\"></a><span class=\"lineno\"> 375</span> </div>\n+<div class=\"line\"><a id=\"l00377\" name=\"l00377\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01875.html#a580dd72665826b508e6c5b64c3f36276\"> 377</a></span> <a class=\"code hl_function\" href=\"a01875.html#a580dd72665826b508e6c5b64c3f36276\">DiscreteGlobalBasisFunction</a>(std::shared_ptr<const Basis> basis, std::shared_ptr<const V> coefficients, std::shared_ptr<const typename Base::NodeToRangeEntry> nodeToRangeEntry)</div>\n+<div class=\"line\"><a id=\"l00378\" name=\"l00378\"></a><span class=\"lineno\"> 378</span> : <a class=\"code hl_class\" href=\"a01859.html\">Base</a>(std::make_shared<Data>(Data{{basis->gridView()}, basis, coefficients, nodeToRangeEntry}))</div>\n+<div class=\"line\"><a id=\"l00379\" name=\"l00379\"></a><span class=\"lineno\"> 379</span> {}</div>\n+<div class=\"line\"><a id=\"l00380\" name=\"l00380\"></a><span class=\"lineno\"> 380</span> </div>\n+<div class=\"line\"><a id=\"l00382\" name=\"l00382\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01875.html#a928de73988d7dc811a4ec30a300b9695\"> 382</a></span> <a class=\"code hl_typedef\" href=\"a01875.html#aca6beda0ac337eb862bd6540f71f7d29\">Range</a> operator() (<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01875.html#aeb0a34de4cd353524e324cc57591a432\">Domain</a>& x)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00383\" name=\"l00383\"></a><span class=\"lineno\"> 383</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00384\" name=\"l00384\"></a><span class=\"lineno\"> 384</span> <span class=\"comment\">// TODO: Implement this using hierarchic search</span></div>\n+<div class=\"line\"><a id=\"l00385\" name=\"l00385\"></a><span class=\"lineno\"> 385</span> DUNE_THROW(NotImplemented,<span class=\"stringliteral\">"not implemented"</span>);</div>\n+<div class=\"line\"><a id=\"l00386\" name=\"l00386\"></a><span class=\"lineno\"> 386</span> }</div>\n+<div class=\"line\"><a id=\"l00387\" name=\"l00387\"></a><span class=\"lineno\"> 387</span> </div>\n+<div class=\"line\"><a id=\"l00389\" name=\"l00389\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01875.html#a0566ab696496e9dc76efb16d8434c49a\"> 389</a></span> <span class=\"keyword\">friend</span> <a class=\"code hl_class\" href=\"a01871.html\">DiscreteGlobalBasisFunctionDerivative<DiscreteGlobalBasisFunction></a> <a class=\"code hl_friend\" href=\"a01875.html#a0566ab696496e9dc76efb16d8434c49a\">derivative</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01875.html\">DiscreteGlobalBasisFunction</a>& f)</div>\n+<div class=\"line\"><a id=\"l00390\" name=\"l00390\"></a><span class=\"lineno\"> 390</span> {</div>\n+<div class=\"line\"><a id=\"l00391\" name=\"l00391\"></a><span class=\"lineno\"> 391</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01871.html\">DiscreteGlobalBasisFunctionDerivative<DiscreteGlobalBasisFunction></a>(f.<a class=\"code hl_variable\" href=\"a01859.html#a0251d9a5ba7ae012993ed75089870604\">data_</a>);</div>\n+<div class=\"line\"><a id=\"l00392\" name=\"l00392\"></a><span class=\"lineno\"> 392</span> }</div>\n+<div class=\"line\"><a id=\"l00393\" name=\"l00393\"></a><span class=\"lineno\"> 393</span> </div>\n+<div class=\"line\"><a id=\"l00402\" name=\"l00402\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01875.html#a5f39570268385d3bfc1e3b5565e9bd9f\"> 402</a></span> <span class=\"keyword\">friend</span> <a class=\"code hl_class\" href=\"a01879.html\">LocalFunction</a> <a class=\"code hl_friend\" href=\"a01875.html#a5f39570268385d3bfc1e3b5565e9bd9f\">localFunction</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01875.html\">DiscreteGlobalBasisFunction</a>& t)</div>\n+<div class=\"line\"><a id=\"l00403\" name=\"l00403\"></a><span class=\"lineno\"> 403</span> {</div>\n+<div class=\"line\"><a id=\"l00404\" name=\"l00404\"></a><span class=\"lineno\"> 404</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01879.html\">LocalFunction</a>(t);</div>\n+<div class=\"line\"><a id=\"l00405\" name=\"l00405\"></a><span class=\"lineno\"> 405</span> }</div>\n+<div class=\"line\"><a id=\"l00406\" name=\"l00406\"></a><span class=\"lineno\"> 406</span>};</div>\n+<div class=\"line\"><a id=\"l00407\" name=\"l00407\"></a><span class=\"lineno\"> 407</span> </div>\n+<div class=\"line\"><a id=\"l00408\" name=\"l00408\"></a><span class=\"lineno\"> 408</span> </div>\n+<div class=\"line\"><a id=\"l00431\" name=\"l00431\"></a><span class=\"lineno\"> 431</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> R, <span class=\"keyword\">typename</span> B, <span class=\"keyword\">typename</span> V></div>\n+<div class=\"line\"><a id=\"l00432\" name=\"l00432\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00209.html#ga9f1a8d6ac1558adad6150feb9b4e3168\"> 432</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00209.html#ga9f1a8d6ac1558adad6150feb9b4e3168\">makeDiscreteGlobalBasisFunction</a>(B&& basis, V&& vector)</div>\n+<div class=\"line\"><a id=\"l00433\" name=\"l00433\"></a><span class=\"lineno\"> 433</span>{</div>\n+<div class=\"line\"><a id=\"l00434\" name=\"l00434\"></a><span class=\"lineno\"> 434</span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01875.html#a762b42975185ccea60c8197341862cca\">Basis</a> = std::decay_t<B>;</div>\n+<div class=\"line\"><a id=\"l00435\" name=\"l00435\"></a><span class=\"lineno\"> 435</span> <span class=\"keyword\">using </span>NTREM = <a class=\"code hl_struct\" href=\"a01627.html\">HierarchicNodeToRangeMap</a>;</div>\n+<div class=\"line\"><a id=\"l00436\" name=\"l00436\"></a><span class=\"lineno\"> 436</span> </div>\n+<div class=\"line\"><a id=\"l00437\" name=\"l00437\"></a><span class=\"lineno\"> 437</span> <span class=\"comment\">// Small helper functions to wrap vectors using istlVectorBackend</span></div>\n+<div class=\"line\"><a id=\"l00438\" name=\"l00438\"></a><span class=\"lineno\"> 438</span> <span class=\"comment\">// if they do not already satisfy the VectorBackend interface.</span></div>\n+<div class=\"line\"><a id=\"l00439\" name=\"l00439\"></a><span class=\"lineno\"> 439</span> <span class=\"keyword\">auto</span> toConstVectorBackend = [&](<span class=\"keyword\">auto</span>&& v) -> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) {</div>\n+<div class=\"line\"><a id=\"l00440\" name=\"l00440\"></a><span class=\"lineno\"> 440</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> (models<Concept::ConstVectorBackend<Basis>, <span class=\"keyword\">decltype</span>(v)>()) {</div>\n+<div class=\"line\"><a id=\"l00441\" name=\"l00441\"></a><span class=\"lineno\"> 441</span> <span class=\"keywordflow\">return</span> std::forward<decltype(v)>(v);</div>\n+<div class=\"line\"><a id=\"l00442\" name=\"l00442\"></a><span class=\"lineno\"> 442</span> } <span class=\"keywordflow\">else</span> {</div>\n+<div class=\"line\"><a id=\"l00443\" name=\"l00443\"></a><span class=\"lineno\"> 443</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00214.html#gae5b9f62f85e3d638423142695a74d056\">istlVectorBackend</a>(v);</div>\n+<div class=\"line\"><a id=\"l00444\" name=\"l00444\"></a><span class=\"lineno\"> 444</span> }</div>\n+<div class=\"line\"><a id=\"l00445\" name=\"l00445\"></a><span class=\"lineno\"> 445</span> };</div>\n+<div class=\"line\"><a id=\"l00446\" name=\"l00446\"></a><span class=\"lineno\"> 446</span> </div>\n+<div class=\"line\"><a id=\"l00447\" name=\"l00447\"></a><span class=\"lineno\"> 447</span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01875.html#ace9d1aac90e09365577516e06fb148a4\">Vector</a> = std::decay_t<decltype(toConstVectorBackend(std::forward<V>(vector)))>;</div>\n+<div class=\"line\"><a id=\"l00448\" name=\"l00448\"></a><span class=\"lineno\"> 448</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01875.html\">DiscreteGlobalBasisFunction<Basis, Vector, NTREM, R></a>(</div>\n+<div class=\"line\"><a id=\"l00449\" name=\"l00449\"></a><span class=\"lineno\"> 449</span> std::forward<B>(basis),</div>\n+<div class=\"line\"><a id=\"l00450\" name=\"l00450\"></a><span class=\"lineno\"> 450</span> toConstVectorBackend(std::forward<V>(vector)),</div>\n+<div class=\"line\"><a id=\"l00451\" name=\"l00451\"></a><span class=\"lineno\"> 451</span> <a class=\"code hl_struct\" href=\"a01627.html\">HierarchicNodeToRangeMap</a>());</div>\n+<div class=\"line\"><a id=\"l00452\" name=\"l00452\"></a><span class=\"lineno\"> 452</span>}</div>\n+<div class=\"line\"><a id=\"l00453\" name=\"l00453\"></a><span class=\"lineno\"> 453</span> </div>\n+<div class=\"line\"><a id=\"l00454\" name=\"l00454\"></a><span class=\"lineno\"> 454</span> </div>\n+<div class=\"line\"><a id=\"l00469\" name=\"l00469\"></a><span class=\"lineno\"> 469</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> DGBF></div>\n+<div class=\"line\"><a id=\"l00470\" name=\"l00470\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01871.html\"> 470</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01871.html\">DiscreteGlobalBasisFunctionDerivative</a></div>\n+<div class=\"line\"><a id=\"l00471\" name=\"l00471\"></a><span class=\"lineno\"> 471</span> : <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01859.html\">ImplDoc::DiscreteGlobalBasisFunctionBase</a><typename DGBF::Basis, typename DGBF::Vector, typename DGBF::NodeToRangeEntry></div>\n+<div class=\"line\"><a id=\"l00472\" name=\"l00472\"></a><span class=\"lineno\"> 472</span>{</div>\n+<div class=\"line\"><a id=\"l00473\" name=\"l00473\"></a><span class=\"lineno\"> 473</span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01859.html\">Base</a> = <a class=\"code hl_class\" href=\"a01859.html\">ImplDoc::DiscreteGlobalBasisFunctionBase<typename DGBF::Basis, typename DGBF::Vector, typename DGBF::NodeToRangeEntry></a>;</div>\n+<div class=\"line\"><a id=\"l00474\" name=\"l00474\"></a><span class=\"lineno\"> 474</span> <span class=\"keyword\">using </span>Data = <span class=\"keyword\">typename</span> <a class=\"code hl_struct\" href=\"a01863.html\">Base::Data</a>;</div>\n+<div class=\"line\"><a id=\"l00475\" name=\"l00475\"></a><span class=\"lineno\"> 475</span> </div>\n+<div class=\"line\"><a id=\"l00476\" name=\"l00476\"></a><span class=\"lineno\"> 476</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00477\" name=\"l00477\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01871.html#ae3ccd2cccb1c2c5df855692f5c73469f\"> 477</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01871.html#ae3ccd2cccb1c2c5df855692f5c73469f\">DiscreteGlobalBasisFunction</a> = DGBF;</div>\n+<div class=\"line\"><a id=\"l00478\" name=\"l00478\"></a><span class=\"lineno\"> 478</span> </div>\n+<div class=\"line\"><a id=\"l00479\" name=\"l00479\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01871.html#a25856bf0d4e67d51b5d57675696a76d0\"> 479</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01871.html#a25856bf0d4e67d51b5d57675696a76d0\">Basis</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01859.html#a3692f2d61e9901fcc190337eb0c8d2c3\">Base::Basis</a>;</div>\n+<div class=\"line\"><a id=\"l00480\" name=\"l00480\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01871.html#aef7bc40b43c4903d146c539075a00ca1\"> 480</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01871.html#aef7bc40b43c4903d146c539075a00ca1\">Vector</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01859.html#a4f1c5b75cd112f7524b65de9e68c6f4c\">Base::Vector</a>;</div>\n+<div class=\"line\"><a id=\"l00481\" name=\"l00481\"></a><span class=\"lineno\"> 481</span> </div>\n+<div class=\"line\"><a id=\"l00482\" name=\"l00482\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01871.html#afeaec17adccaddbd723f29af94cbf898\"> 482</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01871.html#afeaec17adccaddbd723f29af94cbf898\">Domain</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01859.html#ac531ebbef4d77df5dd685f2f26024f95\">Base::Domain</a>;</div>\n+<div class=\"line\"><a id=\"l00483\" name=\"l00483\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01871.html#a85ee067d6e6eac54a36fff9cc40202a2\"> 483</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01871.html#a85ee067d6e6eac54a36fff9cc40202a2\">Range</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_struct\" href=\"a01291.html\">SignatureTraits<typename DiscreteGlobalBasisFunction::Traits::DerivativeInterface>::Range</a>;</div>\n+<div class=\"line\"><a id=\"l00484\" name=\"l00484\"></a><span class=\"lineno\"> 484</span> </div>\n+<div class=\"line\"><a id=\"l00485\" name=\"l00485\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01871.html#af59af75dbcd31f48108a932e508007d7\"> 485</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01871.html#af59af75dbcd31f48108a932e508007d7\">Traits</a> = Imp::GridFunctionTraits<<a class=\"code hl_typedef\" href=\"a01871.html#a85ee067d6e6eac54a36fff9cc40202a2\">Range</a>(<a class=\"code hl_typedef\" href=\"a01871.html#afeaec17adccaddbd723f29af94cbf898\">Domain</a>), <span class=\"keyword\">typename</span> <a class=\"code hl_class\" href=\"a01919.html\">Base::EntitySet</a>, <a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a>, 16>;</div>\n+<div class=\"line\"><a id=\"l00486\" name=\"l00486\"></a><span class=\"lineno\"> 486</span> </div>\n+<div class=\"line\"><a id=\"l00487\" name=\"l00487\"></a><span class=\"lineno\"> 487</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00488\" name=\"l00488\"></a><span class=\"lineno\"> 488</span> </div>\n+<div class=\"line\"><a id=\"l00489\" name=\"l00489\"></a><span class=\"lineno\"> 489</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Node></div>\n+<div class=\"line\"><a id=\"l00490\" name=\"l00490\"></a><span class=\"lineno\"> 490</span> <span class=\"keyword\">using </span>LocalBasisRange = <span class=\"keyword\">typename</span> Node::FiniteElement::Traits::LocalBasisType::Traits::JacobianType;</div>\n+<div class=\"line\"><a id=\"l00491\" name=\"l00491\"></a><span class=\"lineno\"> 491</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Node></div>\n+<div class=\"line\"><a id=\"l00492\" name=\"l00492\"></a><span class=\"lineno\"> 492</span> <span class=\"keyword\">using </span>NodeData = <span class=\"keyword\">typename</span> std::vector< LocalBasisRange<Node> >;</div>\n+<div class=\"line\"><a id=\"l00493\" name=\"l00493\"></a><span class=\"lineno\"> 493</span> <span class=\"keyword\">using </span>PerNodeEvaluationBuffer = <span class=\"keyword\">typename</span> TypeTree::TreeContainer<NodeData, typename Base::Tree>;</div>\n+<div class=\"line\"><a id=\"l00494\" name=\"l00494\"></a><span class=\"lineno\"> 494</span> </div>\n+<div class=\"line\"><a id=\"l00495\" name=\"l00495\"></a><span class=\"lineno\"> 495</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00496\" name=\"l00496\"></a><span class=\"lineno\"> 496</span> </div>\n+<div class=\"line\"><a id=\"l00504\" name=\"l00504\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01883.html\"> 504</a></span> <span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01883.html\">LocalFunction</a></div>\n+<div class=\"line\"><a id=\"l00505\" name=\"l00505\"></a><span class=\"lineno\"> 505</span> : <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01867.html\">Base::LocalFunctionBase</a></div>\n+<div class=\"line\"><a id=\"l00506\" name=\"l00506\"></a><span class=\"lineno\"> 506</span> {</div>\n+<div class=\"line\"><a id=\"l00507\" name=\"l00507\"></a><span class=\"lineno\"> 507</span> <span class=\"keyword\">using </span>LocalBase = <span class=\"keyword\">typename</span> <a class=\"code hl_class\" href=\"a01867.html\">Base::LocalFunctionBase</a>;</div>\n+<div class=\"line\"><a id=\"l00508\" name=\"l00508\"></a><span class=\"lineno\"> 508</span> <span class=\"keyword\">using </span>size_type = <span class=\"keyword\">typename</span> Base::Tree::size_type;</div>\n+<div class=\"line\"><a id=\"l00509\" name=\"l00509\"></a><span class=\"lineno\"> 509</span> <span class=\"keyword\">using </span>LocalBase::nodeToRangeEntry;</div>\n+<div class=\"line\"><a id=\"l00510\" name=\"l00510\"></a><span class=\"lineno\"> 510</span> </div>\n+<div class=\"line\"><a id=\"l00511\" name=\"l00511\"></a><span class=\"lineno\"> 511</span> <span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00512\" name=\"l00512\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01883.html#a60cd1e169fafbaa6358528872dc0c3eb\"> 512</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01871.html\">GlobalFunction</a> = <a class=\"code hl_class\" href=\"a01871.html\">DiscreteGlobalBasisFunctionDerivative</a>;</div>\n+<div class=\"line\"><a id=\"l00513\" name=\"l00513\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01883.html#a2cc94a65279680f034d5573218151371\"> 513</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01867.html#aed06cdee2f1095692d99f2b70b9e08cf\">Domain</a> = <span class=\"keyword\">typename</span> LocalBase::Domain;</div>\n+<div class=\"line\"><a id=\"l00514\" name=\"l00514\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01883.html#abf2deb819d532ec2dfd8e170ddfd72b5\"> 514</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01883.html#abf2deb819d532ec2dfd8e170ddfd72b5\">Range</a> = <a class=\"code hl_typedef\" href=\"a01871.html#a85ee067d6e6eac54a36fff9cc40202a2\">GlobalFunction::Range</a>;</div>\n+<div class=\"line\"><a id=\"l00515\" name=\"l00515\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01883.html#a3e0c5a37c885a648ecf3f126019db963\"> 515</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01867.html#a8d6caba81e31526ba3a7d66b1ab299a3\">Element</a> = <span class=\"keyword\">typename</span> LocalBase::Element;</div>\n+<div class=\"line\"><a id=\"l00516\" name=\"l00516\"></a><span class=\"lineno\"> 516</span> </div>\n+<div class=\"line\"><a id=\"l00518\" name=\"l00518\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01883.html#adaccfd098d6b105540eea45ea37a6ab4\"> 518</a></span> <a class=\"code hl_function\" href=\"a01883.html#adaccfd098d6b105540eea45ea37a6ab4\">LocalFunction</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01871.html\">GlobalFunction</a>& globalFunction)</div>\n+<div class=\"line\"><a id=\"l00519\" name=\"l00519\"></a><span class=\"lineno\"> 519</span> : LocalBase(globalFunction.data_)</div>\n+<div class=\"line\"><a id=\"l00520\" name=\"l00520\"></a><span class=\"lineno\"> 520</span> , evaluationBuffer_(this->localView_.tree())</div>\n+<div class=\"line\"><a id=\"l00521\" name=\"l00521\"></a><span class=\"lineno\"> 521</span> {</div>\n+<div class=\"line\"><a id=\"l00522\" name=\"l00522\"></a><span class=\"lineno\"> 522</span> <span class=\"comment\">/* Nothing. */</span></div>\n+<div class=\"line\"><a id=\"l00523\" name=\"l00523\"></a><span class=\"lineno\"> 523</span> }</div>\n+<div class=\"line\"><a id=\"l00524\" name=\"l00524\"></a><span class=\"lineno\"> 524</span> </div>\n+<div class=\"line\"><a id=\"l00531\" name=\"l00531\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01883.html#af79e06905942ca8abcde986e2a042b1d\"> 531</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01883.html#af79e06905942ca8abcde986e2a042b1d\">bind</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01867.html#a8d6caba81e31526ba3a7d66b1ab299a3\">Element</a>& element)</div>\n+<div class=\"line\"><a id=\"l00532\" name=\"l00532\"></a><span class=\"lineno\"> 532</span> {</div>\n+<div class=\"line\"><a id=\"l00533\" name=\"l00533\"></a><span class=\"lineno\"> 533</span> LocalBase::bind(element);</div>\n+<div class=\"line\"><a id=\"l00534\" name=\"l00534\"></a><span class=\"lineno\"> 534</span> geometry_.emplace(element.geometry());</div>\n+<div class=\"line\"><a id=\"l00535\" name=\"l00535\"></a><span class=\"lineno\"> 535</span> }</div>\n+<div class=\"line\"><a id=\"l00536\" name=\"l00536\"></a><span class=\"lineno\"> 536</span> </div>\n+<div class=\"line\"><a id=\"l00538\" name=\"l00538\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01883.html#ac5b7ff05f3dae3dc85eae5712a5d1e3c\"> 538</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01883.html#ac5b7ff05f3dae3dc85eae5712a5d1e3c\">unbind</a>()</div>\n+<div class=\"line\"><a id=\"l00539\" name=\"l00539\"></a><span class=\"lineno\"> 539</span> {</div>\n+<div class=\"line\"><a id=\"l00540\" name=\"l00540\"></a><span class=\"lineno\"> 540</span> geometry_.reset();</div>\n+<div class=\"line\"><a id=\"l00541\" name=\"l00541\"></a><span class=\"lineno\"> 541</span> LocalBase::unbind();</div>\n+<div class=\"line\"><a id=\"l00542\" name=\"l00542\"></a><span class=\"lineno\"> 542</span> }</div>\n+<div class=\"line\"><a id=\"l00543\" name=\"l00543\"></a><span class=\"lineno\"> 543</span> </div>\n+<div class=\"line\"><a id=\"l00557\" name=\"l00557\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01883.html#a1f6a443d0aca3f3cb532e2c81b4017d2\"> 557</a></span> <a class=\"code hl_typedef\" href=\"a01883.html#abf2deb819d532ec2dfd8e170ddfd72b5\">Range</a> <a class=\"code hl_function\" href=\"a01883.html#a1f6a443d0aca3f3cb532e2c81b4017d2\">operator()</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01867.html#aed06cdee2f1095692d99f2b70b9e08cf\">Domain</a>& x)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00558\" name=\"l00558\"></a><span class=\"lineno\"> 558</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00559\" name=\"l00559\"></a><span class=\"lineno\"> 559</span> <a class=\"code hl_typedef\" href=\"a01883.html#abf2deb819d532ec2dfd8e170ddfd72b5\">Range</a> y;</div>\n+<div class=\"line\"><a id=\"l00560\" name=\"l00560\"></a><span class=\"lineno\"> 560</span> <a class=\"code hl_function\" href=\"a00214.html#gae5b9f62f85e3d638423142695a74d056\">istlVectorBackend</a>(y) = 0;</div>\n+<div class=\"line\"><a id=\"l00561\" name=\"l00561\"></a><span class=\"lineno\"> 561</span> </div>\n+<div class=\"line\"><a id=\"l00562\" name=\"l00562\"></a><span class=\"lineno\"> 562</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& jacobianInverse = geometry_->jacobianInverse(x);</div>\n+<div class=\"line\"><a id=\"l00563\" name=\"l00563\"></a><span class=\"lineno\"> 563</span> </div>\n+<div class=\"line\"><a id=\"l00564\" name=\"l00564\"></a><span class=\"lineno\"> 564</span> TypeTree::forEachLeafNode(this->localView_.tree(), [&](<span class=\"keyword\">auto</span>&& node, <span class=\"keyword\">auto</span>&& treePath) {</div>\n+<div class=\"line\"><a id=\"l00565\" name=\"l00565\"></a><span class=\"lineno\"> 565</span> const auto& fe = node.finiteElement();</div>\n+<div class=\"line\"><a id=\"l00566\" name=\"l00566\"></a><span class=\"lineno\"> 566</span> const auto& localBasis = fe.localBasis();</div>\n+<div class=\"line\"><a id=\"l00567\" name=\"l00567\"></a><span class=\"lineno\"> 567</span> auto& shapeFunctionJacobians = evaluationBuffer_[treePath];</div>\n+<div class=\"line\"><a id=\"l00568\" name=\"l00568\"></a><span class=\"lineno\"> 568</span> </div>\n+<div class=\"line\"><a id=\"l00569\" name=\"l00569\"></a><span class=\"lineno\"> 569</span> localBasis.evaluateJacobian(x, shapeFunctionJacobians);</div>\n+<div class=\"line\"><a id=\"l00570\" name=\"l00570\"></a><span class=\"lineno\"> 570</span> </div>\n+<div class=\"line\"><a id=\"l00571\" name=\"l00571\"></a><span class=\"lineno\"> 571</span> <span class=\"comment\">// Compute linear combinations of basis function jacobian.</span></div>\n+<div class=\"line\"><a id=\"l00572\" name=\"l00572\"></a><span class=\"lineno\"> 572</span> <span class=\"comment\">// Non-scalar coefficients of dimension coeffDim are handled by</span></div>\n+<div class=\"line\"><a id=\"l00573\" name=\"l00573\"></a><span class=\"lineno\"> 573</span> <span class=\"comment\">// processing the coeffDim linear combinations independently</span></div>\n+<div class=\"line\"><a id=\"l00574\" name=\"l00574\"></a><span class=\"lineno\"> 574</span> <span class=\"comment\">// and storing them as entries of an array.</span></div>\n+<div class=\"line\"><a id=\"l00575\" name=\"l00575\"></a><span class=\"lineno\"> 575</span> using RefJacobian = LocalBasisRange< std::decay_t<decltype(node)> >;</div>\n+<div class=\"line\"><a id=\"l00576\" name=\"l00576\"></a><span class=\"lineno\"> 576</span> static constexpr auto coeffDim = decltype(flatVectorView(this->localDoFs_[node.localIndex(0)]).size())::value;</div>\n+<div class=\"line\"><a id=\"l00577\" name=\"l00577\"></a><span class=\"lineno\"> 577</span> auto refJacobians = std::array<RefJacobian, coeffDim>{};</div>\n+<div class=\"line\"><a id=\"l00578\" name=\"l00578\"></a><span class=\"lineno\"> 578</span> <a class=\"code hl_function\" href=\"a00214.html#gae5b9f62f85e3d638423142695a74d056\">istlVectorBackend</a>(refJacobians) = 0;</div>\n+<div class=\"line\"><a id=\"l00579\" name=\"l00579\"></a><span class=\"lineno\"> 579</span> <span class=\"keywordflow\">for</span> (size_type i = 0; i < localBasis.size(); ++i)</div>\n+<div class=\"line\"><a id=\"l00580\" name=\"l00580\"></a><span class=\"lineno\"> 580</span> {</div>\n+<div class=\"line\"><a id=\"l00581\" name=\"l00581\"></a><span class=\"lineno\"> 581</span> <span class=\"keyword\">auto</span> c = <a class=\"code hl_function\" href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\">flatVectorView</a>(this->localDoFs_[node.localIndex(i)]);</div>\n+<div class=\"line\"><a id=\"l00582\" name=\"l00582\"></a><span class=\"lineno\"> 582</span> <span class=\"keywordflow\">for</span> (std::size_t j = 0; j < coeffDim; ++j)</div>\n+<div class=\"line\"><a id=\"l00583\" name=\"l00583\"></a><span class=\"lineno\"> 583</span> refJacobians[j].axpy(c[j], shapeFunctionJacobians[i]);</div>\n+<div class=\"line\"><a id=\"l00584\" name=\"l00584\"></a><span class=\"lineno\"> 584</span> }</div>\n+<div class=\"line\"><a id=\"l00585\" name=\"l00585\"></a><span class=\"lineno\"> 585</span> </div>\n+<div class=\"line\"><a id=\"l00586\" name=\"l00586\"></a><span class=\"lineno\"> 586</span> <span class=\"comment\">// Transform Jacobians form local to global coordinates.</span></div>\n+<div class=\"line\"><a id=\"l00587\" name=\"l00587\"></a><span class=\"lineno\"> 587</span> <span class=\"keyword\">using </span>Jacobian = <span class=\"keyword\">decltype</span>(refJacobians[0] * jacobianInverse);</div>\n+<div class=\"line\"><a id=\"l00588\" name=\"l00588\"></a><span class=\"lineno\"> 588</span> <span class=\"keyword\">auto</span> jacobians = std::array<Jacobian, coeffDim>{};</div>\n+<div class=\"line\"><a id=\"l00589\" name=\"l00589\"></a><span class=\"lineno\"> 589</span> std::transform(</div>\n+<div class=\"line\"><a id=\"l00590\" name=\"l00590\"></a><span class=\"lineno\"> 590</span> refJacobians.begin(), refJacobians.end(), jacobians.begin(),</div>\n+<div class=\"line\"><a id=\"l00591\" name=\"l00591\"></a><span class=\"lineno\"> 591</span> [&](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& refJacobian) { return refJacobian * jacobianInverse; });</div>\n+<div class=\"line\"><a id=\"l00592\" name=\"l00592\"></a><span class=\"lineno\"> 592</span> </div>\n+<div class=\"line\"><a id=\"l00593\" name=\"l00593\"></a><span class=\"lineno\"> 593</span> <span class=\"comment\">// Assign computed Jacobians to node entry of range.</span></div>\n+<div class=\"line\"><a id=\"l00594\" name=\"l00594\"></a><span class=\"lineno\"> 594</span> <span class=\"comment\">// Types are matched using the lexicographic ordering provided by flatVectorView.</span></div>\n+<div class=\"line\"><a id=\"l00595\" name=\"l00595\"></a><span class=\"lineno\"> 595</span> LocalBase::assignWith(nodeToRangeEntry(node, treePath, y), jacobians);</div>\n+<div class=\"line\"><a id=\"l00596\" name=\"l00596\"></a><span class=\"lineno\"> 596</span> });</div>\n+<div class=\"line\"><a id=\"l00597\" name=\"l00597\"></a><span class=\"lineno\"> 597</span> </div>\n+<div class=\"line\"><a id=\"l00598\" name=\"l00598\"></a><span class=\"lineno\"> 598</span> <span class=\"keywordflow\">return</span> y;</div>\n+<div class=\"line\"><a id=\"l00599\" name=\"l00599\"></a><span class=\"lineno\"> 599</span> }</div>\n+<div class=\"line\"><a id=\"l00600\" name=\"l00600\"></a><span class=\"lineno\"> 600</span> </div>\n+<div class=\"line\"><a id=\"l00602\" name=\"l00602\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01883.html#a5b92fef6586d83fc88f3c2efdacfd220\"> 602</a></span> <span class=\"keyword\">friend</span> <span class=\"keyword\">typename</span> <a class=\"code hl_class\" href=\"a01895.html\">Traits::LocalFunctionTraits::DerivativeInterface</a> <a class=\"code hl_friend\" href=\"a01883.html#a5b92fef6586d83fc88f3c2efdacfd220\">derivative</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01883.html\">LocalFunction</a>&)</div>\n+<div class=\"line\"><a id=\"l00603\" name=\"l00603\"></a><span class=\"lineno\"> 603</span> {</div>\n+<div class=\"line\"><a id=\"l00604\" name=\"l00604\"></a><span class=\"lineno\"> 604</span> DUNE_THROW(NotImplemented, <span class=\"stringliteral\">"derivative of derivative is not implemented"</span>);</div>\n+<div class=\"line\"><a id=\"l00605\" name=\"l00605\"></a><span class=\"lineno\"> 605</span> }</div>\n+<div class=\"line\"><a id=\"l00606\" name=\"l00606\"></a><span class=\"lineno\"> 606</span> </div>\n+<div class=\"line\"><a id=\"l00607\" name=\"l00607\"></a><span class=\"lineno\"> 607</span> <span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00608\" name=\"l00608\"></a><span class=\"lineno\"> 608</span> <span class=\"keyword\">mutable</span> PerNodeEvaluationBuffer evaluationBuffer_;</div>\n+<div class=\"line\"><a id=\"l00609\" name=\"l00609\"></a><span class=\"lineno\"> 609</span> std::optional<typename Element::Geometry> geometry_;</div>\n+<div class=\"line\"><a id=\"l00610\" name=\"l00610\"></a><span class=\"lineno\"> 610</span> };</div>\n+<div class=\"line\"><a id=\"l00611\" name=\"l00611\"></a><span class=\"lineno\"> 611</span> </div>\n+<div class=\"line\"><a id=\"l00618\" name=\"l00618\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01871.html#ad90743b77c57a28fca8afebce901fe9c\"> 618</a></span> <a class=\"code hl_function\" href=\"a01871.html#ad90743b77c57a28fca8afebce901fe9c\">DiscreteGlobalBasisFunctionDerivative</a>(<span class=\"keyword\">const</span> std::shared_ptr<const Data>& data)</div>\n+<div class=\"line\"><a id=\"l00619\" name=\"l00619\"></a><span class=\"lineno\"> 619</span> : <a class=\"code hl_class\" href=\"a01859.html\">Base</a>(data)</div>\n+<div class=\"line\"><a id=\"l00620\" name=\"l00620\"></a><span class=\"lineno\"> 620</span> {</div>\n+<div class=\"line\"><a id=\"l00621\" name=\"l00621\"></a><span class=\"lineno\"> 621</span> <span class=\"comment\">/* Nothing. */</span></div>\n+<div class=\"line\"><a id=\"l00622\" name=\"l00622\"></a><span class=\"lineno\"> 622</span> }</div>\n+<div class=\"line\"><a id=\"l00623\" name=\"l00623\"></a><span class=\"lineno\"> 623</span> </div>\n+<div class=\"line\"><a id=\"l00625\" name=\"l00625\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01871.html#a750aa57a27e3866ba5327228de065834\"> 625</a></span> <a class=\"code hl_typedef\" href=\"a01871.html#a85ee067d6e6eac54a36fff9cc40202a2\">Range</a> <a class=\"code hl_function\" href=\"a01871.html#a750aa57a27e3866ba5327228de065834\">operator()</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01871.html#afeaec17adccaddbd723f29af94cbf898\">Domain</a>& x)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00626\" name=\"l00626\"></a><span class=\"lineno\"> 626</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00627\" name=\"l00627\"></a><span class=\"lineno\"> 627</span> <span class=\"comment\">// TODO: Implement this using hierarchic search</span></div>\n+<div class=\"line\"><a id=\"l00628\" name=\"l00628\"></a><span class=\"lineno\"> 628</span> DUNE_THROW(NotImplemented,<span class=\"stringliteral\">"not implemented"</span>);</div>\n+<div class=\"line\"><a id=\"l00629\" name=\"l00629\"></a><span class=\"lineno\"> 629</span> }</div>\n+<div class=\"line\"><a id=\"l00630\" name=\"l00630\"></a><span class=\"lineno\"> 630</span> </div>\n+<div class=\"line\"><a id=\"l00631\" name=\"l00631\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01871.html#a40e13d696d1b295a5310636c13f191b1\"> 631</a></span> <span class=\"keyword\">friend</span> <span class=\"keyword\">typename</span> <a class=\"code hl_class\" href=\"a01895.html\">Traits::DerivativeInterface</a> <a class=\"code hl_friend\" href=\"a01871.html#a40e13d696d1b295a5310636c13f191b1\">derivative</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01871.html\">DiscreteGlobalBasisFunctionDerivative</a>& f)</div>\n+<div class=\"line\"><a id=\"l00632\" name=\"l00632\"></a><span class=\"lineno\"> 632</span> {</div>\n+<div class=\"line\"><a id=\"l00633\" name=\"l00633\"></a><span class=\"lineno\"> 633</span> DUNE_THROW(NotImplemented, <span class=\"stringliteral\">"derivative of derivative is not implemented"</span>);</div>\n+<div class=\"line\"><a id=\"l00634\" name=\"l00634\"></a><span class=\"lineno\"> 634</span> }</div>\n+<div class=\"line\"><a id=\"l00635\" name=\"l00635\"></a><span class=\"lineno\"> 635</span> </div>\n+<div class=\"line\"><a id=\"l00637\" name=\"l00637\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01871.html#ad4951a7b1941d2d6314695f8d2ae5267\"> 637</a></span> <span class=\"keyword\">friend</span> <a class=\"code hl_class\" href=\"a01883.html\">LocalFunction</a> <a class=\"code hl_friend\" href=\"a01871.html#ad4951a7b1941d2d6314695f8d2ae5267\">localFunction</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01871.html\">DiscreteGlobalBasisFunctionDerivative</a>& f)</div>\n+<div class=\"line\"><a id=\"l00638\" name=\"l00638\"></a><span class=\"lineno\"> 638</span> {</div>\n+<div class=\"line\"><a id=\"l00639\" name=\"l00639\"></a><span class=\"lineno\"> 639</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01883.html\">LocalFunction</a>(f);</div>\n+<div class=\"line\"><a id=\"l00640\" name=\"l00640\"></a><span class=\"lineno\"> 640</span> }</div>\n+<div class=\"line\"><a id=\"l00641\" name=\"l00641\"></a><span class=\"lineno\"> 641</span>};</div>\n+<div class=\"line\"><a id=\"l00642\" name=\"l00642\"></a><span class=\"lineno\"> 642</span> </div>\n+<div class=\"line\"><a id=\"l00643\" name=\"l00643\"></a><span class=\"lineno\"> 643</span> </div>\n+<div class=\"line\"><a id=\"l00644\" name=\"l00644\"></a><span class=\"lineno\"> 644</span>} <span class=\"comment\">// namespace Functions</span></div>\n+<div class=\"line\"><a id=\"l00645\" name=\"l00645\"></a><span class=\"lineno\"> 645</span>} <span class=\"comment\">// namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00646\" name=\"l00646\"></a><span class=\"lineno\"> 646</span> </div>\n+<div class=\"line\"><a id=\"l00647\" name=\"l00647\"></a><span class=\"lineno\"> 647</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_GRIDFUNCTIONS_DISCRETEGLOBALBASISFUNCTIONS_HH</span></div>\n+<div class=\"ttc\" id=\"aa00083_html\"><div class=\"ttname\"><a href=\"a00083.html\">gridviewentityset.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00098_html\"><div class=\"ttname\"><a href=\"a00098.html\">gridfunction.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00155_html\"><div class=\"ttname\"><a href=\"a00155.html\">flatvectorview.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00170_html\"><div class=\"ttname\"><a href=\"a00170.html\">hierarchicnodetorangemap.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00191_html\"><div class=\"ttname\"><a href=\"a00191.html\">istlvectorbackend.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00209_html_ga9f1a8d6ac1558adad6150feb9b4e3168\"><div class=\"ttname\"><a href=\"a00209.html#ga9f1a8d6ac1558adad6150feb9b4e3168\">Dune::Functions::DiscreteGlobalBasisFunction::makeDiscreteGlobalBasisFunction</a></div><div class=\"ttdeci\">auto makeDiscreteGlobalBasisFunction(B &&basis, V &&vector)</div><div class=\"ttdoc\">Generate a DiscreteGlobalBasisFunction.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:432</div></div>\n+<div class=\"ttc\" id=\"aa00214_html_gae5b9f62f85e3d638423142695a74d056\"><div class=\"ttname\"><a href=\"a00214.html#gae5b9f62f85e3d638423142695a74d056\">Dune::Functions::istlVectorBackend</a></div><div class=\"ttdeci\">auto istlVectorBackend(Vector &v)</div><div class=\"ttdoc\">Return a vector backend wrapping non-const ISTL like containers.</div><div class=\"ttdef\"><b>Definition:</b> istlvectorbackend.hh:346</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa01279_html\"><div class=\"ttname\"><a href=\"a01279.html\">Dune::Functions::PolymorphicSmallObject</a></div><div class=\"ttdoc\">A wrapper providing small object optimization with polymorphic types.</div><div class=\"ttdef\"><b>Definition:</b> polymorphicsmallobject.hh:45</div></div>\n-<div class=\"ttc\" id=\"aa01279_html_a194b49151e7264d77ca70777bf1c3d48\"><div class=\"ttname\"><a href=\"a01279.html#a194b49151e7264d77ca70777bf1c3d48\">Dune::Functions::PolymorphicSmallObject::get</a></div><div class=\"ttdeci\">const Base & get() const</div><div class=\"ttdoc\">Obtain reference to stored object.</div><div class=\"ttdef\"><b>Definition:</b> polymorphicsmallobject.hh:122</div></div>\n-<div class=\"ttc\" id=\"aa01279_html_a40b4620d6b4cdf63072914d621059db0\"><div class=\"ttname\"><a href=\"a01279.html#a40b4620d6b4cdf63072914d621059db0\">Dune::Functions::PolymorphicSmallObject::bufferUsed</a></div><div class=\"ttdeci\">bool bufferUsed() const</div><div class=\"ttdoc\">Check if object is stored in internal stack buffer.</div><div class=\"ttdef\"><b>Definition:</b> polymorphicsmallobject.hh:116</div></div>\n-<div class=\"ttc\" id=\"aa01279_html_a480e7b17ee91d54d4cf4c7d33bfd67d9\"><div class=\"ttname\"><a href=\"a01279.html#a480e7b17ee91d54d4cf4c7d33bfd67d9\">Dune::Functions::PolymorphicSmallObject::PolymorphicSmallObject</a></div><div class=\"ttdeci\">PolymorphicSmallObject(Derived &&derived)</div><div class=\"ttdoc\">Construct from object.</div><div class=\"ttdef\"><b>Definition:</b> polymorphicsmallobject.hh:62</div></div>\n-<div class=\"ttc\" id=\"aa01279_html_a4b1d4df1c0a49f22c3da8beff0412560\"><div class=\"ttname\"><a href=\"a01279.html#a4b1d4df1c0a49f22c3da8beff0412560\">Dune::Functions::PolymorphicSmallObject::PolymorphicSmallObject</a></div><div class=\"ttdeci\">PolymorphicSmallObject(PolymorphicSmallObject &&other) noexcept</div><div class=\"ttdoc\">Move constructor from other PolymorphicSmallObject.</div><div class=\"ttdef\"><b>Definition:</b> polymorphicsmallobject.hh:73</div></div>\n-<div class=\"ttc\" id=\"aa01279_html_a540e643bdb360a590d5571d82509e119\"><div class=\"ttname\"><a href=\"a01279.html#a540e643bdb360a590d5571d82509e119\">Dune::Functions::PolymorphicSmallObject::operator=</a></div><div class=\"ttdeci\">PolymorphicSmallObject & operator=(const PolymorphicSmallObject &other)</div><div class=\"ttdoc\">Copy assignment from other PolymorphicSmallObject.</div><div class=\"ttdef\"><b>Definition:</b> polymorphicsmallobject.hh:91</div></div>\n-<div class=\"ttc\" id=\"aa01279_html_a88a795d1d9914c3ac19aa2b72ae16e81\"><div class=\"ttname\"><a href=\"a01279.html#a88a795d1d9914c3ac19aa2b72ae16e81\">Dune::Functions::PolymorphicSmallObject::operator=</a></div><div class=\"ttdeci\">PolymorphicSmallObject & operator=(PolymorphicSmallObject &&other) noexcept</div><div class=\"ttdoc\">Move assignment from other PolymorphicSmallObject.</div><div class=\"ttdef\"><b>Definition:</b> polymorphicsmallobject.hh:102</div></div>\n-<div class=\"ttc\" id=\"aa01279_html_a9d9b0d1436228de2c11df7acacad66ae\"><div class=\"ttname\"><a href=\"a01279.html#a9d9b0d1436228de2c11df7acacad66ae\">Dune::Functions::PolymorphicSmallObject::PolymorphicSmallObject</a></div><div class=\"ttdeci\">PolymorphicSmallObject(const PolymorphicSmallObject &other)</div><div class=\"ttdoc\">Copy constructor from other PolymorphicSmallObject.</div><div class=\"ttdef\"><b>Definition:</b> polymorphicsmallobject.hh:79</div></div>\n-<div class=\"ttc\" id=\"aa01279_html_aa0714dd1c60221fbbd867f9796ccf722\"><div class=\"ttname\"><a href=\"a01279.html#aa0714dd1c60221fbbd867f9796ccf722\">Dune::Functions::PolymorphicSmallObject::~PolymorphicSmallObject</a></div><div class=\"ttdeci\">~PolymorphicSmallObject()</div><div class=\"ttdoc\">Destructor.</div><div class=\"ttdef\"><b>Definition:</b> polymorphicsmallobject.hh:85</div></div>\n-<div class=\"ttc\" id=\"aa01279_html_ab91da8192c7c5d7a796d79145ce97c84\"><div class=\"ttname\"><a href=\"a01279.html#ab91da8192c7c5d7a796d79145ce97c84\">Dune::Functions::PolymorphicSmallObject::PolymorphicSmallObject</a></div><div class=\"ttdeci\">PolymorphicSmallObject()</div><div class=\"ttdoc\">Default constructor.</div><div class=\"ttdef\"><b>Definition:</b> polymorphicsmallobject.hh:49</div></div>\n-<div class=\"ttc\" id=\"aa01279_html_aead63ee7264c3395258988ac2b319983\"><div class=\"ttname\"><a href=\"a01279.html#aead63ee7264c3395258988ac2b319983\">Dune::Functions::PolymorphicSmallObject::get</a></div><div class=\"ttdeci\">Base & get()</div><div class=\"ttdoc\">Obtain mutable reference to stored object.</div><div class=\"ttdef\"><b>Definition:</b> polymorphicsmallobject.hh:128</div></div>\n+<div class=\"ttc\" id=\"aa00219_html_ad98b265d97ebd619e7732df6a8d1f7da\"><div class=\"ttname\"><a href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\">Dune::Functions::flatVectorView</a></div><div class=\"ttdeci\">auto flatVectorView(T &t)</div><div class=\"ttdoc\">Create flat vector view of passed mutable container.</div><div class=\"ttdef\"><b>Definition:</b> flatvectorview.hh:179</div></div>\n+<div class=\"ttc\" id=\"aa01075_html\"><div class=\"ttname\"><a href=\"a01075.html\">Dune::Functions::DefaultDerivativeTraits</a></div><div class=\"ttdoc\">Default implementation for derivative traits.</div><div class=\"ttdef\"><b>Definition:</b> defaultderivativetraits.hh:37</div></div>\n+<div class=\"ttc\" id=\"aa01291_html\"><div class=\"ttname\"><a href=\"a01291.html\">Dune::Functions::SignatureTraits</a></div><div class=\"ttdoc\">Helper class to deduce the signature of a callable.</div><div class=\"ttdef\"><b>Definition:</b> signature.hh:56</div></div>\n+<div class=\"ttc\" id=\"aa01627_html\"><div class=\"ttname\"><a href=\"a01627.html\">Dune::Functions::HierarchicNodeToRangeMap</a></div><div class=\"ttdoc\">A simple node to range map using the nested tree indices.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicnodetorangemap.hh:30</div></div>\n+<div class=\"ttc\" id=\"aa01859_html\"><div class=\"ttname\"><a href=\"a01859.html\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase</a></div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:28</div></div>\n+<div class=\"ttc\" id=\"aa01859_html_a0251d9a5ba7ae012993ed75089870604\"><div class=\"ttname\"><a href=\"a01859.html#a0251d9a5ba7ae012993ed75089870604\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::data_</a></div><div class=\"ttdeci\">std::shared_ptr< const Data > data_</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:217</div></div>\n+<div class=\"ttc\" id=\"aa01859_html_a185c69d8397b09a1b74eb56cf62f40c6\"><div class=\"ttname\"><a href=\"a01859.html#a185c69d8397b09a1b74eb56cf62f40c6\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::dofs</a></div><div class=\"ttdeci\">const Vector & dofs() const</div><div class=\"ttdoc\">Return the coefficients of this discrete function by reference.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:199</div></div>\n+<div class=\"ttc\" id=\"aa01859_html_a3692f2d61e9901fcc190337eb0c8d2c3\"><div class=\"ttname\"><a href=\"a01859.html#a3692f2d61e9901fcc190337eb0c8d2c3\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Basis</a></div><div class=\"ttdeci\">B Basis</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:30</div></div>\n+<div class=\"ttc\" id=\"aa01859_html_a3a7684473e5977409b31ad9954d60b17\"><div class=\"ttname\"><a href=\"a01859.html#a3a7684473e5977409b31ad9954d60b17\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Tree</a></div><div class=\"ttdeci\">typename Basis::LocalView::Tree Tree</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:39</div></div>\n+<div class=\"ttc\" id=\"aa01859_html_a4f1c5b75cd112f7524b65de9e68c6f4c\"><div class=\"ttname\"><a href=\"a01859.html#a4f1c5b75cd112f7524b65de9e68c6f4c\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Vector</a></div><div class=\"ttdeci\">V Vector</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:31</div></div>\n+<div class=\"ttc\" id=\"aa01859_html_a7669d95a17a5a94621074923290978b7\"><div class=\"ttname\"><a href=\"a01859.html#a7669d95a17a5a94621074923290978b7\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Element</a></div><div class=\"ttdeci\">typename EntitySet::Element Element</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:45</div></div>\n+<div class=\"ttc\" id=\"aa01859_html_a778a8d51295ab8988578c8ec5c80f15a\"><div class=\"ttname\"><a href=\"a01859.html#a778a8d51295ab8988578c8ec5c80f15a\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalDomain</a></div><div class=\"ttdeci\">typename EntitySet::LocalCoordinate LocalDomain</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:44</div></div>\n+<div class=\"ttc\" id=\"aa01859_html_a8b079bb398dc95ba48399e66e05aa0fa\"><div class=\"ttname\"><a href=\"a01859.html#a8b079bb398dc95ba48399e66e05aa0fa\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::nodeToRangeEntry</a></div><div class=\"ttdeci\">const NodeToRangeEntry & nodeToRangeEntry() const</div><div class=\"ttdoc\">Return the stored node-to-range map.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:205</div></div>\n+<div class=\"ttc\" id=\"aa01859_html_a919c73d3602d7770ab2aa6ec9beaa2df\"><div class=\"ttname\"><a href=\"a01859.html#a919c73d3602d7770ab2aa6ec9beaa2df\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::NodeToRangeEntry</a></div><div class=\"ttdeci\">NTRE NodeToRangeEntry</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:40</div></div>\n+<div class=\"ttc\" id=\"aa01859_html_a91a8cf0d245095a4c91615f42ffb4f4c\"><div class=\"ttname\"><a href=\"a01859.html#a91a8cf0d245095a4c91615f42ffb4f4c\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::DiscreteGlobalBasisFunctionBase</a></div><div class=\"ttdeci\">DiscreteGlobalBasisFunctionBase(const std::shared_ptr< const Data > &data)</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:184</div></div>\n+<div class=\"ttc\" id=\"aa01859_html_a94980a3da72955394fdf377b328aa6cd\"><div class=\"ttname\"><a href=\"a01859.html#a94980a3da72955394fdf377b328aa6cd\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::GridView</a></div><div class=\"ttdeci\">typename Basis::GridView GridView</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:37</div></div>\n+<div class=\"ttc\" id=\"aa01859_html_a99bd572882384ae95a30297f0797d769\"><div class=\"ttname\"><a href=\"a01859.html#a99bd572882384ae95a30297f0797d769\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::basis</a></div><div class=\"ttdeci\">const Basis & basis() const</div><div class=\"ttdoc\">Return a const reference to the stored basis.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:193</div></div>\n+<div class=\"ttc\" id=\"aa01859_html_aa0f3fc49504b54be8b78cb443b447747\"><div class=\"ttname\"><a href=\"a01859.html#aa0f3fc49504b54be8b78cb443b447747\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::EntitySet</a></div><div class=\"ttdeci\">GridViewEntitySet< GridView, 0 > EntitySet</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:38</div></div>\n+<div class=\"ttc\" id=\"aa01859_html_ab0e59b1504a825f12634528b132a1448\"><div class=\"ttname\"><a href=\"a01859.html#ab0e59b1504a825f12634528b132a1448\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::entitySet</a></div><div class=\"ttdeci\">const EntitySet & entitySet() const</div><div class=\"ttdoc\">Get associated set of entities the local-function can be bound to.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:211</div></div>\n+<div class=\"ttc\" id=\"aa01859_html_ac531ebbef4d77df5dd685f2f26024f95\"><div class=\"ttname\"><a href=\"a01859.html#ac531ebbef4d77df5dd685f2f26024f95\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Domain</a></div><div class=\"ttdeci\">typename EntitySet::GlobalCoordinate Domain</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:42</div></div>\n+<div class=\"ttc\" id=\"aa01859_html_ad8324d107176745d5db37c17e160fb51\"><div class=\"ttname\"><a href=\"a01859.html#ad8324d107176745d5db37c17e160fb51\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Coefficient</a></div><div class=\"ttdeci\">Dune::AutonomousValue< decltype(std::declval< Vector >()[std::declval< typename Basis::MultiIndex >()])> Coefficient</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:35</div></div>\n+<div class=\"ttc\" id=\"aa01863_html\"><div class=\"ttname\"><a href=\"a01863.html\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Data</a></div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:53</div></div>\n+<div class=\"ttc\" id=\"aa01863_html_a869d1890dea002afea9673d30bf7a6f9\"><div class=\"ttname\"><a href=\"a01863.html#a869d1890dea002afea9673d30bf7a6f9\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Data::entitySet</a></div><div class=\"ttdeci\">EntitySet entitySet</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:54</div></div>\n+<div class=\"ttc\" id=\"aa01863_html_a8806af774b27a785e8a4eb0d58df560c\"><div class=\"ttname\"><a href=\"a01863.html#a8806af774b27a785e8a4eb0d58df560c\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Data::nodeToRangeEntry</a></div><div class=\"ttdeci\">std::shared_ptr< const NodeToRangeEntry > nodeToRangeEntry</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:57</div></div>\n+<div class=\"ttc\" id=\"aa01863_html_aa8af2b92d6781bed52269bfaf15a03d7\"><div class=\"ttname\"><a href=\"a01863.html#aa8af2b92d6781bed52269bfaf15a03d7\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Data::basis</a></div><div class=\"ttdeci\">std::shared_ptr< const Basis > basis</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:55</div></div>\n+<div class=\"ttc\" id=\"aa01863_html_ab0ba9b881560f475ebfbc8245e898f06\"><div class=\"ttname\"><a href=\"a01863.html#ab0ba9b881560f475ebfbc8245e898f06\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Data::coefficients</a></div><div class=\"ttdeci\">std::shared_ptr< const Vector > coefficients</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:56</div></div>\n+<div class=\"ttc\" id=\"aa01867_html\"><div class=\"ttname\"><a href=\"a01867.html\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase</a></div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:62</div></div>\n+<div class=\"ttc\" id=\"aa01867_html_a253e2dcc1809bca0e981c132e6d4770c\"><div class=\"ttname\"><a href=\"a01867.html#a253e2dcc1809bca0e981c132e6d4770c\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::operator=</a></div><div class=\"ttdeci\">LocalFunctionBase & operator=(const LocalFunctionBase &other)</div><div class=\"ttdoc\">Copy-assignment of the local-function.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:100</div></div>\n+<div class=\"ttc\" id=\"aa01867_html_a28431fd8e25a148fc8c203a0b8394ac5\"><div class=\"ttname\"><a href=\"a01867.html#a28431fd8e25a148fc8c203a0b8394ac5\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::bound</a></div><div class=\"ttdeci\">bool bound() const</div><div class=\"ttdoc\">Check if LocalFunction is already bound to an element.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:149</div></div>\n+<div class=\"ttc\" id=\"aa01867_html_a67e646a96343c7f80528fe2f82a7ee54\"><div class=\"ttname\"><a href=\"a01867.html#a67e646a96343c7f80528fe2f82a7ee54\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::bind</a></div><div class=\"ttdeci\">void bind(const Element &element)</div><div class=\"ttdoc\">Bind LocalFunction to grid element.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:116</div></div>\n+<div class=\"ttc\" id=\"aa01867_html_a8d6caba81e31526ba3a7d66b1ab299a3\"><div class=\"ttname\"><a href=\"a01867.html#a8d6caba81e31526ba3a7d66b1ab299a3\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::Element</a></div><div class=\"ttdeci\">typename EntitySet::Element Element</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:68</div></div>\n+<div class=\"ttc\" id=\"aa01867_html_a8daa49aa0c6c0d333460ebe354c3988b\"><div class=\"ttname\"><a href=\"a01867.html#a8daa49aa0c6c0d333460ebe354c3988b\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::localContext</a></div><div class=\"ttdeci\">const Element & localContext() const</div><div class=\"ttdoc\">Return the element the local-function is bound to.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:155</div></div>\n+<div class=\"ttc\" id=\"aa01867_html_aa33d4463ef895fc15aba8b8eaedf3506\"><div class=\"ttname\"><a href=\"a01867.html#aa33d4463ef895fc15aba8b8eaedf3506\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::LocalFunctionBase</a></div><div class=\"ttdeci\">LocalFunctionBase(const LocalFunctionBase &other)</div><div class=\"ttdoc\">Copy-construct the local-function.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:84</div></div>\n+<div class=\"ttc\" id=\"aa01867_html_aa62fc9b9cfde610dea2e5fedfc5c6f83\"><div class=\"ttname\"><a href=\"a01867.html#aa62fc9b9cfde610dea2e5fedfc5c6f83\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::localDoFs_</a></div><div class=\"ttdeci\">std::vector< Coefficient > localDoFs_</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:180</div></div>\n+<div class=\"ttc\" id=\"aa01867_html_abf8dc20ea65b2fd88df03377f9a703dc\"><div class=\"ttname\"><a href=\"a01867.html#abf8dc20ea65b2fd88df03377f9a703dc\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::assignWith</a></div><div class=\"ttdeci\">void assignWith(To &to, const From &from) const</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:163</div></div>\n+<div class=\"ttc\" id=\"aa01867_html_ac19ebafe7e6f57872bf25b9c91718487\"><div class=\"ttname\"><a href=\"a01867.html#ac19ebafe7e6f57872bf25b9c91718487\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::data_</a></div><div class=\"ttdeci\">std::shared_ptr< const Data > data_</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:178</div></div>\n+<div class=\"ttc\" id=\"aa01867_html_ac929b2a99a94dc5e5c5f4bd1404716c5\"><div class=\"ttname\"><a href=\"a01867.html#ac929b2a99a94dc5e5c5f4bd1404716c5\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::nodeToRangeEntry</a></div><div class=\"ttdeci\">decltype(auto) nodeToRangeEntry(const Node &node, const TreePath &treePath, Range &y) const</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:173</div></div>\n+<div class=\"ttc\" id=\"aa01867_html_ac95fafaea79e1434ea5d9a8092e5945b\"><div class=\"ttname\"><a href=\"a01867.html#ac95fafaea79e1434ea5d9a8092e5945b\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::localView_</a></div><div class=\"ttdeci\">LocalView localView_</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:179</div></div>\n+<div class=\"ttc\" id=\"aa01867_html_ae5b6f77f23f1f5f28db616390dfa5d95\"><div class=\"ttname\"><a href=\"a01867.html#ae5b6f77f23f1f5f28db616390dfa5d95\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::unbind</a></div><div class=\"ttdeci\">void unbind()</div><div class=\"ttdoc\">Unbind the local-function.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:143</div></div>\n+<div class=\"ttc\" id=\"aa01867_html_aed06cdee2f1095692d99f2b70b9e08cf\"><div class=\"ttname\"><a href=\"a01867.html#aed06cdee2f1095692d99f2b70b9e08cf\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::Domain</a></div><div class=\"ttdeci\">LocalDomain Domain</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:67</div></div>\n+<div class=\"ttc\" id=\"aa01867_html_afabe7cb22621b6a62e3b2f58b2ce9a96\"><div class=\"ttname\"><a href=\"a01867.html#afabe7cb22621b6a62e3b2f58b2ce9a96\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::LocalFunctionBase</a></div><div class=\"ttdeci\">LocalFunctionBase(const std::shared_ptr< const Data > &data)</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:71</div></div>\n+<div class=\"ttc\" id=\"aa01871_html\"><div class=\"ttname\"><a href=\"a01871.html\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative</a></div><div class=\"ttdoc\">Derivative of a DiscreteGlobalBasisFunction</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:472</div></div>\n+<div class=\"ttc\" id=\"aa01871_html_a25856bf0d4e67d51b5d57675696a76d0\"><div class=\"ttname\"><a href=\"a01871.html#a25856bf0d4e67d51b5d57675696a76d0\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::Basis</a></div><div class=\"ttdeci\">typename Base::Basis Basis</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:479</div></div>\n+<div class=\"ttc\" id=\"aa01871_html_a40e13d696d1b295a5310636c13f191b1\"><div class=\"ttname\"><a href=\"a01871.html#a40e13d696d1b295a5310636c13f191b1\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::derivative</a></div><div class=\"ttdeci\">friend Traits::DerivativeInterface derivative(const DiscreteGlobalBasisFunctionDerivative &f)</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:631</div></div>\n+<div class=\"ttc\" id=\"aa01871_html_a750aa57a27e3866ba5327228de065834\"><div class=\"ttname\"><a href=\"a01871.html#a750aa57a27e3866ba5327228de065834\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::operator()</a></div><div class=\"ttdeci\">Range operator()(const Domain &x) const</div><div class=\"ttdoc\">Not implemented.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:625</div></div>\n+<div class=\"ttc\" id=\"aa01871_html_a85ee067d6e6eac54a36fff9cc40202a2\"><div class=\"ttname\"><a href=\"a01871.html#a85ee067d6e6eac54a36fff9cc40202a2\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::Range</a></div><div class=\"ttdeci\">typename SignatureTraits< typename DiscreteGlobalBasisFunction::Traits::DerivativeInterface >::Range Range</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:483</div></div>\n+<div class=\"ttc\" id=\"aa01871_html_ad4951a7b1941d2d6314695f8d2ae5267\"><div class=\"ttname\"><a href=\"a01871.html#ad4951a7b1941d2d6314695f8d2ae5267\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::localFunction</a></div><div class=\"ttdeci\">friend LocalFunction localFunction(const DiscreteGlobalBasisFunctionDerivative &f)</div><div class=\"ttdoc\">Construct local function from a DiscreteGlobalBasisFunctionDerivative</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:637</div></div>\n+<div class=\"ttc\" id=\"aa01871_html_ad90743b77c57a28fca8afebce901fe9c\"><div class=\"ttname\"><a href=\"a01871.html#ad90743b77c57a28fca8afebce901fe9c\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::DiscreteGlobalBasisFunctionDerivative</a></div><div class=\"ttdeci\">DiscreteGlobalBasisFunctionDerivative(const std::shared_ptr< const Data > &data)</div><div class=\"ttdoc\">create object from DiscreateGlobalBasisFunction data</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:618</div></div>\n+<div class=\"ttc\" id=\"aa01871_html_ae3ccd2cccb1c2c5df855692f5c73469f\"><div class=\"ttname\"><a href=\"a01871.html#ae3ccd2cccb1c2c5df855692f5c73469f\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::DiscreteGlobalBasisFunction</a></div><div class=\"ttdeci\">DGBF DiscreteGlobalBasisFunction</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:477</div></div>\n+<div class=\"ttc\" id=\"aa01871_html_aef7bc40b43c4903d146c539075a00ca1\"><div class=\"ttname\"><a href=\"a01871.html#aef7bc40b43c4903d146c539075a00ca1\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::Vector</a></div><div class=\"ttdeci\">typename Base::Vector Vector</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:480</div></div>\n+<div class=\"ttc\" id=\"aa01871_html_af59af75dbcd31f48108a932e508007d7\"><div class=\"ttname\"><a href=\"a01871.html#af59af75dbcd31f48108a932e508007d7\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::Traits</a></div><div class=\"ttdeci\">Imp::GridFunctionTraits< Range(Domain), typename Base::EntitySet, DefaultDerivativeTraits, 16 > Traits</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:485</div></div>\n+<div class=\"ttc\" id=\"aa01871_html_afeaec17adccaddbd723f29af94cbf898\"><div class=\"ttname\"><a href=\"a01871.html#afeaec17adccaddbd723f29af94cbf898\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::Domain</a></div><div class=\"ttdeci\">typename Base::Domain Domain</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:482</div></div>\n+<div class=\"ttc\" id=\"aa01875_html\"><div class=\"ttname\"><a href=\"a01875.html\">Dune::Functions::DiscreteGlobalBasisFunction</a></div><div class=\"ttdoc\">A grid function induced by a global basis and a coefficient vector.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:269</div></div>\n+<div class=\"ttc\" id=\"aa01875_html_a0566ab696496e9dc76efb16d8434c49a\"><div class=\"ttname\"><a href=\"a01875.html#a0566ab696496e9dc76efb16d8434c49a\">Dune::Functions::DiscreteGlobalBasisFunction::derivative</a></div><div class=\"ttdeci\">friend DiscreteGlobalBasisFunctionDerivative< DiscreteGlobalBasisFunction > derivative(const DiscreteGlobalBasisFunction &f)</div><div class=\"ttdoc\">Derivative of the DiscreteGlobalBasisFunction</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:389</div></div>\n+<div class=\"ttc\" id=\"aa01875_html_a51960f49c44a04d5381bbe370a8d6faf\"><div class=\"ttname\"><a href=\"a01875.html#a51960f49c44a04d5381bbe370a8d6faf\">Dune::Functions::DiscreteGlobalBasisFunction::DiscreteGlobalBasisFunction</a></div><div class=\"ttdeci\">DiscreteGlobalBasisFunction(B_T &&basis, V_T &&coefficients, NTRE_T &&nodeToRangeEntry)</div><div class=\"ttdoc\">Create a grid-function, by wrapping the arguments in std::shared_ptr.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:372</div></div>\n+<div class=\"ttc\" id=\"aa01875_html_a580dd72665826b508e6c5b64c3f36276\"><div class=\"ttname\"><a href=\"a01875.html#a580dd72665826b508e6c5b64c3f36276\">Dune::Functions::DiscreteGlobalBasisFunction::DiscreteGlobalBasisFunction</a></div><div class=\"ttdeci\">DiscreteGlobalBasisFunction(std::shared_ptr< const Basis > basis, std::shared_ptr< const V > coefficients, std::shared_ptr< const typename Base::NodeToRangeEntry > nodeToRangeEntry)</div><div class=\"ttdoc\">Create a grid-function, by moving the arguments in std::shared_ptr.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:377</div></div>\n+<div class=\"ttc\" id=\"aa01875_html_a5f39570268385d3bfc1e3b5565e9bd9f\"><div class=\"ttname\"><a href=\"a01875.html#a5f39570268385d3bfc1e3b5565e9bd9f\">Dune::Functions::DiscreteGlobalBasisFunction::localFunction</a></div><div class=\"ttdeci\">friend LocalFunction localFunction(const DiscreteGlobalBasisFunction &t)</div><div class=\"ttdoc\">Construct local function from a DiscreteGlobalBasisFunction.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:402</div></div>\n+<div class=\"ttc\" id=\"aa01875_html_a762b42975185ccea60c8197341862cca\"><div class=\"ttname\"><a href=\"a01875.html#a762b42975185ccea60c8197341862cca\">Dune::Functions::DiscreteGlobalBasisFunction::Basis</a></div><div class=\"ttdeci\">typename Base::Basis Basis</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:274</div></div>\n+<div class=\"ttc\" id=\"aa01875_html_ab308263b7fd188c267709c7bc0b47568\"><div class=\"ttname\"><a href=\"a01875.html#ab308263b7fd188c267709c7bc0b47568\">Dune::Functions::DiscreteGlobalBasisFunction::Traits</a></div><div class=\"ttdeci\">Imp::GridFunctionTraits< Range(Domain), typename Base::EntitySet, DefaultDerivativeTraits, 16 > Traits</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:280</div></div>\n+<div class=\"ttc\" id=\"aa01875_html_aca6beda0ac337eb862bd6540f71f7d29\"><div class=\"ttname\"><a href=\"a01875.html#aca6beda0ac337eb862bd6540f71f7d29\">Dune::Functions::DiscreteGlobalBasisFunction::Range</a></div><div class=\"ttdeci\">R Range</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:278</div></div>\n+<div class=\"ttc\" id=\"aa01875_html_ace9d1aac90e09365577516e06fb148a4\"><div class=\"ttname\"><a href=\"a01875.html#ace9d1aac90e09365577516e06fb148a4\">Dune::Functions::DiscreteGlobalBasisFunction::Vector</a></div><div class=\"ttdeci\">typename Base::Vector Vector</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:275</div></div>\n+<div class=\"ttc\" id=\"aa01875_html_aeb0a34de4cd353524e324cc57591a432\"><div class=\"ttname\"><a href=\"a01875.html#aeb0a34de4cd353524e324cc57591a432\">Dune::Functions::DiscreteGlobalBasisFunction::Domain</a></div><div class=\"ttdeci\">typename Base::Domain Domain</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:277</div></div>\n+<div class=\"ttc\" id=\"aa01879_html\"><div class=\"ttname\"><a href=\"a01879.html\">Dune::Functions::DiscreteGlobalBasisFunction::LocalFunction</a></div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:293</div></div>\n+<div class=\"ttc\" id=\"aa01879_html_a8b339405cc5358cfdac2d3775c590acd\"><div class=\"ttname\"><a href=\"a01879.html#a8b339405cc5358cfdac2d3775c590acd\">Dune::Functions::DiscreteGlobalBasisFunction::LocalFunction::Range</a></div><div class=\"ttdeci\">GlobalFunction::Range Range</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:302</div></div>\n+<div class=\"ttc\" id=\"aa01879_html_ab5ae226004affb757598beabae1ff888\"><div class=\"ttname\"><a href=\"a01879.html#ab5ae226004affb757598beabae1ff888\">Dune::Functions::DiscreteGlobalBasisFunction::LocalFunction::LocalFunction</a></div><div class=\"ttdeci\">LocalFunction(const DiscreteGlobalBasisFunction &globalFunction)</div><div class=\"ttdoc\">Create a local-function from the associated grid-function.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:306</div></div>\n+<div class=\"ttc\" id=\"aa01879_html_abcf8db8c634fdb5cfd2a6af1767b6445\"><div class=\"ttname\"><a href=\"a01879.html#abcf8db8c634fdb5cfd2a6af1767b6445\">Dune::Functions::DiscreteGlobalBasisFunction::LocalFunction::derivative</a></div><div class=\"ttdeci\">friend DiscreteGlobalBasisFunctionDerivative< DiscreteGlobalBasisFunction >::LocalFunction derivative(const LocalFunction &lf)</div><div class=\"ttdoc\">Local function of the derivative.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:358</div></div>\n+<div class=\"ttc\" id=\"aa01879_html_adb064f66b447712a2c36534c2256c357\"><div class=\"ttname\"><a href=\"a01879.html#adb064f66b447712a2c36534c2256c357\">Dune::Functions::DiscreteGlobalBasisFunction::LocalFunction::operator()</a></div><div class=\"ttdeci\">Range operator()(const Domain &x) const</div><div class=\"ttdoc\">Evaluate this local-function in coordinates x in the bound element.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:322</div></div>\n+<div class=\"ttc\" id=\"aa01883_html\"><div class=\"ttname\"><a href=\"a01883.html\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::LocalFunction</a></div><div class=\"ttdoc\">local function evaluating the derivative in reference coordinates</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:506</div></div>\n+<div class=\"ttc\" id=\"aa01883_html_a1f6a443d0aca3f3cb532e2c81b4017d2\"><div class=\"ttname\"><a href=\"a01883.html#a1f6a443d0aca3f3cb532e2c81b4017d2\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::LocalFunction::operator()</a></div><div class=\"ttdeci\">Range operator()(const Domain &x) const</div><div class=\"ttdoc\">Evaluate this local-function in coordinates x in the bound element.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:557</div></div>\n+<div class=\"ttc\" id=\"aa01883_html_a5b92fef6586d83fc88f3c2efdacfd220\"><div class=\"ttname\"><a href=\"a01883.html#a5b92fef6586d83fc88f3c2efdacfd220\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::LocalFunction::derivative</a></div><div class=\"ttdeci\">friend Traits::LocalFunctionTraits::DerivativeInterface derivative(const LocalFunction &)</div><div class=\"ttdoc\">Not implemented.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:602</div></div>\n+<div class=\"ttc\" id=\"aa01883_html_abf2deb819d532ec2dfd8e170ddfd72b5\"><div class=\"ttname\"><a href=\"a01883.html#abf2deb819d532ec2dfd8e170ddfd72b5\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::LocalFunction::Range</a></div><div class=\"ttdeci\">GlobalFunction::Range Range</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:514</div></div>\n+<div class=\"ttc\" id=\"aa01883_html_ac5b7ff05f3dae3dc85eae5712a5d1e3c\"><div class=\"ttname\"><a href=\"a01883.html#ac5b7ff05f3dae3dc85eae5712a5d1e3c\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::LocalFunction::unbind</a></div><div class=\"ttdeci\">void unbind()</div><div class=\"ttdoc\">Unbind the local-function.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:538</div></div>\n+<div class=\"ttc\" id=\"aa01883_html_adaccfd098d6b105540eea45ea37a6ab4\"><div class=\"ttname\"><a href=\"a01883.html#adaccfd098d6b105540eea45ea37a6ab4\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::LocalFunction::LocalFunction</a></div><div class=\"ttdeci\">LocalFunction(const GlobalFunction &globalFunction)</div><div class=\"ttdoc\">Create a local function from the associated grid function.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:518</div></div>\n+<div class=\"ttc\" id=\"aa01883_html_af79e06905942ca8abcde986e2a042b1d\"><div class=\"ttname\"><a href=\"a01883.html#af79e06905942ca8abcde986e2a042b1d\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::LocalFunction::bind</a></div><div class=\"ttdeci\">void bind(const Element &element)</div><div class=\"ttdoc\">Bind LocalFunction to grid element.</div><div class=\"ttdef\"><b>Definition:</b> discreteglobalbasisfunction.hh:531</div></div>\n+<div class=\"ttc\" id=\"aa01895_html\"><div class=\"ttname\"><a href=\"a01895.html\">Dune::Functions::GridFunction</a></div><div class=\"ttdef\"><b>Definition:</b> gridfunction.hh:32</div></div>\n+<div class=\"ttc\" id=\"aa01919_html\"><div class=\"ttname\"><a href=\"a01919.html\">Dune::Functions::GridViewEntitySet< GridView, 0 ></a></div></div>\n+<div class=\"ttc\" id=\"aa01919_html_a1d5eaf3facd0219b2e150d964a664752\"><div class=\"ttname\"><a href=\"a01919.html#a1d5eaf3facd0219b2e150d964a664752\">Dune::Functions::GridViewEntitySet< GridView, 0 >::Element</a></div><div class=\"ttdeci\">GridView::template Codim< codim >::Entity Element</div><div class=\"ttdoc\">Type of Elements contained in this EntitySet.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:32</div></div>\n+<div class=\"ttc\" id=\"aa01919_html_aa4368ad66f18ba8279f20ab7a794069d\"><div class=\"ttname\"><a href=\"a01919.html#aa4368ad66f18ba8279f20ab7a794069d\">Dune::Functions::GridViewEntitySet< GridView, 0 >::LocalCoordinate</a></div><div class=\"ttdeci\">Element::Geometry::LocalCoordinate LocalCoordinate</div><div class=\"ttdoc\">Type of local coordinates with respect to the Element.</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:35</div></div>\n+<div class=\"ttc\" id=\"aa01919_html_ac4e3d0188467b4be3d195c9f5729e629\"><div class=\"ttname\"><a href=\"a01919.html#ac4e3d0188467b4be3d195c9f5729e629\">Dune::Functions::GridViewEntitySet< GridView, 0 >::GlobalCoordinate</a></div><div class=\"ttdeci\">Element::Geometry::GlobalCoordinate GlobalCoordinate</div><div class=\"ttdef\"><b>Definition:</b> gridviewentityset.hh:36</div></div>\n+<div class=\"ttc\" id=\"aa02873_html\"><div class=\"ttname\"><a href=\"a02873.html\">concepts.hh</a></div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,193 +4,843 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * common\n-polymorphicsmallobject.hh\n+ * gridfunctions\n+discreteglobalbasisfunction.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH\n- 4#define DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH\n+ 3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_DISCRETEGLOBALBASISFUNCTIONS_HH\n+ 4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_DISCRETEGLOBALBASISFUNCTIONS_HH\n 5\n- 6#include <utility>\n- 7#include <type_traits>\n+ 6#include <memory>\n+ 7#include <optional>\n 8\n- 9namespace Dune {\n- 10namespace Functions {\n- 11\n+ 9#include <dune/common/typetraits.hh>\n+ 10\n+ 11#include <dune/typetree/treecontainer.hh>\n 12\n- 43template<class Base, size_t bufferSize>\n-44class PolymorphicSmallObject\n- 45{\n- 46public:\n- 47\n-49 PolymorphicSmallObject() :\n- 50 p_(nullptr)\n- 51 {}\n- 52\n- 59 template<class Derived,\n- 60 typename std::enable_if<std::is_base_of<Base, std::remove_cv_t<\n- 61 std::remove_reference_t<Derived>>>::value, int>::type = 0>\n-62 PolymorphicSmallObject(Derived&& derived)\n- 63 {\n- 64 constexpr bool useBuffer = sizeof(Derived) <= bufferSize;\n- 65 if constexpr (useBuffer) {\n- 66 p_ = new (&buffer_) Derived(std::forward<Derived>(derived));\n- 67 } else {\n- 68 p_ = new Derived(std::forward<Derived>(derived));\n- 69 }\n- 70 }\n- 71\n-73 PolymorphicSmallObject(PolymorphicSmallObject&& other) noexcept\n+ 13#include <dune/functions/functionspacebases/hierarchicnodetorangemap.hh>\n+ 14#include <dune/functions/functionspacebases/flatvectorview.hh>\n+ 15#include <dune/functions/gridfunctions/gridviewentityset.hh>\n+ 16#include <dune/functions/gridfunctions/gridfunction.hh>\n+ 17#include <dune/functions/backends/concepts.hh>\n+ 18#include <dune/functions/backends/istlvectorbackend.hh>\n+ 19\n+ 20namespace Dune {\n+ 21namespace Functions {\n+ 22\n+ 23\n+24namespace ImplDoc {\n+ 25\n+ 26template<typename B, typename V, typename NTRE>\n+27class DiscreteGlobalBasisFunctionBase\n+ 28{\n+ 29public:\n+30 using Basis = B;\n+31 using Vector = V;\n+ 32\n+ 33 // In order to make the cache work for proxy-references\n+ 34 // we have to use AutonomousValue<T> instead of std::decay_t<T>\n+35 using Coefficient = Dune::AutonomousValue<decltype(std::declval<Vector>()\n+[std::declval<typename Basis::MultiIndex>()])>;\n+ 36\n+37 using GridView = typename Basis::GridView;\n+38 using EntitySet = GridViewEntitySet<GridView,_0>;\n+39 using Tree = typename Basis::LocalView::Tree;\n+40 using NodeToRangeEntry = NTRE;\n+ 41\n+42 using Domain = typename EntitySet::GlobalCoordinate;\n+ 43\n+44 using LocalDomain = typename EntitySet::LocalCoordinate;\n+45 using Element = typename EntitySet::Element;\n+ 46\n+ 47protected:\n+ 48\n+ 49 // This collects all data that is shared by all related\n+ 50 // global and local functions. This way we don't need to\n+ 51 // keep track of it individually.\n+52 struct Data\n+ 53 {\n+54 EntitySet entitySet;\n+55 std::shared_ptr<const Basis> basis;\n+56 std::shared_ptr<const Vector> coefficients;\n+57 std::shared_ptr<const NodeToRangeEntry> nodeToRangeEntry;\n+ 58 };\n+ 59\n+ 60public:\n+61 class LocalFunctionBase\n+ 62 {\n+ 63 using LocalView = typename Basis::LocalView;\n+ 64 using size_type = typename Tree::size_type;\n+ 65\n+ 66 public:\n+67 using Domain = LocalDomain;\n+68 using Element = typename EntitySet::Element;\n+ 69\n+ 70 protected:\n+71 LocalFunctionBase(const std::shared_ptr<const Data>& data)\n+ 72 : data_(data)\n+ 73 , localView_(data_->basis->localView())\n 74 {\n- 75 moveToWrappedObject(std::move(other));\n+ 75 localDoFs_.reserve(localView_.maxSize());\n 76 }\n 77\n-79 PolymorphicSmallObject(const PolymorphicSmallObject& other)\n- 80 {\n- 81 copyToWrappedObject(other);\n- 82 }\n- 83\n-85 ~PolymorphicSmallObject()\n- 86 {\n- 87 destroyWrappedObject();\n- 88 }\n- 89\n-91 PolymorphicSmallObject& operator=(const PolymorphicSmallObject& other)\n- 92 {\n- 93 if (&other!=this)\n- 94 {\n- 95 destroyWrappedObject();\n- 96 copyToWrappedObject(other);\n- 97 }\n- 98 return *this;\n- 99 }\n- 100\n-102 PolymorphicSmallObject& operator=(PolymorphicSmallObject&& other) noexcept\n- 103 {\n- 104 destroyWrappedObject();\n- 105 moveToWrappedObject(std::move(other));\n+84 LocalFunctionBase(const LocalFunctionBase& other)\n+ 85 : data_(other.data_)\n+ 86 , localView_(other.localView_)\n+ 87 {\n+ 88 localDoFs_.reserve(localView_.maxSize());\n+ 89 if (bound())\n+ 90 localDoFs_ = other.localDoFs_;\n+ 91 }\n+ 92\n+100 LocalFunctionBase& operator=(const LocalFunctionBase& other)\n+ 101 {\n+ 102 data_ = other.data_;\n+ 103 localView_ = other.localView_;\n+ 104 if (bound())\n+ 105 localDoFs_ = other.localDoFs_;\n 106 return *this;\n 107 }\n 108\n-110 explicit operator bool() const\n- 111 {\n- 112 return p_;\n- 113 }\n- 114\n-116 bool bufferUsed() const\n+ 109 public:\n+116 void bind(const Element& element)\n 117 {\n- 118 return ((void*) (p_) == (void*)(&buffer_));\n- 119 }\n- 120\n-122 const Base& get() const\n- 123 {\n- 124 return *p_;\n- 125 }\n- 126\n-128 Base& get()\n- 129 {\n- 130 return *p_;\n- 131 }\n- 132\n- 133private:\n- 134\n- 135 void destroyWrappedObject() noexcept\n- 136 {\n- 137 if (operator bool())\n- 138 {\n- 139 if (bufferUsed())\n- 140 p_->~Base();\n- 141 else\n- 142 delete p_;\n- 143 }\n- 144 }\n- 145\n- 146 void moveToWrappedObject(PolymorphicSmallObject&& other) noexcept\n- 147 {\n- 148 if (other.bufferUsed())\n- 149 p_ = other.p_->move(&buffer_);\n- 150 else\n- 151 {\n- 152 // We don't need to check for &other_!=this, because you can't\n- 153 // have an rvalue to *this and call it's assignment/constructor\n- 154 // at the same time. (Despite trying to shoot yourself in the foot\n- 155 // with std::move explicitly.)\n- 156\n- 157 // Take ownership of allocated object\n- 158 p_ = other.p_;\n+ 118 localView_.bind(element);\n+ 119 // Use cache of full local view size. For a subspace basis,\n+ 120 // this may be larger than the number of local DOFs in the\n+ 121 // tree. In this case only cache entries associated to local\n+ 122 // DOFs in the subspace are filled. Cache entries associated\n+ 123 // to local DOFs which are not contained in the subspace will\n+ 124 // not be touched.\n+ 125 //\n+ 126 // Alternatively one could use a cache that exactly fits\n+ 127 // the size of the tree. However, this would require to\n+ 128 // subtract an offset from localIndex(i) on each cache\n+ 129 // access in operator().\n+ 130 localDoFs_.resize(localView_.size());\n+ 131 const auto& dofs = *data_->coefficients;\n+ 132 for (size_type i = 0; i < localView_.tree().size(); ++i)\n+ 133 {\n+ 134 // For a subspace basis the index-within-tree i\n+ 135 // is not the same as the localIndex within the\n+ 136 // full local view.\n+ 137 size_t localIndex = localView_.tree().localIndex(i);\n+ 138 localDoFs_[localIndex] = dofs[localView_.index(localIndex)];\n+ 139 }\n+ 140 }\n+ 141\n+143 void unbind()\n+ 144 {\n+ 145 localView_.unbind();\n+ 146 }\n+ 147\n+149 bool bound() const\n+ 150 {\n+ 151 return localView_.bound();\n+ 152 }\n+ 153\n+155 const Element& localContext() const\n+ 156 {\n+ 157 return localView_.element();\n+ 158 }\n 159\n- 160 // Leave pointer in a clean state to avoid double freeing it.\n- 161 other.p_ = 0;\n- 162 }\n- 163 }\n- 164\n- 165 void copyToWrappedObject(const PolymorphicSmallObject& other)\n- 166 {\n- 167 if (other.bufferUsed())\n- 168 p_ = other.p_->clone(&buffer_);\n- 169 else\n- 170 p_ = other.p_->clone();\n- 171 }\n- 172\n- 173 std::aligned_storage_t<bufferSize> buffer_;\n- 174 Base* p_;\n- 175};\n- 176\n+ 160 protected:\n+ 161\n+ 162 template<class To, class From>\n+163 void assignWith(To& to, const From& from) const\n+ 164 {\n+ 165 auto from_flat = flatVectorView(from);\n+ 166 auto to_flat = flatVectorView(to);\n+ 167 assert(from_flat.size() == to_flat.size());\n+ 168 for (size_type i = 0; i < to_flat.size(); ++i)\n+ 169 to_flat[i] = from_flat[i];\n+ 170 }\n+ 171\n+ 172 template<class Node, class TreePath, class Range>\n+173 decltype(auto) nodeToRangeEntry(const Node& node, const TreePath& treePath,\n+Range& y) const\n+ 174 {\n+ 175 return (*data_->nodeToRangeEntry)(node, treePath, y);\n+ 176 }\n 177\n- 178} // namespace Functions\n- 179} // namespace Dune\n- 180\n- 181#endif // DUNE_FUNCTIONS_COMMON_POLYMORPHICSMALLOBJECT_HH\n+178 std::shared_ptr<const Data> data_;\n+179 LocalView localView_;\n+180 std::vector<Coefficient> localDoFs_;\n+ 181 };\n+ 182\n+ 183protected:\n+184 DiscreteGlobalBasisFunctionBase(const std::shared_ptr<const Data>& data)\n+ 185 : data_(data)\n+ 186 {\n+ 187 /* Nothing. */\n+ 188 }\n+ 189\n+ 190public:\n+ 191\n+193 const Basis& basis() const\n+ 194 {\n+ 195 return *data_->basis;\n+ 196 }\n+ 197\n+199 const Vector& dofs() const\n+ 200 {\n+ 201 return *data_->coefficients;\n+ 202 }\n+ 203\n+205 const NodeToRangeEntry& nodeToRangeEntry() const\n+ 206 {\n+ 207 return *data_->nodeToRangeEntry;\n+ 208 }\n+ 209\n+211 const EntitySet& entitySet() const\n+ 212 {\n+ 213 return data_->entitySet;\n+ 214 }\n+ 215\n+ 216protected:\n+217 std::shared_ptr<const Data> data_;\n+ 218};\n+ 219\n+ 220} // namespace ImplDoc\n+ 221\n+ 222\n+ 223\n+ 224template<typename DGBF>\n+ 225class DiscreteGlobalBasisFunctionDerivative;\n+ 226\n+ 264template<typename B, typename V,\n+ 265 typename NTRE = HierarchicNodeToRangeMap,\n+ 266 typename R = typename V::value_type>\n+267class DiscreteGlobalBasisFunction\n+ 268 : public ImplDoc::DiscreteGlobalBasisFunctionBase<B, V, NTRE>\n+ 269{\n+ 270 using Base = ImplDoc::DiscreteGlobalBasisFunctionBase<B,_V,_NTRE>;\n+ 271 using Data = typename Base::Data;\n+ 272\n+ 273public:\n+274 using Basis = typename Base::Basis;\n+275 using Vector = typename Base::Vector;\n+ 276\n+277 using Domain = typename Base::Domain;\n+278 using Range = R;\n+ 279\n+280 using Traits = Imp::GridFunctionTraits<Range(Domain), typename Base::\n+EntitySet, DefaultDerivativeTraits, 16>;\n+ 281\n+ 282private:\n+ 283\n+ 284 template<class Node>\n+ 285 using LocalBasisRange = typename Node::FiniteElement::Traits::\n+LocalBasisType::Traits::RangeType;\n+ 286 template<class Node>\n+ 287 using NodeData = typename std::vector<LocalBasisRange<Node>>;\n+ 288 using PerNodeEvaluationBuffer = typename TypeTree::TreeContainer<NodeData,\n+typename Base::Tree>;\n+ 289\n+ 290public:\n+291 class LocalFunction\n+ 292 : public Base::LocalFunctionBase\n+ 293 {\n+ 294 using LocalBase = typename Base::LocalFunctionBase;\n+ 295 using size_type = typename Base::Tree::size_type;\n+ 296 using LocalBase::nodeToRangeEntry;\n+ 297\n+ 298 public:\n+ 299\n+300 using GlobalFunction = DiscreteGlobalBasisFunction;\n+301 using Domain = typename LocalBase::Domain;\n+302 using Range = GlobalFunction::Range;\n+303 using Element = typename LocalBase::Element;\n+ 304\n+306 LocalFunction(const DiscreteGlobalBasisFunction& globalFunction)\n+ 307 : LocalBase(globalFunction.data_)\n+ 308 , evaluationBuffer_(this->localView_.tree())\n+ 309 {\n+ 310 /* Nothing. */\n+ 311 }\n+ 312\n+322 Range operator()(const Domain& x) const\n+ 323 {\n+ 324 Range y;\n+ 325 istlVectorBackend(y) = 0;\n+ 326\n+ 327 TypeTree::forEachLeafNode(this->localView_.tree(), [&](auto&& node, auto&&\n+treePath) {\n+ 328 const auto& fe = node.finiteElement();\n+ 329 const auto& localBasis = fe.localBasis();\n+ 330 auto& shapeFunctionValues = evaluationBuffer_[treePath];\n+ 331\n+ 332 localBasis.evaluateFunction(x, shapeFunctionValues);\n+ 333\n+ 334 // Compute linear combinations of basis function jacobian.\n+ 335 // Non-scalar coefficients of dimension coeffDim are handled by\n+ 336 // processing the coeffDim linear combinations independently\n+ 337 // and storing them as entries of an array.\n+ 338 using Value = LocalBasisRange< std::decay_t<decltype(node)> >;\n+ 339 static constexpr auto coeffDim = decltype(flatVectorView(this->localDoFs_\n+[node.localIndex(0)]).size())::value;\n+ 340 auto values = std::array<Value, coeffDim>{};\n+ 341 istlVectorBackend(values) = 0;\n+ 342 for (size_type i = 0; i < localBasis.size(); ++i)\n+ 343 {\n+ 344 auto c = flatVectorView(this->localDoFs_[node.localIndex(i)]);\n+ 345 for (std::size_t j = 0; j < coeffDim; ++j)\n+ 346 values[j].axpy(c[j], shapeFunctionValues[i]);\n+ 347 }\n+ 348\n+ 349 // Assign computed values to node entry of range.\n+ 350 // Types are matched using the lexicographic ordering provided by\n+flatVectorView.\n+ 351 LocalBase::assignWith(nodeToRangeEntry(node, treePath, y), values);\n+ 352 });\n+ 353\n+ 354 return y;\n+ 355 }\n+ 356\n+358 friend typename\n+DiscreteGlobalBasisFunctionDerivative<DiscreteGlobalBasisFunction>::\n+LocalFunction derivative(const LocalFunction& lf)\n+ 359 {\n+ 360 auto dlf = localFunction\n+(DiscreteGlobalBasisFunctionDerivative<DiscreteGlobalBasisFunction>(lf.data_));\n+ 361 if (lf.bound())\n+ 362 dlf.bind(lf.localContext());\n+ 363 return dlf;\n+ 364 }\n+ 365\n+ 366 private:\n+ 367 mutable PerNodeEvaluationBuffer evaluationBuffer_;\n+ 368 };\n+ 369\n+ 371 template<class B_T, class V_T, class NTRE_T>\n+372 DiscreteGlobalBasisFunction(B_T && basis, V_T && coefficients, NTRE_T&&\n+nodeToRangeEntry)\n+ 373 : Base(std::make_shared<Data>(Data{{basis.gridView()}, wrap_or_move(std::\n+forward<B_T>(basis)), wrap_or_move(std::forward<V_T>(coefficients)),\n+wrap_or_move(std::forward<NTRE_T>(nodeToRangeEntry))}))\n+ 374 {}\n+ 375\n+377 DiscreteGlobalBasisFunction(std::shared_ptr<const Basis> basis, std::\n+shared_ptr<const V> coefficients, std::shared_ptr<const typename Base::\n+NodeToRangeEntry> nodeToRangeEntry)\n+ 378 : Base(std::make_shared<Data>(Data{{basis->gridView()}, basis,\n+coefficients, nodeToRangeEntry}))\n+ 379 {}\n+ 380\n+382 Range operator() (const Domain& x) const\n+ 383 {\n+ 384 // TODO: Implement this using hierarchic search\n+ 385 DUNE_THROW(NotImplemented,\"not implemented\");\n+ 386 }\n+ 387\n+389 friend DiscreteGlobalBasisFunctionDerivative<DiscreteGlobalBasisFunction>\n+derivative(const DiscreteGlobalBasisFunction& f)\n+ 390 {\n+ 391 return DiscreteGlobalBasisFunctionDerivative<DiscreteGlobalBasisFunction>\n+(f.data_);\n+ 392 }\n+ 393\n+402 friend LocalFunction localFunction(const DiscreteGlobalBasisFunction& t)\n+ 403 {\n+ 404 return LocalFunction(t);\n+ 405 }\n+ 406};\n+ 407\n+ 408\n+ 431template<typename R, typename B, typename V>\n+432auto makeDiscreteGlobalBasisFunction(B&& basis, V&& vector)\n+ 433{\n+ 434 using Basis = std::decay_t<B>;\n+ 435 using NTREM = HierarchicNodeToRangeMap;\n+ 436\n+ 437 // Small helper functions to wrap vectors using istlVectorBackend\n+ 438 // if they do not already satisfy the VectorBackend interface.\n+ 439 auto toConstVectorBackend = [&](auto&& v) -> decltype(auto) {\n+ 440 if constexpr (models<Concept::ConstVectorBackend<Basis>, decltype(v)>()) {\n+ 441 return std::forward<decltype(v)>(v);\n+ 442 } else {\n+ 443 return istlVectorBackend(v);\n+ 444 }\n+ 445 };\n+ 446\n+ 447 using Vector = std::decay_t<decltype(toConstVectorBackend(std::forward<V>\n+(vector)))>;\n+ 448 return DiscreteGlobalBasisFunction<Basis,_Vector,_NTREM,_R>(\n+ 449 std::forward<B>(basis),\n+ 450 toConstVectorBackend(std::forward<V>(vector)),\n+ 451 HierarchicNodeToRangeMap());\n+ 452}\n+ 453\n+ 454\n+ 469template<typename DGBF>\n+470class DiscreteGlobalBasisFunctionDerivative\n+ 471 : public ImplDoc::DiscreteGlobalBasisFunctionBase<typename DGBF::Basis,\n+typename DGBF::Vector, typename DGBF::NodeToRangeEntry>\n+ 472{\n+ 473 using Base = ImplDoc::DiscreteGlobalBasisFunctionBase<typename_DGBF::\n+Basis,_typename_DGBF::Vector,_typename_DGBF::NodeToRangeEntry>;\n+ 474 using Data = typename Base::Data;\n+ 475\n+ 476public:\n+477 using DiscreteGlobalBasisFunction = DGBF;\n+ 478\n+479 using Basis = typename Base::Basis;\n+480 using Vector = typename Base::Vector;\n+ 481\n+482 using Domain = typename Base::Domain;\n+483 using Range = typename SignatureTraits<typename\n+DiscreteGlobalBasisFunction::Traits::DerivativeInterface>::Range;\n+ 484\n+485 using Traits = Imp::GridFunctionTraits<Range(Domain), typename Base::\n+EntitySet, DefaultDerivativeTraits, 16>;\n+ 486\n+ 487private:\n+ 488\n+ 489 template<class Node>\n+ 490 using LocalBasisRange = typename Node::FiniteElement::Traits::\n+LocalBasisType::Traits::JacobianType;\n+ 491 template<class Node>\n+ 492 using NodeData = typename std::vector< LocalBasisRange<Node> >;\n+ 493 using PerNodeEvaluationBuffer = typename TypeTree::TreeContainer<NodeData,\n+typename Base::Tree>;\n+ 494\n+ 495public:\n+ 496\n+504 class LocalFunction\n+ 505 : public Base::LocalFunctionBase\n+ 506 {\n+ 507 using LocalBase = typename Base::LocalFunctionBase;\n+ 508 using size_type = typename Base::Tree::size_type;\n+ 509 using LocalBase::nodeToRangeEntry;\n+ 510\n+ 511 public:\n+512 using GlobalFunction = DiscreteGlobalBasisFunctionDerivative;\n+513 using Domain = typename LocalBase::Domain;\n+514 using Range = GlobalFunction::Range;\n+515 using Element = typename LocalBase::Element;\n+ 516\n+518 LocalFunction(const GlobalFunction& globalFunction)\n+ 519 : LocalBase(globalFunction.data_)\n+ 520 , evaluationBuffer_(this->localView_.tree())\n+ 521 {\n+ 522 /* Nothing. */\n+ 523 }\n+ 524\n+531 void bind(const Element& element)\n+ 532 {\n+ 533 LocalBase::bind(element);\n+ 534 geometry_.emplace(element.geometry());\n+ 535 }\n+ 536\n+538 void unbind()\n+ 539 {\n+ 540 geometry_.reset();\n+ 541 LocalBase::unbind();\n+ 542 }\n+ 543\n+557 Range operator()(const Domain& x) const\n+ 558 {\n+ 559 Range y;\n+ 560 istlVectorBackend(y) = 0;\n+ 561\n+ 562 const auto& jacobianInverse = geometry_->jacobianInverse(x);\n+ 563\n+ 564 TypeTree::forEachLeafNode(this->localView_.tree(), [&](auto&& node, auto&&\n+treePath) {\n+ 565 const auto& fe = node.finiteElement();\n+ 566 const auto& localBasis = fe.localBasis();\n+ 567 auto& shapeFunctionJacobians = evaluationBuffer_[treePath];\n+ 568\n+ 569 localBasis.evaluateJacobian(x, shapeFunctionJacobians);\n+ 570\n+ 571 // Compute linear combinations of basis function jacobian.\n+ 572 // Non-scalar coefficients of dimension coeffDim are handled by\n+ 573 // processing the coeffDim linear combinations independently\n+ 574 // and storing them as entries of an array.\n+ 575 using RefJacobian = LocalBasisRange< std::decay_t<decltype(node)> >;\n+ 576 static constexpr auto coeffDim = decltype(flatVectorView(this->localDoFs_\n+[node.localIndex(0)]).size())::value;\n+ 577 auto refJacobians = std::array<RefJacobian, coeffDim>{};\n+ 578 istlVectorBackend(refJacobians) = 0;\n+ 579 for (size_type i = 0; i < localBasis.size(); ++i)\n+ 580 {\n+ 581 auto c = flatVectorView(this->localDoFs_[node.localIndex(i)]);\n+ 582 for (std::size_t j = 0; j < coeffDim; ++j)\n+ 583 refJacobians[j].axpy(c[j], shapeFunctionJacobians[i]);\n+ 584 }\n+ 585\n+ 586 // Transform Jacobians form local to global coordinates.\n+ 587 using Jacobian = decltype(refJacobians[0] * jacobianInverse);\n+ 588 auto jacobians = std::array<Jacobian, coeffDim>{};\n+ 589 std::transform(\n+ 590 refJacobians.begin(), refJacobians.end(), jacobians.begin(),\n+ 591 [&](const auto& refJacobian) { return refJacobian * jacobianInverse; });\n+ 592\n+ 593 // Assign computed Jacobians to node entry of range.\n+ 594 // Types are matched using the lexicographic ordering provided by\n+flatVectorView.\n+ 595 LocalBase::assignWith(nodeToRangeEntry(node, treePath, y), jacobians);\n+ 596 });\n+ 597\n+ 598 return y;\n+ 599 }\n+ 600\n+602 friend typename Traits::LocalFunctionTraits::DerivativeInterface derivative\n+(const LocalFunction&)\n+ 603 {\n+ 604 DUNE_THROW(NotImplemented, \"derivative of derivative is not implemented\");\n+ 605 }\n+ 606\n+ 607 private:\n+ 608 mutable PerNodeEvaluationBuffer evaluationBuffer_;\n+ 609 std::optional<typename Element::Geometry> geometry_;\n+ 610 };\n+ 611\n+618 DiscreteGlobalBasisFunctionDerivative(const std::shared_ptr<const Data>&\n+data)\n+ 619 : Base(data)\n+ 620 {\n+ 621 /* Nothing. */\n+ 622 }\n+ 623\n+625 Range operator()(const Domain& x) const\n+ 626 {\n+ 627 // TODO: Implement this using hierarchic search\n+ 628 DUNE_THROW(NotImplemented,\"not implemented\");\n+ 629 }\n+ 630\n+631 friend typename Traits::DerivativeInterface derivative(const\n+DiscreteGlobalBasisFunctionDerivative& f)\n+ 632 {\n+ 633 DUNE_THROW(NotImplemented, \"derivative of derivative is not implemented\");\n+ 634 }\n+ 635\n+637 friend LocalFunction localFunction(const\n+DiscreteGlobalBasisFunctionDerivative& f)\n+ 638 {\n+ 639 return LocalFunction(f);\n+ 640 }\n+ 641};\n+ 642\n+ 643\n+ 644} // namespace Functions\n+ 645} // namespace Dune\n+ 646\n+ 647#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_DISCRETEGLOBALBASISFUNCTIONS_HH\n+gridviewentityset.hh\n+gridfunction.hh\n+flatvectorview.hh\n+hierarchicnodetorangemap.hh\n+istlvectorbackend.hh\n+Dune::Functions::DiscreteGlobalBasisFunction::makeDiscreteGlobalBasisFunction\n+auto makeDiscreteGlobalBasisFunction(B &&basis, V &&vector)\n+Generate a DiscreteGlobalBasisFunction.\n+Definition: discreteglobalbasisfunction.hh:432\n+Dune::Functions::istlVectorBackend\n+auto istlVectorBackend(Vector &v)\n+Return a vector backend wrapping non-const ISTL like containers.\n+Definition: istlvectorbackend.hh:346\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::PolymorphicSmallObject\n-A wrapper providing small object optimization with polymorphic types.\n-Definition: polymorphicsmallobject.hh:45\n-Dune::Functions::PolymorphicSmallObject::get\n-const Base & get() const\n-Obtain reference to stored object.\n-Definition: polymorphicsmallobject.hh:122\n-Dune::Functions::PolymorphicSmallObject::bufferUsed\n-bool bufferUsed() const\n-Check if object is stored in internal stack buffer.\n-Definition: polymorphicsmallobject.hh:116\n-Dune::Functions::PolymorphicSmallObject::PolymorphicSmallObject\n-PolymorphicSmallObject(Derived &&derived)\n-Construct from object.\n-Definition: polymorphicsmallobject.hh:62\n-Dune::Functions::PolymorphicSmallObject::PolymorphicSmallObject\n-PolymorphicSmallObject(PolymorphicSmallObject &&other) noexcept\n-Move constructor from other PolymorphicSmallObject.\n-Definition: polymorphicsmallobject.hh:73\n-Dune::Functions::PolymorphicSmallObject::operator=\n-PolymorphicSmallObject & operator=(const PolymorphicSmallObject &other)\n-Copy assignment from other PolymorphicSmallObject.\n-Definition: polymorphicsmallobject.hh:91\n-Dune::Functions::PolymorphicSmallObject::operator=\n-PolymorphicSmallObject & operator=(PolymorphicSmallObject &&other) noexcept\n-Move assignment from other PolymorphicSmallObject.\n-Definition: polymorphicsmallobject.hh:102\n-Dune::Functions::PolymorphicSmallObject::PolymorphicSmallObject\n-PolymorphicSmallObject(const PolymorphicSmallObject &other)\n-Copy constructor from other PolymorphicSmallObject.\n-Definition: polymorphicsmallobject.hh:79\n-Dune::Functions::PolymorphicSmallObject::~PolymorphicSmallObject\n-~PolymorphicSmallObject()\n-Destructor.\n-Definition: polymorphicsmallobject.hh:85\n-Dune::Functions::PolymorphicSmallObject::PolymorphicSmallObject\n-PolymorphicSmallObject()\n-Default constructor.\n-Definition: polymorphicsmallobject.hh:49\n-Dune::Functions::PolymorphicSmallObject::get\n-Base & get()\n-Obtain mutable reference to stored object.\n-Definition: polymorphicsmallobject.hh:128\n+Dune::Functions::flatVectorView\n+auto flatVectorView(T &t)\n+Create flat vector view of passed mutable container.\n+Definition: flatvectorview.hh:179\n+Dune::Functions::DefaultDerivativeTraits\n+Default implementation for derivative traits.\n+Definition: defaultderivativetraits.hh:37\n+Dune::Functions::SignatureTraits\n+Helper class to deduce the signature of a callable.\n+Definition: signature.hh:56\n+Dune::Functions::HierarchicNodeToRangeMap\n+A simple node to range map using the nested tree indices.\n+Definition: hierarchicnodetorangemap.hh:30\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase\n+Definition: discreteglobalbasisfunction.hh:28\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::data_\n+std::shared_ptr< const Data > data_\n+Definition: discreteglobalbasisfunction.hh:217\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::dofs\n+const Vector & dofs() const\n+Return the coefficients of this discrete function by reference.\n+Definition: discreteglobalbasisfunction.hh:199\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Basis\n+B Basis\n+Definition: discreteglobalbasisfunction.hh:30\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Tree\n+typename Basis::LocalView::Tree Tree\n+Definition: discreteglobalbasisfunction.hh:39\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Vector\n+V Vector\n+Definition: discreteglobalbasisfunction.hh:31\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Element\n+typename EntitySet::Element Element\n+Definition: discreteglobalbasisfunction.hh:45\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalDomain\n+typename EntitySet::LocalCoordinate LocalDomain\n+Definition: discreteglobalbasisfunction.hh:44\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::nodeToRangeEntry\n+const NodeToRangeEntry & nodeToRangeEntry() const\n+Return the stored node-to-range map.\n+Definition: discreteglobalbasisfunction.hh:205\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::NodeToRangeEntry\n+NTRE NodeToRangeEntry\n+Definition: discreteglobalbasisfunction.hh:40\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::\n+DiscreteGlobalBasisFunctionBase\n+DiscreteGlobalBasisFunctionBase(const std::shared_ptr< const Data > &data)\n+Definition: discreteglobalbasisfunction.hh:184\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::GridView\n+typename Basis::GridView GridView\n+Definition: discreteglobalbasisfunction.hh:37\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::basis\n+const Basis & basis() const\n+Return a const reference to the stored basis.\n+Definition: discreteglobalbasisfunction.hh:193\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::EntitySet\n+GridViewEntitySet< GridView, 0 > EntitySet\n+Definition: discreteglobalbasisfunction.hh:38\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::entitySet\n+const EntitySet & entitySet() const\n+Get associated set of entities the local-function can be bound to.\n+Definition: discreteglobalbasisfunction.hh:211\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Domain\n+typename EntitySet::GlobalCoordinate Domain\n+Definition: discreteglobalbasisfunction.hh:42\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Coefficient\n+Dune::AutonomousValue< decltype(std::declval< Vector >()[std::declval< typename\n+Basis::MultiIndex >()])> Coefficient\n+Definition: discreteglobalbasisfunction.hh:35\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Data\n+Definition: discreteglobalbasisfunction.hh:53\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Data::entitySet\n+EntitySet entitySet\n+Definition: discreteglobalbasisfunction.hh:54\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Data::\n+nodeToRangeEntry\n+std::shared_ptr< const NodeToRangeEntry > nodeToRangeEntry\n+Definition: discreteglobalbasisfunction.hh:57\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Data::basis\n+std::shared_ptr< const Basis > basis\n+Definition: discreteglobalbasisfunction.hh:55\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Data::coefficients\n+std::shared_ptr< const Vector > coefficients\n+Definition: discreteglobalbasisfunction.hh:56\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase\n+Definition: discreteglobalbasisfunction.hh:62\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::\n+operator=\n+LocalFunctionBase & operator=(const LocalFunctionBase &other)\n+Copy-assignment of the local-function.\n+Definition: discreteglobalbasisfunction.hh:100\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::\n+bound\n+bool bound() const\n+Check if LocalFunction is already bound to an element.\n+Definition: discreteglobalbasisfunction.hh:149\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::\n+bind\n+void bind(const Element &element)\n+Bind LocalFunction to grid element.\n+Definition: discreteglobalbasisfunction.hh:116\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::\n+Element\n+typename EntitySet::Element Element\n+Definition: discreteglobalbasisfunction.hh:68\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::\n+localContext\n+const Element & localContext() const\n+Return the element the local-function is bound to.\n+Definition: discreteglobalbasisfunction.hh:155\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::\n+LocalFunctionBase\n+LocalFunctionBase(const LocalFunctionBase &other)\n+Copy-construct the local-function.\n+Definition: discreteglobalbasisfunction.hh:84\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::\n+localDoFs_\n+std::vector< Coefficient > localDoFs_\n+Definition: discreteglobalbasisfunction.hh:180\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::\n+assignWith\n+void assignWith(To &to, const From &from) const\n+Definition: discreteglobalbasisfunction.hh:163\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::\n+data_\n+std::shared_ptr< const Data > data_\n+Definition: discreteglobalbasisfunction.hh:178\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::\n+nodeToRangeEntry\n+decltype(auto) nodeToRangeEntry(const Node &node, const TreePath &treePath,\n+Range &y) const\n+Definition: discreteglobalbasisfunction.hh:173\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::\n+localView_\n+LocalView localView_\n+Definition: discreteglobalbasisfunction.hh:179\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::\n+unbind\n+void unbind()\n+Unbind the local-function.\n+Definition: discreteglobalbasisfunction.hh:143\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::\n+Domain\n+LocalDomain Domain\n+Definition: discreteglobalbasisfunction.hh:67\n+Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase::\n+LocalFunctionBase\n+LocalFunctionBase(const std::shared_ptr< const Data > &data)\n+Definition: discreteglobalbasisfunction.hh:71\n+Dune::Functions::DiscreteGlobalBasisFunctionDerivative\n+Derivative of a DiscreteGlobalBasisFunction\n+Definition: discreteglobalbasisfunction.hh:472\n+Dune::Functions::DiscreteGlobalBasisFunctionDerivative::Basis\n+typename Base::Basis Basis\n+Definition: discreteglobalbasisfunction.hh:479\n+Dune::Functions::DiscreteGlobalBasisFunctionDerivative::derivative\n+friend Traits::DerivativeInterface derivative(const\n+DiscreteGlobalBasisFunctionDerivative &f)\n+Definition: discreteglobalbasisfunction.hh:631\n+Dune::Functions::DiscreteGlobalBasisFunctionDerivative::operator()\n+Range operator()(const Domain &x) const\n+Not implemented.\n+Definition: discreteglobalbasisfunction.hh:625\n+Dune::Functions::DiscreteGlobalBasisFunctionDerivative::Range\n+typename SignatureTraits< typename DiscreteGlobalBasisFunction::Traits::\n+DerivativeInterface >::Range Range\n+Definition: discreteglobalbasisfunction.hh:483\n+Dune::Functions::DiscreteGlobalBasisFunctionDerivative::localFunction\n+friend LocalFunction localFunction(const DiscreteGlobalBasisFunctionDerivative\n+&f)\n+Construct local function from a DiscreteGlobalBasisFunctionDerivative\n+Definition: discreteglobalbasisfunction.hh:637\n+Dune::Functions::DiscreteGlobalBasisFunctionDerivative::\n+DiscreteGlobalBasisFunctionDerivative\n+DiscreteGlobalBasisFunctionDerivative(const std::shared_ptr< const Data >\n+&data)\n+create object from DiscreateGlobalBasisFunction data\n+Definition: discreteglobalbasisfunction.hh:618\n+Dune::Functions::DiscreteGlobalBasisFunctionDerivative::\n+DiscreteGlobalBasisFunction\n+DGBF DiscreteGlobalBasisFunction\n+Definition: discreteglobalbasisfunction.hh:477\n+Dune::Functions::DiscreteGlobalBasisFunctionDerivative::Vector\n+typename Base::Vector Vector\n+Definition: discreteglobalbasisfunction.hh:480\n+Dune::Functions::DiscreteGlobalBasisFunctionDerivative::Traits\n+Imp::GridFunctionTraits< Range(Domain), typename Base::EntitySet,\n+DefaultDerivativeTraits, 16 > Traits\n+Definition: discreteglobalbasisfunction.hh:485\n+Dune::Functions::DiscreteGlobalBasisFunctionDerivative::Domain\n+typename Base::Domain Domain\n+Definition: discreteglobalbasisfunction.hh:482\n+Dune::Functions::DiscreteGlobalBasisFunction\n+A grid function induced by a global basis and a coefficient vector.\n+Definition: discreteglobalbasisfunction.hh:269\n+Dune::Functions::DiscreteGlobalBasisFunction::derivative\n+friend DiscreteGlobalBasisFunctionDerivative< DiscreteGlobalBasisFunction >\n+derivative(const DiscreteGlobalBasisFunction &f)\n+Derivative of the DiscreteGlobalBasisFunction\n+Definition: discreteglobalbasisfunction.hh:389\n+Dune::Functions::DiscreteGlobalBasisFunction::DiscreteGlobalBasisFunction\n+DiscreteGlobalBasisFunction(B_T &&basis, V_T &&coefficients, NTRE_T\n+&&nodeToRangeEntry)\n+Create a grid-function, by wrapping the arguments in std::shared_ptr.\n+Definition: discreteglobalbasisfunction.hh:372\n+Dune::Functions::DiscreteGlobalBasisFunction::DiscreteGlobalBasisFunction\n+DiscreteGlobalBasisFunction(std::shared_ptr< const Basis > basis, std::\n+shared_ptr< const V > coefficients, std::shared_ptr< const typename Base::\n+NodeToRangeEntry > nodeToRangeEntry)\n+Create a grid-function, by moving the arguments in std::shared_ptr.\n+Definition: discreteglobalbasisfunction.hh:377\n+Dune::Functions::DiscreteGlobalBasisFunction::localFunction\n+friend LocalFunction localFunction(const DiscreteGlobalBasisFunction &t)\n+Construct local function from a DiscreteGlobalBasisFunction.\n+Definition: discreteglobalbasisfunction.hh:402\n+Dune::Functions::DiscreteGlobalBasisFunction::Basis\n+typename Base::Basis Basis\n+Definition: discreteglobalbasisfunction.hh:274\n+Dune::Functions::DiscreteGlobalBasisFunction::Traits\n+Imp::GridFunctionTraits< Range(Domain), typename Base::EntitySet,\n+DefaultDerivativeTraits, 16 > Traits\n+Definition: discreteglobalbasisfunction.hh:280\n+Dune::Functions::DiscreteGlobalBasisFunction::Range\n+R Range\n+Definition: discreteglobalbasisfunction.hh:278\n+Dune::Functions::DiscreteGlobalBasisFunction::Vector\n+typename Base::Vector Vector\n+Definition: discreteglobalbasisfunction.hh:275\n+Dune::Functions::DiscreteGlobalBasisFunction::Domain\n+typename Base::Domain Domain\n+Definition: discreteglobalbasisfunction.hh:277\n+Dune::Functions::DiscreteGlobalBasisFunction::LocalFunction\n+Definition: discreteglobalbasisfunction.hh:293\n+Dune::Functions::DiscreteGlobalBasisFunction::LocalFunction::Range\n+GlobalFunction::Range Range\n+Definition: discreteglobalbasisfunction.hh:302\n+Dune::Functions::DiscreteGlobalBasisFunction::LocalFunction::LocalFunction\n+LocalFunction(const DiscreteGlobalBasisFunction &globalFunction)\n+Create a local-function from the associated grid-function.\n+Definition: discreteglobalbasisfunction.hh:306\n+Dune::Functions::DiscreteGlobalBasisFunction::LocalFunction::derivative\n+friend DiscreteGlobalBasisFunctionDerivative< DiscreteGlobalBasisFunction >::\n+LocalFunction derivative(const LocalFunction &lf)\n+Local function of the derivative.\n+Definition: discreteglobalbasisfunction.hh:358\n+Dune::Functions::DiscreteGlobalBasisFunction::LocalFunction::operator()\n+Range operator()(const Domain &x) const\n+Evaluate this local-function in coordinates x in the bound element.\n+Definition: discreteglobalbasisfunction.hh:322\n+Dune::Functions::DiscreteGlobalBasisFunctionDerivative::LocalFunction\n+local function evaluating the derivative in reference coordinates\n+Definition: discreteglobalbasisfunction.hh:506\n+Dune::Functions::DiscreteGlobalBasisFunctionDerivative::LocalFunction::operator\n+()\n+Range operator()(const Domain &x) const\n+Evaluate this local-function in coordinates x in the bound element.\n+Definition: discreteglobalbasisfunction.hh:557\n+Dune::Functions::DiscreteGlobalBasisFunctionDerivative::LocalFunction::\n+derivative\n+friend Traits::LocalFunctionTraits::DerivativeInterface derivative(const\n+LocalFunction &)\n+Not implemented.\n+Definition: discreteglobalbasisfunction.hh:602\n+Dune::Functions::DiscreteGlobalBasisFunctionDerivative::LocalFunction::Range\n+GlobalFunction::Range Range\n+Definition: discreteglobalbasisfunction.hh:514\n+Dune::Functions::DiscreteGlobalBasisFunctionDerivative::LocalFunction::unbind\n+void unbind()\n+Unbind the local-function.\n+Definition: discreteglobalbasisfunction.hh:538\n+Dune::Functions::DiscreteGlobalBasisFunctionDerivative::LocalFunction::\n+LocalFunction\n+LocalFunction(const GlobalFunction &globalFunction)\n+Create a local function from the associated grid function.\n+Definition: discreteglobalbasisfunction.hh:518\n+Dune::Functions::DiscreteGlobalBasisFunctionDerivative::LocalFunction::bind\n+void bind(const Element &element)\n+Bind LocalFunction to grid element.\n+Definition: discreteglobalbasisfunction.hh:531\n+Dune::Functions::GridFunction\n+Definition: gridfunction.hh:32\n+Dune::Functions::GridViewEntitySet<_GridView,_0_>\n+Dune::Functions::GridViewEntitySet<_GridView,_0_>::Element\n+GridView::template Codim< codim >::Entity Element\n+Type of Elements contained in this EntitySet.\n+Definition: gridviewentityset.hh:32\n+Dune::Functions::GridViewEntitySet<_GridView,_0_>::LocalCoordinate\n+Element::Geometry::LocalCoordinate LocalCoordinate\n+Type of local coordinates with respect to the Element.\n+Definition: gridviewentityset.hh:35\n+Dune::Functions::GridViewEntitySet<_GridView,_0_>::GlobalCoordinate\n+Element::Geometry::GlobalCoordinate GlobalCoordinate\n+Definition: gridviewentityset.hh:36\n+concepts.hh\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00092.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00092.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: type_traits.hh File Reference</title>\n+<title>dune-functions: composedgridfunction.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,52 +58,54 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> |\n-<a href=\"#typedef-members\">Typedefs</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">type_traits.hh File Reference</div></div>\n+<a href=\"#func-members\">Functions</a> </div>\n+ <div class=\"headertitle\"><div class=\"title\">composedgridfunction.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <div class=\"textblock\"><code>#include <type_traits></code><br />\n+<code>#include <tuple></code><br />\n+<code>#include <dune/common/referencehelper.hh></code><br />\n <code>#include <dune/common/typeutilities.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00035_source.html\">dune/functions/common/defaultderivativetraits.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00011_source.html\">dune/functions/common/differentiablefunction.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00098_source.html\">dune/functions/gridfunctions/gridfunction.hh</a>></code><br />\n </div>\n <p><a href=\"a00092_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01331.html\">Dune::Functions::HasStaticSize< T ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Check if type is a statically sized container. <a href=\"a01331.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01335.html\">Dune::Functions::StaticSize< T ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Obtain size of statically sized container. <a href=\"a01335.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01851.html\">Dune::Functions::ComposedGridFunction< OF, IF ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Composition of grid functions with another function. <a href=\"a01851.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"typedef-members\" name=\"typedef-members\"></a>\n-Typedefs</h2></td></tr>\n-<tr class=\"memitem:ga673247dd74bcdd9e5acfc7735faf8a5b\"><td class=\"memTemplParams\" colspan=\"2\">template<class T , class... Args> </td></tr>\n-<tr class=\"memitem:ga673247dd74bcdd9e5acfc7735faf8a5b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00215.html#ga673247dd74bcdd9e5acfc7735faf8a5b\">Dune::Functions::enableIfConstructible</a> = typename std::enable_if< std::is_constructible< T, Args... >::value, int >::type</td></tr>\n-<tr class=\"memdesc:ga673247dd74bcdd9e5acfc7735faf8a5b\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Helper to constrain forwarding constructors. <a href=\"a00215.html#ga673247dd74bcdd9e5acfc7735faf8a5b\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga673247dd74bcdd9e5acfc7735faf8a5b\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n+Functions</h2></td></tr>\n+<tr class=\"memitem:ga9e5ac1cc0fdfb7d7a0e937f58aff21fd\"><td class=\"memTemplParams\" colspan=\"2\">template<class OF , class... IF> </td></tr>\n+<tr class=\"memitem:ga9e5ac1cc0fdfb7d7a0e937f58aff21fd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00209.html#ga9e5ac1cc0fdfb7d7a0e937f58aff21fd\">Dune::Functions::makeComposedGridFunction</a> (OF &&outerFunction, IF &&... innerFunction)</td></tr>\n+<tr class=\"memdesc:ga9e5ac1cc0fdfb7d7a0e937f58aff21fd\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a <a class=\"el\" href=\"a01851.html\" title=\"Composition of grid functions with another function.\">ComposedGridFunction</a> that composes grid-functions with another function. <a href=\"a00209.html#ga9e5ac1cc0fdfb7d7a0e937f58aff21fd\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga9e5ac1cc0fdfb7d7a0e937f58aff21fd\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,34 +4,37 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * common\n-Classes | Namespaces | Typedefs\n-type_traits.hh File Reference\n+ * gridfunctions\n+Classes | Namespaces | Functions\n+composedgridfunction.hh File Reference\n #include <type_traits>\n+#include <tuple>\n+#include <dune/common/referencehelper.hh>\n #include <dune/common/typeutilities.hh>\n+#include <dune/functions/common/defaultderivativetraits.hh>\n+#include <dune/functions/common/differentiablefunction.hh>\n+#include <dune/functions/gridfunctions/gridfunction.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-struct \u00a0Dune::Functions::HasStaticSize<_T_>\n-\u00a0 Check if type is a statically sized container. More...\n-\u00a0\n-struct \u00a0Dune::Functions::StaticSize<_T_>\n-\u00a0 Obtain size of statically sized container. More...\n+class \u00a0Dune::Functions::ComposedGridFunction<_OF,_IF_>\n+\u00a0 Composition of grid functions with another function. More...\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n- Typedefs\n-template<class T , class... Args>\n-using\u00a0Dune::Functions::enableIfConstructible = typename std::enable_if< std::\n- is_constructible< T, Args... >::value, int >::type\n-\u00a0 Helper to constrain forwarding constructors. More...\n+ Functions\n+template<class OF , class... IF>\n+auto\u00a0Dune::Functions::makeComposedGridFunction (OF &&outerFunction, IF &&...\n+ innerFunction)\n+\u00a0 Create a ComposedGridFunction that composes grid-functions with another\n+ function. More...\n \u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00092_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00092_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: type_traits.hh Source File</title>\n+<title>dune-functions: composedgridfunction.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,104 +58,199 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">type_traits.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">composedgridfunction.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00092.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_TYPE_TRAITS_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_TYPE_TRAITS_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_COMPOSEDGRIDFUNCTION_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_GRIDFUNCTIONS_COMPOSEDGRIDFUNCTION_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n <div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <type_traits></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span> </div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <dune/common/typeutilities.hh></span></div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>T, <span class=\"keyword\">class</span>... Args></div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00215.html#ga673247dd74bcdd9e5acfc7735faf8a5b\"> 25</a></span><span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a00215.html#ga673247dd74bcdd9e5acfc7735faf8a5b\">enableIfConstructible</a> = <span class=\"keyword\">typename</span> std::enable_if<</div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> std::is_constructible<T, Args...>::value, <span class=\"keywordtype\">int</span>>::type;</div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> </div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> </div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span> </div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span><span class=\"keyword\">namespace </span>Imp {</div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> </div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> <span class=\"comment\">// As a last resort try if there's a static constexpr size()</span></div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">auto</span> staticSize(<span class=\"keyword\">const</span> T*, <span class=\"keyword\">const</span> PriorityTag<0>&)</div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> -> <span class=\"keyword\">decltype</span>(std::integral_constant<std::size_t,T::size()>())</div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> {</div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> <span class=\"keywordflow\">return</span> {};</div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> }</div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> </div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> <span class=\"comment\">// Try if class has constexpr default constructor and size method</span></div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">auto</span> staticSize(<span class=\"keyword\">const</span> T*, <span class=\"keyword\">const</span> PriorityTag<1>&)</div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> -> <span class=\"keyword\">decltype</span>(std::integral_constant<std::size_t,T().size()>())</div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> {</div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> <span class=\"keywordflow\">return</span> {};</div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> }</div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> <span class=\"comment\">// Try if tuple_size is implemented for class</span></div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">auto</span> staticSize(<span class=\"keyword\">const</span> T*, <span class=\"keyword\">const</span> PriorityTag<2>&)</div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> -> <span class=\"keyword\">decltype</span>(std::integral_constant<std::size_t,std::tuple_size<T>::value>())</div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> {</div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> <span class=\"keywordflow\">return</span> {};</div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> }</div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <tuple></span></div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/common/referencehelper.hh></span></div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/typeutilities.hh></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00035.html\">dune/functions/common/defaultderivativetraits.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00011.html\">dune/functions/common/differentiablefunction.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00098.html\">dune/functions/gridfunctions/gridfunction.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span> </div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> </div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>OF, <span class=\"keyword\">class</span>... IF></div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01851.html\"> 41</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01851.html\">ComposedGridFunction</a></div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span>{</div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> <span class=\"keyword\">using </span>InnerFunctions = std::tuple<IF...>;</div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> <span class=\"keyword\">using </span>InnerLocalFunctions = std::tuple<decltype(localFunction(resolveRef(std::declval<const IF&>())))...>;</div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> </div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> <span class=\"keyword\">template</span><std::<span class=\"keywordtype\">size_t</span> i></div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> <span class=\"keyword\">using </span>InnerFunction = std::decay_t<ResolveRef_t<std::tuple_element_t<i, InnerFunctions>>>;</div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> </div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> <span class=\"keyword\">using </span>OuterFunction = OF;</div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> </div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> </div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01851.html#a60e88941320bce2a3fd832dcb33b79e8\"> 53</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01851.html#a60e88941320bce2a3fd832dcb33b79e8\">EntitySet</a> = <span class=\"keyword\">typename</span> InnerFunction<0>::EntitySet;</div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01851.html#a6c0975897a61d00e1e5db9e8d1c5943c\"> 54</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01851.html#a6c0975897a61d00e1e5db9e8d1c5943c\">Element</a> = <span class=\"keyword\">typename</span> EntitySet::Element;</div>\n <div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> </div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n-<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> <span class=\"keyword\">constexpr</span> std::false_type hasStaticSize(<span class=\"keyword\">const</span> T* t, <span class=\"keyword\">const</span> PriorityTag<0>& p)</div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> {</div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> <span class=\"keywordflow\">return</span> {};</div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> }</div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> </div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">auto</span> hasStaticSize(<span class=\"keyword\">const</span> T* t, <span class=\"keyword\">const</span> PriorityTag<1>& p)</div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> -> <span class=\"keyword\">decltype</span>(staticSize(t ,PriorityTag<42>()), std::true_type())</div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> {</div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> <span class=\"keywordflow\">return</span> {};</div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> }</div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> </div>\n-<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span>}</div>\n-<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> </div>\n-<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> </div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> </div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01331.html\"> 81</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01331.html\">HasStaticSize</a> :</div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> <span class=\"keyword\">public</span> decltype(Imp::hasStaticSize((typename std::decay<T>::type*)(nullptr), PriorityTag<42>()))</div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span>{};</div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> </div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> </div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> </div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n-<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01335.html\"> 95</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01335.html\">StaticSize</a> :</div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> <span class=\"keyword\">public</span> decltype(Imp::staticSize((typename std::decay<T>::type*)(nullptr), PriorityTag<42>()))</div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span>{};</div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> </div>\n-<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> </div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> </div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span>}} <span class=\"comment\">// namespace Dune::Functions</span></div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01851.html#ad9612763841397749ff243b3f6f16177\"> 56</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01851.html#ad9612763841397749ff243b3f6f16177\">Domain</a> = <span class=\"keyword\">typename</span> EntitySet::GlobalCoordinate;</div>\n+<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01851.html#a62ac2c12e6920194583994cdec60283f\"> 57</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01851.html#a62ac2c12e6920194583994cdec60283f\">LocalDomain</a> = <span class=\"keyword\">typename</span> EntitySet::LocalCoordinate;</div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> </div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01851.html#ad7e7b03a9451ddecdc34db9c424ac38a\"> 59</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01851.html#ad7e7b03a9451ddecdc34db9c424ac38a\">Range</a> = <span class=\"keyword\">decltype</span>(std::declval<OF>()(std::declval<IF>()(std::declval<Domain>())...));</div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> </div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> </div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> <span class=\"keyword\">using </span>Traits = Imp::GridFunctionTraits<<a class=\"code hl_typedef\" href=\"a01851.html#ad7e7b03a9451ddecdc34db9c424ac38a\">Range</a>(<a class=\"code hl_typedef\" href=\"a01851.html#ad9612763841397749ff243b3f6f16177\">Domain</a>), <a class=\"code hl_typedef\" href=\"a01851.html#a60e88941320bce2a3fd832dcb33b79e8\">EntitySet</a>, <a class=\"code hl_struct\" href=\"a01075.html\">DefaultDerivativeTraits</a>, 16>;</div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> </div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> <span class=\"keyword\">class </span>LocalFunction</div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> {</div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> <span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> LocalFunction(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01851.html\">ComposedGridFunction</a>& globalFunction) :</div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> globalFunction_(globalFunction),</div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> innerLocalFunctions_(globalFunction.<a class=\"code hl_function\" href=\"a01851.html#ab6fa74b32c63bb86bb048f3e67ead39d\">innerLocalFunctions</a>())</div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> {}</div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> </div>\n+<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> <span class=\"keywordtype\">void</span> bind(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01851.html#a6c0975897a61d00e1e5db9e8d1c5943c\">Element</a>& element)</div>\n+<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> {</div>\n+<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> std::apply([&](<span class=\"keyword\">auto</span>&... innerFunction) {</div>\n+<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> (innerFunction.bind(element),...);</div>\n+<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> }, innerLocalFunctions_);</div>\n+<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> }</div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> </div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> <span class=\"keywordtype\">void</span> unbind()</div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> {</div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> std::apply([&](<span class=\"keyword\">auto</span>&... innerFunction) {</div>\n+<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> (innerFunction.unbind(),...);</div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> }, innerLocalFunctions_);</div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> }</div>\n <div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> </div>\n-<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_TYPE_TRAITS_HH</span></div>\n-<div class=\"ttc\" id=\"aa00215_html_ga673247dd74bcdd9e5acfc7735faf8a5b\"><div class=\"ttname\"><a href=\"a00215.html#ga673247dd74bcdd9e5acfc7735faf8a5b\">Dune::Functions::enableIfConstructible</a></div><div class=\"ttdeci\">typename std::enable_if< std::is_constructible< T, Args... >::value, int >::type enableIfConstructible</div><div class=\"ttdoc\">Helper to constrain forwarding constructors.</div><div class=\"ttdef\"><b>Definition:</b> type_traits.hh:26</div></div>\n+<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> <span class=\"keywordtype\">bool</span> bound()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> <span class=\"keywordflow\">return</span> std::apply([](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>&... innerFunction) {</div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> <span class=\"keywordflow\">return</span> (innerFunction.bound() && ...);</div>\n+<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> }, innerLocalFunctions_);</div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> }</div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> </div>\n+<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> <a class=\"code hl_typedef\" href=\"a01851.html#ad7e7b03a9451ddecdc34db9c424ac38a\">Range</a> <a class=\"code hl_function\" href=\"a01851.html#ae5d3415a56ecdaae44c4bf96a262885c\">operator()</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01851.html#a62ac2c12e6920194583994cdec60283f\">LocalDomain</a>& x)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> <span class=\"keywordflow\">return</span> std::apply([&](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>&... innerFunction) {</div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> <span class=\"keywordflow\">return</span> globalFunction_.outerFunction_(innerFunction(x)...);</div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> }, innerLocalFunctions_);</div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> }</div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> </div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01851.html#a6c0975897a61d00e1e5db9e8d1c5943c\">Element</a>& localContext()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> <span class=\"keywordflow\">return</span> std::get<0>(innerLocalFunctions_).localContext();</div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> }</div>\n+<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> </div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> <span class=\"keyword\">friend</span> <span class=\"keyword\">typename</span> <a class=\"code hl_class\" href=\"a01895.html\">Traits::LocalFunctionTraits::DerivativeInterface</a> <a class=\"code hl_friend\" href=\"a01851.html#af786f297d006433ef0161f8565df6acf\">derivative</a>(<span class=\"keyword\">const</span> LocalFunction& t)</div>\n+<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> {</div>\n+<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> DUNE_THROW(NotImplemented,<span class=\"stringliteral\">"not implemented"</span>);</div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> }</div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> </div>\n+<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> <span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01851.html\">ComposedGridFunction</a>& globalFunction_;</div>\n+<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> InnerLocalFunctions innerLocalFunctions_;</div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> };</div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> </div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> </div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>OFT, <span class=\"keyword\">class</span>... IFT,</div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> disableCopyMove<ComposedGridFunction, OFT> = 0,</div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> std::enable_if_t<(<span class=\"keyword\">sizeof</span>...(IFT) > 0), <span class=\"keywordtype\">int</span>> = 0></div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01851.html#a31f170c22381b94a081e09f25704102a\"> 167</a></span> <a class=\"code hl_function\" href=\"a01851.html#a31f170c22381b94a081e09f25704102a\">ComposedGridFunction</a>(OFT&& outerFunction, IFT&&... innerFunctions) :</div>\n+<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> <a class=\"code hl_variable\" href=\"a01851.html#a145b7b5d536222897e403d6151491e0b\">outerFunction_</a>(std::forward<OFT>(outerFunction)),</div>\n+<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> <a class=\"code hl_variable\" href=\"a01851.html#a1a90b0f55aef5ea1694778c11c31b6ee\">innerFunctions_</a>(std::forward<IFT>(innerFunctions)...)</div>\n+<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> {}</div>\n+<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> </div>\n+<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01851.html#ae5d3415a56ecdaae44c4bf96a262885c\"> 173</a></span> <a class=\"code hl_typedef\" href=\"a01851.html#ad7e7b03a9451ddecdc34db9c424ac38a\">Range</a> <a class=\"code hl_function\" href=\"a01851.html#ae5d3415a56ecdaae44c4bf96a262885c\">operator()</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01851.html#ad9612763841397749ff243b3f6f16177\">Domain</a>& x)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> DUNE_THROW(NotImplemented,<span class=\"stringliteral\">"not implemented"</span>);</div>\n+<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> }</div>\n+<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> </div>\n+<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01851.html#af786f297d006433ef0161f8565df6acf\"> 179</a></span> <span class=\"keyword\">friend</span> <span class=\"keyword\">typename</span> <a class=\"code hl_class\" href=\"a01895.html\">Traits::DerivativeInterface</a> <a class=\"code hl_friend\" href=\"a01851.html#af786f297d006433ef0161f8565df6acf\">derivative</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01851.html\">ComposedGridFunction</a>& t)</div>\n+<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> {</div>\n+<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> DUNE_THROW(NotImplemented,<span class=\"stringliteral\">"not implemented"</span>);</div>\n+<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> }</div>\n+<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span> </div>\n+<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01851.html#ad1b3541b659ef016514458e3edffc149\"> 190</a></span> <span class=\"keyword\">friend</span> LocalFunction <a class=\"code hl_friend\" href=\"a01851.html#ad1b3541b659ef016514458e3edffc149\">localFunction</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01851.html\">ComposedGridFunction</a>& cgf)</div>\n+<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> {</div>\n+<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> <span class=\"keywordflow\">return</span> LocalFunction(cgf);</div>\n+<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> }</div>\n+<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> </div>\n+<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01851.html#a417a35c0e8f111e9dfaf224eb1a08c38\"> 205</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01851.html#a60e88941320bce2a3fd832dcb33b79e8\">EntitySet</a>& <a class=\"code hl_function\" href=\"a01851.html#a417a35c0e8f111e9dfaf224eb1a08c38\">entitySet</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00219.html#acd448ecd78521f983720ec5a6f3e7698\">resolveRef</a>(std::get<0>(<a class=\"code hl_variable\" href=\"a01851.html#a1a90b0f55aef5ea1694778c11c31b6ee\">innerFunctions_</a>)).entitySet();</div>\n+<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span> }</div>\n+<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> </div>\n+<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span><span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> </div>\n+<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01851.html#ab6fa74b32c63bb86bb048f3e67ead39d\"> 212</a></span> InnerLocalFunctions <a class=\"code hl_function\" href=\"a01851.html#ab6fa74b32c63bb86bb048f3e67ead39d\">innerLocalFunctions</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> <span class=\"keywordflow\">return</span> std::apply([&](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>&... innerFunction) {</div>\n+<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> <span class=\"keywordflow\">return</span> std::make_tuple(<a class=\"code hl_friend\" href=\"a01851.html#ad1b3541b659ef016514458e3edffc149\">localFunction</a>(<a class=\"code hl_function\" href=\"a00219.html#acd448ecd78521f983720ec5a6f3e7698\">resolveRef</a>(innerFunction))...);</div>\n+<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span> }, <a class=\"code hl_variable\" href=\"a01851.html#a1a90b0f55aef5ea1694778c11c31b6ee\">innerFunctions_</a>);</div>\n+<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> }</div>\n+<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> </div>\n+<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01851.html#a145b7b5d536222897e403d6151491e0b\"> 219</a></span> OuterFunction <a class=\"code hl_variable\" href=\"a01851.html#a145b7b5d536222897e403d6151491e0b\">outerFunction_</a>;</div>\n+<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01851.html#a1a90b0f55aef5ea1694778c11c31b6ee\"> 220</a></span> InnerFunctions <a class=\"code hl_variable\" href=\"a01851.html#a1a90b0f55aef5ea1694778c11c31b6ee\">innerFunctions_</a>;</div>\n+<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span>};</div>\n+<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span> </div>\n+<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> </div>\n+<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> </div>\n+<div class=\"line\"><a id=\"l00247\" name=\"l00247\"></a><span class=\"lineno\"> 247</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>OF, <span class=\"keyword\">class</span>... IF></div>\n+<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00209.html#ga9e5ac1cc0fdfb7d7a0e937f58aff21fd\"> 248</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00209.html#ga9e5ac1cc0fdfb7d7a0e937f58aff21fd\">makeComposedGridFunction</a>(OF&& outerFunction, IF&&... innerFunction)</div>\n+<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span>{</div>\n+<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span> <span class=\"keyword\">using </span>ComposedGridFunctionType = <a class=\"code hl_class\" href=\"a01851.html\">ComposedGridFunction<std::decay_t<OF></a>, std::decay_t<IF>...>;</div>\n+<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span> <span class=\"keywordflow\">return</span> ComposedGridFunctionType(std::forward<OF>(outerFunction), std::forward<IF>(innerFunction)...);</div>\n+<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span>}</div>\n+<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"> 253</span> </div>\n+<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"> 254</span> </div>\n+<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span> </div>\n+<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"> 256</span>}} <span class=\"comment\">// namespace Dune::Functions</span></div>\n+<div class=\"line\"><a id=\"l00257\" name=\"l00257\"></a><span class=\"lineno\"> 257</span> </div>\n+<div class=\"line\"><a id=\"l00258\" name=\"l00258\"></a><span class=\"lineno\"> 258</span> </div>\n+<div class=\"line\"><a id=\"l00259\" name=\"l00259\"></a><span class=\"lineno\"> 259</span> </div>\n+<div class=\"line\"><a id=\"l00260\" name=\"l00260\"></a><span class=\"lineno\"> 260</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_GRIDFUNCTIONS_COMPOSEDGRIDFUNCTION_HH</span></div>\n+<div class=\"ttc\" id=\"aa00011_html\"><div class=\"ttname\"><a href=\"a00011.html\">differentiablefunction.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00035_html\"><div class=\"ttname\"><a href=\"a00035.html\">defaultderivativetraits.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00098_html\"><div class=\"ttname\"><a href=\"a00098.html\">gridfunction.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00209_html_ga9e5ac1cc0fdfb7d7a0e937f58aff21fd\"><div class=\"ttname\"><a href=\"a00209.html#ga9e5ac1cc0fdfb7d7a0e937f58aff21fd\">Dune::Functions::ComposedGridFunction::makeComposedGridFunction</a></div><div class=\"ttdeci\">auto makeComposedGridFunction(OF &&outerFunction, IF &&... innerFunction)</div><div class=\"ttdoc\">Create a ComposedGridFunction that composes grid-functions with another function.</div><div class=\"ttdef\"><b>Definition:</b> composedgridfunction.hh:248</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa01331_html\"><div class=\"ttname\"><a href=\"a01331.html\">Dune::Functions::HasStaticSize</a></div><div class=\"ttdoc\">Check if type is a statically sized container.</div><div class=\"ttdef\"><b>Definition:</b> type_traits.hh:83</div></div>\n-<div class=\"ttc\" id=\"aa01335_html\"><div class=\"ttname\"><a href=\"a01335.html\">Dune::Functions::StaticSize</a></div><div class=\"ttdoc\">Obtain size of statically sized container.</div><div class=\"ttdef\"><b>Definition:</b> type_traits.hh:97</div></div>\n+<div class=\"ttc\" id=\"aa00219_html_acd448ecd78521f983720ec5a6f3e7698\"><div class=\"ttname\"><a href=\"a00219.html#acd448ecd78521f983720ec5a6f3e7698\">Dune::Functions::resolveRef</a></div><div class=\"ttdeci\">decltype(auto) resolveRef(T &&t)</div><div class=\"ttdoc\">This is an alias for Dune::resolveRef.</div><div class=\"ttdef\"><b>Definition:</b> referencehelper.hh:37</div></div>\n+<div class=\"ttc\" id=\"aa01075_html\"><div class=\"ttname\"><a href=\"a01075.html\">Dune::Functions::DefaultDerivativeTraits</a></div><div class=\"ttdoc\">Default implementation for derivative traits.</div><div class=\"ttdef\"><b>Definition:</b> defaultderivativetraits.hh:37</div></div>\n+<div class=\"ttc\" id=\"aa01851_html\"><div class=\"ttname\"><a href=\"a01851.html\">Dune::Functions::ComposedGridFunction</a></div><div class=\"ttdoc\">Composition of grid functions with another function.</div><div class=\"ttdef\"><b>Definition:</b> composedgridfunction.hh:42</div></div>\n+<div class=\"ttc\" id=\"aa01851_html_a145b7b5d536222897e403d6151491e0b\"><div class=\"ttname\"><a href=\"a01851.html#a145b7b5d536222897e403d6151491e0b\">Dune::Functions::ComposedGridFunction::outerFunction_</a></div><div class=\"ttdeci\">OuterFunction outerFunction_</div><div class=\"ttdef\"><b>Definition:</b> composedgridfunction.hh:219</div></div>\n+<div class=\"ttc\" id=\"aa01851_html_a1a90b0f55aef5ea1694778c11c31b6ee\"><div class=\"ttname\"><a href=\"a01851.html#a1a90b0f55aef5ea1694778c11c31b6ee\">Dune::Functions::ComposedGridFunction::innerFunctions_</a></div><div class=\"ttdeci\">InnerFunctions innerFunctions_</div><div class=\"ttdef\"><b>Definition:</b> composedgridfunction.hh:220</div></div>\n+<div class=\"ttc\" id=\"aa01851_html_a31f170c22381b94a081e09f25704102a\"><div class=\"ttname\"><a href=\"a01851.html#a31f170c22381b94a081e09f25704102a\">Dune::Functions::ComposedGridFunction::ComposedGridFunction</a></div><div class=\"ttdeci\">ComposedGridFunction(OFT &&outerFunction, IFT &&... innerFunctions)</div><div class=\"ttdoc\">Create ComposedGridFunction.</div><div class=\"ttdef\"><b>Definition:</b> composedgridfunction.hh:167</div></div>\n+<div class=\"ttc\" id=\"aa01851_html_a417a35c0e8f111e9dfaf224eb1a08c38\"><div class=\"ttname\"><a href=\"a01851.html#a417a35c0e8f111e9dfaf224eb1a08c38\">Dune::Functions::ComposedGridFunction::entitySet</a></div><div class=\"ttdeci\">const EntitySet & entitySet() const</div><div class=\"ttdoc\">Return the EntitySet associated to this composed grid-function.</div><div class=\"ttdef\"><b>Definition:</b> composedgridfunction.hh:205</div></div>\n+<div class=\"ttc\" id=\"aa01851_html_a60e88941320bce2a3fd832dcb33b79e8\"><div class=\"ttname\"><a href=\"a01851.html#a60e88941320bce2a3fd832dcb33b79e8\">Dune::Functions::ComposedGridFunction::EntitySet</a></div><div class=\"ttdeci\">typename InnerFunction< 0 >::EntitySet EntitySet</div><div class=\"ttdef\"><b>Definition:</b> composedgridfunction.hh:53</div></div>\n+<div class=\"ttc\" id=\"aa01851_html_a62ac2c12e6920194583994cdec60283f\"><div class=\"ttname\"><a href=\"a01851.html#a62ac2c12e6920194583994cdec60283f\">Dune::Functions::ComposedGridFunction::LocalDomain</a></div><div class=\"ttdeci\">typename EntitySet::LocalCoordinate LocalDomain</div><div class=\"ttdef\"><b>Definition:</b> composedgridfunction.hh:57</div></div>\n+<div class=\"ttc\" id=\"aa01851_html_a6c0975897a61d00e1e5db9e8d1c5943c\"><div class=\"ttname\"><a href=\"a01851.html#a6c0975897a61d00e1e5db9e8d1c5943c\">Dune::Functions::ComposedGridFunction::Element</a></div><div class=\"ttdeci\">typename EntitySet::Element Element</div><div class=\"ttdef\"><b>Definition:</b> composedgridfunction.hh:54</div></div>\n+<div class=\"ttc\" id=\"aa01851_html_ab6fa74b32c63bb86bb048f3e67ead39d\"><div class=\"ttname\"><a href=\"a01851.html#ab6fa74b32c63bb86bb048f3e67ead39d\">Dune::Functions::ComposedGridFunction::innerLocalFunctions</a></div><div class=\"ttdeci\">InnerLocalFunctions innerLocalFunctions() const</div><div class=\"ttdef\"><b>Definition:</b> composedgridfunction.hh:212</div></div>\n+<div class=\"ttc\" id=\"aa01851_html_ad1b3541b659ef016514458e3edffc149\"><div class=\"ttname\"><a href=\"a01851.html#ad1b3541b659ef016514458e3edffc149\">Dune::Functions::ComposedGridFunction::localFunction</a></div><div class=\"ttdeci\">friend LocalFunction localFunction(const ComposedGridFunction &cgf)</div><div class=\"ttdoc\">Create a local-function of this composed grid-function.</div><div class=\"ttdef\"><b>Definition:</b> composedgridfunction.hh:190</div></div>\n+<div class=\"ttc\" id=\"aa01851_html_ad7e7b03a9451ddecdc34db9c424ac38a\"><div class=\"ttname\"><a href=\"a01851.html#ad7e7b03a9451ddecdc34db9c424ac38a\">Dune::Functions::ComposedGridFunction::Range</a></div><div class=\"ttdeci\">decltype(std::declval< OF >()(std::declval< IF >()(std::declval< Domain >())...)) Range</div><div class=\"ttdef\"><b>Definition:</b> composedgridfunction.hh:59</div></div>\n+<div class=\"ttc\" id=\"aa01851_html_ad9612763841397749ff243b3f6f16177\"><div class=\"ttname\"><a href=\"a01851.html#ad9612763841397749ff243b3f6f16177\">Dune::Functions::ComposedGridFunction::Domain</a></div><div class=\"ttdeci\">typename EntitySet::GlobalCoordinate Domain</div><div class=\"ttdef\"><b>Definition:</b> composedgridfunction.hh:56</div></div>\n+<div class=\"ttc\" id=\"aa01851_html_ae5d3415a56ecdaae44c4bf96a262885c\"><div class=\"ttname\"><a href=\"a01851.html#ae5d3415a56ecdaae44c4bf96a262885c\">Dune::Functions::ComposedGridFunction::operator()</a></div><div class=\"ttdeci\">Range operator()(const Domain &x) const</div><div class=\"ttdoc\">Evaluation of the composed grid function in coordinates x</div><div class=\"ttdef\"><b>Definition:</b> composedgridfunction.hh:173</div></div>\n+<div class=\"ttc\" id=\"aa01851_html_af786f297d006433ef0161f8565df6acf\"><div class=\"ttname\"><a href=\"a01851.html#af786f297d006433ef0161f8565df6acf\">Dune::Functions::ComposedGridFunction::derivative</a></div><div class=\"ttdeci\">friend Traits::DerivativeInterface derivative(const ComposedGridFunction &t)</div><div class=\"ttdoc\">Not implemented.</div><div class=\"ttdef\"><b>Definition:</b> composedgridfunction.hh:179</div></div>\n+<div class=\"ttc\" id=\"aa01895_html\"><div class=\"ttname\"><a href=\"a01895.html\">Dune::Functions::GridFunction</a></div><div class=\"ttdef\"><b>Definition:</b> gridfunction.hh:32</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,109 +4,244 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * common\n-type_traits.hh\n+ * gridfunctions\n+composedgridfunction.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_COMMON_TYPE_TRAITS_HH\n- 4#define DUNE_FUNCTIONS_COMMON_TYPE_TRAITS_HH\n+ 3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_COMPOSEDGRIDFUNCTION_HH\n+ 4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_COMPOSEDGRIDFUNCTION_HH\n 5\n 6#include <type_traits>\n- 7\n- 8#include <dune/common/typeutilities.hh>\n- 9\n- 10namespace Dune {\n- 11namespace Functions {\n- 12\n- 13\n- 24template<class T, class... Args>\n-25using enableIfConstructible = typename std::enable_if<\n- 26 std::is_constructible<T, Args...>::value, int>::type;\n- 27\n- 28\n- 29\n- 30namespace Imp {\n- 31\n- 32 // As a last resort try if there's a static constexpr size()\n- 33 template<class T>\n- 34 constexpr auto staticSize(const T*, const PriorityTag<0>&)\n- 35 -> decltype(std::integral_constant<std::size_t,T::size()>())\n- 36 {\n- 37 return {};\n- 38 }\n- 39\n- 40 // Try if class has constexpr default constructor and size method\n- 41 template<class T>\n- 42 constexpr auto staticSize(const T*, const PriorityTag<1>&)\n- 43 -> decltype(std::integral_constant<std::size_t,T().size()>())\n- 44 {\n- 45 return {};\n- 46 }\n- 47\n- 48 // Try if tuple_size is implemented for class\n- 49 template<class T>\n- 50 constexpr auto staticSize(const T*, const PriorityTag<2>&)\n- 51 -> decltype(std::integral_constant<std::size_t,std::tuple_size<T>::value>\n-())\n- 52 {\n- 53 return {};\n- 54 }\n+ 7#include <tuple>\n+ 8\n+ 9#include <dune/common/referencehelper.hh>\n+ 10#include <dune/common/typeutilities.hh>\n+ 11\n+ 12#include <dune/functions/common/defaultderivativetraits.hh>\n+ 13#include <dune/functions/common/differentiablefunction.hh>\n+ 14#include <dune/functions/gridfunctions/gridfunction.hh>\n+ 15\n+ 16\n+ 17namespace Dune {\n+ 18namespace Functions {\n+ 19\n+ 20\n+ 21\n+ 40template<class OF, class... IF>\n+41class ComposedGridFunction\n+ 42{\n+ 43 using InnerFunctions = std::tuple<IF...>;\n+ 44 using InnerLocalFunctions = std::tuple<decltype(localFunction(resolveRef\n+(std::declval<const IF&>())))...>;\n+ 45\n+ 46 template<std::size_t i>\n+ 47 using InnerFunction = std::decay_t<ResolveRef_t<std::tuple_element_t<i,\n+InnerFunctions>>>;\n+ 48\n+ 49 using OuterFunction = OF;\n+ 50\n+ 51public:\n+ 52\n+53 using EntitySet = typename InnerFunction<0>::EntitySet;\n+54 using Element = typename EntitySet::Element;\n 55\n- 56 template<class T>\n- 57 constexpr std::false_type hasStaticSize(const T* t, const PriorityTag<0>&\n-p)\n- 58 {\n- 59 return {};\n- 60 }\n- 61\n- 62 template<class T>\n- 63 constexpr auto hasStaticSize(const T* t, const PriorityTag<1>& p)\n- 64 -> decltype(staticSize(t ,PriorityTag<42>()), std::true_type())\n- 65 {\n- 66 return {};\n- 67 }\n- 68\n- 69}\n- 70\n- 71\n- 72\n- 80template<class T>\n-81struct HasStaticSize :\n- 82 public decltype(Imp::hasStaticSize((typename std::decay<T>::type*)\n-(nullptr), PriorityTag<42>()))\n- 83{};\n- 84\n- 85\n- 86\n- 94template<class T>\n-95struct StaticSize :\n- 96 public decltype(Imp::staticSize((typename std::decay<T>::type*)(nullptr),\n-PriorityTag<42>()))\n- 97{};\n- 98\n- 99\n- 100\n- 101}} // namespace Dune::Functions\n+56 using Domain = typename EntitySet::GlobalCoordinate;\n+57 using LocalDomain = typename EntitySet::LocalCoordinate;\n+ 58\n+59 using Range = decltype(std::declval<OF>()(std::declval<IF>()(std::\n+declval<Domain>())...));\n+ 60\n+ 61private:\n+ 62\n+ 63 using Traits = Imp::GridFunctionTraits<Range(Domain), EntitySet,\n+DefaultDerivativeTraits, 16>;\n+ 64\n+ 65 class LocalFunction\n+ 66 {\n+ 67 public:\n+ 74 LocalFunction(const ComposedGridFunction& globalFunction) :\n+ 75 globalFunction_(globalFunction),\n+ 76 innerLocalFunctions_(globalFunction.innerLocalFunctions())\n+ 77 {}\n+ 78\n+ 88 void bind(const Element& element)\n+ 89 {\n+ 90 std::apply([&](auto&... innerFunction) {\n+ 91 (innerFunction.bind(element),...);\n+ 92 }, innerLocalFunctions_);\n+ 93 }\n+ 94\n+ 96 void unbind()\n+ 97 {\n+ 98 std::apply([&](auto&... innerFunction) {\n+ 99 (innerFunction.unbind(),...);\n+ 100 }, innerLocalFunctions_);\n+ 101 }\n 102\n- 103#endif // DUNE_FUNCTIONS_COMMON_TYPE_TRAITS_HH\n-Dune::Functions::enableIfConstructible\n-typename std::enable_if< std::is_constructible< T, Args... >::value, int >::\n-type enableIfConstructible\n-Helper to constrain forwarding constructors.\n-Definition: type_traits.hh:26\n+ 105 bool bound() const\n+ 106 {\n+ 107 return std::apply([](const auto&... innerFunction) {\n+ 108 return (innerFunction.bound() && ...);\n+ 109 }, innerLocalFunctions_);\n+ 110 }\n+ 111\n+ 121 Range operator()(const LocalDomain& x) const\n+ 122 {\n+ 123 return std::apply([&](const auto&... innerFunction) {\n+ 124 return globalFunction_.outerFunction_(innerFunction(x)...);\n+ 125 }, innerLocalFunctions_);\n+ 126 }\n+ 127\n+ 137 const Element& localContext() const\n+ 138 {\n+ 139 return std::get<0>(innerLocalFunctions_).localContext();\n+ 140 }\n+ 141\n+ 143 friend typename Traits::LocalFunctionTraits::DerivativeInterface\n+derivative(const LocalFunction& t)\n+ 144 {\n+ 145 DUNE_THROW(NotImplemented,\"not implemented\");\n+ 146 }\n+ 147\n+ 148 private:\n+ 149 const ComposedGridFunction& globalFunction_;\n+ 150 InnerLocalFunctions innerLocalFunctions_;\n+ 151 };\n+ 152\n+ 153public:\n+ 154\n+ 164 template<class OFT, class... IFT,\n+ 165 disableCopyMove<ComposedGridFunction, OFT> = 0,\n+ 166 std::enable_if_t<(sizeof...(IFT) > 0), int> = 0>\n+167 ComposedGridFunction(OFT&& outerFunction, IFT&&... innerFunctions) :\n+ 168 outerFunction_(std::forward<OFT>(outerFunction)),\n+ 169 innerFunctions_(std::forward<IFT>(innerFunctions)...)\n+ 170 {}\n+ 171\n+173 Range operator()(const Domain& x) const\n+ 174 {\n+ 175 DUNE_THROW(NotImplemented,\"not implemented\");\n+ 176 }\n+ 177\n+179 friend typename Traits::DerivativeInterface derivative(const\n+ComposedGridFunction& t)\n+ 180 {\n+ 181 DUNE_THROW(NotImplemented,\"not implemented\");\n+ 182 }\n+ 183\n+190 friend LocalFunction localFunction(const ComposedGridFunction& cgf)\n+ 191 {\n+ 192 return LocalFunction(cgf);\n+ 193 }\n+ 194\n+205 const EntitySet& entitySet() const\n+ 206 {\n+ 207 return resolveRef(std::get<0>(innerFunctions_)).entitySet();\n+ 208 }\n+ 209\n+ 210protected:\n+ 211\n+212 InnerLocalFunctions innerLocalFunctions() const\n+ 213 {\n+ 214 return std::apply([&](const auto&... innerFunction) {\n+ 215 return std::make_tuple(localFunction(resolveRef(innerFunction))...);\n+ 216 }, innerFunctions_);\n+ 217 }\n+ 218\n+219 OuterFunction outerFunction_;\n+220 InnerFunctions innerFunctions_;\n+ 221};\n+ 222\n+ 223\n+ 224\n+ 247template<class OF, class... IF>\n+248auto makeComposedGridFunction(OF&& outerFunction, IF&&... innerFunction)\n+ 249{\n+ 250 using ComposedGridFunctionType = ComposedGridFunction<std::decay_t<OF>,\n+std::decay_t<IF>...>;\n+ 251 return ComposedGridFunctionType(std::forward<OF>(outerFunction), std::\n+forward<IF>(innerFunction)...);\n+ 252}\n+ 253\n+ 254\n+ 255\n+ 256}} // namespace Dune::Functions\n+ 257\n+ 258\n+ 259\n+ 260#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_COMPOSEDGRIDFUNCTION_HH\n+differentiablefunction.hh\n+defaultderivativetraits.hh\n+gridfunction.hh\n+Dune::Functions::ComposedGridFunction::makeComposedGridFunction\n+auto makeComposedGridFunction(OF &&outerFunction, IF &&... innerFunction)\n+Create a ComposedGridFunction that composes grid-functions with another\n+function.\n+Definition: composedgridfunction.hh:248\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::HasStaticSize\n-Check if type is a statically sized container.\n-Definition: type_traits.hh:83\n-Dune::Functions::StaticSize\n-Obtain size of statically sized container.\n-Definition: type_traits.hh:97\n+Dune::Functions::resolveRef\n+decltype(auto) resolveRef(T &&t)\n+This is an alias for Dune::resolveRef.\n+Definition: referencehelper.hh:37\n+Dune::Functions::DefaultDerivativeTraits\n+Default implementation for derivative traits.\n+Definition: defaultderivativetraits.hh:37\n+Dune::Functions::ComposedGridFunction\n+Composition of grid functions with another function.\n+Definition: composedgridfunction.hh:42\n+Dune::Functions::ComposedGridFunction::outerFunction_\n+OuterFunction outerFunction_\n+Definition: composedgridfunction.hh:219\n+Dune::Functions::ComposedGridFunction::innerFunctions_\n+InnerFunctions innerFunctions_\n+Definition: composedgridfunction.hh:220\n+Dune::Functions::ComposedGridFunction::ComposedGridFunction\n+ComposedGridFunction(OFT &&outerFunction, IFT &&... innerFunctions)\n+Create ComposedGridFunction.\n+Definition: composedgridfunction.hh:167\n+Dune::Functions::ComposedGridFunction::entitySet\n+const EntitySet & entitySet() const\n+Return the EntitySet associated to this composed grid-function.\n+Definition: composedgridfunction.hh:205\n+Dune::Functions::ComposedGridFunction::EntitySet\n+typename InnerFunction< 0 >::EntitySet EntitySet\n+Definition: composedgridfunction.hh:53\n+Dune::Functions::ComposedGridFunction::LocalDomain\n+typename EntitySet::LocalCoordinate LocalDomain\n+Definition: composedgridfunction.hh:57\n+Dune::Functions::ComposedGridFunction::Element\n+typename EntitySet::Element Element\n+Definition: composedgridfunction.hh:54\n+Dune::Functions::ComposedGridFunction::innerLocalFunctions\n+InnerLocalFunctions innerLocalFunctions() const\n+Definition: composedgridfunction.hh:212\n+Dune::Functions::ComposedGridFunction::localFunction\n+friend LocalFunction localFunction(const ComposedGridFunction &cgf)\n+Create a local-function of this composed grid-function.\n+Definition: composedgridfunction.hh:190\n+Dune::Functions::ComposedGridFunction::Range\n+decltype(std::declval< OF >()(std::declval< IF >()(std::declval< Domain >\n+())...)) Range\n+Definition: composedgridfunction.hh:59\n+Dune::Functions::ComposedGridFunction::Domain\n+typename EntitySet::GlobalCoordinate Domain\n+Definition: composedgridfunction.hh:56\n+Dune::Functions::ComposedGridFunction::operator()\n+Range operator()(const Domain &x) const\n+Evaluation of the composed grid function in coordinates x\n+Definition: composedgridfunction.hh:173\n+Dune::Functions::ComposedGridFunction::derivative\n+friend Traits::DerivativeInterface derivative(const ComposedGridFunction &t)\n+Not implemented.\n+Definition: composedgridfunction.hh:179\n+Dune::Functions::GridFunction\n+Definition: gridfunction.hh:32\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00095.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00095.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: interfaces.hh File Reference</title>\n+<title>dune-functions: localderivativetraits.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,32 +58,36 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">interfaces.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">localderivativetraits.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <type_traits></code><br />\n+<div class=\"textblock\"><code>#include <<a class=\"el\" href=\"a00035_source.html\">dune/functions/common/defaultderivativetraits.hh</a>></code><br />\n </div>\n <p><a href=\"a00095_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01239.html\">Dune::Functions::PolymorphicType< Interface ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Base class with polymorphic type boiler plate code. <a href=\"a01239.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01931.html\">Dune::Functions::LocalDerivativeTraits< EntitySet, DerivativeTraits ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Derivative traits for local functions. <a href=\"a01931.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01935.html\">Dune::Functions::LocalDerivativeTraits< EntitySet, DerivativeTraits >::Traits< Signature ></a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01939.html\">Dune::Functions::LocalDerivativeTraits< EntitySet, DerivativeTraits >::Traits< R(LocalDomain)></a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,22 +4,28 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * common\n+ * gridfunctions\n Classes | Namespaces\n-interfaces.hh File Reference\n-#include <type_traits>\n+localderivativetraits.hh File Reference\n+#include <dune/functions/common/defaultderivativetraits.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-class \u00a0Dune::Functions::PolymorphicType<_Interface_>\n-\u00a0 Base class with polymorphic type boiler plate code. More...\n+struct \u00a0Dune::Functions::LocalDerivativeTraits<_EntitySet,_DerivativeTraits_>\n+\u00a0 Derivative traits for local functions. More...\n+\u00a0\n+struct \u00a0Dune::Functions::LocalDerivativeTraits<_EntitySet,_DerivativeTraits\n+ >::Traits<_Signature_>\n+\u00a0\n+struct \u00a0Dune::Functions::LocalDerivativeTraits<_EntitySet,_DerivativeTraits\n+ >::Traits<_R(LocalDomain)>\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n \n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00095_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00095_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: interfaces.hh Source File</title>\n+<title>dune-functions: localderivativetraits.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,60 +58,66 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">interfaces.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">localderivativetraits.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00095.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_INTERFACES_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_INTERFACES_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <type_traits></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span> </div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span> </div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00035.html\">dune/functions/common/defaultderivativetraits.hh</a>></span></div>\n <div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"keyword\">namespace </span>Functions {</div>\n <div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n <div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Interface></div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01239.html\"> 24</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01239.html\">PolymorphicType</a></div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span>{</div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> </div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01239.html#ae65ec09f3c0f320f0e5890c3e028fa2a\"> 29</a></span> <span class=\"keyword\">virtual</span> <a class=\"code hl_function\" href=\"a01239.html#ae65ec09f3c0f320f0e5890c3e028fa2a\">~PolymorphicType</a>()</div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> {}</div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> EntitySet, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits=DefaultDerivativeTraits></div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01931.html\"> 27</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01931.html\">LocalDerivativeTraits</a></div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span>{</div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01931.html#a2dc0b1d49311457bb686a04972f8aee4\"> 29</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01931.html#a2dc0b1d49311457bb686a04972f8aee4\">LocalDomain</a> = <span class=\"keyword\">typename</span> EntitySet::LocalCoordinate;</div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01931.html#a0339d22fe9243285caf3a79a286912b5\"> 30</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01931.html#a0339d22fe9243285caf3a79a286912b5\">Domain</a> = <span class=\"keyword\">typename</span> EntitySet::GlobalCoordinate;</div>\n <div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> </div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01239.html#a56439d136ed112196bb2bf1a7aca42e7\"> 40</a></span> <span class=\"keyword\">virtual</span> Interface* <a class=\"code hl_function\" href=\"a01239.html#a56439d136ed112196bb2bf1a7aca42e7\">clone</a>() <span class=\"keyword\">const</span> = 0;</div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> </div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01239.html#a342f459670ff8ac9ef58314a95ca972d\"> 51</a></span> <span class=\"keyword\">virtual</span> Interface* <a class=\"code hl_function\" href=\"a01239.html#a342f459670ff8ac9ef58314a95ca972d\">clone</a>(<span class=\"keywordtype\">void</span>* buffer) <span class=\"keyword\">const</span> = 0;</div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> </div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01239.html#a937e58884f58dfac27f85c80024be57c\"> 62</a></span> <span class=\"keyword\">virtual</span> Interface* <a class=\"code hl_function\" href=\"a01239.html#a937e58884f58dfac27f85c80024be57c\">move</a>(<span class=\"keywordtype\">void</span>* buffer) = 0;</div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span>};</div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> </div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> </div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> </div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span>}} <span class=\"comment\">// namespace Dune::Functions</span></div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> </div>\n-<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_EXTENDED_CLONEABLE_HH</span></div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature></div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01935.html\"> 33</a></span> <span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01935.html\">Traits</a></div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> {</div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01935.html#ab37a5c5f4de2d44c5334bab2b33cf8a0\"> 35</a></span> <span class=\"keyword\">typedef</span> <a class=\"code hl_class\" href=\"a01071.html\">InvalidRange</a> <a class=\"code hl_typedef\" href=\"a01935.html#ab37a5c5f4de2d44c5334bab2b33cf8a0\">Range</a>;</div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> };</div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> </div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> R></div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01939.html\"> 39</a></span> <span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01935.html\">Traits</a><R(<a class=\"code hl_typedef\" href=\"a01931.html#a2dc0b1d49311457bb686a04972f8aee4\">LocalDomain</a>)></div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> {</div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01939.html#a80a14d6e3599853298641c023ff34acd\"> 41</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01939.html#a80a14d6e3599853298641c023ff34acd\">Range</a> = <span class=\"keyword\">typename</span> DerivativeTraits<R(<a class=\"code hl_typedef\" href=\"a01931.html#a0339d22fe9243285caf3a79a286912b5\">Domain</a>)><a class=\"code hl_typedef\" href=\"a01935.html#ab37a5c5f4de2d44c5334bab2b33cf8a0\">::Range</a>;</div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> };</div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span>};</div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> </div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> </div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span>}} <span class=\"comment\">// namespace Dune::Functions</span></div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH</span></div>\n+<div class=\"ttc\" id=\"aa00035_html\"><div class=\"ttname\"><a href=\"a00035.html\">defaultderivativetraits.hh</a></div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa01239_html\"><div class=\"ttname\"><a href=\"a01239.html\">Dune::Functions::PolymorphicType</a></div><div class=\"ttdoc\">Base class with polymorphic type boiler plate code.</div><div class=\"ttdef\"><b>Definition:</b> interfaces.hh:25</div></div>\n-<div class=\"ttc\" id=\"aa01239_html_a342f459670ff8ac9ef58314a95ca972d\"><div class=\"ttname\"><a href=\"a01239.html#a342f459670ff8ac9ef58314a95ca972d\">Dune::Functions::PolymorphicType::clone</a></div><div class=\"ttdeci\">virtual Interface * clone(void *buffer) const =0</div><div class=\"ttdoc\">Clones the object into buffer.</div></div>\n-<div class=\"ttc\" id=\"aa01239_html_a56439d136ed112196bb2bf1a7aca42e7\"><div class=\"ttname\"><a href=\"a01239.html#a56439d136ed112196bb2bf1a7aca42e7\">Dune::Functions::PolymorphicType::clone</a></div><div class=\"ttdeci\">virtual Interface * clone() const =0</div><div class=\"ttdoc\">Clones the object.</div></div>\n-<div class=\"ttc\" id=\"aa01239_html_a937e58884f58dfac27f85c80024be57c\"><div class=\"ttname\"><a href=\"a01239.html#a937e58884f58dfac27f85c80024be57c\">Dune::Functions::PolymorphicType::move</a></div><div class=\"ttdeci\">virtual Interface * move(void *buffer)=0</div><div class=\"ttdoc\">Move object into buffer.</div></div>\n-<div class=\"ttc\" id=\"aa01239_html_ae65ec09f3c0f320f0e5890c3e028fa2a\"><div class=\"ttname\"><a href=\"a01239.html#ae65ec09f3c0f320f0e5890c3e028fa2a\">Dune::Functions::PolymorphicType::~PolymorphicType</a></div><div class=\"ttdeci\">virtual ~PolymorphicType()</div><div class=\"ttdoc\">Destructor.</div><div class=\"ttdef\"><b>Definition:</b> interfaces.hh:29</div></div>\n+<div class=\"ttc\" id=\"aa01071_html\"><div class=\"ttname\"><a href=\"a01071.html\">Dune::Functions::InvalidRange</a></div><div class=\"ttdoc\">Dummy range class to be used if no proper type is available.</div><div class=\"ttdef\"><b>Definition:</b> defaultderivativetraits.hh:23</div></div>\n+<div class=\"ttc\" id=\"aa01931_html\"><div class=\"ttname\"><a href=\"a01931.html\">Dune::Functions::LocalDerivativeTraits</a></div><div class=\"ttdoc\">Derivative traits for local functions.</div><div class=\"ttdef\"><b>Definition:</b> localderivativetraits.hh:28</div></div>\n+<div class=\"ttc\" id=\"aa01931_html_a0339d22fe9243285caf3a79a286912b5\"><div class=\"ttname\"><a href=\"a01931.html#a0339d22fe9243285caf3a79a286912b5\">Dune::Functions::LocalDerivativeTraits::Domain</a></div><div class=\"ttdeci\">typename EntitySet::GlobalCoordinate Domain</div><div class=\"ttdef\"><b>Definition:</b> localderivativetraits.hh:30</div></div>\n+<div class=\"ttc\" id=\"aa01931_html_a2dc0b1d49311457bb686a04972f8aee4\"><div class=\"ttname\"><a href=\"a01931.html#a2dc0b1d49311457bb686a04972f8aee4\">Dune::Functions::LocalDerivativeTraits::LocalDomain</a></div><div class=\"ttdeci\">typename EntitySet::LocalCoordinate LocalDomain</div><div class=\"ttdef\"><b>Definition:</b> localderivativetraits.hh:29</div></div>\n+<div class=\"ttc\" id=\"aa01935_html\"><div class=\"ttname\"><a href=\"a01935.html\">Dune::Functions::LocalDerivativeTraits::Traits</a></div><div class=\"ttdef\"><b>Definition:</b> localderivativetraits.hh:34</div></div>\n+<div class=\"ttc\" id=\"aa01935_html_ab37a5c5f4de2d44c5334bab2b33cf8a0\"><div class=\"ttname\"><a href=\"a01935.html#ab37a5c5f4de2d44c5334bab2b33cf8a0\">Dune::Functions::LocalDerivativeTraits::Traits::Range</a></div><div class=\"ttdeci\">InvalidRange Range</div><div class=\"ttdef\"><b>Definition:</b> localderivativetraits.hh:35</div></div>\n+<div class=\"ttc\" id=\"aa01939_html_a80a14d6e3599853298641c023ff34acd\"><div class=\"ttname\"><a href=\"a01939.html#a80a14d6e3599853298641c023ff34acd\">Dune::Functions::LocalDerivativeTraits::Traits< R(LocalDomain)>::Range</a></div><div class=\"ttdeci\">typename DerivativeTraits< R(Domain)>::Range Range</div><div class=\"ttdef\"><b>Definition:</b> localderivativetraits.hh:41</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,64 +4,73 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * common\n-interfaces.hh\n+ * gridfunctions\n+localderivativetraits.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_COMMON_INTERFACES_HH\n- 4#define DUNE_FUNCTIONS_COMMON_INTERFACES_HH\n+ 3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH\n+ 4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH\n 5\n- 6#include <type_traits>\n- 7\n+ 6\n+ 7#include <dune/functions/common/defaultderivativetraits.hh>\n 8\n- 9namespace Dune {\n- 10namespace Functions {\n- 11\n+ 9\n+ 10namespace Dune {\n+ 11namespace Functions {\n 12\n 13\n- 23template<class Interface>\n-24class PolymorphicType\n- 25{\n- 26public:\n- 27\n-29 virtual ~PolymorphicType()\n- 30 {}\n+ 26template<class EntitySet, template<class> class\n+DerivativeTraits=DefaultDerivativeTraits>\n+27struct LocalDerivativeTraits\n+ 28{\n+29 using LocalDomain = typename EntitySet::LocalCoordinate;\n+30 using Domain = typename EntitySet::GlobalCoordinate;\n 31\n-40 virtual Interface* clone() const = 0;\n- 41\n-51 virtual Interface* clone(void* buffer) const = 0;\n- 52\n-62 virtual Interface* move(void* buffer) = 0;\n- 63};\n- 64\n- 65\n- 66\n- 67}} // namespace Dune::Functions\n- 68\n- 69#endif // DUNE_FUNCTIONS_COMMON_EXTENDED_CLONEABLE_HH\n+ 32 template<class Signature>\n+33 struct Traits\n+ 34 {\n+35 typedef InvalidRange Range;\n+ 36 };\n+ 37\n+ 38 template<class R>\n+39 struct Traits<R(LocalDomain)>\n+ 40 {\n+41 using Range = typename DerivativeTraits<R(Domain)>::Range;\n+ 42 };\n+ 43};\n+ 44\n+ 45\n+ 46}} // namespace Dune::Functions\n+ 47\n+ 48#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH\n+defaultderivativetraits.hh\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::PolymorphicType\n-Base class with polymorphic type boiler plate code.\n-Definition: interfaces.hh:25\n-Dune::Functions::PolymorphicType::clone\n-virtual Interface * clone(void *buffer) const =0\n-Clones the object into buffer.\n-Dune::Functions::PolymorphicType::clone\n-virtual Interface * clone() const =0\n-Clones the object.\n-Dune::Functions::PolymorphicType::move\n-virtual Interface * move(void *buffer)=0\n-Move object into buffer.\n-Dune::Functions::PolymorphicType::~PolymorphicType\n-virtual ~PolymorphicType()\n-Destructor.\n-Definition: interfaces.hh:29\n+Dune::Functions::InvalidRange\n+Dummy range class to be used if no proper type is available.\n+Definition: defaultderivativetraits.hh:23\n+Dune::Functions::LocalDerivativeTraits\n+Derivative traits for local functions.\n+Definition: localderivativetraits.hh:28\n+Dune::Functions::LocalDerivativeTraits::Domain\n+typename EntitySet::GlobalCoordinate Domain\n+Definition: localderivativetraits.hh:30\n+Dune::Functions::LocalDerivativeTraits::LocalDomain\n+typename EntitySet::LocalCoordinate LocalDomain\n+Definition: localderivativetraits.hh:29\n+Dune::Functions::LocalDerivativeTraits::Traits\n+Definition: localderivativetraits.hh:34\n+Dune::Functions::LocalDerivativeTraits::Traits::Range\n+InvalidRange Range\n+Definition: localderivativetraits.hh:35\n+Dune::Functions::LocalDerivativeTraits::Traits<_R(LocalDomain)>::Range\n+typename DerivativeTraits< R(Domain)>::Range Range\n+Definition: localderivativetraits.hh:41\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00098.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00098.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: differentiablefunction_imp.hh File Reference</title>\n+<title>dune-functions: gridfunction.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,29 +58,44 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n+<a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">differentiablefunction_imp.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">gridfunction.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <dune/common/exceptions.hh></code><br />\n-<code>#include <dune/common/concept.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00092_source.html\">dune/functions/common/type_traits.hh</a>></code><br />\n+<div class=\"textblock\"><code>#include <type_traits></code><br />\n+<code>#include <dune/common/typeutilities.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00050_source.html\">dune/functions/common/typeerasure.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00035_source.html\">dune/functions/common/defaultderivativetraits.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00011_source.html\">dune/functions/common/differentiablefunction.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00053_source.html\">dune/functions/common/localfunction.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00020_source.html\">dune/functions/common/functionconcepts.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00095_source.html\">dune/functions/gridfunctions/localderivativetraits.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00074_source.html\">dune/functions/gridfunctions/gridfunction_imp.hh</a>></code><br />\n </div>\n <p><a href=\"a00098_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n+Classes</h2></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01895.html\">Dune::Functions::GridFunction< Signature, EntitySet, DerivativeTraits, bufferSize ></a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01903.html\">Dune::Functions::GridFunction< Range(Domain), ES, DerivativeTraits, bufferSize ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Wrapper class for functions defined on a Grid. <a href=\"a01903.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+</table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,21 +4,35 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * common\n-Namespaces\n-differentiablefunction_imp.hh File Reference\n-#include <dune/common/exceptions.hh>\n-#include <dune/common/concept.hh>\n-#include <dune/functions/common/type_traits.hh>\n+ * gridfunctions\n+Classes | Namespaces\n+gridfunction.hh File Reference\n+#include <type_traits>\n+#include <dune/common/typeutilities.hh>\n+#include <dune/functions/common/typeerasure.hh>\n+#include <dune/functions/common/defaultderivativetraits.hh>\n+#include <dune/functions/common/differentiablefunction.hh>\n+#include <dune/functions/common/localfunction.hh>\n+#include <dune/functions/common/functionconcepts.hh>\n+#include <dune/functions/gridfunctions/localderivativetraits.hh>\n+#include <dune/functions/gridfunctions/gridfunction_imp.hh>\n Go_to_the_source_code_of_this_file.\n+ Classes\n+class \u00a0Dune::Functions::GridFunction<_Signature,_EntitySet,_DerivativeTraits,\n+ bufferSize_>\n+\u00a0\n+class \u00a0Dune::Functions::GridFunction<_Range(Domain),_ES,_DerivativeTraits,\n+ bufferSize_>\n+\u00a0 Wrapper class for functions defined on a Grid. More...\n+\u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n \n ===============================================================================\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00098_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00098_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: differentiablefunction_imp.hh Source File</title>\n+<title>dune-functions: gridfunction.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,120 +58,165 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">differentiablefunction_imp.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">gridfunction.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00098.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <dune/common/exceptions.hh></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <dune/common/concept.hh></span></div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00092.html\">dune/functions/common/type_traits.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span> </div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"keyword\">namespace </span>Imp {</div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"keyword\">struct </span>HasFreeDerivative</div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span>{</div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F></div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> <span class=\"keyword\">auto</span> require(F&& f) -> <span class=\"keyword\">decltype</span>(</div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span> <a class=\"code hl_function\" href=\"a00209.html#ga7ec424ff4be740ad675bd85750940472\">derivative</a>(f)</div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> );</div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span>};</div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> </div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> </div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> </div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>Dummy, <span class=\"keyword\">class </span>F,</div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> <span class=\"keyword\">typename</span> std::enable_if<</div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> models< HasFreeDerivative, F>() , <span class=\"keywordtype\">int</span>>::type = 0></div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span><span class=\"keyword\">auto</span> derivativeIfImplemented(<span class=\"keyword\">const</span> F& f) -> <span class=\"keyword\">decltype</span>(<a class=\"code hl_function\" href=\"a00209.html#ga7ec424ff4be740ad675bd85750940472\">derivative</a>(f))</div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span>{</div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00209.html#ga7ec424ff4be740ad675bd85750940472\">derivative</a>(f);</div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span>}</div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> </div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> </div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <type_traits></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span> </div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <dune/common/typeutilities.hh></span></div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00050.html\">dune/functions/common/typeerasure.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00035.html\">dune/functions/common/defaultderivativetraits.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00011.html\">dune/functions/common/differentiablefunction.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00053.html\">dune/functions/common/localfunction.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00020.html\">dune/functions/common/functionconcepts.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00095.html\">dune/functions/gridfunctions/localderivativetraits.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00074.html\">dune/functions/gridfunctions/gridfunction_imp.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> </div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span> </div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> </div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span><span class=\"comment\">/*</span></div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"comment\"> * Default implementation is empty</span></div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span><span class=\"comment\"> * The actual implementation is only given if Signature is an type</span></div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span><span class=\"comment\"> * describing a function signature as Range(Domain).</span></div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span><span class=\"comment\"> */</span></div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> EntitySet, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits=DefaultDerivativeTraits, <span class=\"keywordtype\">size_t</span> bufferSize=56></div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01895.html\"> 31</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01895.html\">GridFunction</a></div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span>{};</div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> </div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> </div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> </div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span><span class=\"keyword\">namespace </span>Imp</div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span>{</div>\n <div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> </div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>Dummy, <span class=\"keyword\">class </span>F,</div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> <span class=\"keyword\">typename</span> std::enable_if<</div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> not(models< HasFreeDerivative, F>()) , <span class=\"keywordtype\">int</span>>::type = 0></div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span>Dummy derivativeIfImplemented(<span class=\"keyword\">const</span> F& f)</div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span>{</div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"Derivative not implemented"</span>);</div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span>}</div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> S, <span class=\"keyword\">class</span> ES, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits, <span class=\"keywordtype\">size_t</span> bufferSize></div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> <span class=\"keyword\">struct </span>GridFunctionTraits :</div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize></div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> {</div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> <span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> <span class=\"keyword\">using </span>Base=DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize>;</div>\n <div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> </div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> </div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> DerivativeInterface></div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span><span class=\"keyword\">class </span>DifferentiableFunctionWrapperInterface</div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span>{};</div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> </div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span><span class=\"comment\">// Interface of type erasure wrapper</span></div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span><span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span><span class=\"comment\">// Notice that the basic interface of polymorphic classes (destructor, clone, ...)</span></div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span><span class=\"comment\">// will be added by the type erasure foundation classes.</span></div>\n-<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">class</span> DerivativeInterface></div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span><span class=\"keyword\">class </span>DifferentiableFunctionWrapperInterface<Range(Domain), DerivativeInterface></div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span>{</div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> <span class=\"keyword\">virtual</span> Range operator() (<span class=\"keyword\">const</span> Domain& x) <span class=\"keyword\">const</span> = 0;</div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> <span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> <span class=\"keyword\">using </span>EntitySet = ES;</div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> </div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> <span class=\"keyword\">using </span>Element = <span class=\"keyword\">typename</span> EntitySet::Element;</div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> </div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> <span class=\"keyword\">using </span>DerivativeSignature = <span class=\"keyword\">typename</span> Base::DerivativeSignature;</div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> </div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> <span class=\"keyword\">using </span>DerivativeInterface = <a class=\"code hl_class\" href=\"a01895.html\">GridFunction<DerivativeSignature, ES, DerivativeTraits, bufferSize></a>;</div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> </div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> <span class=\"keyword\">using </span>LocalSignature = <span class=\"keyword\">typename</span> Base::Range(<span class=\"keyword\">typename</span> EntitySet::LocalCoordinate);</div>\n <div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> </div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> <span class=\"keyword\">virtual</span> DerivativeInterface <a class=\"code hl_function\" href=\"a00209.html#ga7ec424ff4be740ad675bd85750940472\">derivative</a>() <span class=\"keyword\">const</span> = 0;</div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span>};</div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> </div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> R></div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> <span class=\"keyword\">using </span><a class=\"code hl_struct\" href=\"a01931.html\">LocalDerivativeTraits</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_struct\" href=\"a01931.html\">Dune::Functions::LocalDerivativeTraits<EntitySet, DerivativeTraits>::template</a> Traits<R>;</div>\n <div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> </div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> </div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">class</span> DerivativeInterface, <span class=\"keyword\">class</span> B></div>\n-<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span><span class=\"keyword\">class </span>DifferentiableFunctionWrapperImplementation</div>\n-<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span>{};</div>\n-<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> </div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span><span class=\"comment\">// Implementation of type erasure wrapper</span></div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">class</span> DerivativeInterface, <span class=\"keyword\">class</span> B></div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span><span class=\"keyword\">class </span>DifferentiableFunctionWrapperImplementation< Range(Domain), DerivativeInterface, B> :</div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> <span class=\"keyword\">public</span> B</div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span>{</div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> </div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> <span class=\"keyword\">using </span>B::B;</div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> <span class=\"keyword\">using </span>Wrapped = <span class=\"keyword\">typename</span> B::Wrapped;</div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> <span class=\"keyword\">using </span>LocalFunctionTraits = <span class=\"keyword\">typename</span> Dune::Functions::Imp::LocalFunctionTraits<LocalSignature, Element, LocalDerivativeTraits, bufferSize>;</div>\n+<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> </div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> <span class=\"keyword\">using </span>LocalFunctionInterface = <a class=\"code hl_class\" href=\"a01243.html\">LocalFunction<LocalSignature, Element, LocalDerivativeTraits, bufferSize></a>;</div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> </div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> <span class=\"keyword\">using </span>Concept = GridFunctionWrapperInterface<S, DerivativeInterface, LocalFunctionInterface, ES>;</div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> </div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> B></div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> <span class=\"keyword\">using </span>Model = GridFunctionWrapperImplementation<S, DerivativeInterface, LocalFunctionInterface, ES, B>;</div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> };</div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span>}</div>\n <div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> </div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> <span class=\"keyword\">virtual</span> Range operator() (<span class=\"keyword\">const</span> Domain& x)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> <span class=\"keywordflow\">return</span> this->get()(x);</div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> }</div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> </div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> <span class=\"keyword\">virtual</span> DerivativeInterface <a class=\"code hl_function\" href=\"a00209.html#ga7ec424ff4be740ad675bd85750940472\">derivative</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> <span class=\"keywordflow\">return</span> derivativeIfImplemented<DerivativeInterface, Wrapped>(this->get());</div>\n-<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> }</div>\n-<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span>};</div>\n-<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> </div>\n-<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> </div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> </div>\n-<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span>}}} <span class=\"comment\">// namespace Dune::Functions::Imp</span></div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> </div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> </div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> </div>\n-<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH</span></div>\n-<div class=\"ttc\" id=\"aa00092_html\"><div class=\"ttname\"><a href=\"a00092.html\">type_traits.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00209_html_ga7ec424ff4be740ad675bd85750940472\"><div class=\"ttname\"><a href=\"a00209.html#ga7ec424ff4be740ad675bd85750940472\">Dune::Functions::derivative</a></div><div class=\"ttdeci\">TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const TrigonometricFunction< K, sinFactor, cosFactor > &f)</div><div class=\"ttdoc\">Obtain derivative of TrigonometricFunction function.</div><div class=\"ttdef\"><b>Definition:</b> trigonometricfunction.hh:39</div></div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> </div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> </div>\n+<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">class</span> ES, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits, <span class=\"keywordtype\">size_t</span> bufferSize></div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01903.html\"> 96</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01895.html\">GridFunction</a><Range(Domain), ES, DerivativeTraits, bufferSize> :</div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01351.html\">TypeErasureBase</a><</div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> typename Imp::GridFunctionTraits<Range(Domain), ES, DerivativeTraits, bufferSize>::Concept,</div>\n+<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> Imp::GridFunctionTraits<Range(Domain), ES, DerivativeTraits, bufferSize>::template Model></div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span>{</div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> <span class=\"keyword\">using </span>Traits = Imp::GridFunctionTraits<Range(Domain), ES, DerivativeTraits, bufferSize>;</div>\n+<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> </div>\n+<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01351.html\">Base</a> = <a class=\"code hl_class\" href=\"a01351.html\">TypeErasureBase<typename Traits::Concept, Traits::template Model></a>;</div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> </div>\n+<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> <span class=\"keyword\">using </span>DerivativeInterface = <span class=\"keyword\">typename</span> <a class=\"code hl_class\" href=\"a01895.html\">Traits::DerivativeInterface</a>;</div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> </div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> <span class=\"keyword\">using </span>LocalFunctionInterface = <span class=\"keyword\">typename</span> <a class=\"code hl_class\" href=\"a01243.html\">Traits::LocalFunctionInterface</a>;</div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> </div>\n+<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> <span class=\"keyword\">using </span>EntitySet = <span class=\"keyword\">typename</span> Traits::EntitySet;</div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> </div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> </div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> F, disableCopyMove<Gr<span class=\"keywordtype\">id</span>Function, F> = 0 ></div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01903.html#a93480ae6b849e3e9912d114954e7919e\"> 125</a></span> <a class=\"code hl_function\" href=\"a01903.html#a93480ae6b849e3e9912d114954e7919e\">GridFunction</a>(F&& f) :</div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> <a class=\"code hl_class\" href=\"a01351.html\">Base</a>(std::forward<F>(f))</div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> {</div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> <span class=\"keyword\">static_assert</span>(Dune::Functions::Concept::isGridFunction<F, Range(Domain), EntitySet>(), <span class=\"stringliteral\">"Trying to construct a GridFunction from type that does not model the GridFunction concept"</span>);</div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> }</div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> </div>\n+<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01903.html#a716e50afee74d4f1715ec32f6a8264f9\"> 131</a></span> <a class=\"code hl_function\" href=\"a01903.html#a716e50afee74d4f1715ec32f6a8264f9\">GridFunction</a>() = <span class=\"keywordflow\">default</span>;</div>\n+<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> </div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01903.html#a139cc4d411f2288dc6eb76d62d6e281b\"> 138</a></span> Range operator() (<span class=\"keyword\">const</span> Domain& x)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> <span class=\"keywordflow\">return</span> this->asInterface().operator()(x);</div>\n+<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> }</div>\n+<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> </div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01903.html#a66ce733c4a765dd8552093696964657b\"> 151</a></span> <span class=\"keyword\">friend</span> DerivativeInterface <a class=\"code hl_friend\" href=\"a01903.html#a66ce733c4a765dd8552093696964657b\">derivative</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01895.html\">GridFunction</a>& t)</div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> {</div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> <span class=\"keywordflow\">return</span> t.asInterface().derivative();</div>\n+<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> }</div>\n+<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> </div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01903.html#abc29b58d9bc3b0423994ad207fec45bb\"> 165</a></span> <span class=\"keyword\">friend</span> LocalFunctionInterface <a class=\"code hl_friend\" href=\"a01903.html#abc29b58d9bc3b0423994ad207fec45bb\">localFunction</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01895.html\">GridFunction</a>& t)</div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> {</div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> <span class=\"keywordflow\">return</span> t.asInterface().wrappedLocalFunction();</div>\n+<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> }</div>\n+<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> </div>\n+<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01903.html#a9202931b754e0fb13df91344eae74ca2\"> 176</a></span> <span class=\"keyword\">const</span> EntitySet& <a class=\"code hl_function\" href=\"a01903.html#a9202931b754e0fb13df91344eae74ca2\">entitySet</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> <span class=\"keywordflow\">return</span> this->asInterface().wrappedEntitySet();</div>\n+<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> }</div>\n+<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span>};</div>\n+<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> </div>\n+<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> </div>\n+<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span> </div>\n+<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span>}} <span class=\"comment\">// namespace Dune::Functions</span></div>\n+<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> </div>\n+<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> </div>\n+<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> </div>\n+<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH</span></div>\n+<div class=\"ttc\" id=\"aa00011_html\"><div class=\"ttname\"><a href=\"a00011.html\">differentiablefunction.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00020_html\"><div class=\"ttname\"><a href=\"a00020.html\">functionconcepts.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00035_html\"><div class=\"ttname\"><a href=\"a00035.html\">defaultderivativetraits.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00050_html\"><div class=\"ttname\"><a href=\"a00050.html\">typeerasure.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00053_html\"><div class=\"ttname\"><a href=\"a00053.html\">localfunction.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00074_html\"><div class=\"ttname\"><a href=\"a00074.html\">gridfunction_imp.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00095_html\"><div class=\"ttname\"><a href=\"a00095.html\">localderivativetraits.hh</a></div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n+<div class=\"ttc\" id=\"aa01243_html\"><div class=\"ttname\"><a href=\"a01243.html\">Dune::Functions::LocalFunction</a></div><div class=\"ttdef\"><b>Definition:</b> localfunction.hh:30</div></div>\n+<div class=\"ttc\" id=\"aa01351_html\"><div class=\"ttname\"><a href=\"a01351.html\">Dune::Functions::TypeErasureBase</a></div><div class=\"ttdoc\">Base class for type-erased interface wrapper.</div><div class=\"ttdef\"><b>Definition:</b> typeerasure.hh:165</div></div>\n+<div class=\"ttc\" id=\"aa01895_html\"><div class=\"ttname\"><a href=\"a01895.html\">Dune::Functions::GridFunction</a></div><div class=\"ttdef\"><b>Definition:</b> gridfunction.hh:32</div></div>\n+<div class=\"ttc\" id=\"aa01903_html_a66ce733c4a765dd8552093696964657b\"><div class=\"ttname\"><a href=\"a01903.html#a66ce733c4a765dd8552093696964657b\">Dune::Functions::GridFunction< Range(Domain), ES, DerivativeTraits, bufferSize >::derivative</a></div><div class=\"ttdeci\">friend DerivativeInterface derivative(const GridFunction &t)</div><div class=\"ttdoc\">Get derivative of wrapped function.</div><div class=\"ttdef\"><b>Definition:</b> gridfunction.hh:151</div></div>\n+<div class=\"ttc\" id=\"aa01903_html_a716e50afee74d4f1715ec32f6a8264f9\"><div class=\"ttname\"><a href=\"a01903.html#a716e50afee74d4f1715ec32f6a8264f9\">Dune::Functions::GridFunction< Range(Domain), ES, DerivativeTraits, bufferSize >::GridFunction</a></div><div class=\"ttdeci\">GridFunction()=default</div></div>\n+<div class=\"ttc\" id=\"aa01903_html_a9202931b754e0fb13df91344eae74ca2\"><div class=\"ttname\"><a href=\"a01903.html#a9202931b754e0fb13df91344eae74ca2\">Dune::Functions::GridFunction< Range(Domain), ES, DerivativeTraits, bufferSize >::entitySet</a></div><div class=\"ttdeci\">const EntitySet & entitySet() const</div><div class=\"ttdoc\">Get associated EntitySet.</div><div class=\"ttdef\"><b>Definition:</b> gridfunction.hh:176</div></div>\n+<div class=\"ttc\" id=\"aa01903_html_a93480ae6b849e3e9912d114954e7919e\"><div class=\"ttname\"><a href=\"a01903.html#a93480ae6b849e3e9912d114954e7919e\">Dune::Functions::GridFunction< Range(Domain), ES, DerivativeTraits, bufferSize >::GridFunction</a></div><div class=\"ttdeci\">GridFunction(F &&f)</div><div class=\"ttdoc\">Construct from function.</div><div class=\"ttdef\"><b>Definition:</b> gridfunction.hh:125</div></div>\n+<div class=\"ttc\" id=\"aa01903_html_abc29b58d9bc3b0423994ad207fec45bb\"><div class=\"ttname\"><a href=\"a01903.html#abc29b58d9bc3b0423994ad207fec45bb\">Dune::Functions::GridFunction< Range(Domain), ES, DerivativeTraits, bufferSize >::localFunction</a></div><div class=\"ttdeci\">friend LocalFunctionInterface localFunction(const GridFunction &t)</div><div class=\"ttdoc\">Get local function of wrapped function.</div><div class=\"ttdef\"><b>Definition:</b> gridfunction.hh:165</div></div>\n+<div class=\"ttc\" id=\"aa01931_html\"><div class=\"ttname\"><a href=\"a01931.html\">Dune::Functions::LocalDerivativeTraits</a></div><div class=\"ttdoc\">Derivative traits for local functions.</div><div class=\"ttdef\"><b>Definition:</b> localderivativetraits.hh:28</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,120 +4,199 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * common\n-differentiablefunction_imp.hh\n+ * gridfunctions\n+gridfunction.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH\n- 4#define DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH\n+ 3#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH\n+ 4#define DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH\n 5\n- 6#include <dune/common/exceptions.hh>\n- 7#include <dune/common/concept.hh>\n- 8\n- 9#include <dune/functions/common/type_traits.hh>\n- 10\n- 11\n- 12namespace Dune {\n- 13namespace Functions {\n- 14namespace Imp {\n- 15\n- 19struct HasFreeDerivative\n- 20{\n- 21 template<class F>\n- 22 auto require(F&& f) -> decltype(\n- 23 derivative(f)\n- 24 );\n- 25};\n- 26\n- 27\n- 28\n- 29template<class Dummy, class F,\n- 30 typename std::enable_if<\n- 31 models< HasFreeDerivative, F>() , int>::type = 0>\n- 32auto derivativeIfImplemented(const F& f) -> decltype(derivative(f))\n- 33{\n- 34 return derivative(f);\n- 35}\n- 36\n- 37\n+ 6#include <type_traits>\n+ 7\n+ 8#include <dune/common/typeutilities.hh>\n+ 9\n+ 10#include <dune/functions/common/typeerasure.hh>\n+ 11#include <dune/functions/common/defaultderivativetraits.hh>\n+ 12#include <dune/functions/common/differentiablefunction.hh>\n+ 13#include <dune/functions/common/localfunction.hh>\n+ 14#include <dune/functions/common/functionconcepts.hh>\n+ 15#include <dune/functions/gridfunctions/localderivativetraits.hh>\n+ 16#include <dune/functions/gridfunctions/gridfunction_imp.hh>\n+ 17\n+ 18\n+ 19\n+ 20namespace Dune {\n+ 21namespace Functions {\n+ 22\n+ 23\n+ 24\n+ 25/*\n+ 26 * Default implementation is empty\n+ 27 * The actual implementation is only given if Signature is an type\n+ 28 * describing a function signature as Range(Domain).\n+ 29 */\n+ 30template<class Signature, class EntitySet, template<class> class\n+DerivativeTraits=DefaultDerivativeTraits, size_t bufferSize=56>\n+31class GridFunction\n+ 32{};\n+ 33\n+ 34\n+ 35\n+ 36namespace Imp\n+ 37{\n 38\n- 39template<class Dummy, class F,\n- 40 typename std::enable_if<\n- 41 not(models< HasFreeDerivative, F>()) , int>::type = 0>\n- 42Dummy derivativeIfImplemented(const F& f)\n- 43{\n- 44 DUNE_THROW(Dune::NotImplemented, \"Derivative not implemented\");\n- 45}\n+ 40 template<class S, class ES, template<class> class DerivativeTraits, size_t\n+bufferSize>\n+ 41 struct GridFunctionTraits :\n+ 42 DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize>\n+ 43 {\n+ 44 protected:\n+ 45 using Base=DifferentiableFunctionTraits<S, DerivativeTraits, bufferSize>;\n 46\n- 47\n- 48\n- 49template<class Signature, class DerivativeInterface>\n- 50class DifferentiableFunctionWrapperInterface\n- 51{};\n- 52\n- 53// Interface of type erasure wrapper\n- 54//\n- 55// Notice that the basic interface of polymorphic classes (destructor,\n-clone, ...)\n- 56// will be added by the type erasure foundation classes.\n- 57template<class Range, class Domain, class DerivativeInterface>\n- 58class DifferentiableFunctionWrapperInterface<Range(Domain),\n-DerivativeInterface>\n- 59{\n- 60public:\n- 61 virtual Range operator() (const Domain& x) const = 0;\n+ 47 public:\n+ 49 using EntitySet = ES;\n+ 50\n+ 52 using Element = typename EntitySet::Element;\n+ 53\n+ 55 using DerivativeSignature = typename Base::DerivativeSignature;\n+ 56\n+ 58 using DerivativeInterface = GridFunction<DerivativeSignature,_ES,\n+DerivativeTraits,_bufferSize>;\n+ 59\n+ 61 using LocalSignature = typename Base::Range(typename EntitySet::\n+LocalCoordinate);\n 62\n- 63 virtual DerivativeInterface derivative() const = 0;\n- 64};\n- 65\n+ 64 template<class R>\n+ 65 using LocalDerivativeTraits = typename Dune::Functions::\n+LocalDerivativeTraits<EntitySet,_DerivativeTraits>::template Traits<R>;\n 66\n- 67\n- 68template<class Signature, class DerivativeInterface, class B>\n- 69class DifferentiableFunctionWrapperImplementation\n- 70{};\n- 71\n- 72// Implementation of type erasure wrapper\n- 73template<class Range, class Domain, class DerivativeInterface, class B>\n- 74class DifferentiableFunctionWrapperImplementation< Range(Domain),\n-DerivativeInterface, B> :\n- 75 public B\n- 76{\n- 77public:\n- 78\n- 79 using B::B;\n- 80 using Wrapped = typename B::Wrapped;\n+ 68 using LocalFunctionTraits = typename Dune::Functions::Imp::\n+LocalFunctionTraits<LocalSignature, Element, LocalDerivativeTraits,\n+bufferSize>;\n+ 69\n+ 71 using LocalFunctionInterface = LocalFunction<LocalSignature,_Element,\n+LocalDerivativeTraits,_bufferSize>;\n+ 72\n+ 74 using Concept = GridFunctionWrapperInterface<S, DerivativeInterface,\n+LocalFunctionInterface, ES>;\n+ 75\n+ 77 template<class B>\n+ 78 using Model = GridFunctionWrapperImplementation<S, DerivativeInterface,\n+LocalFunctionInterface, ES, B>;\n+ 79 };\n+ 80}\n 81\n- 82 virtual Range operator() (const Domain& x) const\n- 83 {\n- 84 return this->get()(x);\n- 85 }\n- 86\n- 87 virtual DerivativeInterface derivative() const\n- 88 {\n- 89 return derivativeIfImplemented<DerivativeInterface, Wrapped>(this->get());\n- 90 }\n- 91};\n- 92\n- 93\n- 94\n- 95}}} // namespace Dune::Functions::Imp\n- 96\n- 97\n- 98\n- 99#endif // DUNE_FUNCTIONS_COMMON_DIFFERENTIABLE_FUNCTION_IMP_HH\n-type_traits.hh\n-Dune::Functions::derivative\n-TrigonometricFunction< K, -cosFactor, sinFactor > derivative(const\n-TrigonometricFunction< K, sinFactor, cosFactor > &f)\n-Obtain derivative of TrigonometricFunction function.\n-Definition: trigonometricfunction.hh:39\n+ 82\n+ 83\n+ 95template<class Range, class Domain, class ES, template<class> class\n+DerivativeTraits, size_t bufferSize>\n+96class GridFunction<Range(Domain), ES, DerivativeTraits, bufferSize> :\n+ 97 public TypeErasureBase<\n+ 98 typename Imp::GridFunctionTraits<Range(Domain), ES, DerivativeTraits,\n+bufferSize>::Concept,\n+ 99 Imp::GridFunctionTraits<Range(Domain), ES, DerivativeTraits, bufferSize>::\n+template Model>\n+ 100{\n+ 101 using Traits = Imp::GridFunctionTraits<Range(Domain), ES,\n+DerivativeTraits, bufferSize>;\n+ 102\n+ 103 using Base = TypeErasureBase<typename_Traits::Concept,_Traits::template\n+Model>;\n+ 104\n+ 105 using DerivativeInterface = typename Traits::DerivativeInterface;\n+ 106\n+ 107 using LocalFunctionInterface = typename Traits::LocalFunctionInterface;\n+ 108\n+ 109 using EntitySet = typename Traits::EntitySet;\n+ 110\n+ 111public:\n+ 112\n+ 124 template<class F, disableCopyMove<GridFunction, F> = 0 >\n+125 GridFunction(F&& f) :\n+ 126 Base(std::forward<F>(f))\n+ 127 {\n+ 128 static_assert(Dune::Functions::Concept::isGridFunction<F, Range(Domain),\n+EntitySet>(), \"Trying to construct a GridFunction from type that does not model\n+the GridFunction concept\");\n+ 129 }\n+ 130\n+131 GridFunction() = default;\n+ 132\n+138 Range operator() (const Domain& x) const\n+ 139 {\n+ 140 return this->asInterface().operator()(x);\n+ 141 }\n+ 142\n+151 friend DerivativeInterface derivative(const GridFunction& t)\n+ 152 {\n+ 153 return t.asInterface().derivative();\n+ 154 }\n+ 155\n+165 friend LocalFunctionInterface localFunction(const GridFunction& t)\n+ 166 {\n+ 167 return t.asInterface().wrappedLocalFunction();\n+ 168 }\n+ 169\n+176 const EntitySet& entitySet() const\n+ 177 {\n+ 178 return this->asInterface().wrappedEntitySet();\n+ 179 }\n+ 180};\n+ 181\n+ 182\n+ 183\n+ 184}} // namespace Dune::Functions\n+ 185\n+ 186\n+ 187\n+ 188#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_GRID_FUNCTION_HH\n+differentiablefunction.hh\n+functionconcepts.hh\n+defaultderivativetraits.hh\n+typeerasure.hh\n+localfunction.hh\n+gridfunction_imp.hh\n+localderivativetraits.hh\n Dune\n Definition: polynomial.hh:10\n+Dune::Functions::LocalFunction\n+Definition: localfunction.hh:30\n+Dune::Functions::TypeErasureBase\n+Base class for type-erased interface wrapper.\n+Definition: typeerasure.hh:165\n+Dune::Functions::GridFunction\n+Definition: gridfunction.hh:32\n+Dune::Functions::GridFunction<_Range(Domain),_ES,_DerivativeTraits,_bufferSize\n+>::derivative\n+friend DerivativeInterface derivative(const GridFunction &t)\n+Get derivative of wrapped function.\n+Definition: gridfunction.hh:151\n+Dune::Functions::GridFunction<_Range(Domain),_ES,_DerivativeTraits,_bufferSize\n+>::GridFunction\n+GridFunction()=default\n+Dune::Functions::GridFunction<_Range(Domain),_ES,_DerivativeTraits,_bufferSize\n+>::entitySet\n+const EntitySet & entitySet() const\n+Get associated EntitySet.\n+Definition: gridfunction.hh:176\n+Dune::Functions::GridFunction<_Range(Domain),_ES,_DerivativeTraits,_bufferSize\n+>::GridFunction\n+GridFunction(F &&f)\n+Construct from function.\n+Definition: gridfunction.hh:125\n+Dune::Functions::GridFunction<_Range(Domain),_ES,_DerivativeTraits,_bufferSize\n+>::localFunction\n+friend LocalFunctionInterface localFunction(const GridFunction &t)\n+Get local function of wrapped function.\n+Definition: gridfunction.hh:165\n+Dune::Functions::LocalDerivativeTraits\n+Derivative traits for local functions.\n+Definition: localderivativetraits.hh:28\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00101.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00101.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: multiindex.hh File Reference</title>\n+<title>dune-functions: compositebasis.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,55 +58,66 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> |\n <a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">multiindex.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">compositebasis.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <cstddef></code><br />\n-<code>#include <array></code><br />\n-<code>#include <iostream></code><br />\n-<code>#include <dune/common/hash.hh></code><br />\n+<div class=\"textblock\"><code>#include <tuple></code><br />\n+<code>#include <utility></code><br />\n+<code>#include <dune/common/std/apply.hh></code><br />\n+<code>#include <dune/common/hybridutilities.hh></code><br />\n+<code>#include <dune/common/reservedvector.hh></code><br />\n+<code>#include <dune/common/typeutilities.hh></code><br />\n+<code>#include <dune/common/tupleutility.hh></code><br />\n+<code>#include <dune/common/tuplevector.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00056_source.html\">dune/functions/common/staticforloop.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00029_source.html\">dune/functions/common/type_traits.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00041_source.html\">dune/functions/common/utility.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00158_source.html\">dune/functions/functionspacebases/basistags.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00179_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a02876_source.html\">dune/functions/functionspacebases/concepts.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00152_source.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></code><br />\n </div>\n <p><a href=\"a00101_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01263.html\">Dune::Functions::StaticMultiIndex< size_type, n ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A statically sized MultiIndex type. <a href=\"a01263.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01267.html\">Dune::Functions::StaticMultiIndex< size_type, 1 ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A statically sized MultiIndex type. <a href=\"a01267.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01271.html\">std::tuple_size< Dune::Functions::StaticMultiIndex< size_type, n > ></a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01503.html\">Dune::Functions::CompositePreBasis< IMS, SPB ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A pre-basis for composite bases. <a href=\"a01503.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a00224\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00224.html\">Dune::Functions::BasisFactory</a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a00225\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00225.html\">Dune::Functions::BasisBuilder</a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n Functions</h2></td></tr>\n-<tr class=\"memitem:af1c4bfbe0c688f745e4731c519db55dd\"><td class=\"memTemplParams\" colspan=\"2\">template<typename Stream , class size_type , std::size_t n> </td></tr>\n-<tr class=\"memitem:af1c4bfbe0c688f745e4731c519db55dd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">Stream & </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#af1c4bfbe0c688f745e4731c519db55dd\">Dune::Functions::operator<<</a> (Stream &stream, const StaticMultiIndex< size_type, n > &c)</td></tr>\n-<tr class=\"separator:af1c4bfbe0c688f745e4731c519db55dd\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga0ee62f9744ec8ba58fdfc4c68df34449\"><td class=\"memTemplParams\" colspan=\"2\">template<typename... Args, std::enable_if_t< Concept::isIndexMergingStrategy< typename LastType< Args... >::type >(), int > = 0> </td></tr>\n+<tr class=\"memitem:ga0ee62f9744ec8ba58fdfc4c68df34449\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#ga0ee62f9744ec8ba58fdfc4c68df34449\">Dune::Functions::BasisFactory::composite</a> (Args &&... args)</td></tr>\n+<tr class=\"memdesc:ga0ee62f9744ec8ba58fdfc4c68df34449\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a factory builder that can build a <a class=\"el\" href=\"a01503.html\" title=\"A pre-basis for composite bases.\">CompositePreBasis</a>. <a href=\"a00213.html#ga0ee62f9744ec8ba58fdfc4c68df34449\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga0ee62f9744ec8ba58fdfc4c68df34449\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,37 +4,48 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * common\n+ * functionspacebases\n Classes | Namespaces | Functions\n-multiindex.hh File Reference\n-#include <cstddef>\n-#include <array>\n-#include <iostream>\n-#include <dune/common/hash.hh>\n+compositebasis.hh File Reference\n+#include <tuple>\n+#include <utility>\n+#include <dune/common/std/apply.hh>\n+#include <dune/common/hybridutilities.hh>\n+#include <dune/common/reservedvector.hh>\n+#include <dune/common/typeutilities.hh>\n+#include <dune/common/tupleutility.hh>\n+#include <dune/common/tuplevector.hh>\n+#include <dune/functions/common/staticforloop.hh>\n+#include <dune/functions/common/type_traits.hh>\n+#include <dune/functions/common/utility.hh>\n+#include <dune/functions/functionspacebases/basistags.hh>\n+#include <dune/functions/functionspacebases/nodes.hh>\n+#include <dune/functions/functionspacebases/concepts.hh>\n+#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n- class \u00a0Dune::Functions::StaticMultiIndex<_size_type,_n_>\n-\u00a0 A statically sized MultiIndex type. More...\n-\u00a0\n- class \u00a0Dune::Functions::StaticMultiIndex<_size_type,_1_>\n-\u00a0 A statically sized MultiIndex type. More...\n-\u00a0\n-struct \u00a0std::tuple_size<_Dune::Functions::StaticMultiIndex<_size_type,_n_>_>\n+class \u00a0Dune::Functions::CompositePreBasis<_IMS,_SPB_>\n+\u00a0 A pre-basis for composite bases. More...\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n+namespace \u00a0Dune::Functions::BasisFactory\n+\u00a0\n+namespace \u00a0Dune::Functions::BasisBuilder\n+\u00a0\n Functions\n-template<typename Stream , class size_type , std::size_t n>\n-Stream &\u00a0Dune::Functions::operator<< (Stream &stream, const StaticMultiIndex<\n- size_type, n > &c)\n+template<typename... Args, std::enable_if_t< Concept::isIndexMergingStrategy<\n+typename LastType< Args... >::type >(), int > = 0>\n+auto\u00a0Dune::Functions::BasisFactory::composite (Args &&... args)\n+\u00a0 Create a factory builder that can build a CompositePreBasis. More...\n \u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00101_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00101_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: multiindex.hh Source File</title>\n+<title>dune-functions: compositebasis.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,102 +58,427 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">multiindex.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">compositebasis.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00101.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <cstddef></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <array></span></div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <iostream></span></div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/hash.hh></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00219.html\">Dune::Functions</a> {</div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <tuple></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <utility></span></div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/common/std/apply.hh></span></div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/hybridutilities.hh></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/common/reservedvector.hh></span></div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <dune/common/typeutilities.hh></span></div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <dune/common/hybridutilities.hh></span></div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <dune/common/tupleutility.hh></span></div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <dune/common/tuplevector.hh></span></div>\n <div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> <span class=\"keywordtype\">size_t</span>ype, std::<span class=\"keywordtype\">size_t</span> n></div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01263.html\"> 23</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01263.html\">StaticMultiIndex</a> :</div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> <span class=\"keyword\">public</span> std::array<size_type, n></div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span>{</div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01263.html#a447f3574395ba840fdca4ce12586caa0\"> 27</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> std::size_t <a class=\"code hl_function\" href=\"a01263.html#a447f3574395ba840fdca4ce12586caa0\">size</a>() { <span class=\"keywordflow\">return</span> n; }</div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00056.html\">dune/functions/common/staticforloop.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00029.html\">dune/functions/common/type_traits.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00041.html\">dune/functions/common/utility.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00158.html\">dune/functions/functionspacebases/basistags.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00179.html\">dune/functions/functionspacebases/nodes.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a02876.html\">dune/functions/functionspacebases/concepts.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00152.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> </div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> </div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span><span class=\"keyword\">namespace </span>Functions {</div>\n <div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> </div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01263.html#ae2acb6d4f8e9af393eea105ef6220119\"> 29</a></span> <span class=\"keyword\">inline</span> <span class=\"keyword\">friend</span> std::size_t <a class=\"code hl_friend\" href=\"a01263.html#ae2acb6d4f8e9af393eea105ef6220119\">hash_value</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01263.html\">StaticMultiIndex</a>& v) <span class=\"keyword\">noexcept</span> {</div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> <span class=\"keywordflow\">return</span> hash_range(v.begin(), v.end());</div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> }</div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> </div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span>};</div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> </div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> </div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> </div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> <span class=\"keywordtype\">size_t</span>ype></div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01267.html\"> 47</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01263.html\">StaticMultiIndex</a><size_type,1> :</div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> <span class=\"keyword\">public</span> std::array<size_type, 1></div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span>{</div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> </div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01267.html#a4d9eba5c2afef532845eb32f3c92fddb\"> 52</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> std::size_t <a class=\"code hl_function\" href=\"a01267.html#a4d9eba5c2afef532845eb32f3c92fddb\">size</a>() { <span class=\"keywordflow\">return</span> 1; }</div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> </div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01267.html#a04d0165dfe084b48e67ee75b72a4c046\"> 54</a></span> <span class=\"keyword\">operator</span> <span class=\"keyword\">const</span> size_type& () <span class=\"keyword\">const</span> {</div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> <span class=\"keywordflow\">return</span> (*<span class=\"keyword\">this</span>)[0];</div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> }</div>\n-<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> </div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01267.html#ae2acb6d4f8e9af393eea105ef6220119\"> 58</a></span> <span class=\"keyword\">inline</span> <span class=\"keyword\">friend</span> std::size_t <a class=\"code hl_friend\" href=\"a01267.html#ae2acb6d4f8e9af393eea105ef6220119\">hash_value</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01263.html\">StaticMultiIndex</a>& v) <span class=\"keyword\">noexcept</span> {</div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> <span class=\"keywordflow\">return</span> hash_range(v.begin(), v.end());</div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> }</div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> </div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01267.html#a43e775f6e3306b3479e3c35b6b8c2dd2\"> 62</a></span> <span class=\"keyword\">operator</span> size_type& () {</div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> <span class=\"keywordflow\">return</span> (*<span class=\"keyword\">this</span>)[0];</div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> }</div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> </div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span>};</div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> </div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> </div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span><span class=\"comment\">// This is the reusable part of the composite bases. It contains</span></div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span><span class=\"comment\">//</span></div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span><span class=\"comment\">// CompositePreBasis</span></div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span><span class=\"comment\">//</span></div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span><span class=\"comment\">// The pre-basis allows to create the others and is the owner of possible shared</span></div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span><span class=\"comment\">// state. These components do _not_ depend on the global basis and local view</span></div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span><span class=\"comment\">// and can be used without a global basis.</span></div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> </div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> </div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>IMS, <span class=\"keyword\">class</span>... SPB></div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html\"> 52</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01503.html\">CompositePreBasis</a></div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span>{</div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">bool</span> isBlocked = std::is_same_v<IMS,BasisFactory::BlockedLexicographic> or std::is_same_v<IMS,BasisFactory::BlockedInterleaved>;</div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> </div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#aa3fbd381a090703bb2f0ea3bde8a3031\"> 58</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01503.html#aa3fbd381a090703bb2f0ea3bde8a3031\">SubPreBases</a> = std::tuple<SPB...>;</div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> </div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> <span class=\"keyword\">template</span><std::<span class=\"keywordtype\">size_t</span> i></div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#ab02c441bc5d90d3b584df84e606582a7\"> 62</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01503.html#ab02c441bc5d90d3b584df84e606582a7\">SubPreBasis</a> = std::tuple_element_t<i, SubPreBases>;</div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> </div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#aa04cac815e90325c4ec524e0dc7b22ee\"> 65</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01503.html#aa04cac815e90325c4ec524e0dc7b22ee\">GridView</a> = <span class=\"keyword\">typename</span> std::tuple_element_t<0, SubPreBases>::GridView;</div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> </div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\"> 68</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> = std::size_t;</div>\n <div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> </div>\n-<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Stream, <span class=\"keyword\">class</span> <span class=\"keywordtype\">size_t</span>ype, std::<span class=\"keywordtype\">size_t</span> n></div>\n-<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#af1c4bfbe0c688f745e4731c519db55dd\"> 71</a></span><span class=\"keyword\">inline</span> Stream& <a class=\"code hl_function\" href=\"a00219.html#af1c4bfbe0c688f745e4731c519db55dd\">operator<<</a>(Stream& stream, <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01263.html\">StaticMultiIndex<size_type,n></a>& c) {</div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> <span class=\"keywordflow\">for</span> (<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& ci : c)</div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> stream << ci << <span class=\"stringliteral\">" "</span>;</div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> <span class=\"keywordflow\">return</span> stream;</div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span>}</div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> </div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#a13b5ee8d5de52affa35662093b32de00\"> 71</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01503.html#a13b5ee8d5de52affa35662093b32de00\">IndexMergingStrategy</a> = IMS;</div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> </div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span><span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#aa0689626cbb089b66e5932b4a4ed6a6e\"> 74</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> std::size_t <a class=\"code hl_variable\" href=\"a01503.html#aa0689626cbb089b66e5932b4a4ed6a6e\">children</a> = <span class=\"keyword\">sizeof</span>...(SPB);</div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> </div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#ac2d58cfa5b4b07bdfbec63a296c9a5d6\"> 76</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01503.html#ac2d58cfa5b4b07bdfbec63a296c9a5d6\">ChildIndices</a> = std::make_index_sequence<children>;</div>\n <div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> </div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> </div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span>} <span class=\"comment\">// namespace Dune::Functions</span></div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> </div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> <span class=\"keywordtype\">size_t</span>ype, std::<span class=\"keywordtype\">size_t</span> n></div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01271.html\"> 82</a></span><span class=\"keyword\">struct </span>std::tuple_size< <a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a>::Functions::StaticMultiIndex<size_type,n> ></div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> : std::integral_constant<std::size_t, n> { };</div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> </div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span>DUNE_DEFINE_HASH(DUNE_HASH_TEMPLATE_ARGS(<span class=\"keyword\">typename</span> size_type, std::size_t n),DUNE_HASH_TYPE(<a class=\"code hl_class\" href=\"a01263.html\">Dune::Functions::StaticMultiIndex<size_type,n></a>))</div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> </div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#a38b6a4eb5dc345ee88c046d107c9b811\"> 81</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01719.html\">Node</a> = <a class=\"code hl_class\" href=\"a01719.html\">CompositeBasisNode</a><<span class=\"keyword\">typename</span> SPB::Node...>;</div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> </div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#affd187f58c7f8a750b11ab48abc3d94e\"> 83</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> <a class=\"code hl_variable\" href=\"a01503.html#affd187f58c7f8a750b11ab48abc3d94e\">maxMultiIndexSize</a> = std::max({SPB::maxMultiIndexSize...}) + isBlocked;</div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#aee4f8b5f159f44d9a0fc61c60c615c19\"> 84</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> <a class=\"code hl_variable\" href=\"a01503.html#aee4f8b5f159f44d9a0fc61c60c615c19\">minMultiIndexSize</a> = std::min({SPB::minMultiIndexSize...}) + isBlocked;</div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#ad57d4c09c40d5a87d3e899a2c2df0f35\"> 85</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> <a class=\"code hl_variable\" href=\"a01503.html#ad57d4c09c40d5a87d3e899a2c2df0f35\">multiIndexBufferSize</a> = std::max({SPB::multiIndexBufferSize...}) + isBlocked;</div>\n <div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> </div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH</span></div>\n+<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>... SFArgs,</div>\n+<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> disableCopyMove<<a class=\"code hl_function\" href=\"a01503.html#a4530439b525f32c80febe548adb3f628\">CompositePreBasis</a>, SFArgs...> = 0,</div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> <a class=\"code hl_typedef\" href=\"a00215.html#ga673247dd74bcdd9e5acfc7735faf8a5b\">enableIfConstructible</a><std::tuple<SPB...>, SFArgs...> = 0></div>\n+<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#a4530439b525f32c80febe548adb3f628\"> 95</a></span> <a class=\"code hl_function\" href=\"a01503.html#a4530439b525f32c80febe548adb3f628\">CompositePreBasis</a>(SFArgs&&... sfArgs) :</div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> subPreBases_(std::forward<SFArgs>(sfArgs)...)</div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> {</div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> Hybrid::forEach(subPreBases_, [&](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& <a class=\"code hl_function\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">subPreBasis</a>){</div>\n+<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> <span class=\"keyword\">static_assert</span>(models<Concept::PreBasis<GridView>, std::decay_t<<span class=\"keyword\">decltype</span>(<a class=\"code hl_function\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">subPreBasis</a>)>>(), <span class=\"stringliteral\">"Subprebases passed to CompositePreBasis does not model the PreBasis concept."</span>);</div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> });</div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> }</div>\n+<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> </div>\n+<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>GV,</div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> std::enable_if_t<std::conjunction_v<</div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> std::bool_constant<(<a class=\"code hl_variable\" href=\"a01503.html#aa0689626cbb089b66e5932b4a4ed6a6e\">children</a> > 1)>, <span class=\"comment\">// Avoid ambiguous constructor if there's only one child</span></div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> std::is_same<GV, GridView>,</div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> std::is_constructible<SPB, GridView>...</div>\n+<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> >, <span class=\"keywordtype\">int</span>> = 0></div>\n+<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#a76f2fc67456c26241e478b632e522b2c\"> 115</a></span> <a class=\"code hl_function\" href=\"a01503.html#a76f2fc67456c26241e478b632e522b2c\">CompositePreBasis</a>(<span class=\"keyword\">const</span> GV& gv) :</div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> subPreBases_(SPB(gv)...)</div>\n+<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> {</div>\n+<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> Hybrid::forEach(subPreBases_, [&](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& <a class=\"code hl_function\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">subPreBasis</a>){</div>\n+<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> <span class=\"keyword\">static_assert</span>(models<Concept::PreBasis<GridView>, std::decay_t<<span class=\"keyword\">decltype</span>(<a class=\"code hl_function\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">subPreBasis</a>)>>(), <span class=\"stringliteral\">"Subprebases passed to CompositePreBasis does not model the PreBasis concept."</span>);</div>\n+<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> });</div>\n+<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> }</div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> </div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#aa8d56e734a40a838d9f1407caec24a2e\"> 124</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01503.html#aa8d56e734a40a838d9f1407caec24a2e\">initializeIndices</a>()</div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> {</div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> Hybrid::forEach(<a class=\"code hl_typedef\" href=\"a01503.html#ac2d58cfa5b4b07bdfbec63a296c9a5d6\">ChildIndices</a>(), [&](<span class=\"keyword\">auto</span> i) {</div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> this-><a class=\"code hl_function\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">subPreBasis</a>(i).initializeIndices();</div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> });</div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> }</div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> </div>\n+<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#aebc2c16cfb6f0e3f2e73ca2e3d028b58\"> 132</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01503.html#aa04cac815e90325c4ec524e0dc7b22ee\">GridView</a>& <a class=\"code hl_function\" href=\"a01503.html#aebc2c16cfb6f0e3f2e73ca2e3d028b58\">gridView</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> <span class=\"keywordflow\">return</span> std::get<0>(subPreBases_).gridView();</div>\n+<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> }</div>\n+<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> </div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#ac5a69d51a76acbc5edb4fa55c97aa26c\"> 138</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01503.html#ac5a69d51a76acbc5edb4fa55c97aa26c\">update</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01503.html#aa04cac815e90325c4ec524e0dc7b22ee\">GridView</a>& gv)</div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> {</div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> Hybrid::forEach(<a class=\"code hl_typedef\" href=\"a01503.html#ac2d58cfa5b4b07bdfbec63a296c9a5d6\">ChildIndices</a>(), [&](<span class=\"keyword\">auto</span> i) {</div>\n+<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> this-><a class=\"code hl_function\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">subPreBasis</a>(i).update(gv);</div>\n+<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> });</div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> }</div>\n+<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> </div>\n+<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#aa7aa72102c6058b4a640d61bbce06732\"> 148</a></span> <a class=\"code hl_class\" href=\"a01719.html\">Node</a> <a class=\"code hl_function\" href=\"a01503.html#aa7aa72102c6058b4a640d61bbce06732\">makeNode</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> <span class=\"keyword\">auto</span> node = <a class=\"code hl_class\" href=\"a01719.html\">Node</a>{};</div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> Hybrid::forEach(<a class=\"code hl_typedef\" href=\"a01503.html#ac2d58cfa5b4b07bdfbec63a296c9a5d6\">ChildIndices</a>(), [&](<span class=\"keyword\">auto</span> i) {</div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> node.setChild(this-><a class=\"code hl_function\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">subPreBasis</a>(i).<a class=\"code hl_function\" href=\"a01503.html#aa7aa72102c6058b4a640d61bbce06732\">makeNode</a>(), i);</div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> });</div>\n+<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> <span class=\"keywordflow\">return</span> node;</div>\n+<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> }</div>\n+<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> </div>\n+<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#a907545160aa50ff2214aabada7979d1b\"> 158</a></span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> <a class=\"code hl_function\" href=\"a01503.html#a907545160aa50ff2214aabada7979d1b\">size</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01503.html#a907545160aa50ff2214aabada7979d1b\">size</a>(Dune::ReservedVector<size_type, multiIndexBufferSize>{});</div>\n+<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> }</div>\n+<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> </div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#a406befa892b2d2d3f570ca32401c0b5e\"> 165</a></span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> <a class=\"code hl_function\" href=\"a01503.html#a406befa892b2d2d3f570ca32401c0b5e\">size</a>(<span class=\"keyword\">const</span> SizePrefix& prefix)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01503.html#a907545160aa50ff2214aabada7979d1b\">size</a>(prefix, <a class=\"code hl_typedef\" href=\"a01503.html#a13b5ee8d5de52affa35662093b32de00\">IndexMergingStrategy</a>{});</div>\n+<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> }</div>\n+<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> </div>\n+<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> </div>\n+<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n+<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> <a class=\"code hl_function\" href=\"a01503.html#a907545160aa50ff2214aabada7979d1b\">size</a>(<span class=\"keyword\">const</span> SizePrefix& prefix, <a class=\"code hl_struct\" href=\"a01427.html\">BasisFactory::BlockedLexicographic</a>)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> <span class=\"keywordflow\">if</span> (prefix.size() == 0)</div>\n+<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01503.html#aa0689626cbb089b66e5932b4a4ed6a6e\">children</a>;</div>\n+<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> </div>\n+<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> <span class=\"keywordflow\">return</span> Hybrid::switchCases(<a class=\"code hl_typedef\" href=\"a01503.html#ac2d58cfa5b4b07bdfbec63a296c9a5d6\">ChildIndices</a>(), prefix[0], [&] (<span class=\"keyword\">auto</span> i) {</div>\n+<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> SizePrefix subPrefix;</div>\n+<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> <span class=\"keywordflow\">for</span>(std::size_t i=1; i<prefix.size(); ++i)</div>\n+<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> subPrefix.push_back(prefix[i]);</div>\n+<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> <span class=\"keywordflow\">return</span> this->subPreBasis(i).size(subPrefix);</div>\n+<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span> }, []() {</div>\n+<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a>(0);</div>\n+<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> });</div>\n+<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> }</div>\n+<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> </div>\n+<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n+<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> <a class=\"code hl_function\" href=\"a01503.html#a907545160aa50ff2214aabada7979d1b\">size</a>(<span class=\"keyword\">const</span> SizePrefix& prefix, BasisFactory::FlatLexicographic)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> result = 0;</div>\n+<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> <span class=\"keywordflow\">if</span> (prefix.size() == 0)</div>\n+<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> Hybrid::forEach(<a class=\"code hl_typedef\" href=\"a01503.html#ac2d58cfa5b4b07bdfbec63a296c9a5d6\">ChildIndices</a>(), [&](<span class=\"keyword\">auto</span> i) {</div>\n+<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> result += this-><a class=\"code hl_function\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">subPreBasis</a>(i).size();</div>\n+<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> });</div>\n+<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> <span class=\"keywordflow\">else</span> {</div>\n+<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> shiftedFirstDigit = prefix[0];</div>\n+<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> staticFindInRange<0, children>([&](<span class=\"keyword\">auto</span> i) {</div>\n+<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> <span class=\"keyword\">auto</span> firstDigitSize = this-><a class=\"code hl_function\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">subPreBasis</a>(i).size();</div>\n+<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> <span class=\"keywordflow\">if</span> (shiftedFirstDigit < firstDigitSize)</div>\n+<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> {</div>\n+<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> SizePrefix subPrefix;</div>\n+<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> subPrefix.push_back(shiftedFirstDigit);</div>\n+<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> <span class=\"keywordflow\">for</span>(std::size_t i=1; i<prefix.size(); ++i)</div>\n+<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span> subPrefix.push_back(prefix[i]);</div>\n+<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> result = this-><a class=\"code hl_function\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">subPreBasis</a>(i).size(subPrefix);</div>\n+<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n+<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span> }</div>\n+<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> shiftedFirstDigit -= firstDigitSize;</div>\n+<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n+<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> });</div>\n+<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"> 212</span> }</div>\n+<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span> <span class=\"keywordflow\">return</span> result;</div>\n+<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> }</div>\n+<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> </div>\n+<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> </div>\n+<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#a5a2dc8e82bcce40460968aa8f97c1ceb\"> 219</a></span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> <a class=\"code hl_function\" href=\"a01503.html#a5a2dc8e82bcce40460968aa8f97c1ceb\">dimension</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> r=0;</div>\n+<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span> <span class=\"comment\">// Accumulate dimension() for all subprebases</span></div>\n+<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> Hybrid::forEach(<a class=\"code hl_typedef\" href=\"a01503.html#ac2d58cfa5b4b07bdfbec63a296c9a5d6\">ChildIndices</a>(), [&](<span class=\"keyword\">auto</span> i) {</div>\n+<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> r += this-><a class=\"code hl_function\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">subPreBasis</a>(i).dimension();</div>\n+<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span> });</div>\n+<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> <span class=\"keywordflow\">return</span> r;</div>\n+<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> }</div>\n+<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> </div>\n+<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#a29400a9b23aa71a87ce69a2b86ca4ce1\"> 230</a></span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> <a class=\"code hl_function\" href=\"a01503.html#a29400a9b23aa71a87ce69a2b86ca4ce1\">maxNodeSize</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> r=0;</div>\n+<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> <span class=\"comment\">// Accumulate maxNodeSize() for all subprebases</span></div>\n+<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> Hybrid::forEach(<a class=\"code hl_typedef\" href=\"a01503.html#ac2d58cfa5b4b07bdfbec63a296c9a5d6\">ChildIndices</a>(), [&](<span class=\"keyword\">auto</span> i) {</div>\n+<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> r += this-><a class=\"code hl_function\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">subPreBasis</a>(i).maxNodeSize();</div>\n+<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span> });</div>\n+<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span> <span class=\"keywordflow\">return</span> r;</div>\n+<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span> }</div>\n+<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span> </div>\n+<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span> <span class=\"keyword\">template</span><std::<span class=\"keywordtype\">size_t</span> i></div>\n+<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\"> 242</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01503.html#ab02c441bc5d90d3b584df84e606582a7\">SubPreBasis<i></a>& <a class=\"code hl_function\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">subPreBasis</a>(Dune::index_constant<i> = {}) <span class=\"keyword\">const</span></div>\n+<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> {</div>\n+<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> <span class=\"keywordflow\">return</span> std::get<i>(subPreBases_);</div>\n+<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> }</div>\n+<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span> </div>\n+<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"> 248</span> <span class=\"keyword\">template</span><std::<span class=\"keywordtype\">size_t</span> i></div>\n+<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#a10433c71a9cc503c7ef174ed23f06a13\"> 249</a></span> <a class=\"code hl_typedef\" href=\"a01503.html#ab02c441bc5d90d3b584df84e606582a7\">SubPreBasis<i></a>& <a class=\"code hl_function\" href=\"a01503.html#a10433c71a9cc503c7ef174ed23f06a13\">subPreBasis</a>(Dune::index_constant<i> = {})</div>\n+<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span> {</div>\n+<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span> <span class=\"keywordflow\">return</span> std::get<i>(subPreBases_);</div>\n+<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span> }</div>\n+<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"> 253</span> </div>\n+<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n+<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#a82feeaac018c244e749e6310332e2a3a\"> 256</a></span> It <a class=\"code hl_function\" href=\"a01503.html#a82feeaac018c244e749e6310332e2a3a\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01719.html\">Node</a>& node, It it)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00257\" name=\"l00257\"></a><span class=\"lineno\"> 257</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00258\" name=\"l00258\"></a><span class=\"lineno\"> 258</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01503.html#a82feeaac018c244e749e6310332e2a3a\">indices</a>(node, it, <a class=\"code hl_typedef\" href=\"a01503.html#a13b5ee8d5de52affa35662093b32de00\">IndexMergingStrategy</a>{});</div>\n+<div class=\"line\"><a id=\"l00259\" name=\"l00259\"></a><span class=\"lineno\"> 259</span> }</div>\n+<div class=\"line\"><a id=\"l00260\" name=\"l00260\"></a><span class=\"lineno\"> 260</span> </div>\n+<div class=\"line\"><a id=\"l00261\" name=\"l00261\"></a><span class=\"lineno\"> 261</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00262\" name=\"l00262\"></a><span class=\"lineno\"> 262</span> </div>\n+<div class=\"line\"><a id=\"l00263\" name=\"l00263\"></a><span class=\"lineno\"> 263</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n+<div class=\"line\"><a id=\"l00264\" name=\"l00264\"></a><span class=\"lineno\"> 264</span> It <a class=\"code hl_function\" href=\"a01503.html#a82feeaac018c244e749e6310332e2a3a\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01503.html#a38b6a4eb5dc345ee88c046d107c9b811\">Node</a>& node, It multiIndices, <a class=\"code hl_struct\" href=\"a01419.html\">BasisFactory::FlatLexicographic</a>)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00265\" name=\"l00265\"></a><span class=\"lineno\"> 265</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00266\" name=\"l00266\"></a><span class=\"lineno\"> 266</span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> firstComponentOffset = 0;</div>\n+<div class=\"line\"><a id=\"l00267\" name=\"l00267\"></a><span class=\"lineno\"> 267</span> <span class=\"comment\">// Loop over all children</span></div>\n+<div class=\"line\"><a id=\"l00268\" name=\"l00268\"></a><span class=\"lineno\"> 268</span> Hybrid::forEach(<a class=\"code hl_typedef\" href=\"a01503.html#ac2d58cfa5b4b07bdfbec63a296c9a5d6\">ChildIndices</a>(), [&](<span class=\"keyword\">auto</span> child){</div>\n+<div class=\"line\"><a id=\"l00269\" name=\"l00269\"></a><span class=\"lineno\"> 269</span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> subTreeSize = node.child(child).<a class=\"code hl_function\" href=\"a01503.html#a907545160aa50ff2214aabada7979d1b\">size</a>();</div>\n+<div class=\"line\"><a id=\"l00270\" name=\"l00270\"></a><span class=\"lineno\"> 270</span> <span class=\"comment\">// Fill indices for current child into index buffer starting from current</span></div>\n+<div class=\"line\"><a id=\"l00271\" name=\"l00271\"></a><span class=\"lineno\"> 271</span> <span class=\"comment\">// buffer position and shift first index component of any index for current</span></div>\n+<div class=\"line\"><a id=\"l00272\" name=\"l00272\"></a><span class=\"lineno\"> 272</span> <span class=\"comment\">// child by suitable offset to get lexicographic indices.</span></div>\n+<div class=\"line\"><a id=\"l00273\" name=\"l00273\"></a><span class=\"lineno\"> 273</span> <a class=\"code hl_function\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">subPreBasis</a>(child).indices(node.child(child), multiIndices);</div>\n+<div class=\"line\"><a id=\"l00274\" name=\"l00274\"></a><span class=\"lineno\"> 274</span> <span class=\"keywordflow\">for</span> (std::size_t i = 0; i<subTreeSize; ++i)</div>\n+<div class=\"line\"><a id=\"l00275\" name=\"l00275\"></a><span class=\"lineno\"> 275</span> multiIndices[i][0] += firstComponentOffset;</div>\n+<div class=\"line\"><a id=\"l00276\" name=\"l00276\"></a><span class=\"lineno\"> 276</span> <span class=\"comment\">// Increment offset by the size for first index component of the current child</span></div>\n+<div class=\"line\"><a id=\"l00277\" name=\"l00277\"></a><span class=\"lineno\"> 277</span> firstComponentOffset += <a class=\"code hl_function\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">subPreBasis</a>(child).size();</div>\n+<div class=\"line\"><a id=\"l00278\" name=\"l00278\"></a><span class=\"lineno\"> 278</span> <span class=\"comment\">// Increment buffer iterator by the number of indices processed for current child</span></div>\n+<div class=\"line\"><a id=\"l00279\" name=\"l00279\"></a><span class=\"lineno\"> 279</span> multiIndices += subTreeSize;</div>\n+<div class=\"line\"><a id=\"l00280\" name=\"l00280\"></a><span class=\"lineno\"> 280</span> });</div>\n+<div class=\"line\"><a id=\"l00281\" name=\"l00281\"></a><span class=\"lineno\"> 281</span> <span class=\"keywordflow\">return</span> multiIndices;</div>\n+<div class=\"line\"><a id=\"l00282\" name=\"l00282\"></a><span class=\"lineno\"> 282</span> }</div>\n+<div class=\"line\"><a id=\"l00283\" name=\"l00283\"></a><span class=\"lineno\"> 283</span> </div>\n+<div class=\"line\"><a id=\"l00284\" name=\"l00284\"></a><span class=\"lineno\"> 284</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> MultiIndex></div>\n+<div class=\"line\"><a id=\"l00285\" name=\"l00285\"></a><span class=\"lineno\"> 285</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> multiIndexPushFront(MultiIndex& M, <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> M0)</div>\n+<div class=\"line\"><a id=\"l00286\" name=\"l00286\"></a><span class=\"lineno\"> 286</span> {</div>\n+<div class=\"line\"><a id=\"l00287\" name=\"l00287\"></a><span class=\"lineno\"> 287</span> M.resize(M.size()+1);</div>\n+<div class=\"line\"><a id=\"l00288\" name=\"l00288\"></a><span class=\"lineno\"> 288</span> <span class=\"keywordflow\">for</span>(std::size_t i=M.size()-1; i>0; --i)</div>\n+<div class=\"line\"><a id=\"l00289\" name=\"l00289\"></a><span class=\"lineno\"> 289</span> M[i] = M[i-1];</div>\n+<div class=\"line\"><a id=\"l00290\" name=\"l00290\"></a><span class=\"lineno\"> 290</span> M[0] = M0;</div>\n+<div class=\"line\"><a id=\"l00291\" name=\"l00291\"></a><span class=\"lineno\"> 291</span> }</div>\n+<div class=\"line\"><a id=\"l00292\" name=\"l00292\"></a><span class=\"lineno\"> 292</span> </div>\n+<div class=\"line\"><a id=\"l00293\" name=\"l00293\"></a><span class=\"lineno\"> 293</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n+<div class=\"line\"><a id=\"l00294\" name=\"l00294\"></a><span class=\"lineno\"> 294</span> It <a class=\"code hl_function\" href=\"a01503.html#a82feeaac018c244e749e6310332e2a3a\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01503.html#a38b6a4eb5dc345ee88c046d107c9b811\">Node</a>& node, It multiIndices, BasisFactory::BlockedLexicographic)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00295\" name=\"l00295\"></a><span class=\"lineno\"> 295</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00296\" name=\"l00296\"></a><span class=\"lineno\"> 296</span> <span class=\"comment\">// Loop over all children</span></div>\n+<div class=\"line\"><a id=\"l00297\" name=\"l00297\"></a><span class=\"lineno\"> 297</span> Hybrid::forEach(<a class=\"code hl_typedef\" href=\"a01503.html#ac2d58cfa5b4b07bdfbec63a296c9a5d6\">ChildIndices</a>(), [&](<span class=\"keyword\">auto</span> child){</div>\n+<div class=\"line\"><a id=\"l00298\" name=\"l00298\"></a><span class=\"lineno\"> 298</span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> subTreeSize = node.child(child).<a class=\"code hl_function\" href=\"a01503.html#a907545160aa50ff2214aabada7979d1b\">size</a>();</div>\n+<div class=\"line\"><a id=\"l00299\" name=\"l00299\"></a><span class=\"lineno\"> 299</span> <span class=\"comment\">// Fill indices for current child into index buffer starting from current position</span></div>\n+<div class=\"line\"><a id=\"l00300\" name=\"l00300\"></a><span class=\"lineno\"> 300</span> <a class=\"code hl_function\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">subPreBasis</a>(child).indices(node.child(child), multiIndices);</div>\n+<div class=\"line\"><a id=\"l00301\" name=\"l00301\"></a><span class=\"lineno\"> 301</span> <span class=\"comment\">// Insert child index before first component of all indices of current child.</span></div>\n+<div class=\"line\"><a id=\"l00302\" name=\"l00302\"></a><span class=\"lineno\"> 302</span> <span class=\"keywordflow\">for</span> (std::size_t i = 0; i<subTreeSize; ++i)</div>\n+<div class=\"line\"><a id=\"l00303\" name=\"l00303\"></a><span class=\"lineno\"> 303</span> this->multiIndexPushFront(multiIndices[i], child);</div>\n+<div class=\"line\"><a id=\"l00304\" name=\"l00304\"></a><span class=\"lineno\"> 304</span> <span class=\"comment\">// Increment buffer iterator by the number of indices processed for current child</span></div>\n+<div class=\"line\"><a id=\"l00305\" name=\"l00305\"></a><span class=\"lineno\"> 305</span> multiIndices += subTreeSize;</div>\n+<div class=\"line\"><a id=\"l00306\" name=\"l00306\"></a><span class=\"lineno\"> 306</span> });</div>\n+<div class=\"line\"><a id=\"l00307\" name=\"l00307\"></a><span class=\"lineno\"> 307</span> <span class=\"keywordflow\">return</span> multiIndices;</div>\n+<div class=\"line\"><a id=\"l00308\" name=\"l00308\"></a><span class=\"lineno\"> 308</span> }</div>\n+<div class=\"line\"><a id=\"l00309\" name=\"l00309\"></a><span class=\"lineno\"> 309</span> </div>\n+<div class=\"line\"><a id=\"l00310\" name=\"l00310\"></a><span class=\"lineno\"> 310</span> std::tuple<SPB...> subPreBases_;</div>\n+<div class=\"line\"><a id=\"l00311\" name=\"l00311\"></a><span class=\"lineno\"> 311</span>};</div>\n+<div class=\"line\"><a id=\"l00312\" name=\"l00312\"></a><span class=\"lineno\"> 312</span> </div>\n+<div class=\"line\"><a id=\"l00313\" name=\"l00313\"></a><span class=\"lineno\"> 313</span> </div>\n+<div class=\"line\"><a id=\"l00314\" name=\"l00314\"></a><span class=\"lineno\"> 314</span> </div>\n+<div class=\"line\"><a id=\"l00315\" name=\"l00315\"></a><span class=\"lineno\"> 315</span><span class=\"keyword\">namespace </span>BasisFactory {</div>\n+<div class=\"line\"><a id=\"l00316\" name=\"l00316\"></a><span class=\"lineno\"> 316</span> </div>\n+<div class=\"line\"><a id=\"l00317\" name=\"l00317\"></a><span class=\"lineno\"> 317</span><span class=\"keyword\">namespace </span>Imp {</div>\n+<div class=\"line\"><a id=\"l00318\" name=\"l00318\"></a><span class=\"lineno\"> 318</span> </div>\n+<div class=\"line\"><a id=\"l00319\" name=\"l00319\"></a><span class=\"lineno\"> 319</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>IndexMergingStrategy, <span class=\"keyword\">class</span>... ChildPreBasisFactory></div>\n+<div class=\"line\"><a id=\"l00320\" name=\"l00320\"></a><span class=\"lineno\"> 320</span><span class=\"keyword\">class </span>CompositePreBasisFactory</div>\n+<div class=\"line\"><a id=\"l00321\" name=\"l00321\"></a><span class=\"lineno\"> 321</span>{</div>\n+<div class=\"line\"><a id=\"l00322\" name=\"l00322\"></a><span class=\"lineno\"> 322</span> </div>\n+<div class=\"line\"><a id=\"l00323\" name=\"l00323\"></a><span class=\"lineno\"> 323</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>GridView, <span class=\"keyword\">class</span>... ChildPreBasis></div>\n+<div class=\"line\"><a id=\"l00324\" name=\"l00324\"></a><span class=\"lineno\"> 324</span> <span class=\"keyword\">auto</span> makePreBasisFromChildPreBases(<span class=\"keyword\">const</span> GridView&, ChildPreBasis&&... childPreBasis)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00325\" name=\"l00325\"></a><span class=\"lineno\"> 325</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00326\" name=\"l00326\"></a><span class=\"lineno\"> 326</span> <span class=\"keywordflow\">return</span> CompositePreBasis<IndexMergingStrategy, std::decay_t<ChildPreBasis>...>(std::forward<ChildPreBasis>(childPreBasis)...);</div>\n+<div class=\"line\"><a id=\"l00327\" name=\"l00327\"></a><span class=\"lineno\"> 327</span> }</div>\n+<div class=\"line\"><a id=\"l00328\" name=\"l00328\"></a><span class=\"lineno\"> 328</span> </div>\n+<div class=\"line\"><a id=\"l00329\" name=\"l00329\"></a><span class=\"lineno\"> 329</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00330\" name=\"l00330\"></a><span class=\"lineno\"> 330</span> </div>\n+<div class=\"line\"><a id=\"l00331\" name=\"l00331\"></a><span class=\"lineno\"> 331</span> CompositePreBasisFactory(<span class=\"keyword\">const</span> ChildPreBasisFactory&... childPreBasisFactory) :</div>\n+<div class=\"line\"><a id=\"l00332\" name=\"l00332\"></a><span class=\"lineno\"> 332</span> childPreBasisFactories_(childPreBasisFactory...)</div>\n+<div class=\"line\"><a id=\"l00333\" name=\"l00333\"></a><span class=\"lineno\"> 333</span> {}</div>\n+<div class=\"line\"><a id=\"l00334\" name=\"l00334\"></a><span class=\"lineno\"> 334</span> </div>\n+<div class=\"line\"><a id=\"l00335\" name=\"l00335\"></a><span class=\"lineno\"> 335</span> CompositePreBasisFactory(ChildPreBasisFactory&&... childPreBasisFactory) :</div>\n+<div class=\"line\"><a id=\"l00336\" name=\"l00336\"></a><span class=\"lineno\"> 336</span> childPreBasisFactories_(std::move(childPreBasisFactory)...)</div>\n+<div class=\"line\"><a id=\"l00337\" name=\"l00337\"></a><span class=\"lineno\"> 337</span> {}</div>\n+<div class=\"line\"><a id=\"l00338\" name=\"l00338\"></a><span class=\"lineno\"> 338</span> </div>\n+<div class=\"line\"><a id=\"l00339\" name=\"l00339\"></a><span class=\"lineno\"> 339</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Gr<span class=\"keywordtype\">id</span>View></div>\n+<div class=\"line\"><a id=\"l00340\" name=\"l00340\"></a><span class=\"lineno\"> 340</span> <span class=\"keyword\">auto</span> operator()(<span class=\"keyword\">const</span> GridView& gridView)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00341\" name=\"l00341\"></a><span class=\"lineno\"> 341</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00342\" name=\"l00342\"></a><span class=\"lineno\"> 342</span> <span class=\"comment\">// Use std::apply to unpack the tuple childPreBasisFactories_</span></div>\n+<div class=\"line\"><a id=\"l00343\" name=\"l00343\"></a><span class=\"lineno\"> 343</span> <span class=\"keywordflow\">return</span> std::apply([&](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>&... childPreBasisFactory) {</div>\n+<div class=\"line\"><a id=\"l00344\" name=\"l00344\"></a><span class=\"lineno\"> 344</span> <span class=\"keywordflow\">return</span> this->makePreBasisFromChildPreBases(gridView, childPreBasisFactory(gridView)...);</div>\n+<div class=\"line\"><a id=\"l00345\" name=\"l00345\"></a><span class=\"lineno\"> 345</span> }, childPreBasisFactories_);</div>\n+<div class=\"line\"><a id=\"l00346\" name=\"l00346\"></a><span class=\"lineno\"> 346</span> }</div>\n+<div class=\"line\"><a id=\"l00347\" name=\"l00347\"></a><span class=\"lineno\"> 347</span> </div>\n+<div class=\"line\"><a id=\"l00348\" name=\"l00348\"></a><span class=\"lineno\"> 348</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00349\" name=\"l00349\"></a><span class=\"lineno\"> 349</span> std::tuple<ChildPreBasisFactory...> childPreBasisFactories_;</div>\n+<div class=\"line\"><a id=\"l00350\" name=\"l00350\"></a><span class=\"lineno\"> 350</span>};</div>\n+<div class=\"line\"><a id=\"l00351\" name=\"l00351\"></a><span class=\"lineno\"> 351</span> </div>\n+<div class=\"line\"><a id=\"l00352\" name=\"l00352\"></a><span class=\"lineno\"> 352</span>} <span class=\"comment\">// end namespace BasisFactory::Imp</span></div>\n+<div class=\"line\"><a id=\"l00353\" name=\"l00353\"></a><span class=\"lineno\"> 353</span> </div>\n+<div class=\"line\"><a id=\"l00354\" name=\"l00354\"></a><span class=\"lineno\"> 354</span> </div>\n+<div class=\"line\"><a id=\"l00355\" name=\"l00355\"></a><span class=\"lineno\"> 355</span> </div>\n+<div class=\"line\"><a id=\"l00366\" name=\"l00366\"></a><span class=\"lineno\"> 366</span><span class=\"keyword\">template</span><</div>\n+<div class=\"line\"><a id=\"l00367\" name=\"l00367\"></a><span class=\"lineno\"> 367</span> <span class=\"keyword\">typename</span>... Args,</div>\n+<div class=\"line\"><a id=\"l00368\" name=\"l00368\"></a><span class=\"lineno\"> 368</span> std::enable_if_t<<a class=\"code hl_function\" href=\"a00220.html#a067e42f1ca7d6c4131518e5eb269da35\">Concept::isIndexMergingStrategy</a><<span class=\"keyword\">typename</span> LastType<Args...>::type>(),<span class=\"keywordtype\">int</span>> = 0></div>\n+<div class=\"line\"><a id=\"l00369\" name=\"l00369\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#ga0ee62f9744ec8ba58fdfc4c68df34449\"> 369</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00213.html#ga0ee62f9744ec8ba58fdfc4c68df34449\">composite</a>(Args&&... args)</div>\n+<div class=\"line\"><a id=\"l00370\" name=\"l00370\"></a><span class=\"lineno\"> 370</span>{</div>\n+<div class=\"line\"><a id=\"l00371\" name=\"l00371\"></a><span class=\"lineno\"> 371</span> <span class=\"comment\">// We have to separate the last entry which is the IndexMergingStrategy</span></div>\n+<div class=\"line\"><a id=\"l00372\" name=\"l00372\"></a><span class=\"lineno\"> 372</span> <span class=\"comment\">// and the preceding ones, which are the ChildPreBasisFactories</span></div>\n+<div class=\"line\"><a id=\"l00373\" name=\"l00373\"></a><span class=\"lineno\"> 373</span> </div>\n+<div class=\"line\"><a id=\"l00374\" name=\"l00374\"></a><span class=\"lineno\"> 374</span> <span class=\"keyword\">using </span>ArgTuple = std::tuple<std::decay_t<Args>...>;</div>\n+<div class=\"line\"><a id=\"l00375\" name=\"l00375\"></a><span class=\"lineno\"> 375</span> </div>\n+<div class=\"line\"><a id=\"l00376\" name=\"l00376\"></a><span class=\"lineno\"> 376</span> <span class=\"comment\">// Compute number of children and index of the IndexMergingStrategy argument</span></div>\n+<div class=\"line\"><a id=\"l00377\" name=\"l00377\"></a><span class=\"lineno\"> 377</span> <span class=\"keyword\">constexpr</span> std::size_t children = Dune::SizeOf<Args...>::value-1;</div>\n+<div class=\"line\"><a id=\"l00378\" name=\"l00378\"></a><span class=\"lineno\"> 378</span> </div>\n+<div class=\"line\"><a id=\"l00379\" name=\"l00379\"></a><span class=\"lineno\"> 379</span> <span class=\"comment\">// Use last type as IndexMergingStrategy</span></div>\n+<div class=\"line\"><a id=\"l00380\" name=\"l00380\"></a><span class=\"lineno\"> 380</span> <span class=\"keyword\">using </span><a class=\"code hl_struct\" href=\"a01415.html\">IndexMergingStrategy</a> = std::tuple_element_t<children, ArgTuple>;</div>\n+<div class=\"line\"><a id=\"l00381\" name=\"l00381\"></a><span class=\"lineno\"> 381</span> </div>\n+<div class=\"line\"><a id=\"l00382\" name=\"l00382\"></a><span class=\"lineno\"> 382</span> <span class=\"comment\">// Index sequence for all but the last entry for partial tuple unpacking</span></div>\n+<div class=\"line\"><a id=\"l00383\" name=\"l00383\"></a><span class=\"lineno\"> 383</span> <span class=\"keyword\">auto</span> childIndices = std::make_index_sequence<children>{};</div>\n+<div class=\"line\"><a id=\"l00384\" name=\"l00384\"></a><span class=\"lineno\"> 384</span> </div>\n+<div class=\"line\"><a id=\"l00385\" name=\"l00385\"></a><span class=\"lineno\"> 385</span> <span class=\"comment\">// Unpack tuple only for those entries related to children</span></div>\n+<div class=\"line\"><a id=\"l00386\" name=\"l00386\"></a><span class=\"lineno\"> 386</span> <span class=\"keywordflow\">return</span> applyPartial([](<span class=\"keyword\">auto</span>&&... childPreBasisFactory){</div>\n+<div class=\"line\"><a id=\"l00387\" name=\"l00387\"></a><span class=\"lineno\"> 387</span> <span class=\"keywordflow\">return</span> Imp::CompositePreBasisFactory<<a class=\"code hl_struct\" href=\"a01415.html\">IndexMergingStrategy</a>, std::decay_t<<span class=\"keyword\">decltype</span>(childPreBasisFactory)>...>(std::forward<<span class=\"keyword\">decltype</span>(childPreBasisFactory)>(childPreBasisFactory)...);</div>\n+<div class=\"line\"><a id=\"l00388\" name=\"l00388\"></a><span class=\"lineno\"> 388</span> },</div>\n+<div class=\"line\"><a id=\"l00389\" name=\"l00389\"></a><span class=\"lineno\"> 389</span> std::forward_as_tuple(std::forward<Args>(args)...),</div>\n+<div class=\"line\"><a id=\"l00390\" name=\"l00390\"></a><span class=\"lineno\"> 390</span> childIndices);</div>\n+<div class=\"line\"><a id=\"l00391\" name=\"l00391\"></a><span class=\"lineno\"> 391</span>}</div>\n+<div class=\"line\"><a id=\"l00392\" name=\"l00392\"></a><span class=\"lineno\"> 392</span> </div>\n+<div class=\"line\"><a id=\"l00404\" name=\"l00404\"></a><span class=\"lineno\"> 404</span><span class=\"keyword\">template</span><</div>\n+<div class=\"line\"><a id=\"l00405\" name=\"l00405\"></a><span class=\"lineno\"> 405</span> <span class=\"keyword\">typename</span>... Args,</div>\n+<div class=\"line\"><a id=\"l00406\" name=\"l00406\"></a><span class=\"lineno\"> 406</span> std::enable_if_t<not <a class=\"code hl_function\" href=\"a00220.html#a067e42f1ca7d6c4131518e5eb269da35\">Concept::isIndexMergingStrategy</a><<span class=\"keyword\">typename</span> <a class=\"code hl_struct\" href=\"a01383.html\">LastType</a><Args...>::type>(),<span class=\"keywordtype\">int</span>> = 0></div>\n+<div class=\"line\"><a id=\"l00407\" name=\"l00407\"></a><span class=\"lineno\"> 407</span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00213.html#ga0ee62f9744ec8ba58fdfc4c68df34449\">composite</a>(Args&&... args)</div>\n+<div class=\"line\"><a id=\"l00408\" name=\"l00408\"></a><span class=\"lineno\"> 408</span>{</div>\n+<div class=\"line\"><a id=\"l00409\" name=\"l00409\"></a><span class=\"lineno\"> 409</span> <span class=\"keywordflow\">return</span> Imp::CompositePreBasisFactory<BasisFactory::BlockedLexicographic, std::decay_t<Args>...>(std::forward<Args>(args)...);</div>\n+<div class=\"line\"><a id=\"l00410\" name=\"l00410\"></a><span class=\"lineno\"> 410</span>}</div>\n+<div class=\"line\"><a id=\"l00411\" name=\"l00411\"></a><span class=\"lineno\"> 411</span> </div>\n+<div class=\"line\"><a id=\"l00412\" name=\"l00412\"></a><span class=\"lineno\"> 412</span>} <span class=\"comment\">// end namespace BasisFactory</span></div>\n+<div class=\"line\"><a id=\"l00413\" name=\"l00413\"></a><span class=\"lineno\"> 413</span> </div>\n+<div class=\"line\"><a id=\"l00414\" name=\"l00414\"></a><span class=\"lineno\"> 414</span><span class=\"comment\">// Backward compatibility</span></div>\n+<div class=\"line\"><a id=\"l00415\" name=\"l00415\"></a><span class=\"lineno\"> 415</span><span class=\"keyword\">namespace </span>BasisBuilder {</div>\n+<div class=\"line\"><a id=\"l00416\" name=\"l00416\"></a><span class=\"lineno\"> 416</span> </div>\n+<div class=\"line\"><a id=\"l00417\" name=\"l00417\"></a><span class=\"lineno\"> 417</span> <span class=\"keyword\">using namespace </span>BasisFactory;</div>\n+<div class=\"line\"><a id=\"l00418\" name=\"l00418\"></a><span class=\"lineno\"> 418</span> </div>\n+<div class=\"line\"><a id=\"l00419\" name=\"l00419\"></a><span class=\"lineno\"> 419</span>}</div>\n+<div class=\"line\"><a id=\"l00420\" name=\"l00420\"></a><span class=\"lineno\"> 420</span> </div>\n+<div class=\"line\"><a id=\"l00421\" name=\"l00421\"></a><span class=\"lineno\"> 421</span> </div>\n+<div class=\"line\"><a id=\"l00422\" name=\"l00422\"></a><span class=\"lineno\"> 422</span> </div>\n+<div class=\"line\"><a id=\"l00423\" name=\"l00423\"></a><span class=\"lineno\"> 423</span>} <span class=\"comment\">// end namespace Functions</span></div>\n+<div class=\"line\"><a id=\"l00424\" name=\"l00424\"></a><span class=\"lineno\"> 424</span>} <span class=\"comment\">// end namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00425\" name=\"l00425\"></a><span class=\"lineno\"> 425</span> </div>\n+<div class=\"line\"><a id=\"l00426\" name=\"l00426\"></a><span class=\"lineno\"> 426</span> </div>\n+<div class=\"line\"><a id=\"l00427\" name=\"l00427\"></a><span class=\"lineno\"> 427</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH</span></div>\n+<div class=\"ttc\" id=\"aa00029_html\"><div class=\"ttname\"><a href=\"a00029.html\">type_traits.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00041_html\"><div class=\"ttname\"><a href=\"a00041.html\">utility.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00056_html\"><div class=\"ttname\"><a href=\"a00056.html\">staticforloop.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00152_html\"><div class=\"ttname\"><a href=\"a00152.html\">defaultglobalbasis.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00158_html\"><div class=\"ttname\"><a href=\"a00158.html\">basistags.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00179_html\"><div class=\"ttname\"><a href=\"a00179.html\">nodes.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00213_html_ga0ee62f9744ec8ba58fdfc4c68df34449\"><div class=\"ttname\"><a href=\"a00213.html#ga0ee62f9744ec8ba58fdfc4c68df34449\">Dune::Functions::BasisFactory::composite</a></div><div class=\"ttdeci\">auto composite(Args &&... args)</div><div class=\"ttdoc\">Create a factory builder that can build a CompositePreBasis.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:369</div></div>\n+<div class=\"ttc\" id=\"aa00215_html_ga673247dd74bcdd9e5acfc7735faf8a5b\"><div class=\"ttname\"><a href=\"a00215.html#ga673247dd74bcdd9e5acfc7735faf8a5b\">Dune::Functions::enableIfConstructible</a></div><div class=\"ttdeci\">typename std::enable_if< std::is_constructible< T, Args... >::value, int >::type enableIfConstructible</div><div class=\"ttdoc\">Helper to constrain forwarding constructors.</div><div class=\"ttdef\"><b>Definition:</b> type_traits.hh:26</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa00219_html\"><div class=\"ttname\"><a href=\"a00219.html\">Dune::Functions</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:11</div></div>\n-<div class=\"ttc\" id=\"aa00219_html_af1c4bfbe0c688f745e4731c519db55dd\"><div class=\"ttname\"><a href=\"a00219.html#af1c4bfbe0c688f745e4731c519db55dd\">Dune::Functions::operator<<</a></div><div class=\"ttdeci\">Stream & operator<<(Stream &stream, const StaticMultiIndex< size_type, n > &c)</div><div class=\"ttdef\"><b>Definition:</b> multiindex.hh:71</div></div>\n-<div class=\"ttc\" id=\"aa01263_html\"><div class=\"ttname\"><a href=\"a01263.html\">Dune::Functions::StaticMultiIndex</a></div><div class=\"ttdoc\">A statically sized MultiIndex type.</div><div class=\"ttdef\"><b>Definition:</b> multiindex.hh:25</div></div>\n-<div class=\"ttc\" id=\"aa01263_html_a447f3574395ba840fdca4ce12586caa0\"><div class=\"ttname\"><a href=\"a01263.html#a447f3574395ba840fdca4ce12586caa0\">Dune::Functions::StaticMultiIndex::size</a></div><div class=\"ttdeci\">static constexpr std::size_t size()</div><div class=\"ttdef\"><b>Definition:</b> multiindex.hh:27</div></div>\n-<div class=\"ttc\" id=\"aa01263_html_ae2acb6d4f8e9af393eea105ef6220119\"><div class=\"ttname\"><a href=\"a01263.html#ae2acb6d4f8e9af393eea105ef6220119\">Dune::Functions::StaticMultiIndex::hash_value</a></div><div class=\"ttdeci\">friend std::size_t hash_value(const StaticMultiIndex &v) noexcept</div><div class=\"ttdef\"><b>Definition:</b> multiindex.hh:29</div></div>\n-<div class=\"ttc\" id=\"aa01267_html_a4d9eba5c2afef532845eb32f3c92fddb\"><div class=\"ttname\"><a href=\"a01267.html#a4d9eba5c2afef532845eb32f3c92fddb\">Dune::Functions::StaticMultiIndex< size_type, 1 >::size</a></div><div class=\"ttdeci\">static constexpr std::size_t size()</div><div class=\"ttdef\"><b>Definition:</b> multiindex.hh:52</div></div>\n-<div class=\"ttc\" id=\"aa01267_html_ae2acb6d4f8e9af393eea105ef6220119\"><div class=\"ttname\"><a href=\"a01267.html#ae2acb6d4f8e9af393eea105ef6220119\">Dune::Functions::StaticMultiIndex< size_type, 1 >::hash_value</a></div><div class=\"ttdeci\">friend std::size_t hash_value(const StaticMultiIndex &v) noexcept</div><div class=\"ttdef\"><b>Definition:</b> multiindex.hh:58</div></div>\n+<div class=\"ttc\" id=\"aa00220_html_a067e42f1ca7d6c4131518e5eb269da35\"><div class=\"ttname\"><a href=\"a00220.html#a067e42f1ca7d6c4131518e5eb269da35\">Dune::Functions::Concept::isIndexMergingStrategy</a></div><div class=\"ttdeci\">static constexpr bool isIndexMergingStrategy()</div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:23</div></div>\n+<div class=\"ttc\" id=\"aa01383_html\"><div class=\"ttname\"><a href=\"a01383.html\">Dune::Functions::LastType</a></div><div class=\"ttdoc\">Get last entry of type list.</div><div class=\"ttdef\"><b>Definition:</b> utility.hh:222</div></div>\n+<div class=\"ttc\" id=\"aa01415_html\"><div class=\"ttname\"><a href=\"a01415.html\">Dune::Functions::BasisFactory::IndexMergingStrategy</a></div><div class=\"ttdoc\">Base class for index merging strategies to simplify detection.</div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:44</div></div>\n+<div class=\"ttc\" id=\"aa01419_html\"><div class=\"ttname\"><a href=\"a01419.html\">Dune::Functions::BasisFactory::FlatLexicographic</a></div><div class=\"ttdoc\">Lexicographic merging of direct children without blocking.</div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:80</div></div>\n+<div class=\"ttc\" id=\"aa01427_html\"><div class=\"ttname\"><a href=\"a01427.html\">Dune::Functions::BasisFactory::BlockedLexicographic</a></div><div class=\"ttdoc\">Lexicographic merging of direct children with blocking (i.e. creating one block per direct child).</div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:148</div></div>\n+<div class=\"ttc\" id=\"aa01503_html\"><div class=\"ttname\"><a href=\"a01503.html\">Dune::Functions::CompositePreBasis</a></div><div class=\"ttdoc\">A pre-basis for composite bases.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:53</div></div>\n+<div class=\"ttc\" id=\"aa01503_html_a10433c71a9cc503c7ef174ed23f06a13\"><div class=\"ttname\"><a href=\"a01503.html#a10433c71a9cc503c7ef174ed23f06a13\">Dune::Functions::CompositePreBasis::subPreBasis</a></div><div class=\"ttdeci\">SubPreBasis< i > & subPreBasis(Dune::index_constant< i >={})</div><div class=\"ttdoc\">Mutable access to the stored prebasis of the factor in the power space.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:249</div></div>\n+<div class=\"ttc\" id=\"aa01503_html_a13b5ee8d5de52affa35662093b32de00\"><div class=\"ttname\"><a href=\"a01503.html#a13b5ee8d5de52affa35662093b32de00\">Dune::Functions::CompositePreBasis::IndexMergingStrategy</a></div><div class=\"ttdeci\">IMS IndexMergingStrategy</div><div class=\"ttdoc\">Strategy used to merge the global indices of the child pre-bases.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:71</div></div>\n+<div class=\"ttc\" id=\"aa01503_html_a29400a9b23aa71a87ce69a2b86ca4ce1\"><div class=\"ttname\"><a href=\"a01503.html#a29400a9b23aa71a87ce69a2b86ca4ce1\">Dune::Functions::CompositePreBasis::maxNodeSize</a></div><div class=\"ttdeci\">size_type maxNodeSize() const</div><div class=\"ttdoc\">Get the maximal number of DOFs associated to node for any element.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:230</div></div>\n+<div class=\"ttc\" id=\"aa01503_html_a2b525fdcdc6faa0551084c2c147dc92a\"><div class=\"ttname\"><a href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">Dune::Functions::CompositePreBasis::subPreBasis</a></div><div class=\"ttdeci\">const SubPreBasis< i > & subPreBasis(Dune::index_constant< i >={}) const</div><div class=\"ttdoc\">Const access to the stored prebasis of the factor in the power space.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:242</div></div>\n+<div class=\"ttc\" id=\"aa01503_html_a3193f75ae98cc4643fb767d9fe7c95b9\"><div class=\"ttname\"><a href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">Dune::Functions::CompositePreBasis::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdoc\">Type used for indices and size information.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:68</div></div>\n+<div class=\"ttc\" id=\"aa01503_html_a38b6a4eb5dc345ee88c046d107c9b811\"><div class=\"ttname\"><a href=\"a01503.html#a38b6a4eb5dc345ee88c046d107c9b811\">Dune::Functions::CompositePreBasis::Node</a></div><div class=\"ttdeci\">CompositeBasisNode< typename SPB::Node... > Node</div><div class=\"ttdoc\">Template mapping root tree path to type of created tree node.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:81</div></div>\n+<div class=\"ttc\" id=\"aa01503_html_a406befa892b2d2d3f570ca32401c0b5e\"><div class=\"ttname\"><a href=\"a01503.html#a406befa892b2d2d3f570ca32401c0b5e\">Dune::Functions::CompositePreBasis::size</a></div><div class=\"ttdeci\">size_type size(const SizePrefix &prefix) const</div><div class=\"ttdoc\">Return number of possible values for next position in multi index.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:165</div></div>\n+<div class=\"ttc\" id=\"aa01503_html_a4530439b525f32c80febe548adb3f628\"><div class=\"ttname\"><a href=\"a01503.html#a4530439b525f32c80febe548adb3f628\">Dune::Functions::CompositePreBasis::CompositePreBasis</a></div><div class=\"ttdeci\">CompositePreBasis(SFArgs &&... sfArgs)</div><div class=\"ttdoc\">Constructor for given child pre-basis objects.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:95</div></div>\n+<div class=\"ttc\" id=\"aa01503_html_a5a2dc8e82bcce40460968aa8f97c1ceb\"><div class=\"ttname\"><a href=\"a01503.html#a5a2dc8e82bcce40460968aa8f97c1ceb\">Dune::Functions::CompositePreBasis::dimension</a></div><div class=\"ttdeci\">size_type dimension() const</div><div class=\"ttdoc\">Get the total dimension of the space spanned by this basis.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:219</div></div>\n+<div class=\"ttc\" id=\"aa01503_html_a76f2fc67456c26241e478b632e522b2c\"><div class=\"ttname\"><a href=\"a01503.html#a76f2fc67456c26241e478b632e522b2c\">Dune::Functions::CompositePreBasis::CompositePreBasis</a></div><div class=\"ttdeci\">CompositePreBasis(const GV &gv)</div><div class=\"ttdoc\">Constructor for given GridView.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:115</div></div>\n+<div class=\"ttc\" id=\"aa01503_html_a82feeaac018c244e749e6310332e2a3a\"><div class=\"ttname\"><a href=\"a01503.html#a82feeaac018c244e749e6310332e2a3a\">Dune::Functions::CompositePreBasis::indices</a></div><div class=\"ttdeci\">It indices(const Node &node, It it) const</div><div class=\"ttdoc\">Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:256</div></div>\n+<div class=\"ttc\" id=\"aa01503_html_a907545160aa50ff2214aabada7979d1b\"><div class=\"ttname\"><a href=\"a01503.html#a907545160aa50ff2214aabada7979d1b\">Dune::Functions::CompositePreBasis::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdoc\">Same as size(prefix) with empty prefix.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:158</div></div>\n+<div class=\"ttc\" id=\"aa01503_html_aa04cac815e90325c4ec524e0dc7b22ee\"><div class=\"ttname\"><a href=\"a01503.html#aa04cac815e90325c4ec524e0dc7b22ee\">Dune::Functions::CompositePreBasis::GridView</a></div><div class=\"ttdeci\">typename std::tuple_element_t< 0, SubPreBases >::GridView GridView</div><div class=\"ttdoc\">The grid view that the FE basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:65</div></div>\n+<div class=\"ttc\" id=\"aa01503_html_aa0689626cbb089b66e5932b4a4ed6a6e\"><div class=\"ttname\"><a href=\"a01503.html#aa0689626cbb089b66e5932b4a4ed6a6e\">Dune::Functions::CompositePreBasis::children</a></div><div class=\"ttdeci\">static const std::size_t children</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:74</div></div>\n+<div class=\"ttc\" id=\"aa01503_html_aa3fbd381a090703bb2f0ea3bde8a3031\"><div class=\"ttname\"><a href=\"a01503.html#aa3fbd381a090703bb2f0ea3bde8a3031\">Dune::Functions::CompositePreBasis::SubPreBases</a></div><div class=\"ttdeci\">std::tuple< SPB... > SubPreBases</div><div class=\"ttdoc\">Tuple of child pre-bases.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:58</div></div>\n+<div class=\"ttc\" id=\"aa01503_html_aa7aa72102c6058b4a640d61bbce06732\"><div class=\"ttname\"><a href=\"a01503.html#aa7aa72102c6058b4a640d61bbce06732\">Dune::Functions::CompositePreBasis::makeNode</a></div><div class=\"ttdeci\">Node makeNode() const</div><div class=\"ttdoc\">Create tree node.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:148</div></div>\n+<div class=\"ttc\" id=\"aa01503_html_aa8d56e734a40a838d9f1407caec24a2e\"><div class=\"ttname\"><a href=\"a01503.html#aa8d56e734a40a838d9f1407caec24a2e\">Dune::Functions::CompositePreBasis::initializeIndices</a></div><div class=\"ttdeci\">void initializeIndices()</div><div class=\"ttdoc\">Initialize the global indices.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:124</div></div>\n+<div class=\"ttc\" id=\"aa01503_html_ab02c441bc5d90d3b584df84e606582a7\"><div class=\"ttname\"><a href=\"a01503.html#ab02c441bc5d90d3b584df84e606582a7\">Dune::Functions::CompositePreBasis::SubPreBasis</a></div><div class=\"ttdeci\">std::tuple_element_t< i, SubPreBases > SubPreBasis</div><div class=\"ttdoc\">Export individual child pre-bases by index.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:62</div></div>\n+<div class=\"ttc\" id=\"aa01503_html_ac2d58cfa5b4b07bdfbec63a296c9a5d6\"><div class=\"ttname\"><a href=\"a01503.html#ac2d58cfa5b4b07bdfbec63a296c9a5d6\">Dune::Functions::CompositePreBasis::ChildIndices</a></div><div class=\"ttdeci\">std::make_index_sequence< children > ChildIndices</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:76</div></div>\n+<div class=\"ttc\" id=\"aa01503_html_ac5a69d51a76acbc5edb4fa55c97aa26c\"><div class=\"ttname\"><a href=\"a01503.html#ac5a69d51a76acbc5edb4fa55c97aa26c\">Dune::Functions::CompositePreBasis::update</a></div><div class=\"ttdeci\">void update(const GridView &gv)</div><div class=\"ttdoc\">Update the stored grid view, to be called if the grid has changed.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:138</div></div>\n+<div class=\"ttc\" id=\"aa01503_html_ad57d4c09c40d5a87d3e899a2c2df0f35\"><div class=\"ttname\"><a href=\"a01503.html#ad57d4c09c40d5a87d3e899a2c2df0f35\">Dune::Functions::CompositePreBasis::multiIndexBufferSize</a></div><div class=\"ttdeci\">static constexpr size_type multiIndexBufferSize</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:85</div></div>\n+<div class=\"ttc\" id=\"aa01503_html_aebc2c16cfb6f0e3f2e73ca2e3d028b58\"><div class=\"ttname\"><a href=\"a01503.html#aebc2c16cfb6f0e3f2e73ca2e3d028b58\">Dune::Functions::CompositePreBasis::gridView</a></div><div class=\"ttdeci\">const GridView & gridView() const</div><div class=\"ttdoc\">Obtain the grid view that the basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:132</div></div>\n+<div class=\"ttc\" id=\"aa01503_html_aee4f8b5f159f44d9a0fc61c60c615c19\"><div class=\"ttname\"><a href=\"a01503.html#aee4f8b5f159f44d9a0fc61c60c615c19\">Dune::Functions::CompositePreBasis::minMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type minMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:84</div></div>\n+<div class=\"ttc\" id=\"aa01503_html_affd187f58c7f8a750b11ab48abc3d94e\"><div class=\"ttname\"><a href=\"a01503.html#affd187f58c7f8a750b11ab48abc3d94e\">Dune::Functions::CompositePreBasis::maxMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type maxMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:83</div></div>\n+<div class=\"ttc\" id=\"aa01719_html\"><div class=\"ttname\"><a href=\"a01719.html\">Dune::Functions::CompositeBasisNode</a></div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:219</div></div>\n+<div class=\"ttc\" id=\"aa02876_html\"><div class=\"ttname\"><a href=\"a02876.html\">concepts.hh</a></div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,110 +4,542 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * common\n-multiindex.hh\n+ * functionspacebases\n+compositebasis.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH\n- 4#define DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH\n+ 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH\n+ 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH\n 5\n- 6#include <cstddef>\n- 7#include <array>\n- 8#include <iostream>\n- 9\n- 10#include <dune/common/hash.hh>\n- 11\n- 12\n- 13namespace Dune::Functions {\n- 14\n- 15\n+ 6#include <tuple>\n+ 7#include <utility>\n+ 8\n+ 9#include <dune/common/std/apply.hh>\n+ 10#include <dune/common/hybridutilities.hh>\n+ 11#include <dune/common/reservedvector.hh>\n+ 12#include <dune/common/typeutilities.hh>\n+ 13#include <dune/common/hybridutilities.hh>\n+ 14#include <dune/common/tupleutility.hh>\n+ 15#include <dune/common/tuplevector.hh>\n 16\n- 22template<class size_type, std::size_t n>\n-23class StaticMultiIndex :\n- 24 public std::array<size_type, n>\n- 25{\n- 26public:\n-27 static constexpr std::size_t size() { return n; }\n+ 17#include <dune/functions/common/staticforloop.hh>\n+ 18#include <dune/functions/common/type_traits.hh>\n+ 19#include <dune/functions/common/utility.hh>\n+ 20#include <dune/functions/functionspacebases/basistags.hh>\n+ 21#include <dune/functions/functionspacebases/nodes.hh>\n+ 22#include <dune/functions/functionspacebases/concepts.hh>\n+ 23#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n+ 24\n+ 25\n+ 26namespace Dune {\n+ 27namespace Functions {\n 28\n-29 inline friend std::size_t hash_value(const StaticMultiIndex& v) noexcept {\n- 30 return hash_range(v.begin(), v.end());\n- 31 }\n- 32\n- 33};\n- 34\n- 35\n- 36\n- 46template<class size_type>\n-47class StaticMultiIndex<size_type,1> :\n- 48 public std::array<size_type, 1>\n- 49{\n- 50public:\n- 51\n-52 static constexpr std::size_t size() { return 1; }\n- 53\n-54 operator const size_type& () const {\n- 55 return (*this)[0];\n- 56 }\n- 57\n-58 inline friend std::size_t hash_value(const StaticMultiIndex& v) noexcept {\n- 59 return hash_range(v.begin(), v.end());\n- 60 }\n- 61\n-62 operator size_type& () {\n- 63 return (*this)[0];\n- 64 }\n- 65\n- 66};\n- 67\n- 68\n+ 29/\n+/ *****************************************************************************\n+ 30// This is the reusable part of the composite bases. It contains\n+ 31//\n+ 32// CompositePreBasis\n+ 33//\n+ 34// The pre-basis allows to create the others and is the owner of possible\n+shared\n+ 35// state. These components do _not_ depend on the global basis and local\n+view\n+ 36// and can be used without a global basis.\n+ 37/\n+/ *****************************************************************************\n+ 38\n+ 39\n+ 51template<class IMS, class... SPB>\n+52class CompositePreBasis\n+ 53{\n+ 54 static const bool isBlocked = std::is_same_v<IMS,BasisFactory::\n+BlockedLexicographic> or std::is_same_v<IMS,BasisFactory::BlockedInterleaved>;\n+ 55public:\n+ 56\n+58 using SubPreBases = std::tuple<SPB...>;\n+ 59\n+ 61 template<std::size_t i>\n+62 using SubPreBasis = std::tuple_element_t<i, SubPreBases>;\n+ 63\n+65 using GridView = typename std::tuple_element_t<0, SubPreBases>::GridView;\n+ 66\n+68 using size_type = std::size_t;\n 69\n- 70template<typename Stream, class size_type, std::size_t n>\n-71inline Stream& operator<<(Stream& stream, const\n-StaticMultiIndex<size_type,n>& c) {\n- 72 for (const auto& ci : c)\n- 73 stream << ci << \" \";\n- 74 return stream;\n- 75}\n- 76\n+71 using IndexMergingStrategy = IMS;\n+ 72\n+ 73protected:\n+74 static const std::size_t children = sizeof...(SPB);\n+ 75\n+76 using ChildIndices = std::make_index_sequence<children>;\n 77\n- 78\n- 79} // namespace Dune::Functions\n- 80\n- 81template<class size_type, std::size_t n>\n-82struct std::tuple_size< Dune::Functions::StaticMultiIndex<size_type,n> >\n- 83 : std::integral_constant<std::size_t, n> { };\n- 84\n- 85DUNE_DEFINE_HASH(DUNE_HASH_TEMPLATE_ARGS(typename size_type, std::size_t\n-n),DUNE_HASH_TYPE(Dune::Functions::StaticMultiIndex<size_type,n>))\n+ 78public:\n+ 79\n+81 using Node = CompositeBasisNode<typename SPB::Node...>;\n+ 82\n+83 static constexpr size_type maxMultiIndexSize = std::max({SPB::\n+maxMultiIndexSize...}) + isBlocked;\n+84 static constexpr size_type minMultiIndexSize = std::min({SPB::\n+minMultiIndexSize...}) + isBlocked;\n+85 static constexpr size_type multiIndexBufferSize = std::max({SPB::\n+multiIndexBufferSize...}) + isBlocked;\n 86\n- 87#endif // DUNE_FUNCTIONS_COMMON_MULTIINDEX_HH\n+ 92 template<class... SFArgs,\n+ 93 disableCopyMove<CompositePreBasis, SFArgs...> = 0,\n+ 94 enableIfConstructible<std::tuple<SPB...>, SFArgs...> = 0>\n+95 CompositePreBasis(SFArgs&&... sfArgs) :\n+ 96 subPreBases_(std::forward<SFArgs>(sfArgs)...)\n+ 97 {\n+ 98 Hybrid::forEach(subPreBases_, [&](const auto& subPreBasis){\n+ 99 static_assert(models<Concept::PreBasis<GridView>, std::decay_t<decltype\n+(subPreBasis)>>(), \"Subprebases passed to CompositePreBasis does not model the\n+PreBasis concept.\");\n+ 100 });\n+ 101 }\n+ 102\n+ 109 template<class GV,\n+ 110 std::enable_if_t<std::conjunction_v<\n+ 111 std::bool_constant<(children > 1)>, // Avoid ambiguous constructor if\n+there's only one child\n+ 112 std::is_same<GV, GridView>,\n+ 113 std::is_constructible<SPB, GridView>...\n+ 114 >, int> = 0>\n+115 CompositePreBasis(const GV& gv) :\n+ 116 subPreBases_(SPB(gv)...)\n+ 117 {\n+ 118 Hybrid::forEach(subPreBases_, [&](const auto& subPreBasis){\n+ 119 static_assert(models<Concept::PreBasis<GridView>, std::decay_t<decltype\n+(subPreBasis)>>(), \"Subprebases passed to CompositePreBasis does not model the\n+PreBasis concept.\");\n+ 120 });\n+ 121 }\n+ 122\n+124 void initializeIndices()\n+ 125 {\n+ 126 Hybrid::forEach(ChildIndices(), [&](auto i) {\n+ 127 this->subPreBasis(i).initializeIndices();\n+ 128 });\n+ 129 }\n+ 130\n+132 const GridView& gridView() const\n+ 133 {\n+ 134 return std::get<0>(subPreBases_).gridView();\n+ 135 }\n+ 136\n+138 void update(const GridView& gv)\n+ 139 {\n+ 140 Hybrid::forEach(ChildIndices(), [&](auto i) {\n+ 141 this->subPreBasis(i).update(gv);\n+ 142 });\n+ 143 }\n+ 144\n+148 Node makeNode() const\n+ 149 {\n+ 150 auto node = Node{};\n+ 151 Hybrid::forEach(ChildIndices(), [&](auto i) {\n+ 152 node.setChild(this->subPreBasis(i).makeNode(), i);\n+ 153 });\n+ 154 return node;\n+ 155 }\n+ 156\n+158 size_type size() const\n+ 159 {\n+ 160 return size(Dune::ReservedVector<size_type, multiIndexBufferSize>{});\n+ 161 }\n+ 162\n+ 164 template<class SizePrefix>\n+165 size_type size(const SizePrefix& prefix) const\n+ 166 {\n+ 167 return size(prefix, IndexMergingStrategy{});\n+ 168 }\n+ 169\n+ 170private:\n+ 171\n+ 172 template<class SizePrefix>\n+ 173 size_type size(const SizePrefix& prefix, BasisFactory::\n+BlockedLexicographic) const\n+ 174 {\n+ 175 if (prefix.size() == 0)\n+ 176 return children;\n+ 177\n+ 178 return Hybrid::switchCases(ChildIndices(), prefix[0], [&] (auto i) {\n+ 179 SizePrefix subPrefix;\n+ 180 for(std::size_t i=1; i<prefix.size(); ++i)\n+ 181 subPrefix.push_back(prefix[i]);\n+ 182 return this->subPreBasis(i).size(subPrefix);\n+ 183 }, []() {\n+ 184 return size_type(0);\n+ 185 });\n+ 186 }\n+ 187\n+ 188 template<class SizePrefix>\n+ 189 size_type size(const SizePrefix& prefix, BasisFactory::FlatLexicographic)\n+const\n+ 190 {\n+ 191 size_type result = 0;\n+ 192 if (prefix.size() == 0)\n+ 193 Hybrid::forEach(ChildIndices(), [&](auto i) {\n+ 194 result += this->subPreBasis(i).size();\n+ 195 });\n+ 196 else {\n+ 197 size_type shiftedFirstDigit = prefix[0];\n+ 198 staticFindInRange<0, children>([&](auto i) {\n+ 199 auto firstDigitSize = this->subPreBasis(i).size();\n+ 200 if (shiftedFirstDigit < firstDigitSize)\n+ 201 {\n+ 202 SizePrefix subPrefix;\n+ 203 subPrefix.push_back(shiftedFirstDigit);\n+ 204 for(std::size_t i=1; i<prefix.size(); ++i)\n+ 205 subPrefix.push_back(prefix[i]);\n+ 206 result = this->subPreBasis(i).size(subPrefix);\n+ 207 return true;\n+ 208 }\n+ 209 shiftedFirstDigit -= firstDigitSize;\n+ 210 return false;\n+ 211 });\n+ 212 }\n+ 213 return result;\n+ 214 }\n+ 215\n+ 216public:\n+ 217\n+219 size_type dimension() const\n+ 220 {\n+ 221 size_type r=0;\n+ 222 // Accumulate dimension() for all subprebases\n+ 223 Hybrid::forEach(ChildIndices(), [&](auto i) {\n+ 224 r += this->subPreBasis(i).dimension();\n+ 225 });\n+ 226 return r;\n+ 227 }\n+ 228\n+230 size_type maxNodeSize() const\n+ 231 {\n+ 232 size_type r=0;\n+ 233 // Accumulate maxNodeSize() for all subprebases\n+ 234 Hybrid::forEach(ChildIndices(), [&](auto i) {\n+ 235 r += this->subPreBasis(i).maxNodeSize();\n+ 236 });\n+ 237 return r;\n+ 238 }\n+ 239\n+ 241 template<std::size_t i>\n+242 const SubPreBasis<i>& subPreBasis(Dune::index_constant<i> = {}) const\n+ 243 {\n+ 244 return std::get<i>(subPreBases_);\n+ 245 }\n+ 246\n+ 248 template<std::size_t i>\n+249 SubPreBasis<i>& subPreBasis(Dune::index_constant<i> = {})\n+ 250 {\n+ 251 return std::get<i>(subPreBases_);\n+ 252 }\n+ 253\n+ 255 template<typename It>\n+256 It indices(const Node& node, It it) const\n+ 257 {\n+ 258 return indices(node, it, IndexMergingStrategy{});\n+ 259 }\n+ 260\n+ 261private:\n+ 262\n+ 263 template<typename It>\n+ 264 It indices(const Node& node, It multiIndices, BasisFactory::\n+FlatLexicographic) const\n+ 265 {\n+ 266 size_type firstComponentOffset = 0;\n+ 267 // Loop over all children\n+ 268 Hybrid::forEach(ChildIndices(), [&](auto child){\n+ 269 size_type subTreeSize = node.child(child).size();\n+ 270 // Fill indices for current child into index buffer starting from current\n+ 271 // buffer position and shift first index component of any index for\n+current\n+ 272 // child by suitable offset to get lexicographic indices.\n+ 273 subPreBasis(child).indices(node.child(child), multiIndices);\n+ 274 for (std::size_t i = 0; i<subTreeSize; ++i)\n+ 275 multiIndices[i][0] += firstComponentOffset;\n+ 276 // Increment offset by the size for first index component of the current\n+child\n+ 277 firstComponentOffset += subPreBasis(child).size();\n+ 278 // Increment buffer iterator by the number of indices processed for\n+current child\n+ 279 multiIndices += subTreeSize;\n+ 280 });\n+ 281 return multiIndices;\n+ 282 }\n+ 283\n+ 284 template<class MultiIndex>\n+ 285 static void multiIndexPushFront(MultiIndex& M, size_type M0)\n+ 286 {\n+ 287 M.resize(M.size()+1);\n+ 288 for(std::size_t i=M.size()-1; i>0; --i)\n+ 289 M[i] = M[i-1];\n+ 290 M[0] = M0;\n+ 291 }\n+ 292\n+ 293 template<typename It>\n+ 294 It indices(const Node& node, It multiIndices, BasisFactory::\n+BlockedLexicographic) const\n+ 295 {\n+ 296 // Loop over all children\n+ 297 Hybrid::forEach(ChildIndices(), [&](auto child){\n+ 298 size_type subTreeSize = node.child(child).size();\n+ 299 // Fill indices for current child into index buffer starting from current\n+position\n+ 300 subPreBasis(child).indices(node.child(child), multiIndices);\n+ 301 // Insert child index before first component of all indices of current\n+child.\n+ 302 for (std::size_t i = 0; i<subTreeSize; ++i)\n+ 303 this->multiIndexPushFront(multiIndices[i], child);\n+ 304 // Increment buffer iterator by the number of indices processed for\n+current child\n+ 305 multiIndices += subTreeSize;\n+ 306 });\n+ 307 return multiIndices;\n+ 308 }\n+ 309\n+ 310 std::tuple<SPB...> subPreBases_;\n+ 311};\n+ 312\n+ 313\n+ 314\n+ 315namespace BasisFactory {\n+ 316\n+ 317namespace Imp {\n+ 318\n+ 319template<class IndexMergingStrategy, class... ChildPreBasisFactory>\n+ 320class CompositePreBasisFactory\n+ 321{\n+ 322\n+ 323 template<class GridView, class... ChildPreBasis>\n+ 324 auto makePreBasisFromChildPreBases(const GridView&, ChildPreBasis&&...\n+childPreBasis) const\n+ 325 {\n+ 326 return CompositePreBasis<IndexMergingStrategy, std::\n+decay_t<ChildPreBasis>...>(std::forward<ChildPreBasis>(childPreBasis)...);\n+ 327 }\n+ 328\n+ 329public:\n+ 330\n+ 331 CompositePreBasisFactory(const ChildPreBasisFactory&...\n+childPreBasisFactory) :\n+ 332 childPreBasisFactories_(childPreBasisFactory...)\n+ 333 {}\n+ 334\n+ 335 CompositePreBasisFactory(ChildPreBasisFactory&&... childPreBasisFactory) :\n+ 336 childPreBasisFactories_(std::move(childPreBasisFactory)...)\n+ 337 {}\n+ 338\n+ 339 template<class GridView>\n+ 340 auto operator()(const GridView& gridView) const\n+ 341 {\n+ 342 // Use std::apply to unpack the tuple childPreBasisFactories_\n+ 343 return std::apply([&](const auto&... childPreBasisFactory) {\n+ 344 return this->makePreBasisFromChildPreBases(gridView, childPreBasisFactory\n+(gridView)...);\n+ 345 }, childPreBasisFactories_);\n+ 346 }\n+ 347\n+ 348private:\n+ 349 std::tuple<ChildPreBasisFactory...> childPreBasisFactories_;\n+ 350};\n+ 351\n+ 352} // end namespace BasisFactory::Imp\n+ 353\n+ 354\n+ 355\n+ 366template<\n+ 367 typename... Args,\n+ 368 std::enable_if_t<Concept::isIndexMergingStrategy<typename\n+LastType<Args...>::type>(),int> = 0>\n+369auto composite(Args&&... args)\n+ 370{\n+ 371 // We have to separate the last entry which is the IndexMergingStrategy\n+ 372 // and the preceding ones, which are the ChildPreBasisFactories\n+ 373\n+ 374 using ArgTuple = std::tuple<std::decay_t<Args>...>;\n+ 375\n+ 376 // Compute number of children and index of the IndexMergingStrategy\n+argument\n+ 377 constexpr std::size_t children = Dune::SizeOf<Args...>::value-1;\n+ 378\n+ 379 // Use last type as IndexMergingStrategy\n+ 380 using IndexMergingStrategy = std::tuple_element_t<children, ArgTuple>;\n+ 381\n+ 382 // Index sequence for all but the last entry for partial tuple unpacking\n+ 383 auto childIndices = std::make_index_sequence<children>{};\n+ 384\n+ 385 // Unpack tuple only for those entries related to children\n+ 386 return applyPartial([](auto&&... childPreBasisFactory){\n+ 387 return Imp::CompositePreBasisFactory<IndexMergingStrategy, std::\n+decay_t<decltype(childPreBasisFactory)>...>(std::forward<decltype\n+(childPreBasisFactory)>(childPreBasisFactory)...);\n+ 388 },\n+ 389 std::forward_as_tuple(std::forward<Args>(args)...),\n+ 390 childIndices);\n+ 391}\n+ 392\n+ 404template<\n+ 405 typename... Args,\n+ 406 std::enable_if_t<not Concept::isIndexMergingStrategy<typename\n+LastType<Args...>::type>(),int> = 0>\n+ 407auto composite(Args&&... args)\n+ 408{\n+ 409 return Imp::CompositePreBasisFactory<BasisFactory::BlockedLexicographic,\n+std::decay_t<Args>...>(std::forward<Args>(args)...);\n+ 410}\n+ 411\n+ 412} // end namespace BasisFactory\n+ 413\n+ 414// Backward compatibility\n+ 415namespace BasisBuilder {\n+ 416\n+ 417 using namespace BasisFactory;\n+ 418\n+ 419}\n+ 420\n+ 421\n+ 422\n+ 423} // end namespace Functions\n+ 424} // end namespace Dune\n+ 425\n+ 426\n+ 427#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH\n+type_traits.hh\n+utility.hh\n+staticforloop.hh\n+defaultglobalbasis.hh\n+basistags.hh\n+nodes.hh\n+Dune::Functions::BasisFactory::composite\n+auto composite(Args &&... args)\n+Create a factory builder that can build a CompositePreBasis.\n+Definition: compositebasis.hh:369\n+Dune::Functions::enableIfConstructible\n+typename std::enable_if< std::is_constructible< T, Args... >::value, int >::\n+type enableIfConstructible\n+Helper to constrain forwarding constructors.\n+Definition: type_traits.hh:26\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions\n-Definition: polynomial.hh:11\n-Dune::Functions::operator<<\n-Stream & operator<<(Stream &stream, const StaticMultiIndex< size_type, n > &c)\n-Definition: multiindex.hh:71\n-Dune::Functions::StaticMultiIndex\n-A statically sized MultiIndex type.\n-Definition: multiindex.hh:25\n-Dune::Functions::StaticMultiIndex::size\n-static constexpr std::size_t size()\n-Definition: multiindex.hh:27\n-Dune::Functions::StaticMultiIndex::hash_value\n-friend std::size_t hash_value(const StaticMultiIndex &v) noexcept\n-Definition: multiindex.hh:29\n-Dune::Functions::StaticMultiIndex<_size_type,_1_>::size\n-static constexpr std::size_t size()\n-Definition: multiindex.hh:52\n-Dune::Functions::StaticMultiIndex<_size_type,_1_>::hash_value\n-friend std::size_t hash_value(const StaticMultiIndex &v) noexcept\n-Definition: multiindex.hh:58\n+Dune::Functions::Concept::isIndexMergingStrategy\n+static constexpr bool isIndexMergingStrategy()\n+Definition: basistags.hh:23\n+Dune::Functions::LastType\n+Get last entry of type list.\n+Definition: utility.hh:222\n+Dune::Functions::BasisFactory::IndexMergingStrategy\n+Base class for index merging strategies to simplify detection.\n+Definition: basistags.hh:44\n+Dune::Functions::BasisFactory::FlatLexicographic\n+Lexicographic merging of direct children without blocking.\n+Definition: basistags.hh:80\n+Dune::Functions::BasisFactory::BlockedLexicographic\n+Lexicographic merging of direct children with blocking (i.e. creating one block\n+per direct child).\n+Definition: basistags.hh:148\n+Dune::Functions::CompositePreBasis\n+A pre-basis for composite bases.\n+Definition: compositebasis.hh:53\n+Dune::Functions::CompositePreBasis::subPreBasis\n+SubPreBasis< i > & subPreBasis(Dune::index_constant< i >={})\n+Mutable access to the stored prebasis of the factor in the power space.\n+Definition: compositebasis.hh:249\n+Dune::Functions::CompositePreBasis::IndexMergingStrategy\n+IMS IndexMergingStrategy\n+Strategy used to merge the global indices of the child pre-bases.\n+Definition: compositebasis.hh:71\n+Dune::Functions::CompositePreBasis::maxNodeSize\n+size_type maxNodeSize() const\n+Get the maximal number of DOFs associated to node for any element.\n+Definition: compositebasis.hh:230\n+Dune::Functions::CompositePreBasis::subPreBasis\n+const SubPreBasis< i > & subPreBasis(Dune::index_constant< i >={}) const\n+Const access to the stored prebasis of the factor in the power space.\n+Definition: compositebasis.hh:242\n+Dune::Functions::CompositePreBasis::size_type\n+std::size_t size_type\n+Type used for indices and size information.\n+Definition: compositebasis.hh:68\n+Dune::Functions::CompositePreBasis::Node\n+CompositeBasisNode< typename SPB::Node... > Node\n+Template mapping root tree path to type of created tree node.\n+Definition: compositebasis.hh:81\n+Dune::Functions::CompositePreBasis::size\n+size_type size(const SizePrefix &prefix) const\n+Return number of possible values for next position in multi index.\n+Definition: compositebasis.hh:165\n+Dune::Functions::CompositePreBasis::CompositePreBasis\n+CompositePreBasis(SFArgs &&... sfArgs)\n+Constructor for given child pre-basis objects.\n+Definition: compositebasis.hh:95\n+Dune::Functions::CompositePreBasis::dimension\n+size_type dimension() const\n+Get the total dimension of the space spanned by this basis.\n+Definition: compositebasis.hh:219\n+Dune::Functions::CompositePreBasis::CompositePreBasis\n+CompositePreBasis(const GV &gv)\n+Constructor for given GridView.\n+Definition: compositebasis.hh:115\n+Dune::Functions::CompositePreBasis::indices\n+It indices(const Node &node, It it) const\n+Maps from subtree index set [0..size-1] to a globally unique multi index in\n+global basis.\n+Definition: compositebasis.hh:256\n+Dune::Functions::CompositePreBasis::size\n+size_type size() const\n+Same as size(prefix) with empty prefix.\n+Definition: compositebasis.hh:158\n+Dune::Functions::CompositePreBasis::GridView\n+typename std::tuple_element_t< 0, SubPreBases >::GridView GridView\n+The grid view that the FE basis is defined on.\n+Definition: compositebasis.hh:65\n+Dune::Functions::CompositePreBasis::children\n+static const std::size_t children\n+Definition: compositebasis.hh:74\n+Dune::Functions::CompositePreBasis::SubPreBases\n+std::tuple< SPB... > SubPreBases\n+Tuple of child pre-bases.\n+Definition: compositebasis.hh:58\n+Dune::Functions::CompositePreBasis::makeNode\n+Node makeNode() const\n+Create tree node.\n+Definition: compositebasis.hh:148\n+Dune::Functions::CompositePreBasis::initializeIndices\n+void initializeIndices()\n+Initialize the global indices.\n+Definition: compositebasis.hh:124\n+Dune::Functions::CompositePreBasis::SubPreBasis\n+std::tuple_element_t< i, SubPreBases > SubPreBasis\n+Export individual child pre-bases by index.\n+Definition: compositebasis.hh:62\n+Dune::Functions::CompositePreBasis::ChildIndices\n+std::make_index_sequence< children > ChildIndices\n+Definition: compositebasis.hh:76\n+Dune::Functions::CompositePreBasis::update\n+void update(const GridView &gv)\n+Update the stored grid view, to be called if the grid has changed.\n+Definition: compositebasis.hh:138\n+Dune::Functions::CompositePreBasis::multiIndexBufferSize\n+static constexpr size_type multiIndexBufferSize\n+Definition: compositebasis.hh:85\n+Dune::Functions::CompositePreBasis::gridView\n+const GridView & gridView() const\n+Obtain the grid view that the basis is defined on.\n+Definition: compositebasis.hh:132\n+Dune::Functions::CompositePreBasis::minMultiIndexSize\n+static constexpr size_type minMultiIndexSize\n+Definition: compositebasis.hh:84\n+Dune::Functions::CompositePreBasis::maxMultiIndexSize\n+static constexpr size_type maxMultiIndexSize\n+Definition: compositebasis.hh:83\n+Dune::Functions::CompositeBasisNode\n+Definition: nodes.hh:219\n+concepts.hh\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00104.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00104.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: differentiablefunctionfromcallables.hh File Reference</title>\n+<title>dune-functions: hierarchicallagrangebasis.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,55 +58,64 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> |\n+<a href=\"#typedef-members\">Typedefs</a> |\n <a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">differentiablefunctionfromcallables.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">hierarchicallagrangebasis.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <dune/common/typeutilities.hh></code><br />\n-<code>#include <dune/common/hybridutilities.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00086_source.html\">dune/functions/common/signature.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00068_source.html\">dune/functions/common/differentiablefunction.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00053_source.html\">dune/functions/common/functionconcepts.hh</a>></code><br />\n+<div class=\"textblock\"><code>#include <dune/common/exceptions.hh></code><br />\n+<code>#include <dune/localfunctions/hierarchical/hierarchicalp2.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00179_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00152_source.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></code><br />\n+<code>#include <dune/grid/common/mcmgmapper.hh></code><br />\n </div>\n <p><a href=\"a00104_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01131.html\">Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Wrap a list of callable objects as derivative sequence modelling <a class=\"el\" href=\"a01155.html\">Concept::DifferentiableFunction<Range(Domain), DerivativeTraits></a> <a href=\"a01131.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01623.html\">Dune::Functions::HierarchicalLagrangePreBasis< GV, k, R ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A pre-basis for a hierarchical basis. <a href=\"a01623.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01135.html\">Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F, DF, Derivatives... ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Wrap a list of callable objects as derivative sequence modelling <a class=\"el\" href=\"a01155.html\">Concept::DifferentiableFunction<Range(Domain), DerivativeTraits></a> <a href=\"a01135.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01619.html\">Dune::Functions::HierarchicalLagrangeNode< GV, k, R ></a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a00224\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00224.html\">Dune::Functions::BasisFactory</a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+</table><table class=\"memberdecls\">\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"typedef-members\" name=\"typedef-members\"></a>\n+Typedefs</h2></td></tr>\n+<tr class=\"memitem:gab0bae3d4d425eb9a32bd97c797af7350\"><td class=\"memTemplParams\" colspan=\"2\">template<typename GV , int k, typename R = double> </td></tr>\n+<tr class=\"memitem:gab0bae3d4d425eb9a32bd97c797af7350\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#gab0bae3d4d425eb9a32bd97c797af7350\">Dune::Functions::HierarchicalLagrangeBasis</a> = DefaultGlobalBasis< HierarchicalLagrangePreBasis< GV, k, R > ></td></tr>\n+<tr class=\"memdesc:gab0bae3d4d425eb9a32bd97c797af7350\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Basis of a scalar Hierarchical Lagrange finite element space. <a href=\"a00213.html#gab0bae3d4d425eb9a32bd97c797af7350\">More...</a><br /></td></tr>\n+<tr class=\"separator:gab0bae3d4d425eb9a32bd97c797af7350\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n Functions</h2></td></tr>\n-<tr class=\"memitem:gad3bb1b3fe74c7f750a3980f4c0ce0449\"><td class=\"memTemplParams\" colspan=\"2\">template<class Signature , template< class > class DerivativeTraits, class... F> </td></tr>\n-<tr class=\"memitem:gad3bb1b3fe74c7f750a3980f4c0ce0449\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">DifferentiableFunctionFromCallables< Signature, DerivativeTraits, F... > </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00209.html#gad3bb1b3fe74c7f750a3980f4c0ce0449\">Dune::Functions::makeDifferentiableFunctionFromCallables</a> (const SignatureTag< Signature, DerivativeTraits > &signatureTag, F &&... f)</td></tr>\n-<tr class=\"memdesc:gad3bb1b3fe74c7f750a3980f4c0ce0449\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a <a class=\"el\" href=\"a01095.html\">DifferentiableFunction</a> from callables. <a href=\"a00209.html#gad3bb1b3fe74c7f750a3980f4c0ce0449\">More...</a><br /></td></tr>\n-<tr class=\"separator:gad3bb1b3fe74c7f750a3980f4c0ce0449\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:gae1668779c06b647fd909294cbedf28cf\"><td class=\"memTemplParams\" colspan=\"2\">template<std::size_t k, typename R = double> </td></tr>\n+<tr class=\"memitem:gae1668779c06b647fd909294cbedf28cf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#gae1668779c06b647fd909294cbedf28cf\">Dune::Functions::BasisFactory::hierarchicalLagrange</a> ()</td></tr>\n+<tr class=\"memdesc:gae1668779c06b647fd909294cbedf28cf\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a pre-basis factory that can create a HierarchicalLagrange pre-basis. <a href=\"a00213.html#gae1668779c06b647fd909294cbedf28cf\">More...</a><br /></td></tr>\n+<tr class=\"separator:gae1668779c06b647fd909294cbedf28cf\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,48 +4,44 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * common\n-Classes | Namespaces | Functions\n-differentiablefunctionfromcallables.hh File Reference\n-#include <dune/common/typeutilities.hh>\n-#include <dune/common/hybridutilities.hh>\n-#include <dune/functions/common/signature.hh>\n-#include <dune/functions/common/differentiablefunction.hh>\n-#include <dune/functions/common/functionconcepts.hh>\n+ * functionspacebases\n+Classes | Namespaces | Typedefs | Functions\n+hierarchicallagrangebasis.hh File Reference\n+#include <dune/common/exceptions.hh>\n+#include <dune/localfunctions/hierarchical/hierarchicalp2.hh>\n+#include <dune/functions/functionspacebases/nodes.hh>\n+#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n+#include <dune/grid/common/mcmgmapper.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-class \u00a0Dune::Functions::DifferentiableFunctionFromCallables<_Range(Domain),\n- DerivativeTraits,_F_>\n- Wrap a list of callable objects as derivative sequence modelling\n-\u00a0 Concept::DifferentiableFunction<Range(Domain),_DerivativeTraits>\n- More...\n-\u00a0\n-class \u00a0Dune::Functions::DifferentiableFunctionFromCallables<_Range(Domain),\n- DerivativeTraits,_F,_DF,_Derivatives..._>\n- Wrap a list of callable objects as derivative sequence modelling\n-\u00a0 Concept::DifferentiableFunction<Range(Domain),_DerivativeTraits>\n- More...\n+class \u00a0Dune::Functions::HierarchicalLagrangePreBasis<_GV,_k,_R_>\n+\u00a0 A pre-basis for a hierarchical basis. More...\n+\u00a0\n+class \u00a0Dune::Functions::HierarchicalLagrangeNode<_GV,_k,_R_>\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n+namespace \u00a0Dune::Functions::BasisFactory\n+\u00a0\n+ Typedefs\n+template<typename GV , int k, typename R = double>\n+using\u00a0Dune::Functions::HierarchicalLagrangeBasis = DefaultGlobalBasis<\n+ HierarchicalLagrangePreBasis< GV, k, R > >\n+\u00a0 Basis of a scalar Hierarchical Lagrange finite element space. More...\n+\u00a0\n Functions\n-template<class Signature , template< class > class DerivativeTraits, class...\n-F>\n- DifferentiableFunctionFromCallables< Dune::Functions::\n- Signature, DerivativeTraits, F... >\u00a0makeDifferentiableFunctionFromCallables\n- (const SignatureTag< Signature,\n- DerivativeTraits > &signatureTag, F &&...\n- f)\n-\u00a0 Create a DifferentiableFunction from\n- callables. More...\n+template<std::size_t k, typename R = double>\n+auto\u00a0Dune::Functions::BasisFactory::hierarchicalLagrange ()\n+\u00a0 Create a pre-basis factory that can create a HierarchicalLagrange pre-\n+ basis. More...\n \u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00104_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00104_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: differentiablefunctionfromcallables.hh Source File</title>\n+<title>dune-functions: hierarchicallagrangebasis.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,145 +58,269 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">differentiablefunctionfromcallables.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">hierarchicallagrangebasis.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00104.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span> </div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <dune/common/typeutilities.hh></span></div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <dune/common/hybridutilities.hh></span></div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00086.html\">dune/functions/common/signature.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00068.html\">dune/functions/common/differentiablefunction.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00053.html\">dune/functions/common/functionconcepts.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <dune/common/exceptions.hh></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <dune/localfunctions/hierarchical/hierarchicalp2.hh></span></div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00179.html\">dune/functions/functionspacebases/nodes.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00152.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/grid/common/mcmgmapper.hh></span></div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> <span class=\"keyword\">namespace </span>Functions {</div>\n <div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span> </div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> </div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits, <span class=\"keyword\">class</span>... Callables></div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01127.html\"> 23</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01127.html\">DifferentiableFunctionFromCallables</a>;</div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> </div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> </div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> </div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits, <span class=\"keyword\">class </span>F></div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01131.html\"> 44</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01127.html\">DifferentiableFunctionFromCallables</a><Range(Domain), DerivativeTraits, F></div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span>{</div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01131.html#acffaa1044b3ca19944d0f78fc0ff1ac4\"> 49</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01131.html#acffaa1044b3ca19944d0f78fc0ff1ac4\">Signature</a> = Range(Domain);</div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> </div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01131.html#acce6cff869c703e4f707474228581e03\"> 51</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01131.html#acce6cff869c703e4f707474228581e03\">RawSignature</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_struct\" href=\"a01291.html\">SignatureTraits<Signature>::RawSignature</a>;</div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> </div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01131.html#af3d92b77ee01a494d609225d37eb5259\"> 54</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01131.html#af3d92b77ee01a494d609225d37eb5259\">DerivativeSignature</a> = <span class=\"keyword\">typename</span> DerivativeTraits<RawSignature>::Range(Domain);</div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> </div>\n-<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01131.html#a1213bfc3682b37f706a9f0b1e958cfbe\"> 57</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01095.html\">Derivative</a> = <a class=\"code hl_class\" href=\"a01095.html\">DifferentiableFunction<DerivativeSignature, DerivativeTraits></a>;</div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> </div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> FF, disableCopyMove<DifferentiableFunctionFromCallables, FF> = 0></div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01131.html#a9509c11776197d4e92b8d1f0ad2a10cb\"> 61</a></span> <a class=\"code hl_function\" href=\"a01131.html#a9509c11776197d4e92b8d1f0ad2a10cb\">DifferentiableFunctionFromCallables</a>(FF&& f) :</div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> f_(std::forward<FF>(f))</div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> {}</div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> </div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01131.html#a720d931d3d5ea77435ea74436c6ab489\"> 66</a></span> Range operator() (<span class=\"keyword\">const</span> Domain& x)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> <span class=\"keywordflow\">return</span> f_(x);</div>\n-<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> }</div>\n-<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> </div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00209.html#ga8bec39fece3c312f2030bab07b2e8721\"> 76</a></span> <span class=\"keyword\">friend</span> <a class=\"code hl_class\" href=\"a01095.html\">Derivative</a> <a class=\"code hl_friend\" href=\"a00209.html#ga8bec39fece3c312f2030bab07b2e8721\">derivative</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01127.html\">DifferentiableFunctionFromCallables</a>& t)</div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> {</div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"Derivative not implemented"</span>);</div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> }</div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> </div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span><span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> F f_;</div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span>};</div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> </div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> </div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> </div>\n-<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Range, <span class=\"keyword\">class</span> Domain, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits, <span class=\"keyword\">class </span>F, <span class=\"keyword\">class </span>DF, <span class=\"keyword\">class</span>... Derivatives></div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01135.html\"> 104</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01127.html\">DifferentiableFunctionFromCallables</a><Range(Domain), DerivativeTraits, F, DF, Derivatives...></div>\n-<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span>{</div>\n-<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> </div>\n-<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01135.html#a735498bd93fc1c8f33ae9b13ddb56143\"> 108</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01135.html#a735498bd93fc1c8f33ae9b13ddb56143\">Signature</a> = Range(Domain);</div>\n-<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01135.html#a8a377025a382bd84ae15639b09413719\"> 109</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01135.html#a8a377025a382bd84ae15639b09413719\">RawSignature</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_struct\" href=\"a01291.html\">SignatureTraits<Signature>::RawSignature</a>;</div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01135.html#a28d6edb5a9eb34766c6807a2f10550af\"> 110</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01135.html#a28d6edb5a9eb34766c6807a2f10550af\">DerivativeSignature</a> = <span class=\"keyword\">typename</span> DerivativeTraits<RawSignature>::Range(Domain);</div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> </div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01135.html#a7118c4732100128ccf78b42e5041ad61\"> 112</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01127.html\">Derivative</a> = <a class=\"code hl_class\" href=\"a01127.html\">DifferentiableFunctionFromCallables</a><<a class=\"code hl_typedef\" href=\"a01135.html#a28d6edb5a9eb34766c6807a2f10550af\">DerivativeSignature</a>, DerivativeTraits, DF, Derivatives...>;</div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> </div>\n-<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>FF, <span class=\"keyword\">class </span>DFF, <span class=\"keyword\">class</span>... DDFF></div>\n-<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01135.html#acc46161755dba3e7f6ca473b8e07fa35\"> 121</a></span> <a class=\"code hl_function\" href=\"a01135.html#acc46161755dba3e7f6ca473b8e07fa35\">DifferentiableFunctionFromCallables</a>(FF&& f, DFF&& df, DDFF&&... ddf) :</div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> f_(std::forward<FF>(f)),</div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> df_(std::forward<DFF>(df), std::forward<DDFF>(ddf)...)</div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> {}</div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> </div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01135.html#a20be0e57006d97a66ffb8959f1ed4664\"> 127</a></span> Range operator() (<span class=\"keyword\">const</span> Domain& x)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> <span class=\"keywordflow\">return</span> f_(x);</div>\n-<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> }</div>\n-<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> </div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00209.html#ga8bec39fece3c312f2030bab07b2e8721\"> 137</a></span> <span class=\"keyword\">friend</span> <a class=\"code hl_class\" href=\"a01127.html\">Derivative</a> <a class=\"code hl_friend\" href=\"a00209.html#ga8bec39fece3c312f2030bab07b2e8721\">derivative</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01127.html\">DifferentiableFunctionFromCallables</a>& t)</div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> {</div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> <span class=\"keywordflow\">return</span> t.df_;</div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> }</div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> <span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> <span class=\"comment\">// Implementation for Hierarchical Lagrange Basis</span></div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> <span class=\"comment\">//</span></div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> <span class=\"comment\">// -- only order k=2 is implemented up to now --</span></div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span> <span class=\"comment\">// -- currently only supports simplex grids --</span></div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> <span class=\"comment\">//</span></div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> <span class=\"comment\">// This is the reusable part of the HierarchicalLagrangeBasis. It contains</span></div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span> <span class=\"comment\">//</span></div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> <span class=\"comment\">// HierarchicalLagrangePreBasis</span></div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> <span class=\"comment\">// HierarchicalLagrangeNode</span></div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> <span class=\"comment\">//</span></div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> <span class=\"comment\">// The pre-basis allows to create the others and is the owner of possible shared</span></div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> <span class=\"comment\">// state. These components do _not_ depend on the global basis and can be</span></div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span> <span class=\"comment\">// used without a global basis.</span></div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> <span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> </div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k, <span class=\"keyword\">typename</span> R=<span class=\"keywordtype\">double</span>></div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> <span class=\"keyword\">class </span>HierarchicalLagrangeNode;</div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> </div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k, <span class=\"keyword\">typename</span> R=<span class=\"keywordtype\">double</span>></div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> <span class=\"keyword\">class </span>HierarchicalLagrangePreBasis;</div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> </div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k, <span class=\"keyword\">typename</span> R></div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html\"> 48</a></span> <span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01623.html\">HierarchicalLagrangePreBasis</a></div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> {</div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dim = GV::dimension;</div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> </div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> <span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> </div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#a8d29fa123c51e408af1e34dadf421658\"> 55</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01623.html#a8d29fa123c51e408af1e34dadf421658\">GridView</a> = GV;</div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> </div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#a06b5f579aec6e1058020aca7c20a4a5b\"> 58</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01623.html#a06b5f579aec6e1058020aca7c20a4a5b\">size_type</a> = std::size_t;</div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> </div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#a7ca4c90a4d74ea37014bd3038b3315be\"> 61</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01619.html\">Node</a> = <a class=\"code hl_class\" href=\"a01619.html\">HierarchicalLagrangeNode<GV, k, R></a>;</div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> </div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#ab05fa83b28393a642a783886d3cfb389\"> 63</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01623.html#a06b5f579aec6e1058020aca7c20a4a5b\">size_type</a> <a class=\"code hl_variable\" href=\"a01623.html#ab05fa83b28393a642a783886d3cfb389\">maxMultiIndexSize</a> = 1;</div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#af0c5d0c1e855de8dc56b81360b617c0c\"> 64</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01623.html#a06b5f579aec6e1058020aca7c20a4a5b\">size_type</a> <a class=\"code hl_variable\" href=\"a01623.html#af0c5d0c1e855de8dc56b81360b617c0c\">minMultiIndexSize</a> = 1;</div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#a5d4d6c9d4b3e41e2dca6a5b250bd942e\"> 65</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01623.html#a06b5f579aec6e1058020aca7c20a4a5b\">size_type</a> <a class=\"code hl_variable\" href=\"a01623.html#a5d4d6c9d4b3e41e2dca6a5b250bd942e\">multiIndexBufferSize</a> = 1;</div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> </div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#a97079ff1b8a023dadf424efe80ff38af\"> 71</a></span> <a class=\"code hl_function\" href=\"a01623.html#a97079ff1b8a023dadf424efe80ff38af\">HierarchicalLagrangePreBasis</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01623.html#a8d29fa123c51e408af1e34dadf421658\">GridView</a>& gv) : <a class=\"code hl_variable\" href=\"a01623.html#abfbdf2bbe11f73edd46b001048d09fba\">gridView_</a>(gv) , <a class=\"code hl_variable\" href=\"a01623.html#a7700943c6d6759638af3e5fcb7a63ce4\">mcmgMapper_</a>(gv,p2Layout())</div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> {}</div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> </div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#ac79e037186412bb4d77c8ca2bc6ad494\"> 75</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01623.html#ac79e037186412bb4d77c8ca2bc6ad494\">initializeIndices</a>()</div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> {}</div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> </div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#ab5bd91f85b9195d37879732f0ceeba7e\"> 79</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01623.html#a8d29fa123c51e408af1e34dadf421658\">GridView</a>& <a class=\"code hl_function\" href=\"a01623.html#ab5bd91f85b9195d37879732f0ceeba7e\">gridView</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01623.html#abfbdf2bbe11f73edd46b001048d09fba\">gridView_</a>;</div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> }</div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> </div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#a741666d871c080d4cdb5097bd7286d26\"> 85</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01623.html#a741666d871c080d4cdb5097bd7286d26\">update</a> (<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01623.html#a8d29fa123c51e408af1e34dadf421658\">GridView</a>& gv)</div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> {</div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> <a class=\"code hl_variable\" href=\"a01623.html#abfbdf2bbe11f73edd46b001048d09fba\">gridView_</a> = gv;</div>\n+<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> <a class=\"code hl_variable\" href=\"a01623.html#a7700943c6d6759638af3e5fcb7a63ce4\">mcmgMapper_</a>.update(gv);</div>\n+<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> }</div>\n+<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> </div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#a23698bafe0dfb6a28abd932345714465\"> 94</a></span> <a class=\"code hl_class\" href=\"a01619.html\">Node</a> <a class=\"code hl_function\" href=\"a01623.html#a23698bafe0dfb6a28abd932345714465\">makeNode</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01619.html\">Node</a>{};</div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> }</div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> </div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#ac351887f1be4aa2af48c45f77e9bb4d3\"> 100</a></span> <a class=\"code hl_typedef\" href=\"a01623.html#a06b5f579aec6e1058020aca7c20a4a5b\">size_type</a> <a class=\"code hl_function\" href=\"a01623.html#ac351887f1be4aa2af48c45f77e9bb4d3\">size</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01623.html#a7700943c6d6759638af3e5fcb7a63ce4\">mcmgMapper_</a>.size();</div>\n+<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> }</div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> </div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#ab2091a6b22e8e543b8c1f13e9e5b5397\"> 107</a></span> <a class=\"code hl_typedef\" href=\"a01623.html#a06b5f579aec6e1058020aca7c20a4a5b\">size_type</a> <a class=\"code hl_function\" href=\"a01623.html#ab2091a6b22e8e543b8c1f13e9e5b5397\">size</a>(<span class=\"keyword\">const</span> SizePrefix prefix)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> assert(prefix.size() == 0 || prefix.size() == 1);</div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> <span class=\"keywordflow\">return</span> (prefix.size() == 0) ? <a class=\"code hl_function\" href=\"a01623.html#ac351887f1be4aa2af48c45f77e9bb4d3\">size</a>() : 0;</div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> }</div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> </div>\n+<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#a88651cce49d707a52792467116d66b59\"> 114</a></span> <a class=\"code hl_typedef\" href=\"a01623.html#a06b5f579aec6e1058020aca7c20a4a5b\">size_type</a> <a class=\"code hl_function\" href=\"a01623.html#a88651cce49d707a52792467116d66b59\">dimension</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01623.html#ac351887f1be4aa2af48c45f77e9bb4d3\">size</a>();</div>\n+<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> }</div>\n+<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> </div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#a4a2ade989aac068fb72abe2dd50893cf\"> 123</a></span> <a class=\"code hl_typedef\" href=\"a01623.html#a06b5f579aec6e1058020aca7c20a4a5b\">size_type</a> <a class=\"code hl_function\" href=\"a01623.html#a4a2ade989aac068fb72abe2dd50893cf\">maxNodeSize</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> <span class=\"comment\">// That cast to unsigned int is necessary because GV::dimension is an enum</span></div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> <span class=\"keywordflow\">return</span> Dune::binomial(std::size_t(<a class=\"code hl_function\" href=\"a01623.html#a1e86a08f7b85a90b8e7c34e07eaa1149\">order</a>() + (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>)GV::dimension),std::size_t(<a class=\"code hl_function\" href=\"a01623.html#a1e86a08f7b85a90b8e7c34e07eaa1149\">order</a>()));</div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> }</div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> </div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#ad2404338c629c8ff77315fc5a6a99c88\"> 130</a></span> It <a class=\"code hl_function\" href=\"a01623.html#ad2404338c629c8ff77315fc5a6a99c88\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01619.html\">Node</a>& node, It it)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> <span class=\"keywordflow\">for</span> (<a class=\"code hl_typedef\" href=\"a01623.html#a06b5f579aec6e1058020aca7c20a4a5b\">size_type</a> i = 0, end = node.<a class=\"code hl_function\" href=\"a01619.html#a753c22a75924be3faa2d64f6da96ab7b\">finiteElement</a>().size() ; i < end ; ++it, ++i)</div>\n+<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> {</div>\n+<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> Dune::LocalKey localKey = node.<a class=\"code hl_function\" href=\"a01619.html#a753c22a75924be3faa2d64f6da96ab7b\">finiteElement</a>().localCoefficients().localKey(i);</div>\n+<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& element = node.<a class=\"code hl_function\" href=\"a01619.html#a3999406fb8956a1608e2cb92e8ad54b2\">element</a>();</div>\n+<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> </div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> *it = {{ (<a class=\"code hl_typedef\" href=\"a01623.html#a06b5f579aec6e1058020aca7c20a4a5b\">size_type</a>)(<a class=\"code hl_variable\" href=\"a01623.html#a7700943c6d6759638af3e5fcb7a63ce4\">mcmgMapper_</a>.subIndex(element,localKey.subEntity(),localKey.codim())) }};</div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> }</div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> <span class=\"keywordflow\">return</span> it;</div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> }</div>\n <div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> </div>\n-<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span><span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> F f_;</div>\n-<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> Derivative df_;</div>\n-<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span>};</div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> </div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> </div>\n-<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Signature, <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>> <span class=\"keyword\">class </span>DerivativeTraits, <span class=\"keyword\">class</span>... F></div>\n-<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span>DifferentiableFunctionFromCallables<Signature, DerivativeTraits, F...></div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00209.html#gad3bb1b3fe74c7f750a3980f4c0ce0449\"> 164</a></span> <a class=\"code hl_function\" href=\"a00209.html#gad3bb1b3fe74c7f750a3980f4c0ce0449\">makeDifferentiableFunctionFromCallables</a>(<span class=\"keyword\">const</span> <a class=\"code hl_struct\" href=\"a01295.html\">SignatureTag<Signature, DerivativeTraits></a>& signatureTag, F&&... f)</div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span>{</div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01127.html\">DifferentiableFunctionFromCallables</a><Signature, DerivativeTraits, F...>(f...);</div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span>}</div>\n-<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> </div>\n-<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> </div>\n-<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> </div>\n-<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span>} <span class=\"comment\">// namespace Functions</span></div>\n-<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span>} <span class=\"comment\">// namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> <span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#abfbdf2bbe11f73edd46b001048d09fba\"> 143</a></span> <a class=\"code hl_typedef\" href=\"a01623.html#a8d29fa123c51e408af1e34dadf421658\">GridView</a> <a class=\"code hl_variable\" href=\"a01623.html#abfbdf2bbe11f73edd46b001048d09fba\">gridView_</a>;</div>\n+<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> </div>\n+<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#a1e86a08f7b85a90b8e7c34e07eaa1149\"> 145</a></span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_function\" href=\"a01623.html#a1e86a08f7b85a90b8e7c34e07eaa1149\">order</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> <span class=\"keywordflow\">return</span> 2;</div>\n+<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> }</div>\n+<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> </div>\n+<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#a7700943c6d6759638af3e5fcb7a63ce4\"> 150</a></span> MultipleCodimMultipleGeomTypeMapper<GridView> <a class=\"code hl_variable\" href=\"a01623.html#a7700943c6d6759638af3e5fcb7a63ce4\">mcmgMapper_</a>;</div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> </div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> <span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> <span class=\"keyword\">static</span> <span class=\"keyword\">auto</span> p2Layout()</div>\n+<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> {</div>\n+<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> <span class=\"keywordflow\">return</span> [](Dune::GeometryType type, <span class=\"keywordtype\">int</span> gridDim)</div>\n+<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> {</div>\n+<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> <span class=\"keywordflow\">if</span> (type.isVertex())</div>\n+<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> <span class=\"keywordflow\">return</span> 1;</div>\n+<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> <span class=\"keywordflow\">if</span> (type.isLine())</div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> <span class=\"keywordflow\">return</span> 1;</div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> <span class=\"keywordflow\">if</span> (type.isTriangle())</div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> <span class=\"keywordflow\">return</span> 0;</div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> assert(type.isTetrahedron());</div>\n+<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> <span class=\"keywordflow\">return</span> 0;</div>\n+<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> };</div>\n+<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> }</div>\n+<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> };</div>\n+<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> </div>\n <div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> </div>\n-<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">//DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH</span></div>\n-<div class=\"ttc\" id=\"aa00053_html\"><div class=\"ttname\"><a href=\"a00053.html\">functionconcepts.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00068_html\"><div class=\"ttname\"><a href=\"a00068.html\">differentiablefunction.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00086_html\"><div class=\"ttname\"><a href=\"a00086.html\">signature.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00209_html_ga8bec39fece3c312f2030bab07b2e8721\"><div class=\"ttname\"><a href=\"a00209.html#ga8bec39fece3c312f2030bab07b2e8721\">Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F >::derivative</a></div><div class=\"ttdeci\">friend Derivative derivative(const DifferentiableFunctionFromCallables &t)</div><div class=\"ttdoc\">Get derivative of DifferentiableFunctionFromCallables.</div><div class=\"ttdef\"><b>Definition:</b> differentiablefunctionfromcallables.hh:76</div></div>\n-<div class=\"ttc\" id=\"aa00209_html_gad3bb1b3fe74c7f750a3980f4c0ce0449\"><div class=\"ttname\"><a href=\"a00209.html#gad3bb1b3fe74c7f750a3980f4c0ce0449\">Dune::Functions::makeDifferentiableFunctionFromCallables</a></div><div class=\"ttdeci\">DifferentiableFunctionFromCallables< Signature, DerivativeTraits, F... > makeDifferentiableFunctionFromCallables(const SignatureTag< Signature, DerivativeTraits > &signatureTag, F &&... f)</div><div class=\"ttdoc\">Create a DifferentiableFunction from callables.</div><div class=\"ttdef\"><b>Definition:</b> differentiablefunctionfromcallables.hh:164</div></div>\n+<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> </div>\n+<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k, <span class=\"keyword\">typename</span> R></div>\n+<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01619.html\"> 176</a></span> <span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01619.html\">HierarchicalLagrangeNode</a> :</div>\n+<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01711.html\">LeafBasisNode</a></div>\n+<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> {</div>\n+<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dim = GV::dimension;</div>\n+<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> </div>\n+<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> <span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> </div>\n+<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01619.html#afdc851f725a0f40988027cba8b6561a4\"> 183</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01619.html#afdc851f725a0f40988027cba8b6561a4\">size_type</a> = std::size_t;</div>\n+<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01619.html#afed3c768fa72c180b449d32bc260819f\"> 184</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01619.html#afed3c768fa72c180b449d32bc260819f\">Element</a> = <span class=\"keyword\">typename</span> GV::template Codim<0>::Entity;</div>\n+<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01619.html#a0ce225864d404af00b4777d223873586\"> 185</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01619.html#a0ce225864d404af00b4777d223873586\">FiniteElement</a> = HierarchicalP2LocalFiniteElement<typename GV::ctype,R,dim>;</div>\n+<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> </div>\n+<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01619.html#adf049a268a2918ecbe783de6eb522cf2\"> 187</a></span> <a class=\"code hl_function\" href=\"a01619.html#adf049a268a2918ecbe783de6eb522cf2\">HierarchicalLagrangeNode</a>() :</div>\n+<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> <a class=\"code hl_variable\" href=\"a01619.html#ac8f37af45ccae7918a6b4a969de03bcd\">finiteElement_</a>(),</div>\n+<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> <a class=\"code hl_variable\" href=\"a01619.html#ab29a1c753d80b9e469a15d7444a2ae44\">element_</a>(nullptr)</div>\n+<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span> {}</div>\n+<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> </div>\n+<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01619.html#a3999406fb8956a1608e2cb92e8ad54b2\"> 193</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01619.html#afed3c768fa72c180b449d32bc260819f\">Element</a>& <a class=\"code hl_function\" href=\"a01619.html#a3999406fb8956a1608e2cb92e8ad54b2\">element</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> <span class=\"keywordflow\">return</span> *<a class=\"code hl_variable\" href=\"a01619.html#ab29a1c753d80b9e469a15d7444a2ae44\">element_</a>;</div>\n+<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> }</div>\n+<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> </div>\n+<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01619.html#a753c22a75924be3faa2d64f6da96ab7b\"> 202</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01619.html#a0ce225864d404af00b4777d223873586\">FiniteElement</a>& <a class=\"code hl_function\" href=\"a01619.html#a753c22a75924be3faa2d64f6da96ab7b\">finiteElement</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01619.html#ac8f37af45ccae7918a6b4a969de03bcd\">finiteElement_</a>;</div>\n+<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span> }</div>\n+<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> </div>\n+<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01619.html#a727e4f300ad8002fbe281c8a64b8c3ab\"> 208</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01619.html#a727e4f300ad8002fbe281c8a64b8c3ab\">bind</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01619.html#afed3c768fa72c180b449d32bc260819f\">Element</a>& e)</div>\n+<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> {</div>\n+<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> <a class=\"code hl_variable\" href=\"a01619.html#ab29a1c753d80b9e469a15d7444a2ae44\">element_</a> = &e;</div>\n+<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> </div>\n+<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"> 212</span> <span class=\"keywordflow\">if</span> (e.type() != <a class=\"code hl_variable\" href=\"a01619.html#ac8f37af45ccae7918a6b4a969de03bcd\">finiteElement_</a>.type())</div>\n+<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span> DUNE_THROW(Dune::Exception,</div>\n+<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> <span class=\"stringliteral\">"HierarchicalLagrange-elements do not exist for elements of type "</span> << e.type());</div>\n+<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> </div>\n+<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span> this-><a class=\"code hl_function\" href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\">setSize</a>(<a class=\"code hl_variable\" href=\"a01619.html#ac8f37af45ccae7918a6b4a969de03bcd\">finiteElement_</a>.size());</div>\n+<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> }</div>\n+<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> </div>\n+<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> <span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span> </div>\n+<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01619.html#ad790d69fbc395f76cbe10d2beb6718a8\"> 221</a></span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_function\" href=\"a01619.html#ad790d69fbc395f76cbe10d2beb6718a8\">order</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> <span class=\"keywordflow\">return</span> 2;</div>\n+<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> }</div>\n+<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span> </div>\n+<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01619.html#ac8f37af45ccae7918a6b4a969de03bcd\"> 226</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01619.html#a0ce225864d404af00b4777d223873586\">FiniteElement</a> <a class=\"code hl_variable\" href=\"a01619.html#ac8f37af45ccae7918a6b4a969de03bcd\">finiteElement_</a>;</div>\n+<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01619.html#ab29a1c753d80b9e469a15d7444a2ae44\"> 227</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01619.html#afed3c768fa72c180b449d32bc260819f\">Element</a>* <a class=\"code hl_variable\" href=\"a01619.html#ab29a1c753d80b9e469a15d7444a2ae44\">element_</a>;</div>\n+<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> };</div>\n+<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> </div>\n+<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span> </div>\n+<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span> </div>\n+<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> <span class=\"keyword\">namespace </span>BasisFactory {</div>\n+<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> </div>\n+<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span> <span class=\"keyword\">template</span><std::<span class=\"keywordtype\">size_t</span> k, <span class=\"keyword\">typename</span> R=<span class=\"keywordtype\">double</span>></div>\n+<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#gae1668779c06b647fd909294cbedf28cf\"> 243</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00213.html#gae1668779c06b647fd909294cbedf28cf\">hierarchicalLagrange</a>()</div>\n+<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> {</div>\n+<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> <span class=\"keywordflow\">return</span> [](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridView) {</div>\n+<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01623.html\">HierarchicalLagrangePreBasis</a><std::decay_t<<span class=\"keyword\">decltype</span>(gridView)>, k, R>(gridView);</div>\n+<div class=\"line\"><a id=\"l00247\" name=\"l00247\"></a><span class=\"lineno\"> 247</span> };</div>\n+<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"> 248</span> }</div>\n+<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span> </div>\n+<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span> } <span class=\"comment\">// end namespace BasisFactory</span></div>\n+<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span> </div>\n+<div class=\"line\"><a id=\"l00262\" name=\"l00262\"></a><span class=\"lineno\"> 262</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k, <span class=\"keyword\">typename</span> R=<span class=\"keywordtype\">double</span>></div>\n+<div class=\"line\"><a id=\"l00263\" name=\"l00263\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#gab0bae3d4d425eb9a32bd97c797af7350\"> 263</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01555.html\">HierarchicalLagrangeBasis</a> = <a class=\"code hl_class\" href=\"a01555.html\">DefaultGlobalBasis<HierarchicalLagrangePreBasis<GV, k, R></a> >;</div>\n+<div class=\"line\"><a id=\"l00264\" name=\"l00264\"></a><span class=\"lineno\"> 264</span> </div>\n+<div class=\"line\"><a id=\"l00265\" name=\"l00265\"></a><span class=\"lineno\"> 265</span> } <span class=\"comment\">// end namespace Functions</span></div>\n+<div class=\"line\"><a id=\"l00266\" name=\"l00266\"></a><span class=\"lineno\"> 266</span>} <span class=\"comment\">// end namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00267\" name=\"l00267\"></a><span class=\"lineno\"> 267</span> </div>\n+<div class=\"line\"><a id=\"l00268\" name=\"l00268\"></a><span class=\"lineno\"> 268</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH</span></div>\n+<div class=\"ttc\" id=\"aa00152_html\"><div class=\"ttname\"><a href=\"a00152.html\">defaultglobalbasis.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00179_html\"><div class=\"ttname\"><a href=\"a00179.html\">nodes.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00213_html_gae1668779c06b647fd909294cbedf28cf\"><div class=\"ttname\"><a href=\"a00213.html#gae1668779c06b647fd909294cbedf28cf\">Dune::Functions::BasisFactory::hierarchicalLagrange</a></div><div class=\"ttdeci\">auto hierarchicalLagrange()</div><div class=\"ttdoc\">Create a pre-basis factory that can create a HierarchicalLagrange pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:243</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa01095_html\"><div class=\"ttname\"><a href=\"a01095.html\">Dune::Functions::DifferentiableFunction</a></div><div class=\"ttdef\"><b>Definition:</b> differentiablefunction.hh:29</div></div>\n-<div class=\"ttc\" id=\"aa01127_html\"><div class=\"ttname\"><a href=\"a01127.html\">Dune::Functions::DifferentiableFunctionFromCallables</a></div><div class=\"ttdef\"><b>Definition:</b> differentiablefunctionfromcallables.hh:23</div></div>\n-<div class=\"ttc\" id=\"aa01131_html_a9509c11776197d4e92b8d1f0ad2a10cb\"><div class=\"ttname\"><a href=\"a01131.html#a9509c11776197d4e92b8d1f0ad2a10cb\">Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F >::DifferentiableFunctionFromCallables</a></div><div class=\"ttdeci\">DifferentiableFunctionFromCallables(FF &&f)</div><div class=\"ttdoc\">Constructor copying the given function.</div><div class=\"ttdef\"><b>Definition:</b> differentiablefunctionfromcallables.hh:61</div></div>\n-<div class=\"ttc\" id=\"aa01131_html_acce6cff869c703e4f707474228581e03\"><div class=\"ttname\"><a href=\"a01131.html#acce6cff869c703e4f707474228581e03\">Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F >::RawSignature</a></div><div class=\"ttdeci\">typename SignatureTraits< Signature >::RawSignature RawSignature</div><div class=\"ttdef\"><b>Definition:</b> differentiablefunctionfromcallables.hh:51</div></div>\n-<div class=\"ttc\" id=\"aa01131_html_acffaa1044b3ca19944d0f78fc0ff1ac4\"><div class=\"ttname\"><a href=\"a01131.html#acffaa1044b3ca19944d0f78fc0ff1ac4\">Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F >::Signature</a></div><div class=\"ttdeci\">Range(Domain) Signature</div><div class=\"ttdoc\">Signature of function.</div><div class=\"ttdef\"><b>Definition:</b> differentiablefunctionfromcallables.hh:49</div></div>\n-<div class=\"ttc\" id=\"aa01131_html_af3d92b77ee01a494d609225d37eb5259\"><div class=\"ttname\"><a href=\"a01131.html#af3d92b77ee01a494d609225d37eb5259\">Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F >::DerivativeSignature</a></div><div class=\"ttdeci\">typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature</div><div class=\"ttdoc\">Signature of derivative.</div><div class=\"ttdef\"><b>Definition:</b> differentiablefunctionfromcallables.hh:54</div></div>\n-<div class=\"ttc\" id=\"aa01135_html_a28d6edb5a9eb34766c6807a2f10550af\"><div class=\"ttname\"><a href=\"a01135.html#a28d6edb5a9eb34766c6807a2f10550af\">Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F, DF, Derivatives... >::DerivativeSignature</a></div><div class=\"ttdeci\">typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature</div><div class=\"ttdef\"><b>Definition:</b> differentiablefunctionfromcallables.hh:110</div></div>\n-<div class=\"ttc\" id=\"aa01135_html_a735498bd93fc1c8f33ae9b13ddb56143\"><div class=\"ttname\"><a href=\"a01135.html#a735498bd93fc1c8f33ae9b13ddb56143\">Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F, DF, Derivatives... >::Signature</a></div><div class=\"ttdeci\">Range(Domain) Signature</div><div class=\"ttdef\"><b>Definition:</b> differentiablefunctionfromcallables.hh:108</div></div>\n-<div class=\"ttc\" id=\"aa01135_html_a8a377025a382bd84ae15639b09413719\"><div class=\"ttname\"><a href=\"a01135.html#a8a377025a382bd84ae15639b09413719\">Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F, DF, Derivatives... >::RawSignature</a></div><div class=\"ttdeci\">typename SignatureTraits< Signature >::RawSignature RawSignature</div><div class=\"ttdef\"><b>Definition:</b> differentiablefunctionfromcallables.hh:109</div></div>\n-<div class=\"ttc\" id=\"aa01135_html_acc46161755dba3e7f6ca473b8e07fa35\"><div class=\"ttname\"><a href=\"a01135.html#acc46161755dba3e7f6ca473b8e07fa35\">Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F, DF, Derivatives... >::DifferentiableFunctionFromCallables</a></div><div class=\"ttdeci\">DifferentiableFunctionFromCallables(FF &&f, DFF &&df, DDFF &&... ddf)</div><div class=\"ttdoc\">Constructor copying the given functions.</div><div class=\"ttdef\"><b>Definition:</b> differentiablefunctionfromcallables.hh:121</div></div>\n-<div class=\"ttc\" id=\"aa01291_html\"><div class=\"ttname\"><a href=\"a01291.html\">Dune::Functions::SignatureTraits</a></div><div class=\"ttdoc\">Helper class to deduce the signature of a callable.</div><div class=\"ttdef\"><b>Definition:</b> signature.hh:56</div></div>\n-<div class=\"ttc\" id=\"aa01295_html\"><div class=\"ttname\"><a href=\"a01295.html\">Dune::Functions::SignatureTag</a></div><div class=\"ttdef\"><b>Definition:</b> signature.hh:102</div></div>\n+<div class=\"ttc\" id=\"aa01555_html\"><div class=\"ttname\"><a href=\"a01555.html\">Dune::Functions::DefaultGlobalBasis</a></div><div class=\"ttdoc\">Global basis for given pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:46</div></div>\n+<div class=\"ttc\" id=\"aa01619_html\"><div class=\"ttname\"><a href=\"a01619.html\">Dune::Functions::HierarchicalLagrangeNode</a></div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:178</div></div>\n+<div class=\"ttc\" id=\"aa01619_html_a0ce225864d404af00b4777d223873586\"><div class=\"ttname\"><a href=\"a01619.html#a0ce225864d404af00b4777d223873586\">Dune::Functions::HierarchicalLagrangeNode::FiniteElement</a></div><div class=\"ttdeci\">HierarchicalP2LocalFiniteElement< typename GV::ctype, R, dim > FiniteElement</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:185</div></div>\n+<div class=\"ttc\" id=\"aa01619_html_a3999406fb8956a1608e2cb92e8ad54b2\"><div class=\"ttname\"><a href=\"a01619.html#a3999406fb8956a1608e2cb92e8ad54b2\">Dune::Functions::HierarchicalLagrangeNode::element</a></div><div class=\"ttdeci\">const Element & element() const</div><div class=\"ttdoc\">Return current element, throw if unbound.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:193</div></div>\n+<div class=\"ttc\" id=\"aa01619_html_a727e4f300ad8002fbe281c8a64b8c3ab\"><div class=\"ttname\"><a href=\"a01619.html#a727e4f300ad8002fbe281c8a64b8c3ab\">Dune::Functions::HierarchicalLagrangeNode::bind</a></div><div class=\"ttdeci\">void bind(const Element &e)</div><div class=\"ttdoc\">Bind to element.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:208</div></div>\n+<div class=\"ttc\" id=\"aa01619_html_a753c22a75924be3faa2d64f6da96ab7b\"><div class=\"ttname\"><a href=\"a01619.html#a753c22a75924be3faa2d64f6da96ab7b\">Dune::Functions::HierarchicalLagrangeNode::finiteElement</a></div><div class=\"ttdeci\">const FiniteElement & finiteElement() const</div><div class=\"ttdoc\">Return the LocalFiniteElement for the element we are bound to.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:202</div></div>\n+<div class=\"ttc\" id=\"aa01619_html_ab29a1c753d80b9e469a15d7444a2ae44\"><div class=\"ttname\"><a href=\"a01619.html#ab29a1c753d80b9e469a15d7444a2ae44\">Dune::Functions::HierarchicalLagrangeNode::element_</a></div><div class=\"ttdeci\">const Element * element_</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:227</div></div>\n+<div class=\"ttc\" id=\"aa01619_html_ac8f37af45ccae7918a6b4a969de03bcd\"><div class=\"ttname\"><a href=\"a01619.html#ac8f37af45ccae7918a6b4a969de03bcd\">Dune::Functions::HierarchicalLagrangeNode::finiteElement_</a></div><div class=\"ttdeci\">const FiniteElement finiteElement_</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:226</div></div>\n+<div class=\"ttc\" id=\"aa01619_html_ad790d69fbc395f76cbe10d2beb6718a8\"><div class=\"ttname\"><a href=\"a01619.html#ad790d69fbc395f76cbe10d2beb6718a8\">Dune::Functions::HierarchicalLagrangeNode::order</a></div><div class=\"ttdeci\">unsigned int order() const</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:221</div></div>\n+<div class=\"ttc\" id=\"aa01619_html_adf049a268a2918ecbe783de6eb522cf2\"><div class=\"ttname\"><a href=\"a01619.html#adf049a268a2918ecbe783de6eb522cf2\">Dune::Functions::HierarchicalLagrangeNode::HierarchicalLagrangeNode</a></div><div class=\"ttdeci\">HierarchicalLagrangeNode()</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:187</div></div>\n+<div class=\"ttc\" id=\"aa01619_html_afdc851f725a0f40988027cba8b6561a4\"><div class=\"ttname\"><a href=\"a01619.html#afdc851f725a0f40988027cba8b6561a4\">Dune::Functions::HierarchicalLagrangeNode::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:183</div></div>\n+<div class=\"ttc\" id=\"aa01619_html_afed3c768fa72c180b449d32bc260819f\"><div class=\"ttname\"><a href=\"a01619.html#afed3c768fa72c180b449d32bc260819f\">Dune::Functions::HierarchicalLagrangeNode::Element</a></div><div class=\"ttdeci\">typename GV::template Codim< 0 >::Entity Element</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:184</div></div>\n+<div class=\"ttc\" id=\"aa01623_html\"><div class=\"ttname\"><a href=\"a01623.html\">Dune::Functions::HierarchicalLagrangePreBasis</a></div><div class=\"ttdoc\">A pre-basis for a hierarchical basis.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:49</div></div>\n+<div class=\"ttc\" id=\"aa01623_html_a06b5f579aec6e1058020aca7c20a4a5b\"><div class=\"ttname\"><a href=\"a01623.html#a06b5f579aec6e1058020aca7c20a4a5b\">Dune::Functions::HierarchicalLagrangePreBasis::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdoc\">Type used for indices and size information.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:58</div></div>\n+<div class=\"ttc\" id=\"aa01623_html_a1e86a08f7b85a90b8e7c34e07eaa1149\"><div class=\"ttname\"><a href=\"a01623.html#a1e86a08f7b85a90b8e7c34e07eaa1149\">Dune::Functions::HierarchicalLagrangePreBasis::order</a></div><div class=\"ttdeci\">unsigned int order() const</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:145</div></div>\n+<div class=\"ttc\" id=\"aa01623_html_a23698bafe0dfb6a28abd932345714465\"><div class=\"ttname\"><a href=\"a01623.html#a23698bafe0dfb6a28abd932345714465\">Dune::Functions::HierarchicalLagrangePreBasis::makeNode</a></div><div class=\"ttdeci\">Node makeNode() const</div><div class=\"ttdoc\">Create tree node.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:94</div></div>\n+<div class=\"ttc\" id=\"aa01623_html_a4a2ade989aac068fb72abe2dd50893cf\"><div class=\"ttname\"><a href=\"a01623.html#a4a2ade989aac068fb72abe2dd50893cf\">Dune::Functions::HierarchicalLagrangePreBasis::maxNodeSize</a></div><div class=\"ttdeci\">size_type maxNodeSize() const</div><div class=\"ttdoc\">Get the maximal number of DOFs associated to node for any element.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:123</div></div>\n+<div class=\"ttc\" id=\"aa01623_html_a5d4d6c9d4b3e41e2dca6a5b250bd942e\"><div class=\"ttname\"><a href=\"a01623.html#a5d4d6c9d4b3e41e2dca6a5b250bd942e\">Dune::Functions::HierarchicalLagrangePreBasis::multiIndexBufferSize</a></div><div class=\"ttdeci\">static constexpr size_type multiIndexBufferSize</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:65</div></div>\n+<div class=\"ttc\" id=\"aa01623_html_a741666d871c080d4cdb5097bd7286d26\"><div class=\"ttname\"><a href=\"a01623.html#a741666d871c080d4cdb5097bd7286d26\">Dune::Functions::HierarchicalLagrangePreBasis::update</a></div><div class=\"ttdeci\">void update(const GridView &gv)</div><div class=\"ttdoc\">Update the stored grid view & MultipleCodimMultipleGeomTypeMapper, to be called if the grid has chang...</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:85</div></div>\n+<div class=\"ttc\" id=\"aa01623_html_a7700943c6d6759638af3e5fcb7a63ce4\"><div class=\"ttname\"><a href=\"a01623.html#a7700943c6d6759638af3e5fcb7a63ce4\">Dune::Functions::HierarchicalLagrangePreBasis::mcmgMapper_</a></div><div class=\"ttdeci\">MultipleCodimMultipleGeomTypeMapper< GridView > mcmgMapper_</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:150</div></div>\n+<div class=\"ttc\" id=\"aa01623_html_a88651cce49d707a52792467116d66b59\"><div class=\"ttname\"><a href=\"a01623.html#a88651cce49d707a52792467116d66b59\">Dune::Functions::HierarchicalLagrangePreBasis::dimension</a></div><div class=\"ttdeci\">size_type dimension() const</div><div class=\"ttdoc\">Get the total dimension of the space spanned by this basis.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:114</div></div>\n+<div class=\"ttc\" id=\"aa01623_html_a8d29fa123c51e408af1e34dadf421658\"><div class=\"ttname\"><a href=\"a01623.html#a8d29fa123c51e408af1e34dadf421658\">Dune::Functions::HierarchicalLagrangePreBasis::GridView</a></div><div class=\"ttdeci\">GV GridView</div><div class=\"ttdoc\">The grid view that the FE basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:55</div></div>\n+<div class=\"ttc\" id=\"aa01623_html_a97079ff1b8a023dadf424efe80ff38af\"><div class=\"ttname\"><a href=\"a01623.html#a97079ff1b8a023dadf424efe80ff38af\">Dune::Functions::HierarchicalLagrangePreBasis::HierarchicalLagrangePreBasis</a></div><div class=\"ttdeci\">HierarchicalLagrangePreBasis(const GridView &gv)</div><div class=\"ttdoc\">Constructor for a given grid view object with layout for second order.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:71</div></div>\n+<div class=\"ttc\" id=\"aa01623_html_ab05fa83b28393a642a783886d3cfb389\"><div class=\"ttname\"><a href=\"a01623.html#ab05fa83b28393a642a783886d3cfb389\">Dune::Functions::HierarchicalLagrangePreBasis::maxMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type maxMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:63</div></div>\n+<div class=\"ttc\" id=\"aa01623_html_ab2091a6b22e8e543b8c1f13e9e5b5397\"><div class=\"ttname\"><a href=\"a01623.html#ab2091a6b22e8e543b8c1f13e9e5b5397\">Dune::Functions::HierarchicalLagrangePreBasis::size</a></div><div class=\"ttdeci\">size_type size(const SizePrefix prefix) const</div><div class=\"ttdoc\">Return number of possible values for next position in multi index.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:107</div></div>\n+<div class=\"ttc\" id=\"aa01623_html_ab5bd91f85b9195d37879732f0ceeba7e\"><div class=\"ttname\"><a href=\"a01623.html#ab5bd91f85b9195d37879732f0ceeba7e\">Dune::Functions::HierarchicalLagrangePreBasis::gridView</a></div><div class=\"ttdeci\">const GridView & gridView() const</div><div class=\"ttdoc\">Obtain the grid view that the basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:79</div></div>\n+<div class=\"ttc\" id=\"aa01623_html_abfbdf2bbe11f73edd46b001048d09fba\"><div class=\"ttname\"><a href=\"a01623.html#abfbdf2bbe11f73edd46b001048d09fba\">Dune::Functions::HierarchicalLagrangePreBasis::gridView_</a></div><div class=\"ttdeci\">GridView gridView_</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:143</div></div>\n+<div class=\"ttc\" id=\"aa01623_html_ac351887f1be4aa2af48c45f77e9bb4d3\"><div class=\"ttname\"><a href=\"a01623.html#ac351887f1be4aa2af48c45f77e9bb4d3\">Dune::Functions::HierarchicalLagrangePreBasis::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdoc\">Same as size(prefix) with empty prefix.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:100</div></div>\n+<div class=\"ttc\" id=\"aa01623_html_ac79e037186412bb4d77c8ca2bc6ad494\"><div class=\"ttname\"><a href=\"a01623.html#ac79e037186412bb4d77c8ca2bc6ad494\">Dune::Functions::HierarchicalLagrangePreBasis::initializeIndices</a></div><div class=\"ttdeci\">void initializeIndices()</div><div class=\"ttdoc\">Initialize the global indices.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:75</div></div>\n+<div class=\"ttc\" id=\"aa01623_html_ad2404338c629c8ff77315fc5a6a99c88\"><div class=\"ttname\"><a href=\"a01623.html#ad2404338c629c8ff77315fc5a6a99c88\">Dune::Functions::HierarchicalLagrangePreBasis::indices</a></div><div class=\"ttdeci\">It indices(const Node &node, It it) const</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:130</div></div>\n+<div class=\"ttc\" id=\"aa01623_html_af0c5d0c1e855de8dc56b81360b617c0c\"><div class=\"ttname\"><a href=\"a01623.html#af0c5d0c1e855de8dc56b81360b617c0c\">Dune::Functions::HierarchicalLagrangePreBasis::minMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type minMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:64</div></div>\n+<div class=\"ttc\" id=\"aa01707_html_ae93815e5c4012f7be5d11786f40d267a\"><div class=\"ttname\"><a href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\">Dune::Functions::BasisNodeMixin::setSize</a></div><div class=\"ttdeci\">void setSize(const size_type size)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:164</div></div>\n+<div class=\"ttc\" id=\"aa01711_html\"><div class=\"ttname\"><a href=\"a01711.html\">Dune::Functions::LeafBasisNode</a></div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:186</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,192 +4,356 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * common\n-differentiablefunctionfromcallables.hh\n+ * functionspacebases\n+hierarchicallagrangebasis.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH\n- 4#define DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH\n+ 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH\n+ 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH\n 5\n- 6\n- 7#include <dune/common/typeutilities.hh>\n- 8#include <dune/common/hybridutilities.hh>\n- 9\n- 10#include <dune/functions/common/signature.hh>\n- 11\n- 12#include <dune/functions/common/differentiablefunction.hh>\n- 13#include <dune/functions/common/functionconcepts.hh>\n- 14\n+ 6#include <dune/common/exceptions.hh>\n+ 7#include <dune/localfunctions/hierarchical/hierarchicalp2.hh>\n+ 8\n+ 9#include <dune/functions/functionspacebases/nodes.hh>\n+ 10#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n+ 11#include <dune/grid/common/mcmgmapper.hh>\n+ 12\n+ 13namespace Dune {\n+ 14 namespace Functions {\n 15\n- 16\n- 17namespace Dune {\n- 18namespace Functions {\n- 19\n- 20\n- 21\n- 22template<class Signature, template<class> class DerivativeTraits, class...\n-Callables>\n-23class DifferentiableFunctionFromCallables;\n- 24\n- 25\n- 26\n- 43template<class Range, class Domain, template<class> class DerivativeTraits,\n-class F>\n-44class DifferentiableFunctionFromCallables<Range(Domain), DerivativeTraits, F>\n- 45{\n- 46public:\n- 47\n-49 using Signature = Range(Domain);\n- 50\n-51 using RawSignature = typename SignatureTraits<Signature>::RawSignature;\n- 52\n-54 using DerivativeSignature = typename DerivativeTraits<RawSignature>::Range\n-(Domain);\n- 55\n-57 using Derivative = DifferentiableFunction<DerivativeSignature,\n-DerivativeTraits>;\n- 58\n- 60 template<class FF, disableCopyMove<DifferentiableFunctionFromCallables, FF>\n-= 0>\n-61 DifferentiableFunctionFromCallables(FF&& f) :\n- 62 f_(std::forward<FF>(f))\n- 63 {}\n- 64\n-66 Range operator() (const Domain& x) const\n- 67 {\n- 68 return f_(x);\n- 69 }\n- 70\n-76 friend Derivative derivative(const DifferentiableFunctionFromCallables& t)\n- 77 {\n- 78 DUNE_THROW(Dune::NotImplemented, \"Derivative not implemented\");\n- 79 }\n- 80\n- 81private:\n- 82 F f_;\n- 83};\n- 84\n- 85\n- 86\n- 103template<class Range, class Domain, template<class> class DerivativeTraits,\n-class F, class DF, class... Derivatives>\n-104class DifferentiableFunctionFromCallables<Range(Domain), DerivativeTraits,\n-F, DF, Derivatives...>\n- 105{\n- 106public:\n- 107\n-108 using Signature = Range(Domain);\n-109 using RawSignature = typename SignatureTraits<Signature>::RawSignature;\n-110 using DerivativeSignature = typename DerivativeTraits<RawSignature>::Range\n-(Domain);\n- 111\n-112 using Derivative = DifferentiableFunctionFromCallables<DerivativeSignature,\n-DerivativeTraits, DF, Derivatives...>;\n- 113\n- 120 template<class FF, class DFF, class... DDFF>\n-121 DifferentiableFunctionFromCallables(FF&& f, DFF&& df, DDFF&&... ddf) :\n- 122 f_(std::forward<FF>(f)),\n- 123 df_(std::forward<DFF>(df), std::forward<DDFF>(ddf)...)\n- 124 {}\n- 125\n-127 Range operator() (const Domain& x) const\n- 128 {\n- 129 return f_(x);\n- 130 }\n- 131\n-137 friend Derivative derivative(const DifferentiableFunctionFromCallables& t)\n- 138 {\n- 139 return t.df_;\n+ 16 /\n+/ *****************************************************************************\n+ 17 // Implementation for Hierarchical Lagrange Basis\n+ 18 //\n+ 19 // -- only order k=2 is implemented up to now --\n+ 20 // -- currently only supports simplex grids --\n+ 21 //\n+ 22 // This is the reusable part of the HierarchicalLagrangeBasis. It contains\n+ 23 //\n+ 24 // HierarchicalLagrangePreBasis\n+ 25 // HierarchicalLagrangeNode\n+ 26 //\n+ 27 // The pre-basis allows to create the others and is the owner of possible\n+shared\n+ 28 // state. These components do _not_ depend on the global basis and can be\n+ 29 // used without a global basis.\n+ 30 /\n+/ *****************************************************************************\n+ 31\n+ 32 template<typename GV, int k, typename R=double>\n+ 33 class HierarchicalLagrangeNode;\n+ 34\n+ 35 template<typename GV, int k, typename R=double>\n+ 36 class HierarchicalLagrangePreBasis;\n+ 37\n+ 47 template<typename GV, int k, typename R>\n+48 class HierarchicalLagrangePreBasis\n+ 49 {\n+ 50 static const int dim = GV::dimension;\n+ 51\n+ 52 public:\n+ 53\n+55 using GridView = GV;\n+ 56\n+58 using size_type = std::size_t;\n+ 59\n+61 using Node = HierarchicalLagrangeNode<GV,_k,_R>;\n+ 62\n+63 static constexpr size_type maxMultiIndexSize = 1;\n+64 static constexpr size_type minMultiIndexSize = 1;\n+65 static constexpr size_type multiIndexBufferSize = 1;\n+ 66\n+71 HierarchicalLagrangePreBasis(const GridView& gv) : gridView_(gv) ,\n+mcmgMapper_(gv,p2Layout())\n+ 72 {}\n+ 73\n+75 void initializeIndices()\n+ 76 {}\n+ 77\n+79 const GridView& gridView() const\n+ 80 {\n+ 81 return gridView_;\n+ 82 }\n+ 83\n+85 void update (const GridView& gv)\n+ 86 {\n+ 87 gridView_ = gv;\n+ 88 mcmgMapper_.update(gv);\n+ 89 }\n+ 90\n+94 Node makeNode() const\n+ 95 {\n+ 96 return Node{};\n+ 97 }\n+ 98\n+100 size_type size() const\n+ 101 {\n+ 102 return mcmgMapper_.size();\n+ 103 }\n+ 104\n+ 106 template<class SizePrefix>\n+107 size_type size(const SizePrefix prefix) const\n+ 108 {\n+ 109 assert(prefix.size() == 0 || prefix.size() == 1);\n+ 110 return (prefix.size() == 0) ? size() : 0;\n+ 111 }\n+ 112\n+114 size_type dimension() const\n+ 115 {\n+ 116 return size();\n+ 117 }\n+ 118\n+123 size_type maxNodeSize() const\n+ 124 {\n+ 125 // That cast to unsigned int is necessary because GV::dimension is an enum\n+ 126 return Dune::binomial(std::size_t(order() + (unsigned int)GV::\n+dimension),std::size_t(order()));\n+ 127 }\n+ 128\n+ 129 template<typename It>\n+130 It indices(const Node& node, It it) const\n+ 131 {\n+ 132 for (size_type i = 0, end = node.finiteElement().size() ; i < end ; ++it,\n+++i)\n+ 133 {\n+ 134 Dune::LocalKey localKey = node.finiteElement().localCoefficients\n+().localKey(i);\n+ 135 const auto& element = node.element();\n+ 136\n+ 137 *it = {{ (size_type)(mcmgMapper_.subIndex(element,localKey.subEntity\n+(),localKey.codim())) }};\n+ 138 }\n+ 139 return it;\n 140 }\n 141\n- 142private:\n- 143 F f_;\n- 144 Derivative df_;\n- 145};\n- 146\n- 147\n- 162template<class Signature, template<class> class DerivativeTraits, class...\n-F>\n- 163DifferentiableFunctionFromCallables<Signature, DerivativeTraits, F...>\n-164 makeDifferentiableFunctionFromCallables(const SignatureTag<Signature,\n-DerivativeTraits>& signatureTag, F&&... f)\n- 165{\n- 166 return DifferentiableFunctionFromCallables<Signature, DerivativeTraits,\n-F...>(f...);\n- 167}\n- 168\n- 169\n- 170\n- 171} // namespace Functions\n- 172} // namespace Dune\n+ 142 protected:\n+143 GridView gridView_;\n+ 144\n+145 unsigned int order() const\n+ 146 {\n+ 147 return 2;\n+ 148 }\n+ 149\n+150 MultipleCodimMultipleGeomTypeMapper<GridView> mcmgMapper_;\n+ 151\n+ 152 private:\n+ 157 static auto p2Layout()\n+ 158 {\n+ 159 return [](Dune::GeometryType type, int gridDim)\n+ 160 {\n+ 161 if (type.isVertex())\n+ 162 return 1;\n+ 163 if (type.isLine())\n+ 164 return 1;\n+ 165 if (type.isTriangle())\n+ 166 return 0;\n+ 167 assert(type.isTetrahedron());\n+ 168 return 0;\n+ 169 };\n+ 170 }\n+ 171 };\n+ 172\n 173\n- 174#endif //DUNE_FUNCTIONS_COMMON_DIFFEREENTIONABEFUNCTIONFROMCALLABLES_HH\n-functionconcepts.hh\n-differentiablefunction.hh\n-signature.hh\n-Dune::Functions::DifferentiableFunctionFromCallables<_Range(Domain),\n-DerivativeTraits,_F_>::derivative\n-friend Derivative derivative(const DifferentiableFunctionFromCallables &t)\n-Get derivative of DifferentiableFunctionFromCallables.\n-Definition: differentiablefunctionfromcallables.hh:76\n-Dune::Functions::makeDifferentiableFunctionFromCallables\n-DifferentiableFunctionFromCallables< Signature, DerivativeTraits, F... >\n-makeDifferentiableFunctionFromCallables(const SignatureTag< Signature,\n-DerivativeTraits > &signatureTag, F &&... f)\n-Create a DifferentiableFunction from callables.\n-Definition: differentiablefunctionfromcallables.hh:164\n+ 174\n+ 175 template<typename GV, int k, typename R>\n+176 class HierarchicalLagrangeNode :\n+ 177 public LeafBasisNode\n+ 178 {\n+ 179 static const int dim = GV::dimension;\n+ 180\n+ 181 public:\n+ 182\n+183 using size_type = std::size_t;\n+184 using Element = typename GV::template Codim<0>::Entity;\n+185 using FiniteElement = HierarchicalP2LocalFiniteElement<typename GV::\n+ctype,R,dim>;\n+ 186\n+187 HierarchicalLagrangeNode() :\n+ 188 finiteElement_(),\n+ 189 element_(nullptr)\n+ 190 {}\n+ 191\n+193 const Element& element() const\n+ 194 {\n+ 195 return *element_;\n+ 196 }\n+ 197\n+202 const FiniteElement& finiteElement() const\n+ 203 {\n+ 204 return finiteElement_;\n+ 205 }\n+ 206\n+208 void bind(const Element& e)\n+ 209 {\n+ 210 element_ = &e;\n+ 211\n+ 212 if (e.type() != finiteElement_.type())\n+ 213 DUNE_THROW(Dune::Exception,\n+ 214 \"HierarchicalLagrange-elements do not exist for elements of type \" <<\n+e.type());\n+ 215\n+ 216 this->setSize(finiteElement_.size());\n+ 217 }\n+ 218\n+ 219 protected:\n+ 220\n+221 unsigned int order() const\n+ 222 {\n+ 223 return 2;\n+ 224 }\n+ 225\n+226 const FiniteElement finiteElement_;\n+227 const Element* element_;\n+ 228 };\n+ 229\n+ 230\n+ 231\n+ 232 namespace BasisFactory {\n+ 233\n+ 242 template<std::size_t k, typename R=double>\n+243 auto hierarchicalLagrange()\n+ 244 {\n+ 245 return [](const auto& gridView) {\n+ 246 return HierarchicalLagrangePreBasis<std::decay_t<decltype(gridView)>, k,\n+R>(gridView);\n+ 247 };\n+ 248 }\n+ 249\n+ 250 } // end namespace BasisFactory\n+ 251\n+ 262 template<typename GV, int k, typename R=double>\n+263 using HierarchicalLagrangeBasis =\n+DefaultGlobalBasis<HierarchicalLagrangePreBasis<GV,_k,_R> >;\n+ 264\n+ 265 } // end namespace Functions\n+ 266} // end namespace Dune\n+ 267\n+ 268#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH\n+defaultglobalbasis.hh\n+nodes.hh\n+Dune::Functions::BasisFactory::hierarchicalLagrange\n+auto hierarchicalLagrange()\n+Create a pre-basis factory that can create a HierarchicalLagrange pre-basis.\n+Definition: hierarchicallagrangebasis.hh:243\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::DifferentiableFunction\n-Definition: differentiablefunction.hh:29\n-Dune::Functions::DifferentiableFunctionFromCallables\n-Definition: differentiablefunctionfromcallables.hh:23\n-Dune::Functions::DifferentiableFunctionFromCallables<_Range(Domain),\n-DerivativeTraits,_F_>::DifferentiableFunctionFromCallables\n-DifferentiableFunctionFromCallables(FF &&f)\n-Constructor copying the given function.\n-Definition: differentiablefunctionfromcallables.hh:61\n-Dune::Functions::DifferentiableFunctionFromCallables<_Range(Domain),\n-DerivativeTraits,_F_>::RawSignature\n-typename SignatureTraits< Signature >::RawSignature RawSignature\n-Definition: differentiablefunctionfromcallables.hh:51\n-Dune::Functions::DifferentiableFunctionFromCallables<_Range(Domain),\n-DerivativeTraits,_F_>::Signature\n-Range(Domain) Signature\n-Signature of function.\n-Definition: differentiablefunctionfromcallables.hh:49\n-Dune::Functions::DifferentiableFunctionFromCallables<_Range(Domain),\n-DerivativeTraits,_F_>::DerivativeSignature\n-typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature\n-Signature of derivative.\n-Definition: differentiablefunctionfromcallables.hh:54\n-Dune::Functions::DifferentiableFunctionFromCallables<_Range(Domain),\n-DerivativeTraits,_F,_DF,_Derivatives..._>::DerivativeSignature\n-typename DerivativeTraits< RawSignature >::Range(Domain) DerivativeSignature\n-Definition: differentiablefunctionfromcallables.hh:110\n-Dune::Functions::DifferentiableFunctionFromCallables<_Range(Domain),\n-DerivativeTraits,_F,_DF,_Derivatives..._>::Signature\n-Range(Domain) Signature\n-Definition: differentiablefunctionfromcallables.hh:108\n-Dune::Functions::DifferentiableFunctionFromCallables<_Range(Domain),\n-DerivativeTraits,_F,_DF,_Derivatives..._>::RawSignature\n-typename SignatureTraits< Signature >::RawSignature RawSignature\n-Definition: differentiablefunctionfromcallables.hh:109\n-Dune::Functions::DifferentiableFunctionFromCallables<_Range(Domain),\n-DerivativeTraits,_F,_DF,_Derivatives..._>::DifferentiableFunctionFromCallables\n-DifferentiableFunctionFromCallables(FF &&f, DFF &&df, DDFF &&... ddf)\n-Constructor copying the given functions.\n-Definition: differentiablefunctionfromcallables.hh:121\n-Dune::Functions::SignatureTraits\n-Helper class to deduce the signature of a callable.\n-Definition: signature.hh:56\n-Dune::Functions::SignatureTag\n-Definition: signature.hh:102\n+Dune::Functions::DefaultGlobalBasis\n+Global basis for given pre-basis.\n+Definition: defaultglobalbasis.hh:46\n+Dune::Functions::HierarchicalLagrangeNode\n+Definition: hierarchicallagrangebasis.hh:178\n+Dune::Functions::HierarchicalLagrangeNode::FiniteElement\n+HierarchicalP2LocalFiniteElement< typename GV::ctype, R, dim > FiniteElement\n+Definition: hierarchicallagrangebasis.hh:185\n+Dune::Functions::HierarchicalLagrangeNode::element\n+const Element & element() const\n+Return current element, throw if unbound.\n+Definition: hierarchicallagrangebasis.hh:193\n+Dune::Functions::HierarchicalLagrangeNode::bind\n+void bind(const Element &e)\n+Bind to element.\n+Definition: hierarchicallagrangebasis.hh:208\n+Dune::Functions::HierarchicalLagrangeNode::finiteElement\n+const FiniteElement & finiteElement() const\n+Return the LocalFiniteElement for the element we are bound to.\n+Definition: hierarchicallagrangebasis.hh:202\n+Dune::Functions::HierarchicalLagrangeNode::element_\n+const Element * element_\n+Definition: hierarchicallagrangebasis.hh:227\n+Dune::Functions::HierarchicalLagrangeNode::finiteElement_\n+const FiniteElement finiteElement_\n+Definition: hierarchicallagrangebasis.hh:226\n+Dune::Functions::HierarchicalLagrangeNode::order\n+unsigned int order() const\n+Definition: hierarchicallagrangebasis.hh:221\n+Dune::Functions::HierarchicalLagrangeNode::HierarchicalLagrangeNode\n+HierarchicalLagrangeNode()\n+Definition: hierarchicallagrangebasis.hh:187\n+Dune::Functions::HierarchicalLagrangeNode::size_type\n+std::size_t size_type\n+Definition: hierarchicallagrangebasis.hh:183\n+Dune::Functions::HierarchicalLagrangeNode::Element\n+typename GV::template Codim< 0 >::Entity Element\n+Definition: hierarchicallagrangebasis.hh:184\n+Dune::Functions::HierarchicalLagrangePreBasis\n+A pre-basis for a hierarchical basis.\n+Definition: hierarchicallagrangebasis.hh:49\n+Dune::Functions::HierarchicalLagrangePreBasis::size_type\n+std::size_t size_type\n+Type used for indices and size information.\n+Definition: hierarchicallagrangebasis.hh:58\n+Dune::Functions::HierarchicalLagrangePreBasis::order\n+unsigned int order() const\n+Definition: hierarchicallagrangebasis.hh:145\n+Dune::Functions::HierarchicalLagrangePreBasis::makeNode\n+Node makeNode() const\n+Create tree node.\n+Definition: hierarchicallagrangebasis.hh:94\n+Dune::Functions::HierarchicalLagrangePreBasis::maxNodeSize\n+size_type maxNodeSize() const\n+Get the maximal number of DOFs associated to node for any element.\n+Definition: hierarchicallagrangebasis.hh:123\n+Dune::Functions::HierarchicalLagrangePreBasis::multiIndexBufferSize\n+static constexpr size_type multiIndexBufferSize\n+Definition: hierarchicallagrangebasis.hh:65\n+Dune::Functions::HierarchicalLagrangePreBasis::update\n+void update(const GridView &gv)\n+Update the stored grid view & MultipleCodimMultipleGeomTypeMapper, to be called\n+if the grid has chang...\n+Definition: hierarchicallagrangebasis.hh:85\n+Dune::Functions::HierarchicalLagrangePreBasis::mcmgMapper_\n+MultipleCodimMultipleGeomTypeMapper< GridView > mcmgMapper_\n+Definition: hierarchicallagrangebasis.hh:150\n+Dune::Functions::HierarchicalLagrangePreBasis::dimension\n+size_type dimension() const\n+Get the total dimension of the space spanned by this basis.\n+Definition: hierarchicallagrangebasis.hh:114\n+Dune::Functions::HierarchicalLagrangePreBasis::GridView\n+GV GridView\n+The grid view that the FE basis is defined on.\n+Definition: hierarchicallagrangebasis.hh:55\n+Dune::Functions::HierarchicalLagrangePreBasis::HierarchicalLagrangePreBasis\n+HierarchicalLagrangePreBasis(const GridView &gv)\n+Constructor for a given grid view object with layout for second order.\n+Definition: hierarchicallagrangebasis.hh:71\n+Dune::Functions::HierarchicalLagrangePreBasis::maxMultiIndexSize\n+static constexpr size_type maxMultiIndexSize\n+Definition: hierarchicallagrangebasis.hh:63\n+Dune::Functions::HierarchicalLagrangePreBasis::size\n+size_type size(const SizePrefix prefix) const\n+Return number of possible values for next position in multi index.\n+Definition: hierarchicallagrangebasis.hh:107\n+Dune::Functions::HierarchicalLagrangePreBasis::gridView\n+const GridView & gridView() const\n+Obtain the grid view that the basis is defined on.\n+Definition: hierarchicallagrangebasis.hh:79\n+Dune::Functions::HierarchicalLagrangePreBasis::gridView_\n+GridView gridView_\n+Definition: hierarchicallagrangebasis.hh:143\n+Dune::Functions::HierarchicalLagrangePreBasis::size\n+size_type size() const\n+Same as size(prefix) with empty prefix.\n+Definition: hierarchicallagrangebasis.hh:100\n+Dune::Functions::HierarchicalLagrangePreBasis::initializeIndices\n+void initializeIndices()\n+Initialize the global indices.\n+Definition: hierarchicallagrangebasis.hh:75\n+Dune::Functions::HierarchicalLagrangePreBasis::indices\n+It indices(const Node &node, It it) const\n+Definition: hierarchicallagrangebasis.hh:130\n+Dune::Functions::HierarchicalLagrangePreBasis::minMultiIndexSize\n+static constexpr size_type minMultiIndexSize\n+Definition: hierarchicallagrangebasis.hh:64\n+Dune::Functions::BasisNodeMixin::setSize\n+void setSize(const size_type size)\n+Definition: nodes.hh:164\n+Dune::Functions::LeafBasisNode\n+Definition: nodes.hh:186\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00107.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00107.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: bsplinebasis.hh File Reference</title>\n+<title>dune-functions: subspacebasis.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -65,79 +65,55 @@\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> |\n-<a href=\"#typedef-members\">Typedefs</a> |\n <a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">bsplinebasis.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">subspacebasis.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-\n-<p>The B-spline global function space basis. \n-<a href=\"#details\">More...</a></p>\n-<div class=\"textblock\"><code>#include <array></code><br />\n-<code>#include <numeric></code><br />\n-<code>#include <dune/common/dynmatrix.hh></code><br />\n-<code>#include <dune/localfunctions/common/localbasis.hh></code><br />\n-<code>#include <dune/common/diagonalmatrix.hh></code><br />\n-<code>#include <dune/localfunctions/common/localkey.hh></code><br />\n-<code>#include <dune/localfunctions/common/localfiniteelementtraits.hh></code><br />\n-<code>#include <dune/geometry/type.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00191_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00119_source.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></code><br />\n+<div class=\"textblock\"><code>#include <dune/common/reservedvector.hh></code><br />\n+<code>#include <dune/common/typeutilities.hh></code><br />\n+<code>#include <dune/common/concept.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00029_source.html\">dune/functions/common/type_traits.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00188_source.html\">dune/functions/functionspacebases/subspacelocalview.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a02876_source.html\">dune/functions/functionspacebases/concepts.hh</a>></code><br />\n </div>\n <p><a href=\"a00107_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01483.html\">Dune::Functions::BSplineLocalBasis< GV, R ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">LocalBasis class in the sense of dune-localfunctions, presenting the restriction of a B-spline patch to a knot span. <a href=\"a01483.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01487.html\">Dune::Functions::BSplineLocalCoefficients< dim ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Attaches a shape function to an entity. <a href=\"a01487.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01491.html\">Dune::Functions::BSplineLocalInterpolation< dim, LB ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Local interpolation in the sense of dune-localfunctions, for the B-spline basis on tensor-product grids. <a href=\"a01491.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01475.html\">Dune::Functions::BSplineLocalFiniteElement< GV, R ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">LocalFiniteElement in the sense of dune-localfunctions, for the B-spline basis on tensor-product grids. <a href=\"a01475.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01479.html\">Dune::Functions::BSplinePreBasis< GV ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Pre-basis for B-spline basis. <a href=\"a01479.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01495.html\">Dune::Functions::BSplineNode< GV ></a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01807.html\">Dune::Functions::SubspaceBasis< RB, TP ></a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a00224\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00224.html\">Dune::Functions::BasisFactory</a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-</table><table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"typedef-members\" name=\"typedef-members\"></a>\n-Typedefs</h2></td></tr>\n-<tr class=\"memitem:ga189243b64e66543614a954706d70ce4a\"><td class=\"memTemplParams\" colspan=\"2\">template<typename GV > </td></tr>\n-<tr class=\"memitem:ga189243b64e66543614a954706d70ce4a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#ga189243b64e66543614a954706d70ce4a\">Dune::Functions::BSplineBasis</a> = DefaultGlobalBasis< BSplinePreBasis< GV > ></td></tr>\n-<tr class=\"memdesc:ga189243b64e66543614a954706d70ce4a\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A global B-spline basis. <a href=\"a00213.html#ga189243b64e66543614a954706d70ce4a\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga189243b64e66543614a954706d70ce4a\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n Functions</h2></td></tr>\n-<tr class=\"memitem:ga63a9701af71fffbbb851a38cb8cf886f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#ga63a9701af71fffbbb851a38cb8cf886f\">Dune::Functions::BasisFactory::bSpline</a> (const std::vector< double > &knotVector, unsigned int order, bool makeOpen=true)</td></tr>\n-<tr class=\"memdesc:ga63a9701af71fffbbb851a38cb8cf886f\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a pre-basis factory that can create a B-spline pre-basis. <a href=\"a00213.html#ga63a9701af71fffbbb851a38cb8cf886f\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga63a9701af71fffbbb851a38cb8cf886f\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a17589fdc18b015644525c7ad037e6441\"><td class=\"memTemplParams\" colspan=\"2\">template<class RB , class TP > </td></tr>\n+<tr class=\"memitem:a17589fdc18b015644525c7ad037e6441\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\"> </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a17589fdc18b015644525c7ad037e6441\">Dune::Functions::SubspaceBasis</a> (const RB &, const TP) -> SubspaceBasis< RB, TP ></td></tr>\n+<tr class=\"separator:a17589fdc18b015644525c7ad037e6441\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ae3d703ee72289b3936eb24255fc52694\"><td class=\"memTemplParams\" colspan=\"2\">template<class RootRootBasis , class InnerTP , class OuterTP > </td></tr>\n+<tr class=\"memitem:ae3d703ee72289b3936eb24255fc52694\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\"> </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#ae3d703ee72289b3936eb24255fc52694\">Dune::Functions::SubspaceBasis</a> (const SubspaceBasis< RootRootBasis, InnerTP > &rootBasis, const OuterTP &prefixPath) -> SubspaceBasis< std::decay_t< decltype(rootBasis.rootBasis())>, Impl::JoinTreePath_t< InnerTP, OuterTP > ></td></tr>\n+<tr class=\"separator:ae3d703ee72289b3936eb24255fc52694\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a9effbb98da0e9104a60979fa734c1220\"><td class=\"memTemplParams\" colspan=\"2\">template<class RootBasis , class... PrefixTreeIndices> </td></tr>\n+<tr class=\"memitem:a9effbb98da0e9104a60979fa734c1220\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a9effbb98da0e9104a60979fa734c1220\">Dune::Functions::subspaceBasis</a> (const RootBasis &rootBasis, const TypeTree::HybridTreePath< PrefixTreeIndices... > &prefixPath)</td></tr>\n+<tr class=\"memdesc:a9effbb98da0e9104a60979fa734c1220\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create <a class=\"el\" href=\"a01807.html\">SubspaceBasis</a> from a root basis and a prefixPath. <a href=\"a00219.html#a9effbb98da0e9104a60979fa734c1220\">More...</a><br /></td></tr>\n+<tr class=\"separator:a9effbb98da0e9104a60979fa734c1220\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:abb8781cf3fb98ca29446be66bcf65ac4\"><td class=\"memTemplParams\" colspan=\"2\">template<class RootBasis , class... PrefixTreeIndices> </td></tr>\n+<tr class=\"memitem:abb8781cf3fb98ca29446be66bcf65ac4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#abb8781cf3fb98ca29446be66bcf65ac4\">Dune::Functions::subspaceBasis</a> (const RootBasis &rootBasis, const PrefixTreeIndices &... prefixTreeIndices)</td></tr>\n+<tr class=\"separator:abb8781cf3fb98ca29446be66bcf65ac4\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n-<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n-<div class=\"textblock\"><p >The B-spline global function space basis. </p>\n-</div></div><!-- contents -->\n+</div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,65 +5,47 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-Classes | Namespaces | Typedefs | Functions\n-bsplinebasis.hh File Reference\n-The B-spline global function space basis. More...\n-#include <array>\n-#include <numeric>\n-#include <dune/common/dynmatrix.hh>\n-#include <dune/localfunctions/common/localbasis.hh>\n-#include <dune/common/diagonalmatrix.hh>\n-#include <dune/localfunctions/common/localkey.hh>\n-#include <dune/localfunctions/common/localfiniteelementtraits.hh>\n-#include <dune/geometry/type.hh>\n-#include <dune/functions/functionspacebases/nodes.hh>\n-#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n+Classes | Namespaces | Functions\n+subspacebasis.hh File Reference\n+#include <dune/common/reservedvector.hh>\n+#include <dune/common/typeutilities.hh>\n+#include <dune/common/concept.hh>\n+#include <dune/functions/common/type_traits.hh>\n+#include <dune/functions/functionspacebases/subspacelocalview.hh>\n+#include <dune/functions/functionspacebases/concepts.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-class \u00a0Dune::Functions::BSplineLocalBasis<_GV,_R_>\n-\u00a0 LocalBasis class in the sense of dune-localfunctions, presenting the\n- restriction of a B-spline patch to a knot span. More...\n-\u00a0\n-class \u00a0Dune::Functions::BSplineLocalCoefficients<_dim_>\n-\u00a0 Attaches a shape function to an entity. More...\n-\u00a0\n-class \u00a0Dune::Functions::BSplineLocalInterpolation<_dim,_LB_>\n-\u00a0 Local interpolation in the sense of dune-localfunctions, for the B-\n- spline basis on tensor-product grids. More...\n-\u00a0\n-class \u00a0Dune::Functions::BSplineLocalFiniteElement<_GV,_R_>\n-\u00a0 LocalFiniteElement in the sense of dune-localfunctions, for the B-\n- spline basis on tensor-product grids. More...\n-\u00a0\n-class \u00a0Dune::Functions::BSplinePreBasis<_GV_>\n-\u00a0 Pre-basis for B-spline basis. More...\n-\u00a0\n-class \u00a0Dune::Functions::BSplineNode<_GV_>\n+class \u00a0Dune::Functions::SubspaceBasis<_RB,_TP_>\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n-namespace \u00a0Dune::Functions::BasisFactory\n-\u00a0\n- Typedefs\n-template<typename GV >\n-using\u00a0Dune::Functions::BSplineBasis = DefaultGlobalBasis< BSplinePreBasis< GV\n- > >\n-\u00a0 A global B-spline basis. More...\n-\u00a0\n Functions\n-auto\u00a0Dune::Functions::BasisFactory::bSpline (const std::vector< double >\n- &knotVector, unsigned int order, bool makeOpen=true)\n-\u00a0 Create a pre-basis factory that can create a B-spline pre-basis. More...\n+template<class RB , class TP >\n+ \u00a0Dune::Functions::SubspaceBasis (const RB &, const TP) -> SubspaceBasis<\n+ RB, TP >\n+\u00a0\n+template<class RootRootBasis , class InnerTP , class OuterTP >\n+ \u00a0Dune::Functions::SubspaceBasis (const SubspaceBasis< RootRootBasis,\n+ InnerTP > &rootBasis, const OuterTP &prefixPath) -> SubspaceBasis< std::\n+ decay_t< decltype(rootBasis.rootBasis())>, Impl::JoinTreePath_t< InnerTP,\n+ OuterTP > >\n+\u00a0\n+template<class RootBasis , class... PrefixTreeIndices>\n+auto\u00a0Dune::Functions::subspaceBasis (const RootBasis &rootBasis, const\n+ TypeTree::HybridTreePath< PrefixTreeIndices... > &prefixPath)\n+\u00a0 Create SubspaceBasis from a root basis and a prefixPath. More...\n+\u00a0\n+template<class RootBasis , class... PrefixTreeIndices>\n+auto\u00a0Dune::Functions::subspaceBasis (const RootBasis &rootBasis, const\n+ PrefixTreeIndices &... prefixTreeIndices)\n \u00a0\n-***** Detailed Description *****\n-The B-spline global function space basis.\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00107_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00107_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: bsplinebasis.hh Source File</title>\n+<title>dune-functions: subspacebasis.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,1209 +62,184 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">bsplinebasis.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">subspacebasis.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<a href=\"a00107.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01483.html#a0866963a2c58b8b1f281a50722b9f3da\"> 1</a></span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n+<a href=\"a00107.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <array></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <numeric></span></div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <dune/common/dynmatrix.hh></span></div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <dune/common/reservedvector.hh></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <dune/common/typeutilities.hh></span></div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <dune/common/concept.hh></span></div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00029.html\">dune/functions/common/type_traits.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00188.html\">dune/functions/functionspacebases/subspacelocalview.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a02876.html\">dune/functions/functionspacebases/concepts.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n <div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"preprocessor\">#include <dune/localfunctions/common/localbasis.hh></span></div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"preprocessor\">#include <dune/common/diagonalmatrix.hh></span></div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"preprocessor\">#include <dune/localfunctions/common/localkey.hh></span></div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"preprocessor\">#include <dune/localfunctions/common/localfiniteelementtraits.hh></span></div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"preprocessor\">#include <dune/geometry/type.hh></span></div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00191.html\">dune/functions/functionspacebases/nodes.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00119.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span> </div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a></div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span>{</div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> </div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span><span class=\"comment\">// A maze of dependencies between the different parts of this. We need a few forward declarations</span></div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keyword\">typename</span> R></div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01475.html\">BSplineLocalFiniteElement</a>;</div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span> </div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"keyword\">namespace </span>Impl {</div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> </div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>... Inner, <span class=\"keyword\">class</span>... Outer></div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> <span class=\"keyword\">auto</span> joinTreePaths(<span class=\"keyword\">const</span> TypeTree::HybridTreePath<Inner...>& inner, <span class=\"keyword\">const</span> TypeTree::HybridTreePath<Outer...> outer)</div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> {</div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> <span class=\"keywordflow\">return</span> TypeTree::HybridTreePath<Inner..., Outer...>(std::tuple_cat(inner._data, outer._data));</div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> }</div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> </div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> InnerTP, <span class=\"keyword\">class</span> OuterTP></div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> <span class=\"keyword\">using </span>JoinTreePath_t = std::decay_t<decltype(joinTreePaths(std::declval<InnerTP>(), std::declval<OuterTP>()))>;</div>\n <div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> </div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV></div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01479.html\">BSplinePreBasis</a>;</div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span>}</div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> </div>\n <div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> </div>\n <div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> </div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> GV, <span class=\"keyword\">class</span> R></div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01483.html\"> 45</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01483.html\">BSplineLocalBasis</a></div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span>{</div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> <span class=\"keyword\">friend</span> <span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01475.html\">BSplineLocalFiniteElement</a><GV,R>;</div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> </div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> <span class=\"keyword\">typedef</span> <span class=\"keyword\">typename</span> GV::ctype D;</div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> <span class=\"keyword\">enum</span> {dim = GV::dimension};</div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> RB, <span class=\"keyword\">class</span> TP></div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html\"> 37</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01807.html\">SubspaceBasis</a></div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span>{</div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> </div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#aaa9c058bcb0bc05bdba112801201f281\"> 41</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01807.html#aaa9c058bcb0bc05bdba112801201f281\">RootBasis</a> = RB;</div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> </div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#a00d424aa40e6c051f610a308317cc57e\"> 43</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01807.html#a00d424aa40e6c051f610a308317cc57e\">RootLocalView</a> = <span class=\"keyword\">typename</span> RootBasis::LocalView;</div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> </div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#a5dcb19c46539c51ce32a6fdc55738387\"> 45</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01807.html#a5dcb19c46539c51ce32a6fdc55738387\">PrefixPath</a> = TP;</div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> </div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#a6e7dd708494382dad7cc288ce6cfe6b8\"> 48</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01807.html#a6e7dd708494382dad7cc288ce6cfe6b8\">GridView</a> = <span class=\"keyword\">typename</span> RootBasis::GridView;</div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> </div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#acb8fddcafde83205b67e57926c84ace5\"> 51</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01807.html#acb8fddcafde83205b67e57926c84ace5\">MultiIndex</a> = <span class=\"keyword\">typename</span> RootBasis::MultiIndex;</div>\n <div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> </div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> <span class=\"keyword\">typedef</span> LocalBasisTraits<D,dim,FieldVector<D,dim>,R,1,FieldVector<R,1>,</div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01483.html#a0ec676c23af5cfb27d18260102af08ca\"> 55</a></span> FieldMatrix<R,1,dim> > <a class=\"code hl_typedef\" href=\"a01483.html#a0ec676c23af5cfb27d18260102af08ca\">Traits</a>;</div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> </div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01483.html#ab66fbd26ea34c67071da5c0fa9504191\"> 61</a></span> <a class=\"code hl_function\" href=\"a01483.html#ab66fbd26ea34c67071da5c0fa9504191\">BSplineLocalBasis</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01479.html\">BSplinePreBasis<GV></a>& preBasis,</div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01475.html\">BSplineLocalFiniteElement<GV,R></a>& lFE)</div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> : preBasis_(preBasis),</div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> lFE_(lFE)</div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#ad328a135f42bb2a6b9bf60983f61f254\"> 53</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01807.html#ad328a135f42bb2a6b9bf60983f61f254\">size_type</a> = std::size_t;</div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> </div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#a616eaadc3d1d8706041ab1b0d03510bc\"> 56</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01811.html\">LocalView</a> = <a class=\"code hl_class\" href=\"a01811.html\">SubspaceLocalView<RootLocalView, PrefixPath></a>;</div>\n+<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> </div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#a330b42b7087eca7afb92ec40eba36440\"> 58</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01807.html#a330b42b7087eca7afb92ec40eba36440\">SizePrefix</a> = <span class=\"keyword\">typename</span> RootBasis::SizePrefix;</div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> </div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> </div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#aee8689dac160442b891bc738c55c1087\"> 62</a></span> <a class=\"code hl_function\" href=\"a01807.html#aee8689dac160442b891bc738c55c1087\">SubspaceBasis</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01807.html#aaa9c058bcb0bc05bdba112801201f281\">RootBasis</a>& <a class=\"code hl_function\" href=\"a01807.html#ac6fc5a04ad73460ae55c73bb8f515712\">rootBasis</a>, <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01807.html#a5dcb19c46539c51ce32a6fdc55738387\">PrefixPath</a>& <a class=\"code hl_function\" href=\"a01807.html#a7c1756f78b770fbbe6937b8a146cdc81\">prefixPath</a>) :</div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> <a class=\"code hl_variable\" href=\"a01807.html#a2f6185785e7ee3ad97f7239fed6f3e39\">rootBasis_</a>(&<a class=\"code hl_function\" href=\"a01807.html#ac6fc5a04ad73460ae55c73bb8f515712\">rootBasis</a>),</div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> <a class=\"code hl_variable\" href=\"a01807.html#ab3509a847b8dfb33032f14ca666c13bb\">prefixPath_</a>(<a class=\"code hl_function\" href=\"a01807.html#a7c1756f78b770fbbe6937b8a146cdc81\">prefixPath</a>)</div>\n <div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> {}</div>\n <div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> </div>\n-<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01483.html#a6f6f0d5f6137fc30c687a913a9794ef9\"> 70</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01483.html#a6f6f0d5f6137fc30c687a913a9794ef9\">evaluateFunction</a> (<span class=\"keyword\">const</span> FieldVector<D,dim>& in,</div>\n-<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> std::vector<FieldVector<R,1> >& out)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> FieldVector<D,dim> globalIn = offset_;</div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> scaling_.umv(in,globalIn);</div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> </div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> preBasis_.evaluateFunction(globalIn, out, lFE_.currentKnotSpan_);</div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> }</div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> </div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01483.html#a7bece6d4241e57b2f43e52f4427c7c7c\"> 82</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01483.html#a7bece6d4241e57b2f43e52f4427c7c7c\">evaluateJacobian</a> (<span class=\"keyword\">const</span> FieldVector<D,dim>& in,</div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> std::vector<FieldMatrix<D,1,dim> >& out)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> FieldVector<D,dim> globalIn = offset_;</div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> scaling_.umv(in,globalIn);</div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> </div>\n-<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> preBasis_.evaluateJacobian(globalIn, out, lFE_.currentKnotSpan_);</div>\n-<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> </div>\n-<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<out.size(); i++)</div>\n-<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> j=0; j<dim; j++)</div>\n-<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> out[i][0][j] *= scaling_[j][j];</div>\n-<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> }</div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> </div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> <span class=\"keyword\">template</span><<span class=\"keywordtype\">size_t</span> k></div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01483.html#a515832d188de13e946d113c4b562fb0f\"> 97</a></span> <span class=\"keyword\">inline</span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01483.html#a515832d188de13e946d113c4b562fb0f\">evaluate</a> (<span class=\"keyword\">const</span> <span class=\"keyword\">typename</span> std::array<int,k>& directions,</div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> <span class=\"keyword\">const</span> <span class=\"keyword\">typename</span> Traits::DomainType& in,</div>\n-<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> std::vector<typename Traits::RangeType>& out)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> <span class=\"keywordflow\">switch</span>(k)</div>\n-<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> {</div>\n-<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> <span class=\"keywordflow\">case</span> 0:</div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> <a class=\"code hl_function\" href=\"a01483.html#a6f6f0d5f6137fc30c687a913a9794ef9\">evaluateFunction</a>(in, out);</div>\n-<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> <span class=\"keywordflow\">break</span>;</div>\n-<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> <span class=\"keywordflow\">case</span> 1:</div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> {</div>\n-<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> FieldVector<D,dim> globalIn = offset_;</div>\n-<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> scaling_.umv(in,globalIn);</div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> </div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> preBasis_.evaluate(directions, globalIn, out, lFE_.currentKnotSpan_);</div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> RootRootBasis, <span class=\"keyword\">class</span> InnerTP, <span class=\"keyword\">class</span> OuterTP></div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#a8994e4c3215b21b9b4d4e1b09a97f4c4\"> 73</a></span> <a class=\"code hl_function\" href=\"a01807.html#a8994e4c3215b21b9b4d4e1b09a97f4c4\">SubspaceBasis</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01807.html\">SubspaceBasis<RootRootBasis, InnerTP></a>& <a class=\"code hl_function\" href=\"a01807.html#ac6fc5a04ad73460ae55c73bb8f515712\">rootBasis</a>, <span class=\"keyword\">const</span> OuterTP& <a class=\"code hl_function\" href=\"a01807.html#a7c1756f78b770fbbe6937b8a146cdc81\">prefixPath</a>) :</div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> <a class=\"code hl_class\" href=\"a01807.html\">SubspaceBasis</a>(<a class=\"code hl_function\" href=\"a01807.html#ac6fc5a04ad73460ae55c73bb8f515712\">rootBasis</a>.<a class=\"code hl_function\" href=\"a01807.html#ac6fc5a04ad73460ae55c73bb8f515712\">rootBasis</a>(), Impl::joinTreePaths(<a class=\"code hl_function\" href=\"a01807.html#ac6fc5a04ad73460ae55c73bb8f515712\">rootBasis</a>.<a class=\"code hl_function\" href=\"a01807.html#a7c1756f78b770fbbe6937b8a146cdc81\">prefixPath</a>(), <a class=\"code hl_function\" href=\"a01807.html#a7c1756f78b770fbbe6937b8a146cdc81\">prefixPath</a>))</div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> {}</div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> </div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> </div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#a8ce8499d3a9117e5138f1ba231a80fcf\"> 80</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01807.html#a6e7dd708494382dad7cc288ce6cfe6b8\">GridView</a>& <a class=\"code hl_function\" href=\"a01807.html#a8ce8499d3a9117e5138f1ba231a80fcf\">gridView</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01807.html#a2f6185785e7ee3ad97f7239fed6f3e39\">rootBasis_</a>->gridView();</div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> }</div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> </div>\n+<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#acbfda46d0971e6f82b7649e195663702\"> 88</a></span> <a class=\"code hl_typedef\" href=\"a01807.html#ad328a135f42bb2a6b9bf60983f61f254\">size_type</a> <a class=\"code hl_function\" href=\"a01807.html#acbfda46d0971e6f82b7649e195663702\">dimension</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01807.html#a2f6185785e7ee3ad97f7239fed6f3e39\">rootBasis_</a>->dimension();</div>\n+<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> }</div>\n+<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> </div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#abe1c4a616c0acdf861fbbc5f52046645\"> 94</a></span> <a class=\"code hl_typedef\" href=\"a01807.html#ad328a135f42bb2a6b9bf60983f61f254\">size_type</a> <a class=\"code hl_function\" href=\"a01807.html#abe1c4a616c0acdf861fbbc5f52046645\">size</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01807.html#a2f6185785e7ee3ad97f7239fed6f3e39\">rootBasis_</a>->size();</div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> }</div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> </div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#a658452a597522c630fab82679da0a167\"> 100</a></span> <a class=\"code hl_typedef\" href=\"a01807.html#ad328a135f42bb2a6b9bf60983f61f254\">size_type</a> <a class=\"code hl_function\" href=\"a01807.html#a658452a597522c630fab82679da0a167\">size</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01807.html#a330b42b7087eca7afb92ec40eba36440\">SizePrefix</a>& prefix)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01807.html#a2f6185785e7ee3ad97f7239fed6f3e39\">rootBasis_</a>->size(prefix);</div>\n+<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> }</div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> </div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#a14c47ee1637a33fa73dbac78dd93b4e6\"> 108</a></span> <a class=\"code hl_class\" href=\"a01811.html\">LocalView</a> <a class=\"code hl_function\" href=\"a01807.html#a14c47ee1637a33fa73dbac78dd93b4e6\">localView</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_typedef\" href=\"a01807.html#a616eaadc3d1d8706041ab1b0d03510bc\">LocalView</a>(*<span class=\"keyword\">this</span>, <a class=\"code hl_variable\" href=\"a01807.html#ab3509a847b8dfb33032f14ca666c13bb\">prefixPath_</a>);</div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> }</div>\n <div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> </div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<out.size(); i++)</div>\n-<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> out[i][0] *= scaling_[directions[0]][directions[0]];</div>\n-<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> <span class=\"keywordflow\">break</span>;</div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> }</div>\n-<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> <span class=\"keywordflow\">case</span> 2:</div>\n-<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> {</div>\n-<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> FieldVector<D,dim> globalIn = offset_;</div>\n-<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> scaling_.umv(in,globalIn);</div>\n-<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> </div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> preBasis_.evaluate(directions, globalIn, out, lFE_.currentKnotSpan_);</div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> </div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<out.size(); i++)</div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> out[i][0] *= scaling_[directions[0]][directions[0]]*scaling_[directions[1]][directions[1]];</div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> <span class=\"keywordflow\">break</span>;</div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> }</div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> <span class=\"keywordflow\">default</span>:</div>\n-<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> DUNE_THROW(NotImplemented, <span class=\"stringliteral\">"B-Spline derivatives of order "</span> << k << <span class=\"stringliteral\">" not implemented yet!"</span>);</div>\n-<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> }</div>\n-<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> }</div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#ac6fc5a04ad73460ae55c73bb8f515712\"> 113</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01807.html#aaa9c058bcb0bc05bdba112801201f281\">RootBasis</a>& <a class=\"code hl_function\" href=\"a01807.html#ac6fc5a04ad73460ae55c73bb8f515712\">rootBasis</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> <span class=\"keywordflow\">return</span> *<a class=\"code hl_variable\" href=\"a01807.html#a2f6185785e7ee3ad97f7239fed6f3e39\">rootBasis_</a>;</div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> }</div>\n+<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> </div>\n+<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#a7c1756f78b770fbbe6937b8a146cdc81\"> 118</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01807.html#a5dcb19c46539c51ce32a6fdc55738387\">PrefixPath</a>& <a class=\"code hl_function\" href=\"a01807.html#a7c1756f78b770fbbe6937b8a146cdc81\">prefixPath</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01807.html#ab3509a847b8dfb33032f14ca666c13bb\">prefixPath_</a>;</div>\n+<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> }</div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> </div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span><span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#a2f6185785e7ee3ad97f7239fed6f3e39\"> 124</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01807.html#aaa9c058bcb0bc05bdba112801201f281\">RootBasis</a>* <a class=\"code hl_variable\" href=\"a01807.html#a2f6185785e7ee3ad97f7239fed6f3e39\">rootBasis_</a>;</div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#ab3509a847b8dfb33032f14ca666c13bb\"> 125</a></span> <a class=\"code hl_typedef\" href=\"a01807.html#a5dcb19c46539c51ce32a6fdc55738387\">PrefixPath</a> <a class=\"code hl_variable\" href=\"a01807.html#ab3509a847b8dfb33032f14ca666c13bb\">prefixPath_</a>;</div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span>};</div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> </div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> </div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span><span class=\"comment\">// CTAD guide for a non-SubspaceBasis root basis</span></div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> RB, <span class=\"keyword\">class</span> TP></div>\n+<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a17589fdc18b015644525c7ad037e6441\"> 131</a></span><a class=\"code hl_function\" href=\"a00219.html#a17589fdc18b015644525c7ad037e6441\">SubspaceBasis</a>(<span class=\"keyword\">const</span> RB&, <span class=\"keyword\">const</span> TP) -> <a class=\"code hl_class\" href=\"a01807.html\">SubspaceBasis<RB, TP></a>;</div>\n <div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> </div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01483.html#a34a29cc9e1ac3d7f03fadb568014a847\"> 140</a></span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_function\" href=\"a01483.html#a34a29cc9e1ac3d7f03fadb568014a847\">order</a> ()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> <span class=\"keywordflow\">return</span> *std::max_element(preBasis_.order_.begin(), preBasis_.order_.end());</div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> }</div>\n-<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> </div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01483.html#a35462641ee16ccfd06c65d692b9b309f\"> 147</a></span> std::size_t <a class=\"code hl_function\" href=\"a01483.html#a35462641ee16ccfd06c65d692b9b309f\">size</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> <span class=\"keywordflow\">return</span> lFE_.size();</div>\n-<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> }</div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> </div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span><span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01479.html\">BSplinePreBasis<GV></a>& preBasis_;</div>\n-<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> </div>\n-<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01475.html\">BSplineLocalFiniteElement<GV,R></a>& lFE_;</div>\n-<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> </div>\n-<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> <span class=\"comment\">// Coordinates in a single knot span differ from coordinates on the B-spline patch</span></div>\n-<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> <span class=\"comment\">// by an affine transformation. This transformation is stored in offset_ and scaling_.</span></div>\n-<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> FieldVector<D,dim> offset_;</div>\n-<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> DiagonalMatrix<D,dim> scaling_;</div>\n-<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span>};</div>\n+<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span><span class=\"comment\">// CTAD guide for a SubspaceBasis root basis</span></div>\n+<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> RootRootBasis, <span class=\"keyword\">class</span> InnerTP, <span class=\"keyword\">class</span> OuterTP></div>\n+<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#ae3d703ee72289b3936eb24255fc52694\"> 135</a></span><a class=\"code hl_function\" href=\"a00219.html#a17589fdc18b015644525c7ad037e6441\">SubspaceBasis</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01807.html\">SubspaceBasis<RootRootBasis, InnerTP></a>& rootBasis, <span class=\"keyword\">const</span> OuterTP& prefixPath)</div>\n+<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> -> <a class=\"code hl_class\" href=\"a01807.html\">SubspaceBasis</a><std::decay_t<<span class=\"keyword\">decltype</span>(rootBasis.rootBasis())>, Impl::JoinTreePath_t<InnerTP, OuterTP>>;</div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> </div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> </div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> </div>\n+<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>RootBasis, <span class=\"keyword\">class</span>... PrefixTreeIndices></div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a9effbb98da0e9104a60979fa734c1220\"> 151</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00219.html#a9effbb98da0e9104a60979fa734c1220\">subspaceBasis</a>(<span class=\"keyword\">const</span> RootBasis& rootBasis, <span class=\"keyword\">const</span> TypeTree::HybridTreePath<PrefixTreeIndices...>& prefixPath)</div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span>{</div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00219.html#a17589fdc18b015644525c7ad037e6441\">SubspaceBasis</a>(rootBasis, prefixPath);</div>\n+<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span>}</div>\n+<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> </div>\n+<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>RootBasis, <span class=\"keyword\">class</span>... PrefixTreeIndices></div>\n+<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#abb8781cf3fb98ca29446be66bcf65ac4\"> 157</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00219.html#a9effbb98da0e9104a60979fa734c1220\">subspaceBasis</a>(<span class=\"keyword\">const</span> RootBasis& rootBasis, <span class=\"keyword\">const</span> PrefixTreeIndices&... prefixTreeIndices)</div>\n+<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span>{</div>\n+<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00219.html#a9effbb98da0e9104a60979fa734c1220\">subspaceBasis</a>(rootBasis, TypeTree::hybridTreePath(prefixTreeIndices...));</div>\n+<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span>}</div>\n+<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> </div>\n <div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> </div>\n-<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span><span class=\"keyword\">template</span><<span class=\"keywordtype\">int</span> dim></div>\n-<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01487.html\"> 177</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01487.html\">BSplineLocalCoefficients</a></div>\n-<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span>{</div>\n-<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> <span class=\"comment\">// Return i as a d-digit number in the (k+1)-nary system</span></div>\n-<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> std::array<unsigned int,dim> multiindex (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> i)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> std::array<unsigned int,dim> alpha;</div>\n-<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> j=0; j<dim; j++)</div>\n-<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span> {</div>\n-<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> alpha[j] = i % sizes_[j];</div>\n-<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> i = i/sizes_[j];</div>\n-<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> }</div>\n-<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> <span class=\"keywordflow\">return</span> alpha;</div>\n-<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> }</div>\n-<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span> </div>\n-<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> <span class=\"keywordtype\">void</span> setup1d(std::vector<unsigned int>& subEntity)</div>\n-<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> {</div>\n-<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> <span class=\"keywordflow\">if</span> (sizes_[0]==1)</div>\n-<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> {</div>\n-<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> subEntity[0] = 0;</div>\n-<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> <span class=\"keywordflow\">return</span>;</div>\n-<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> }</div>\n-<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> </div>\n-<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> <span class=\"comment\">/* edge and vertex numbering</span></div>\n-<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span><span class=\"comment\"> 0----0----1</span></div>\n-<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span><span class=\"comment\"> */</span></div>\n-<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> <span class=\"keywordtype\">unsigned</span> lastIndex=0;</div>\n-<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> subEntity[lastIndex++] = 0; <span class=\"comment\">// corner 0</span></div>\n-<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">unsigned</span> i = 0; i < sizes_[0] - 2; ++i)</div>\n-<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> subEntity[lastIndex++] = 0; <span class=\"comment\">// inner dofs of element (0)</span></div>\n-<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> </div>\n-<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span> subEntity[lastIndex++] = 1; <span class=\"comment\">// corner 1</span></div>\n-<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> </div>\n-<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> assert(<a class=\"code hl_function\" href=\"a01487.html#acee2241933e75ae41972b3ce44ceb0c1\">size</a>()==lastIndex);</div>\n-<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> }</div>\n-<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"> 212</span> </div>\n-<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span> <span class=\"keywordtype\">void</span> setup2d(std::vector<unsigned int>& subEntity)</div>\n-<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> {</div>\n-<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> <span class=\"keywordtype\">unsigned</span> lastIndex=0;</div>\n-<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span> </div>\n-<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> <span class=\"comment\">// LocalKey: entity number , entity codim, dof indices within each entity</span></div>\n-<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> <span class=\"comment\">/* edge and vertex numbering</span></div>\n-<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span><span class=\"comment\"> 2----3----3</span></div>\n-<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span><span class=\"comment\"> | |</span></div>\n-<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span><span class=\"comment\"> | |</span></div>\n-<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span><span class=\"comment\"> 0 1</span></div>\n-<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span><span class=\"comment\"> | |</span></div>\n-<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span><span class=\"comment\"> | |</span></div>\n-<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span><span class=\"comment\"> 0----2----1</span></div>\n-<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span><span class=\"comment\"> */</span></div>\n-<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> </div>\n-<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> <span class=\"comment\">// lower edge (2)</span></div>\n-<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> subEntity[lastIndex++] = 0; <span class=\"comment\">// corner 0</span></div>\n-<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">unsigned</span> i = 0; i < sizes_[0]-2; ++i)</div>\n-<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span> subEntity[lastIndex++] = 2; <span class=\"comment\">// inner dofs of lower edge (2)</span></div>\n-<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> </div>\n-<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> subEntity[lastIndex++] = 1; <span class=\"comment\">// corner 1</span></div>\n-<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> </div>\n-<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> <span class=\"comment\">// iterate from bottom to top over inner edge dofs</span></div>\n-<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">unsigned</span> e = 0; e < sizes_[1]-2; ++e)</div>\n-<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span> {</div>\n-<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span> subEntity[lastIndex++] = 0; <span class=\"comment\">// left edge (0)</span></div>\n-<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">unsigned</span> i = 0; i < sizes_[0]-2; ++i)</div>\n-<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"> 240</span> subEntity[lastIndex++] = 0; <span class=\"comment\">// face dofs</span></div>\n-<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span> subEntity[lastIndex++] = 1; <span class=\"comment\">// right edge (1)</span></div>\n-<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span> }</div>\n-<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> </div>\n-<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> <span class=\"comment\">// upper edge (3)</span></div>\n-<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> subEntity[lastIndex++] = 2; <span class=\"comment\">// corner 2</span></div>\n-<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">unsigned</span> i = 0; i < sizes_[0]-2; ++i)</div>\n-<div class=\"line\"><a id=\"l00247\" name=\"l00247\"></a><span class=\"lineno\"> 247</span> subEntity[lastIndex++] = 3; <span class=\"comment\">// inner dofs of upper edge (3)</span></div>\n-<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"> 248</span> </div>\n-<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span> subEntity[lastIndex++] = 3; <span class=\"comment\">// corner 3</span></div>\n-<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span> </div>\n-<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span> assert(<a class=\"code hl_function\" href=\"a01487.html#acee2241933e75ae41972b3ce44ceb0c1\">size</a>()==lastIndex);</div>\n-<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span> }</div>\n-<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"> 253</span> </div>\n-<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"> 254</span> </div>\n-<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01487.html#a73ed6bc866499e512d96cb6d6c315c6f\"> 256</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01487.html#a73ed6bc866499e512d96cb6d6c315c6f\">init</a>(<span class=\"keyword\">const</span> std::array<unsigned,dim>& sizes)</div>\n-<div class=\"line\"><a id=\"l00257\" name=\"l00257\"></a><span class=\"lineno\"> 257</span> {</div>\n-<div class=\"line\"><a id=\"l00258\" name=\"l00258\"></a><span class=\"lineno\"> 258</span> sizes_ = sizes;</div>\n-<div class=\"line\"><a id=\"l00259\" name=\"l00259\"></a><span class=\"lineno\"> 259</span> </div>\n-<div class=\"line\"><a id=\"l00260\" name=\"l00260\"></a><span class=\"lineno\"> 260</span> li_.resize(<a class=\"code hl_function\" href=\"a01487.html#acee2241933e75ae41972b3ce44ceb0c1\">size</a>());</div>\n-<div class=\"line\"><a id=\"l00261\" name=\"l00261\"></a><span class=\"lineno\"> 261</span> </div>\n-<div class=\"line\"><a id=\"l00262\" name=\"l00262\"></a><span class=\"lineno\"> 262</span> <span class=\"comment\">// Set up array of codimension-per-dof-number</span></div>\n-<div class=\"line\"><a id=\"l00263\" name=\"l00263\"></a><span class=\"lineno\"> 263</span> std::vector<unsigned int> codim(li_.size());</div>\n-<div class=\"line\"><a id=\"l00264\" name=\"l00264\"></a><span class=\"lineno\"> 264</span> </div>\n-<div class=\"line\"><a id=\"l00265\" name=\"l00265\"></a><span class=\"lineno\"> 265</span> <span class=\"keywordflow\">for</span> (std::size_t i=0; i<codim.size(); i++)</div>\n-<div class=\"line\"><a id=\"l00266\" name=\"l00266\"></a><span class=\"lineno\"> 266</span> {</div>\n-<div class=\"line\"><a id=\"l00267\" name=\"l00267\"></a><span class=\"lineno\"> 267</span> codim[i] = 0;</div>\n-<div class=\"line\"><a id=\"l00268\" name=\"l00268\"></a><span class=\"lineno\"> 268</span> <span class=\"comment\">// Codimension gets increased by 1 for each coordinate direction</span></div>\n-<div class=\"line\"><a id=\"l00269\" name=\"l00269\"></a><span class=\"lineno\"> 269</span> <span class=\"comment\">// where dof is on boundary</span></div>\n-<div class=\"line\"><a id=\"l00270\" name=\"l00270\"></a><span class=\"lineno\"> 270</span> std::array<unsigned int,dim> mIdx = multiindex(i);</div>\n-<div class=\"line\"><a id=\"l00271\" name=\"l00271\"></a><span class=\"lineno\"> 271</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> j=0; j<dim; j++)</div>\n-<div class=\"line\"><a id=\"l00272\" name=\"l00272\"></a><span class=\"lineno\"> 272</span> <span class=\"keywordflow\">if</span> (mIdx[j]==0 or mIdx[j]==sizes[j]-1)</div>\n-<div class=\"line\"><a id=\"l00273\" name=\"l00273\"></a><span class=\"lineno\"> 273</span> codim[i]++;</div>\n-<div class=\"line\"><a id=\"l00274\" name=\"l00274\"></a><span class=\"lineno\"> 274</span> }</div>\n-<div class=\"line\"><a id=\"l00275\" name=\"l00275\"></a><span class=\"lineno\"> 275</span> </div>\n-<div class=\"line\"><a id=\"l00276\" name=\"l00276\"></a><span class=\"lineno\"> 276</span> <span class=\"comment\">// Set up index vector (the index of the dof in the set of dofs of a given subentity)</span></div>\n-<div class=\"line\"><a id=\"l00277\" name=\"l00277\"></a><span class=\"lineno\"> 277</span> <span class=\"comment\">// Algorithm: the 'index' has the same ordering as the dof number 'i'.</span></div>\n-<div class=\"line\"><a id=\"l00278\" name=\"l00278\"></a><span class=\"lineno\"> 278</span> <span class=\"comment\">// To make it consecutive we interpret 'i' in the (k+1)-adic system, omit all digits</span></div>\n-<div class=\"line\"><a id=\"l00279\" name=\"l00279\"></a><span class=\"lineno\"> 279</span> <span class=\"comment\">// that correspond to axes where the dof is on the element boundary, and transform the</span></div>\n-<div class=\"line\"><a id=\"l00280\" name=\"l00280\"></a><span class=\"lineno\"> 280</span> <span class=\"comment\">// rest to the (k-1)-adic system.</span></div>\n-<div class=\"line\"><a id=\"l00281\" name=\"l00281\"></a><span class=\"lineno\"> 281</span> std::vector<unsigned int> index(<a class=\"code hl_function\" href=\"a01487.html#acee2241933e75ae41972b3ce44ceb0c1\">size</a>());</div>\n-<div class=\"line\"><a id=\"l00282\" name=\"l00282\"></a><span class=\"lineno\"> 282</span> </div>\n-<div class=\"line\"><a id=\"l00283\" name=\"l00283\"></a><span class=\"lineno\"> 283</span> <span class=\"keywordflow\">for</span> (std::size_t i=0; i<index.size(); i++)</div>\n-<div class=\"line\"><a id=\"l00284\" name=\"l00284\"></a><span class=\"lineno\"> 284</span> {</div>\n-<div class=\"line\"><a id=\"l00285\" name=\"l00285\"></a><span class=\"lineno\"> 285</span> index[i] = 0;</div>\n-<div class=\"line\"><a id=\"l00286\" name=\"l00286\"></a><span class=\"lineno\"> 286</span> </div>\n-<div class=\"line\"><a id=\"l00287\" name=\"l00287\"></a><span class=\"lineno\"> 287</span> std::array<unsigned int,dim> mIdx = multiindex(i);</div>\n-<div class=\"line\"><a id=\"l00288\" name=\"l00288\"></a><span class=\"lineno\"> 288</span> </div>\n-<div class=\"line\"><a id=\"l00289\" name=\"l00289\"></a><span class=\"lineno\"> 289</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> j=dim-1; j>=0; j--)</div>\n-<div class=\"line\"><a id=\"l00290\" name=\"l00290\"></a><span class=\"lineno\"> 290</span> <span class=\"keywordflow\">if</span> (mIdx[j]>0 and mIdx[j]<sizes[j]-1)</div>\n-<div class=\"line\"><a id=\"l00291\" name=\"l00291\"></a><span class=\"lineno\"> 291</span> index[i] = (sizes[j]-1)*index[i] + (mIdx[j]-1);</div>\n-<div class=\"line\"><a id=\"l00292\" name=\"l00292\"></a><span class=\"lineno\"> 292</span> }</div>\n-<div class=\"line\"><a id=\"l00293\" name=\"l00293\"></a><span class=\"lineno\"> 293</span> </div>\n-<div class=\"line\"><a id=\"l00294\" name=\"l00294\"></a><span class=\"lineno\"> 294</span> <span class=\"comment\">// Set up entity and dof numbers for each (supported) dimension separately</span></div>\n-<div class=\"line\"><a id=\"l00295\" name=\"l00295\"></a><span class=\"lineno\"> 295</span> std::vector<unsigned int> subEntity(li_.size());</div>\n-<div class=\"line\"><a id=\"l00296\" name=\"l00296\"></a><span class=\"lineno\"> 296</span> </div>\n-<div class=\"line\"><a id=\"l00297\" name=\"l00297\"></a><span class=\"lineno\"> 297</span> <span class=\"keywordflow\">if</span> (subEntity.size() > 0)</div>\n-<div class=\"line\"><a id=\"l00298\" name=\"l00298\"></a><span class=\"lineno\"> 298</span> {</div>\n-<div class=\"line\"><a id=\"l00299\" name=\"l00299\"></a><span class=\"lineno\"> 299</span> <span class=\"keywordflow\">if</span> (dim==1) {</div>\n-<div class=\"line\"><a id=\"l00300\" name=\"l00300\"></a><span class=\"lineno\"> 300</span> </div>\n-<div class=\"line\"><a id=\"l00301\" name=\"l00301\"></a><span class=\"lineno\"> 301</span> setup1d(subEntity);</div>\n-<div class=\"line\"><a id=\"l00302\" name=\"l00302\"></a><span class=\"lineno\"> 302</span> </div>\n-<div class=\"line\"><a id=\"l00303\" name=\"l00303\"></a><span class=\"lineno\"> 303</span> } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (dim==2 and sizes_[0]>1 and sizes_[1]>1) {</div>\n-<div class=\"line\"><a id=\"l00304\" name=\"l00304\"></a><span class=\"lineno\"> 304</span> </div>\n-<div class=\"line\"><a id=\"l00305\" name=\"l00305\"></a><span class=\"lineno\"> 305</span> setup2d(subEntity);</div>\n-<div class=\"line\"><a id=\"l00306\" name=\"l00306\"></a><span class=\"lineno\"> 306</span> </div>\n-<div class=\"line\"><a id=\"l00307\" name=\"l00307\"></a><span class=\"lineno\"> 307</span> }</div>\n-<div class=\"line\"><a id=\"l00308\" name=\"l00308\"></a><span class=\"lineno\"> 308</span> }</div>\n-<div class=\"line\"><a id=\"l00309\" name=\"l00309\"></a><span class=\"lineno\"> 309</span> </div>\n-<div class=\"line\"><a id=\"l00310\" name=\"l00310\"></a><span class=\"lineno\"> 310</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<li_.size(); i++)</div>\n-<div class=\"line\"><a id=\"l00311\" name=\"l00311\"></a><span class=\"lineno\"> 311</span> li_[i] = LocalKey(subEntity[i], codim[i], index[i]);</div>\n-<div class=\"line\"><a id=\"l00312\" name=\"l00312\"></a><span class=\"lineno\"> 312</span> }</div>\n-<div class=\"line\"><a id=\"l00313\" name=\"l00313\"></a><span class=\"lineno\"> 313</span> </div>\n-<div class=\"line\"><a id=\"l00315\" name=\"l00315\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01487.html#acee2241933e75ae41972b3ce44ceb0c1\"> 315</a></span> std::size_t <a class=\"code hl_function\" href=\"a01487.html#acee2241933e75ae41972b3ce44ceb0c1\">size</a> ()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00316\" name=\"l00316\"></a><span class=\"lineno\"> 316</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00317\" name=\"l00317\"></a><span class=\"lineno\"> 317</span> <span class=\"keywordflow\">return</span> std::accumulate(sizes_.begin(), sizes_.end(), 1, std::multiplies<unsigned int>());</div>\n-<div class=\"line\"><a id=\"l00318\" name=\"l00318\"></a><span class=\"lineno\"> 318</span> }</div>\n-<div class=\"line\"><a id=\"l00319\" name=\"l00319\"></a><span class=\"lineno\"> 319</span> </div>\n-<div class=\"line\"><a id=\"l00321\" name=\"l00321\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01487.html#a49f42a4b71756628c60f20cf4868e451\"> 321</a></span> <span class=\"keyword\">const</span> LocalKey& <a class=\"code hl_function\" href=\"a01487.html#a49f42a4b71756628c60f20cf4868e451\">localKey</a> (std::size_t i)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00322\" name=\"l00322\"></a><span class=\"lineno\"> 322</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00323\" name=\"l00323\"></a><span class=\"lineno\"> 323</span> <span class=\"keywordflow\">return</span> li_[i];</div>\n-<div class=\"line\"><a id=\"l00324\" name=\"l00324\"></a><span class=\"lineno\"> 324</span> }</div>\n-<div class=\"line\"><a id=\"l00325\" name=\"l00325\"></a><span class=\"lineno\"> 325</span> </div>\n-<div class=\"line\"><a id=\"l00326\" name=\"l00326\"></a><span class=\"lineno\"> 326</span><span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00327\" name=\"l00327\"></a><span class=\"lineno\"> 327</span> </div>\n-<div class=\"line\"><a id=\"l00328\" name=\"l00328\"></a><span class=\"lineno\"> 328</span> <span class=\"comment\">// Number of shape functions on this element per coordinate direction</span></div>\n-<div class=\"line\"><a id=\"l00329\" name=\"l00329\"></a><span class=\"lineno\"> 329</span> std::array<unsigned, dim> sizes_;</div>\n-<div class=\"line\"><a id=\"l00330\" name=\"l00330\"></a><span class=\"lineno\"> 330</span> </div>\n-<div class=\"line\"><a id=\"l00331\" name=\"l00331\"></a><span class=\"lineno\"> 331</span> std::vector<LocalKey> li_;</div>\n-<div class=\"line\"><a id=\"l00332\" name=\"l00332\"></a><span class=\"lineno\"> 332</span>};</div>\n-<div class=\"line\"><a id=\"l00333\" name=\"l00333\"></a><span class=\"lineno\"> 333</span> </div>\n-<div class=\"line\"><a id=\"l00338\" name=\"l00338\"></a><span class=\"lineno\"> 338</span><span class=\"keyword\">template</span><<span class=\"keywordtype\">int</span> dim, <span class=\"keyword\">class</span> LB></div>\n-<div class=\"line\"><a id=\"l00339\" name=\"l00339\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01491.html\"> 339</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01491.html\">BSplineLocalInterpolation</a></div>\n-<div class=\"line\"><a id=\"l00340\" name=\"l00340\"></a><span class=\"lineno\"> 340</span>{</div>\n-<div class=\"line\"><a id=\"l00341\" name=\"l00341\"></a><span class=\"lineno\"> 341</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00343\" name=\"l00343\"></a><span class=\"lineno\"> 343</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> F, <span class=\"keyword\">typename</span> C></div>\n-<div class=\"line\"><a id=\"l00344\" name=\"l00344\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01491.html#a338c7d6e7a54eefba6398c11c5fa1531\"> 344</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01491.html#a338c7d6e7a54eefba6398c11c5fa1531\">interpolate</a> (<span class=\"keyword\">const</span> F& f, std::vector<C>& out)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00345\" name=\"l00345\"></a><span class=\"lineno\"> 345</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00346\" name=\"l00346\"></a><span class=\"lineno\"> 346</span> DUNE_THROW(NotImplemented, <span class=\"stringliteral\">"BSplineLocalInterpolation::interpolate"</span>);</div>\n-<div class=\"line\"><a id=\"l00347\" name=\"l00347\"></a><span class=\"lineno\"> 347</span> }</div>\n-<div class=\"line\"><a id=\"l00348\" name=\"l00348\"></a><span class=\"lineno\"> 348</span> </div>\n-<div class=\"line\"><a id=\"l00349\" name=\"l00349\"></a><span class=\"lineno\"> 349</span>};</div>\n-<div class=\"line\"><a id=\"l00350\" name=\"l00350\"></a><span class=\"lineno\"> 350</span> </div>\n-<div class=\"line\"><a id=\"l00360\" name=\"l00360\"></a><span class=\"lineno\"> 360</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> GV, <span class=\"keyword\">class</span> R></div>\n-<div class=\"line\"><a id=\"l00361\" name=\"l00361\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html\"> 361</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01475.html\">BSplineLocalFiniteElement</a></div>\n-<div class=\"line\"><a id=\"l00362\" name=\"l00362\"></a><span class=\"lineno\"> 362</span>{</div>\n-<div class=\"line\"><a id=\"l00363\" name=\"l00363\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html#a3be686013589f55bfb76ce3889538d13\"> 363</a></span> <span class=\"keyword\">typedef</span> <span class=\"keyword\">typename</span> GV::ctype D;</div>\n-<div class=\"line\"><a id=\"l00364\" name=\"l00364\"></a><span class=\"lineno\"> 364</span> <span class=\"keyword\">enum</span> {dim = GV::dimension};</div>\n-<div class=\"line\"><a id=\"l00365\" name=\"l00365\"></a><span class=\"lineno\"> 365</span> <span class=\"keyword\">friend</span> <span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01483.html\">BSplineLocalBasis</a><GV,R>;</div>\n-<div class=\"line\"><a id=\"l00366\" name=\"l00366\"></a><span class=\"lineno\"> 366</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00367\" name=\"l00367\"></a><span class=\"lineno\"> 367</span> </div>\n-<div class=\"line\"><a id=\"l00370\" name=\"l00370\"></a><span class=\"lineno\"> 370</span> <span class=\"keyword\">typedef</span> LocalFiniteElementTraits<BSplineLocalBasis<GV,R>,</div>\n-<div class=\"line\"><a id=\"l00371\" name=\"l00371\"></a><span class=\"lineno\"> 371</span> <a class=\"code hl_class\" href=\"a01487.html\">BSplineLocalCoefficients<dim></a>,</div>\n-<div class=\"line\"><a id=\"l00372\" name=\"l00372\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html#a6ea8a8267e93cbd52fed3395b7730817\"> 372</a></span> <a class=\"code hl_class\" href=\"a01491.html\">BSplineLocalInterpolation<dim,BSplineLocalBasis<GV,R></a> > > <a class=\"code hl_typedef\" href=\"a01475.html#a6ea8a8267e93cbd52fed3395b7730817\">Traits</a>;</div>\n-<div class=\"line\"><a id=\"l00373\" name=\"l00373\"></a><span class=\"lineno\"> 373</span> </div>\n-<div class=\"line\"><a id=\"l00376\" name=\"l00376\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html#a85328bfc4b5eb230da71a04dd8198f2f\"> 376</a></span> <a class=\"code hl_function\" href=\"a01475.html#a85328bfc4b5eb230da71a04dd8198f2f\">BSplineLocalFiniteElement</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01479.html\">BSplinePreBasis<GV></a>& preBasis)</div>\n-<div class=\"line\"><a id=\"l00377\" name=\"l00377\"></a><span class=\"lineno\"> 377</span> : <a class=\"code hl_variable\" href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\">preBasis_</a>(preBasis),</div>\n-<div class=\"line\"><a id=\"l00378\" name=\"l00378\"></a><span class=\"lineno\"> 378</span> <a class=\"code hl_variable\" href=\"a01475.html#adc958ccea9712397f9894c927c199d1d\">localBasis_</a>(preBasis,*this)</div>\n-<div class=\"line\"><a id=\"l00379\" name=\"l00379\"></a><span class=\"lineno\"> 379</span> {}</div>\n-<div class=\"line\"><a id=\"l00380\" name=\"l00380\"></a><span class=\"lineno\"> 380</span> </div>\n-<div class=\"line\"><a id=\"l00383\" name=\"l00383\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html#a056defb77857b94194963eaac1d9116e\"> 383</a></span> <a class=\"code hl_function\" href=\"a01475.html#a056defb77857b94194963eaac1d9116e\">BSplineLocalFiniteElement</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01475.html\">BSplineLocalFiniteElement</a>& other)</div>\n-<div class=\"line\"><a id=\"l00384\" name=\"l00384\"></a><span class=\"lineno\"> 384</span> : <a class=\"code hl_variable\" href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\">preBasis_</a>(other.<a class=\"code hl_variable\" href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\">preBasis_</a>),</div>\n-<div class=\"line\"><a id=\"l00385\" name=\"l00385\"></a><span class=\"lineno\"> 385</span> <a class=\"code hl_variable\" href=\"a01475.html#adc958ccea9712397f9894c927c199d1d\">localBasis_</a>(<a class=\"code hl_variable\" href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\">preBasis_</a>,*this)</div>\n-<div class=\"line\"><a id=\"l00386\" name=\"l00386\"></a><span class=\"lineno\"> 386</span> {}</div>\n-<div class=\"line\"><a id=\"l00387\" name=\"l00387\"></a><span class=\"lineno\"> 387</span> </div>\n-<div class=\"line\"><a id=\"l00394\" name=\"l00394\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html#a8986ef55edc552afc79a0c5fb20e93e9\"> 394</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01475.html#a8986ef55edc552afc79a0c5fb20e93e9\">bind</a>(<span class=\"keyword\">const</span> std::array<unsigned,dim>& elementIdx)</div>\n-<div class=\"line\"><a id=\"l00395\" name=\"l00395\"></a><span class=\"lineno\"> 395</span> {</div>\n-<div class=\"line\"><a id=\"l00396\" name=\"l00396\"></a><span class=\"lineno\"> 396</span> <span class=\"comment\">/* \\todo In the long run we need to precompute a table for this */</span></div>\n-<div class=\"line\"><a id=\"l00397\" name=\"l00397\"></a><span class=\"lineno\"> 397</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<elementIdx.size(); i++)</div>\n-<div class=\"line\"><a id=\"l00398\" name=\"l00398\"></a><span class=\"lineno\"> 398</span> {</div>\n-<div class=\"line\"><a id=\"l00399\" name=\"l00399\"></a><span class=\"lineno\"> 399</span> <a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>[i] = 0;</div>\n-<div class=\"line\"><a id=\"l00400\" name=\"l00400\"></a><span class=\"lineno\"> 400</span> </div>\n-<div class=\"line\"><a id=\"l00401\" name=\"l00401\"></a><span class=\"lineno\"> 401</span> <span class=\"comment\">// Skip over degenerate knot spans</span></div>\n-<div class=\"line\"><a id=\"l00402\" name=\"l00402\"></a><span class=\"lineno\"> 402</span> <span class=\"keywordflow\">while</span> (<a class=\"code hl_variable\" href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\">preBasis_</a>.knotVectors_[i][<a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>[i]+1] < <a class=\"code hl_variable\" href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\">preBasis_</a>.knotVectors_[i][<a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>[i]]+1e-8)</div>\n-<div class=\"line\"><a id=\"l00403\" name=\"l00403\"></a><span class=\"lineno\"> 403</span> <a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>[i]++;</div>\n-<div class=\"line\"><a id=\"l00404\" name=\"l00404\"></a><span class=\"lineno\"> 404</span> </div>\n-<div class=\"line\"><a id=\"l00405\" name=\"l00405\"></a><span class=\"lineno\"> 405</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> j=0; j<elementIdx[i]; j++)</div>\n-<div class=\"line\"><a id=\"l00406\" name=\"l00406\"></a><span class=\"lineno\"> 406</span> {</div>\n-<div class=\"line\"><a id=\"l00407\" name=\"l00407\"></a><span class=\"lineno\"> 407</span> <a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>[i]++;</div>\n-<div class=\"line\"><a id=\"l00408\" name=\"l00408\"></a><span class=\"lineno\"> 408</span> </div>\n-<div class=\"line\"><a id=\"l00409\" name=\"l00409\"></a><span class=\"lineno\"> 409</span> <span class=\"comment\">// Skip over degenerate knot spans</span></div>\n-<div class=\"line\"><a id=\"l00410\" name=\"l00410\"></a><span class=\"lineno\"> 410</span> <span class=\"keywordflow\">while</span> (<a class=\"code hl_variable\" href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\">preBasis_</a>.knotVectors_[i][<a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>[i]+1] < <a class=\"code hl_variable\" href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\">preBasis_</a>.knotVectors_[i][<a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>[i]]+1e-8)</div>\n-<div class=\"line\"><a id=\"l00411\" name=\"l00411\"></a><span class=\"lineno\"> 411</span> <a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>[i]++;</div>\n-<div class=\"line\"><a id=\"l00412\" name=\"l00412\"></a><span class=\"lineno\"> 412</span> }</div>\n-<div class=\"line\"><a id=\"l00413\" name=\"l00413\"></a><span class=\"lineno\"> 413</span> </div>\n-<div class=\"line\"><a id=\"l00414\" name=\"l00414\"></a><span class=\"lineno\"> 414</span> <span class=\"comment\">// Compute the geometric transformation from knotspan-local to global coordinates</span></div>\n-<div class=\"line\"><a id=\"l00415\" name=\"l00415\"></a><span class=\"lineno\"> 415</span> <a class=\"code hl_variable\" href=\"a01475.html#adc958ccea9712397f9894c927c199d1d\">localBasis_</a>.offset_[i] = <a class=\"code hl_variable\" href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\">preBasis_</a>.knotVectors_[i][<a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>[i]];</div>\n-<div class=\"line\"><a id=\"l00416\" name=\"l00416\"></a><span class=\"lineno\"> 416</span> <a class=\"code hl_variable\" href=\"a01475.html#adc958ccea9712397f9894c927c199d1d\">localBasis_</a>.scaling_[i][i] = <a class=\"code hl_variable\" href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\">preBasis_</a>.knotVectors_[i][<a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>[i]+1] - <a class=\"code hl_variable\" href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\">preBasis_</a>.knotVectors_[i][<a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>[i]];</div>\n-<div class=\"line\"><a id=\"l00417\" name=\"l00417\"></a><span class=\"lineno\"> 417</span> }</div>\n-<div class=\"line\"><a id=\"l00418\" name=\"l00418\"></a><span class=\"lineno\"> 418</span> </div>\n-<div class=\"line\"><a id=\"l00419\" name=\"l00419\"></a><span class=\"lineno\"> 419</span> <span class=\"comment\">// Set up the LocalCoefficients object</span></div>\n-<div class=\"line\"><a id=\"l00420\" name=\"l00420\"></a><span class=\"lineno\"> 420</span> std::array<unsigned int, dim> sizes;</div>\n-<div class=\"line\"><a id=\"l00421\" name=\"l00421\"></a><span class=\"lineno\"> 421</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<dim; i++)</div>\n-<div class=\"line\"><a id=\"l00422\" name=\"l00422\"></a><span class=\"lineno\"> 422</span> sizes[i] = <a class=\"code hl_function\" href=\"a01475.html#ab15469899e86cb97eece21be2e207162\">size</a>(i);</div>\n-<div class=\"line\"><a id=\"l00423\" name=\"l00423\"></a><span class=\"lineno\"> 423</span> <a class=\"code hl_variable\" href=\"a01475.html#acdec5e2d8a6827228df155110117108c\">localCoefficients_</a>.init(sizes);</div>\n-<div class=\"line\"><a id=\"l00424\" name=\"l00424\"></a><span class=\"lineno\"> 424</span> }</div>\n-<div class=\"line\"><a id=\"l00425\" name=\"l00425\"></a><span class=\"lineno\"> 425</span> </div>\n-<div class=\"line\"><a id=\"l00427\" name=\"l00427\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html#af2e635b34f6682599e45f34263b95326\"> 427</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01483.html\">BSplineLocalBasis<GV,R></a>& <a class=\"code hl_function\" href=\"a01475.html#af2e635b34f6682599e45f34263b95326\">localBasis</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00428\" name=\"l00428\"></a><span class=\"lineno\"> 428</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00429\" name=\"l00429\"></a><span class=\"lineno\"> 429</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01475.html#adc958ccea9712397f9894c927c199d1d\">localBasis_</a>;</div>\n-<div class=\"line\"><a id=\"l00430\" name=\"l00430\"></a><span class=\"lineno\"> 430</span> }</div>\n-<div class=\"line\"><a id=\"l00431\" name=\"l00431\"></a><span class=\"lineno\"> 431</span> </div>\n-<div class=\"line\"><a id=\"l00433\" name=\"l00433\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html#a896fba4c7d267d272cb866f5e7064877\"> 433</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01487.html\">BSplineLocalCoefficients<dim></a>& <a class=\"code hl_function\" href=\"a01475.html#a896fba4c7d267d272cb866f5e7064877\">localCoefficients</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00434\" name=\"l00434\"></a><span class=\"lineno\"> 434</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00435\" name=\"l00435\"></a><span class=\"lineno\"> 435</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01475.html#acdec5e2d8a6827228df155110117108c\">localCoefficients_</a>;</div>\n-<div class=\"line\"><a id=\"l00436\" name=\"l00436\"></a><span class=\"lineno\"> 436</span> }</div>\n-<div class=\"line\"><a id=\"l00437\" name=\"l00437\"></a><span class=\"lineno\"> 437</span> </div>\n-<div class=\"line\"><a id=\"l00439\" name=\"l00439\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html#a6663c7b259e38c50201d6341b426d96c\"> 439</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01491.html\">BSplineLocalInterpolation<dim,BSplineLocalBasis<GV,R></a> >& <a class=\"code hl_function\" href=\"a01475.html#a6663c7b259e38c50201d6341b426d96c\">localInterpolation</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00440\" name=\"l00440\"></a><span class=\"lineno\"> 440</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00441\" name=\"l00441\"></a><span class=\"lineno\"> 441</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01475.html#aa279d56a77941dce374774818d74434e\">localInterpolation_</a>;</div>\n-<div class=\"line\"><a id=\"l00442\" name=\"l00442\"></a><span class=\"lineno\"> 442</span> }</div>\n-<div class=\"line\"><a id=\"l00443\" name=\"l00443\"></a><span class=\"lineno\"> 443</span> </div>\n-<div class=\"line\"><a id=\"l00445\" name=\"l00445\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html#ab15469899e86cb97eece21be2e207162\"> 445</a></span> <span class=\"keywordtype\">unsigned</span> <a class=\"code hl_function\" href=\"a01475.html#ab15469899e86cb97eece21be2e207162\">size</a> ()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00446\" name=\"l00446\"></a><span class=\"lineno\"> 446</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00447\" name=\"l00447\"></a><span class=\"lineno\"> 447</span> std::size_t r = 1;</div>\n-<div class=\"line\"><a id=\"l00448\" name=\"l00448\"></a><span class=\"lineno\"> 448</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<dim; i++)</div>\n-<div class=\"line\"><a id=\"l00449\" name=\"l00449\"></a><span class=\"lineno\"> 449</span> r *= <a class=\"code hl_function\" href=\"a01475.html#ab15469899e86cb97eece21be2e207162\">size</a>(i);</div>\n-<div class=\"line\"><a id=\"l00450\" name=\"l00450\"></a><span class=\"lineno\"> 450</span> <span class=\"keywordflow\">return</span> r;</div>\n-<div class=\"line\"><a id=\"l00451\" name=\"l00451\"></a><span class=\"lineno\"> 451</span> }</div>\n-<div class=\"line\"><a id=\"l00452\" name=\"l00452\"></a><span class=\"lineno\"> 452</span> </div>\n-<div class=\"line\"><a id=\"l00455\" name=\"l00455\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html#aa67e3cd78a28ab0f2a64f78de18f47e2\"> 455</a></span> GeometryType <a class=\"code hl_function\" href=\"a01475.html#aa67e3cd78a28ab0f2a64f78de18f47e2\">type</a> ()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00456\" name=\"l00456\"></a><span class=\"lineno\"> 456</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00457\" name=\"l00457\"></a><span class=\"lineno\"> 457</span> <span class=\"keywordflow\">return</span> GeometryTypes::cube(dim);</div>\n-<div class=\"line\"><a id=\"l00458\" name=\"l00458\"></a><span class=\"lineno\"> 458</span> }</div>\n-<div class=\"line\"><a id=\"l00459\" name=\"l00459\"></a><span class=\"lineno\"> 459</span> </div>\n-<div class=\"line\"><a id=\"l00460\" name=\"l00460\"></a><span class=\"lineno\"> 460</span><span class=\"comment\">//private:</span></div>\n-<div class=\"line\"><a id=\"l00461\" name=\"l00461\"></a><span class=\"lineno\"> 461</span> </div>\n-<div class=\"line\"><a id=\"l00463\" name=\"l00463\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html#ace5084afe0e9f66e0dacc99fe80bf171\"> 463</a></span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_function\" href=\"a01475.html#ace5084afe0e9f66e0dacc99fe80bf171\">size</a>(<span class=\"keywordtype\">int</span> i)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00464\" name=\"l00464\"></a><span class=\"lineno\"> 464</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00465\" name=\"l00465\"></a><span class=\"lineno\"> 465</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& order = <a class=\"code hl_variable\" href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\">preBasis_</a>.order_;</div>\n-<div class=\"line\"><a id=\"l00466\" name=\"l00466\"></a><span class=\"lineno\"> 466</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> r = order[i]+1; <span class=\"comment\">// The 'normal' value</span></div>\n-<div class=\"line\"><a id=\"l00467\" name=\"l00467\"></a><span class=\"lineno\"> 467</span> <span class=\"keywordflow\">if</span> (<a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>[i]<order[i]) <span class=\"comment\">// Less near the left end of the knot vector</span></div>\n-<div class=\"line\"><a id=\"l00468\" name=\"l00468\"></a><span class=\"lineno\"> 468</span> r -= (order[i] - <a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>[i]);</div>\n-<div class=\"line\"><a id=\"l00469\" name=\"l00469\"></a><span class=\"lineno\"> 469</span> <span class=\"keywordflow\">if</span> ( order[i] > (<a class=\"code hl_variable\" href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\">preBasis_</a>.knotVectors_[i].size() - <a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>[i] - 2) )</div>\n-<div class=\"line\"><a id=\"l00470\" name=\"l00470\"></a><span class=\"lineno\"> 470</span> r -= order[i] - (<a class=\"code hl_variable\" href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\">preBasis_</a>.knotVectors_[i].size() - <a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>[i] - 2);</div>\n-<div class=\"line\"><a id=\"l00471\" name=\"l00471\"></a><span class=\"lineno\"> 471</span> <span class=\"keywordflow\">return</span> r;</div>\n-<div class=\"line\"><a id=\"l00472\" name=\"l00472\"></a><span class=\"lineno\"> 472</span> }</div>\n-<div class=\"line\"><a id=\"l00473\" name=\"l00473\"></a><span class=\"lineno\"> 473</span> </div>\n-<div class=\"line\"><a id=\"l00474\" name=\"l00474\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\"> 474</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01479.html\">BSplinePreBasis<GV></a>& <a class=\"code hl_variable\" href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\">preBasis_</a>;</div>\n-<div class=\"line\"><a id=\"l00475\" name=\"l00475\"></a><span class=\"lineno\"> 475</span> </div>\n-<div class=\"line\"><a id=\"l00476\" name=\"l00476\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html#adc958ccea9712397f9894c927c199d1d\"> 476</a></span> <a class=\"code hl_class\" href=\"a01483.html\">BSplineLocalBasis<GV,R></a> <a class=\"code hl_variable\" href=\"a01475.html#adc958ccea9712397f9894c927c199d1d\">localBasis_</a>;</div>\n-<div class=\"line\"><a id=\"l00477\" name=\"l00477\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html#acdec5e2d8a6827228df155110117108c\"> 477</a></span> <a class=\"code hl_class\" href=\"a01487.html\">BSplineLocalCoefficients<dim></a> <a class=\"code hl_variable\" href=\"a01475.html#acdec5e2d8a6827228df155110117108c\">localCoefficients_</a>;</div>\n-<div class=\"line\"><a id=\"l00478\" name=\"l00478\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html#aa279d56a77941dce374774818d74434e\"> 478</a></span> <a class=\"code hl_class\" href=\"a01491.html\">BSplineLocalInterpolation<dim,BSplineLocalBasis<GV,R></a> > <a class=\"code hl_variable\" href=\"a01475.html#aa279d56a77941dce374774818d74434e\">localInterpolation_</a>;</div>\n-<div class=\"line\"><a id=\"l00479\" name=\"l00479\"></a><span class=\"lineno\"> 479</span> </div>\n-<div class=\"line\"><a id=\"l00480\" name=\"l00480\"></a><span class=\"lineno\"> 480</span> <span class=\"comment\">// The knot span we are bound to</span></div>\n-<div class=\"line\"><a id=\"l00481\" name=\"l00481\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\"> 481</a></span> std::array<unsigned,dim> <a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>;</div>\n-<div class=\"line\"><a id=\"l00482\" name=\"l00482\"></a><span class=\"lineno\"> 482</span>};</div>\n-<div class=\"line\"><a id=\"l00483\" name=\"l00483\"></a><span class=\"lineno\"> 483</span> </div>\n-<div class=\"line\"><a id=\"l00484\" name=\"l00484\"></a><span class=\"lineno\"> 484</span> </div>\n-<div class=\"line\"><a id=\"l00485\" name=\"l00485\"></a><span class=\"lineno\"> 485</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV></div>\n-<div class=\"line\"><a id=\"l00486\" name=\"l00486\"></a><span class=\"lineno\"> 486</span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01495.html\">BSplineNode</a>;</div>\n-<div class=\"line\"><a id=\"l00487\" name=\"l00487\"></a><span class=\"lineno\"> 487</span> </div>\n-<div class=\"line\"><a id=\"l00497\" name=\"l00497\"></a><span class=\"lineno\"> 497</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV></div>\n-<div class=\"line\"><a id=\"l00498\" name=\"l00498\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html\"> 498</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01479.html\">BSplinePreBasis</a></div>\n-<div class=\"line\"><a id=\"l00499\" name=\"l00499\"></a><span class=\"lineno\"> 499</span>{</div>\n-<div class=\"line\"><a id=\"l00500\" name=\"l00500\"></a><span class=\"lineno\"> 500</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dim = GV::dimension;</div>\n-<div class=\"line\"><a id=\"l00501\" name=\"l00501\"></a><span class=\"lineno\"> 501</span> </div>\n-<div class=\"line\"><a id=\"l00503\" name=\"l00503\"></a><span class=\"lineno\"> 503</span> <span class=\"keyword\">class </span>MultiDigitCounter</div>\n-<div class=\"line\"><a id=\"l00504\" name=\"l00504\"></a><span class=\"lineno\"> 504</span> {</div>\n-<div class=\"line\"><a id=\"l00505\" name=\"l00505\"></a><span class=\"lineno\"> 505</span> <span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00506\" name=\"l00506\"></a><span class=\"lineno\"> 506</span> </div>\n-<div class=\"line\"><a id=\"l00510\" name=\"l00510\"></a><span class=\"lineno\"> 510</span> MultiDigitCounter(<span class=\"keyword\">const</span> std::array<unsigned int,dim>& limits)</div>\n-<div class=\"line\"><a id=\"l00511\" name=\"l00511\"></a><span class=\"lineno\"> 511</span> : limits_(limits)</div>\n-<div class=\"line\"><a id=\"l00512\" name=\"l00512\"></a><span class=\"lineno\"> 512</span> {</div>\n-<div class=\"line\"><a id=\"l00513\" name=\"l00513\"></a><span class=\"lineno\"> 513</span> std::fill(counter_.begin(), counter_.end(), 0);</div>\n-<div class=\"line\"><a id=\"l00514\" name=\"l00514\"></a><span class=\"lineno\"> 514</span> }</div>\n-<div class=\"line\"><a id=\"l00515\" name=\"l00515\"></a><span class=\"lineno\"> 515</span> </div>\n-<div class=\"line\"><a id=\"l00517\" name=\"l00517\"></a><span class=\"lineno\"> 517</span> MultiDigitCounter& operator++()</div>\n-<div class=\"line\"><a id=\"l00518\" name=\"l00518\"></a><span class=\"lineno\"> 518</span> {</div>\n-<div class=\"line\"><a id=\"l00519\" name=\"l00519\"></a><span class=\"lineno\"> 519</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<dim; i++)</div>\n-<div class=\"line\"><a id=\"l00520\" name=\"l00520\"></a><span class=\"lineno\"> 520</span> {</div>\n-<div class=\"line\"><a id=\"l00521\" name=\"l00521\"></a><span class=\"lineno\"> 521</span> ++counter_[i];</div>\n-<div class=\"line\"><a id=\"l00522\" name=\"l00522\"></a><span class=\"lineno\"> 522</span> </div>\n-<div class=\"line\"><a id=\"l00523\" name=\"l00523\"></a><span class=\"lineno\"> 523</span> <span class=\"comment\">// no overflow?</span></div>\n-<div class=\"line\"><a id=\"l00524\" name=\"l00524\"></a><span class=\"lineno\"> 524</span> <span class=\"keywordflow\">if</span> (counter_[i] < limits_[i])</div>\n-<div class=\"line\"><a id=\"l00525\" name=\"l00525\"></a><span class=\"lineno\"> 525</span> <span class=\"keywordflow\">break</span>;</div>\n-<div class=\"line\"><a id=\"l00526\" name=\"l00526\"></a><span class=\"lineno\"> 526</span> </div>\n-<div class=\"line\"><a id=\"l00527\" name=\"l00527\"></a><span class=\"lineno\"> 527</span> counter_[i] = 0;</div>\n-<div class=\"line\"><a id=\"l00528\" name=\"l00528\"></a><span class=\"lineno\"> 528</span> }</div>\n-<div class=\"line\"><a id=\"l00529\" name=\"l00529\"></a><span class=\"lineno\"> 529</span> <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>;</div>\n-<div class=\"line\"><a id=\"l00530\" name=\"l00530\"></a><span class=\"lineno\"> 530</span> }</div>\n-<div class=\"line\"><a id=\"l00531\" name=\"l00531\"></a><span class=\"lineno\"> 531</span> </div>\n-<div class=\"line\"><a id=\"l00533\" name=\"l00533\"></a><span class=\"lineno\"> 533</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>& operator[](<span class=\"keywordtype\">int</span> i)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00534\" name=\"l00534\"></a><span class=\"lineno\"> 534</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00535\" name=\"l00535\"></a><span class=\"lineno\"> 535</span> <span class=\"keywordflow\">return</span> counter_[i];</div>\n-<div class=\"line\"><a id=\"l00536\" name=\"l00536\"></a><span class=\"lineno\"> 536</span> }</div>\n-<div class=\"line\"><a id=\"l00537\" name=\"l00537\"></a><span class=\"lineno\"> 537</span> </div>\n-<div class=\"line\"><a id=\"l00539\" name=\"l00539\"></a><span class=\"lineno\"> 539</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> cycle()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00540\" name=\"l00540\"></a><span class=\"lineno\"> 540</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00541\" name=\"l00541\"></a><span class=\"lineno\"> 541</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> r = 1;</div>\n-<div class=\"line\"><a id=\"l00542\" name=\"l00542\"></a><span class=\"lineno\"> 542</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<dim; i++)</div>\n-<div class=\"line\"><a id=\"l00543\" name=\"l00543\"></a><span class=\"lineno\"> 543</span> r *= limits_[i];</div>\n-<div class=\"line\"><a id=\"l00544\" name=\"l00544\"></a><span class=\"lineno\"> 544</span> <span class=\"keywordflow\">return</span> r;</div>\n-<div class=\"line\"><a id=\"l00545\" name=\"l00545\"></a><span class=\"lineno\"> 545</span> }</div>\n-<div class=\"line\"><a id=\"l00546\" name=\"l00546\"></a><span class=\"lineno\"> 546</span> </div>\n-<div class=\"line\"><a id=\"l00547\" name=\"l00547\"></a><span class=\"lineno\"> 547</span> <span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00548\" name=\"l00548\"></a><span class=\"lineno\"> 548</span> </div>\n-<div class=\"line\"><a id=\"l00550\" name=\"l00550\"></a><span class=\"lineno\"> 550</span> <span class=\"keyword\">const</span> std::array<unsigned int,dim> limits_;</div>\n-<div class=\"line\"><a id=\"l00551\" name=\"l00551\"></a><span class=\"lineno\"> 551</span> </div>\n-<div class=\"line\"><a id=\"l00553\" name=\"l00553\"></a><span class=\"lineno\"> 553</span> std::array<unsigned int,dim> counter_;</div>\n-<div class=\"line\"><a id=\"l00554\" name=\"l00554\"></a><span class=\"lineno\"> 554</span> </div>\n-<div class=\"line\"><a id=\"l00555\" name=\"l00555\"></a><span class=\"lineno\"> 555</span> };</div>\n-<div class=\"line\"><a id=\"l00556\" name=\"l00556\"></a><span class=\"lineno\"> 556</span> </div>\n-<div class=\"line\"><a id=\"l00557\" name=\"l00557\"></a><span class=\"lineno\"> 557</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00558\" name=\"l00558\"></a><span class=\"lineno\"> 558</span> </div>\n-<div class=\"line\"><a id=\"l00560\" name=\"l00560\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a71f4090ddbb632644769cb0a9c5f394c\"> 560</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01479.html#a71f4090ddbb632644769cb0a9c5f394c\">GridView</a> = GV;</div>\n-<div class=\"line\"><a id=\"l00561\" name=\"l00561\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a7aa8059fdf68035788a75cb680e89cdd\"> 561</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01479.html#a7aa8059fdf68035788a75cb680e89cdd\">size_type</a> = std::size_t;</div>\n-<div class=\"line\"><a id=\"l00562\" name=\"l00562\"></a><span class=\"lineno\"> 562</span> </div>\n-<div class=\"line\"><a id=\"l00563\" name=\"l00563\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#ac9743d0867e738b7794f15aff1bcea35\"> 563</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01495.html\">Node</a> = <a class=\"code hl_class\" href=\"a01495.html\">BSplineNode<GV></a>;</div>\n-<div class=\"line\"><a id=\"l00564\" name=\"l00564\"></a><span class=\"lineno\"> 564</span> </div>\n-<div class=\"line\"><a id=\"l00565\" name=\"l00565\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a7ba55d70ff3c6d156bb31d2d52817533\"> 565</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01479.html#a7aa8059fdf68035788a75cb680e89cdd\">size_type</a> <a class=\"code hl_variable\" href=\"a01479.html#a7ba55d70ff3c6d156bb31d2d52817533\">maxMultiIndexSize</a> = 1;</div>\n-<div class=\"line\"><a id=\"l00566\" name=\"l00566\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#ae1482f3df0012d1fe5ce976cbc0b377a\"> 566</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01479.html#a7aa8059fdf68035788a75cb680e89cdd\">size_type</a> <a class=\"code hl_variable\" href=\"a01479.html#ae1482f3df0012d1fe5ce976cbc0b377a\">minMultiIndexSize</a> = 1;</div>\n-<div class=\"line\"><a id=\"l00567\" name=\"l00567\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a0051c4b5a4b375ab5d453ffa8902787d\"> 567</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01479.html#a7aa8059fdf68035788a75cb680e89cdd\">size_type</a> <a class=\"code hl_variable\" href=\"a01479.html#a0051c4b5a4b375ab5d453ffa8902787d\">multiIndexBufferSize</a> = 1;</div>\n-<div class=\"line\"><a id=\"l00568\" name=\"l00568\"></a><span class=\"lineno\"> 568</span> </div>\n-<div class=\"line\"><a id=\"l00569\" name=\"l00569\"></a><span class=\"lineno\"> 569</span> <span class=\"comment\">// Type used for function values</span></div>\n-<div class=\"line\"><a id=\"l00570\" name=\"l00570\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\"> 570</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a> = double;</div>\n-<div class=\"line\"><a id=\"l00571\" name=\"l00571\"></a><span class=\"lineno\"> 571</span> </div>\n-<div class=\"line\"><a id=\"l00590\" name=\"l00590\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#ad75bb49a82848a47e41698d9a7657e97\"> 590</a></span> <a class=\"code hl_function\" href=\"a01479.html#ad75bb49a82848a47e41698d9a7657e97\">BSplinePreBasis</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01479.html#a71f4090ddbb632644769cb0a9c5f394c\">GridView</a>& <a class=\"code hl_function\" href=\"a01479.html#ace12350629857a803f32d158bbf4dd25\">gridView</a>,</div>\n-<div class=\"line\"><a id=\"l00591\" name=\"l00591\"></a><span class=\"lineno\"> 591</span> <span class=\"keyword\">const</span> std::vector<double>& knotVector,</div>\n-<div class=\"line\"><a id=\"l00592\" name=\"l00592\"></a><span class=\"lineno\"> 592</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> order,</div>\n-<div class=\"line\"><a id=\"l00593\" name=\"l00593\"></a><span class=\"lineno\"> 593</span> <span class=\"keywordtype\">bool</span> makeOpen = <span class=\"keyword\">true</span>)</div>\n-<div class=\"line\"><a id=\"l00594\" name=\"l00594\"></a><span class=\"lineno\"> 594</span> : <a class=\"code hl_variable\" href=\"a01479.html#a141bd4b20ae309776f615f7ca33ce87b\">gridView_</a>(<a class=\"code hl_function\" href=\"a01479.html#ace12350629857a803f32d158bbf4dd25\">gridView</a>)</div>\n-<div class=\"line\"><a id=\"l00595\" name=\"l00595\"></a><span class=\"lineno\"> 595</span> {</div>\n-<div class=\"line\"><a id=\"l00596\" name=\"l00596\"></a><span class=\"lineno\"> 596</span> <span class=\"comment\">// \\todo Detection of duplicate knots</span></div>\n-<div class=\"line\"><a id=\"l00597\" name=\"l00597\"></a><span class=\"lineno\"> 597</span> std::fill(<a class=\"code hl_variable\" href=\"a01479.html#a08746400f31c37c2294fc700f467d291\">elements_</a>.begin(), <a class=\"code hl_variable\" href=\"a01479.html#a08746400f31c37c2294fc700f467d291\">elements_</a>.end(), knotVector.size()-1);</div>\n-<div class=\"line\"><a id=\"l00598\" name=\"l00598\"></a><span class=\"lineno\"> 598</span> </div>\n-<div class=\"line\"><a id=\"l00599\" name=\"l00599\"></a><span class=\"lineno\"> 599</span> <span class=\"comment\">// Mediocre sanity check: we don't know the number of grid elements in each direction.</span></div>\n-<div class=\"line\"><a id=\"l00600\" name=\"l00600\"></a><span class=\"lineno\"> 600</span> <span class=\"comment\">// but at least we know the total number of elements.</span></div>\n-<div class=\"line\"><a id=\"l00601\" name=\"l00601\"></a><span class=\"lineno\"> 601</span> assert( std::accumulate(<a class=\"code hl_variable\" href=\"a01479.html#a08746400f31c37c2294fc700f467d291\">elements_</a>.begin(), <a class=\"code hl_variable\" href=\"a01479.html#a08746400f31c37c2294fc700f467d291\">elements_</a>.end(), 1, std::multiplies<unsigned>()) == <a class=\"code hl_variable\" href=\"a01479.html#a141bd4b20ae309776f615f7ca33ce87b\">gridView_</a>.size(0) );</div>\n-<div class=\"line\"><a id=\"l00602\" name=\"l00602\"></a><span class=\"lineno\"> 602</span> </div>\n-<div class=\"line\"><a id=\"l00603\" name=\"l00603\"></a><span class=\"lineno\"> 603</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<dim; i++)</div>\n-<div class=\"line\"><a id=\"l00604\" name=\"l00604\"></a><span class=\"lineno\"> 604</span> {</div>\n-<div class=\"line\"><a id=\"l00605\" name=\"l00605\"></a><span class=\"lineno\"> 605</span> <span class=\"comment\">// Prepend the correct number of additional knots to open the knot vector</span></div>\n-<div class=\"line\"><a id=\"l00607\" name=\"l00607\"></a><span class=\"lineno\"> 607</span><span class=\"comment\"></span> <span class=\"keywordflow\">if</span> (makeOpen)</div>\n-<div class=\"line\"><a id=\"l00608\" name=\"l00608\"></a><span class=\"lineno\"> 608</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> j=0; j<order; j++)</div>\n-<div class=\"line\"><a id=\"l00609\" name=\"l00609\"></a><span class=\"lineno\"> 609</span> <a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i].push_back(knotVector[0]);</div>\n-<div class=\"line\"><a id=\"l00610\" name=\"l00610\"></a><span class=\"lineno\"> 610</span> </div>\n-<div class=\"line\"><a id=\"l00611\" name=\"l00611\"></a><span class=\"lineno\"> 611</span> <a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i].insert(<a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i].end(), knotVector.begin(), knotVector.end());</div>\n-<div class=\"line\"><a id=\"l00612\" name=\"l00612\"></a><span class=\"lineno\"> 612</span> </div>\n-<div class=\"line\"><a id=\"l00613\" name=\"l00613\"></a><span class=\"lineno\"> 613</span> <span class=\"keywordflow\">if</span> (makeOpen)</div>\n-<div class=\"line\"><a id=\"l00614\" name=\"l00614\"></a><span class=\"lineno\"> 614</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> j=0; j<order; j++)</div>\n-<div class=\"line\"><a id=\"l00615\" name=\"l00615\"></a><span class=\"lineno\"> 615</span> <a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i].push_back(knotVector.back());</div>\n-<div class=\"line\"><a id=\"l00616\" name=\"l00616\"></a><span class=\"lineno\"> 616</span> }</div>\n-<div class=\"line\"><a id=\"l00617\" name=\"l00617\"></a><span class=\"lineno\"> 617</span> </div>\n-<div class=\"line\"><a id=\"l00618\" name=\"l00618\"></a><span class=\"lineno\"> 618</span> std::fill(<a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>.begin(), <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>.end(), order);</div>\n-<div class=\"line\"><a id=\"l00619\" name=\"l00619\"></a><span class=\"lineno\"> 619</span> }</div>\n-<div class=\"line\"><a id=\"l00620\" name=\"l00620\"></a><span class=\"lineno\"> 620</span> </div>\n-<div class=\"line\"><a id=\"l00642\" name=\"l00642\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#afdc9d93d63de521026ce13ccc9f0e27e\"> 642</a></span> <a class=\"code hl_function\" href=\"a01479.html#afdc9d93d63de521026ce13ccc9f0e27e\">BSplinePreBasis</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01479.html#a71f4090ddbb632644769cb0a9c5f394c\">GridView</a>& <a class=\"code hl_function\" href=\"a01479.html#ace12350629857a803f32d158bbf4dd25\">gridView</a>,</div>\n-<div class=\"line\"><a id=\"l00643\" name=\"l00643\"></a><span class=\"lineno\"> 643</span> <span class=\"keyword\">const</span> FieldVector<double,dim>& lowerLeft,</div>\n-<div class=\"line\"><a id=\"l00644\" name=\"l00644\"></a><span class=\"lineno\"> 644</span> <span class=\"keyword\">const</span> FieldVector<double,dim>& upperRight,</div>\n-<div class=\"line\"><a id=\"l00645\" name=\"l00645\"></a><span class=\"lineno\"> 645</span> <span class=\"keyword\">const</span> std::array<unsigned int,dim>& elements,</div>\n-<div class=\"line\"><a id=\"l00646\" name=\"l00646\"></a><span class=\"lineno\"> 646</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> order,</div>\n-<div class=\"line\"><a id=\"l00647\" name=\"l00647\"></a><span class=\"lineno\"> 647</span> <span class=\"keywordtype\">bool</span> makeOpen = <span class=\"keyword\">true</span>)</div>\n-<div class=\"line\"><a id=\"l00648\" name=\"l00648\"></a><span class=\"lineno\"> 648</span> : <a class=\"code hl_variable\" href=\"a01479.html#a08746400f31c37c2294fc700f467d291\">elements_</a>(elements),</div>\n-<div class=\"line\"><a id=\"l00649\" name=\"l00649\"></a><span class=\"lineno\"> 649</span> <a class=\"code hl_variable\" href=\"a01479.html#a141bd4b20ae309776f615f7ca33ce87b\">gridView_</a>(<a class=\"code hl_function\" href=\"a01479.html#ace12350629857a803f32d158bbf4dd25\">gridView</a>)</div>\n-<div class=\"line\"><a id=\"l00650\" name=\"l00650\"></a><span class=\"lineno\"> 650</span> {</div>\n-<div class=\"line\"><a id=\"l00651\" name=\"l00651\"></a><span class=\"lineno\"> 651</span> <span class=\"comment\">// Mediocre sanity check: we don't know the number of grid elements in each direction.</span></div>\n-<div class=\"line\"><a id=\"l00652\" name=\"l00652\"></a><span class=\"lineno\"> 652</span> <span class=\"comment\">// but at least we know the total number of elements.</span></div>\n-<div class=\"line\"><a id=\"l00653\" name=\"l00653\"></a><span class=\"lineno\"> 653</span> assert( std::accumulate(<a class=\"code hl_variable\" href=\"a01479.html#a08746400f31c37c2294fc700f467d291\">elements_</a>.begin(), <a class=\"code hl_variable\" href=\"a01479.html#a08746400f31c37c2294fc700f467d291\">elements_</a>.end(), 1, std::multiplies<unsigned>()) == <a class=\"code hl_variable\" href=\"a01479.html#a141bd4b20ae309776f615f7ca33ce87b\">gridView_</a>.size(0) );</div>\n-<div class=\"line\"><a id=\"l00654\" name=\"l00654\"></a><span class=\"lineno\"> 654</span> </div>\n-<div class=\"line\"><a id=\"l00655\" name=\"l00655\"></a><span class=\"lineno\"> 655</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<dim; i++)</div>\n-<div class=\"line\"><a id=\"l00656\" name=\"l00656\"></a><span class=\"lineno\"> 656</span> {</div>\n-<div class=\"line\"><a id=\"l00657\" name=\"l00657\"></a><span class=\"lineno\"> 657</span> <span class=\"comment\">// Prepend the correct number of additional knots to open the knot vector</span></div>\n-<div class=\"line\"><a id=\"l00659\" name=\"l00659\"></a><span class=\"lineno\"> 659</span><span class=\"comment\"></span> <span class=\"keywordflow\">if</span> (makeOpen)</div>\n-<div class=\"line\"><a id=\"l00660\" name=\"l00660\"></a><span class=\"lineno\"> 660</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> j=0; j<order; j++)</div>\n-<div class=\"line\"><a id=\"l00661\" name=\"l00661\"></a><span class=\"lineno\"> 661</span> <a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i].push_back(lowerLeft[i]);</div>\n-<div class=\"line\"><a id=\"l00662\" name=\"l00662\"></a><span class=\"lineno\"> 662</span> </div>\n-<div class=\"line\"><a id=\"l00663\" name=\"l00663\"></a><span class=\"lineno\"> 663</span> <span class=\"comment\">// Construct the actual knot vector</span></div>\n-<div class=\"line\"><a id=\"l00664\" name=\"l00664\"></a><span class=\"lineno\"> 664</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> j=0; j<elements[i]+1; j++)</div>\n-<div class=\"line\"><a id=\"l00665\" name=\"l00665\"></a><span class=\"lineno\"> 665</span> <a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i].push_back(lowerLeft[i] + j*(upperRight[i]-lowerLeft[i]) / elements[i]);</div>\n-<div class=\"line\"><a id=\"l00666\" name=\"l00666\"></a><span class=\"lineno\"> 666</span> </div>\n-<div class=\"line\"><a id=\"l00667\" name=\"l00667\"></a><span class=\"lineno\"> 667</span> <span class=\"keywordflow\">if</span> (makeOpen)</div>\n-<div class=\"line\"><a id=\"l00668\" name=\"l00668\"></a><span class=\"lineno\"> 668</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> j=0; j<order; j++)</div>\n-<div class=\"line\"><a id=\"l00669\" name=\"l00669\"></a><span class=\"lineno\"> 669</span> <a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i].push_back(upperRight[i]);</div>\n-<div class=\"line\"><a id=\"l00670\" name=\"l00670\"></a><span class=\"lineno\"> 670</span> }</div>\n-<div class=\"line\"><a id=\"l00671\" name=\"l00671\"></a><span class=\"lineno\"> 671</span> </div>\n-<div class=\"line\"><a id=\"l00672\" name=\"l00672\"></a><span class=\"lineno\"> 672</span> std::fill(<a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>.begin(), <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>.end(), order);</div>\n-<div class=\"line\"><a id=\"l00673\" name=\"l00673\"></a><span class=\"lineno\"> 673</span> }</div>\n-<div class=\"line\"><a id=\"l00674\" name=\"l00674\"></a><span class=\"lineno\"> 674</span> </div>\n-<div class=\"line\"><a id=\"l00676\" name=\"l00676\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a9292ccd68d50240f94f75f54989fd7dd\"> 676</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01479.html#a9292ccd68d50240f94f75f54989fd7dd\">initializeIndices</a>()</div>\n-<div class=\"line\"><a id=\"l00677\" name=\"l00677\"></a><span class=\"lineno\"> 677</span> {}</div>\n-<div class=\"line\"><a id=\"l00678\" name=\"l00678\"></a><span class=\"lineno\"> 678</span> </div>\n-<div class=\"line\"><a id=\"l00680\" name=\"l00680\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#ace12350629857a803f32d158bbf4dd25\"> 680</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01479.html#a71f4090ddbb632644769cb0a9c5f394c\">GridView</a>& <a class=\"code hl_function\" href=\"a01479.html#ace12350629857a803f32d158bbf4dd25\">gridView</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00681\" name=\"l00681\"></a><span class=\"lineno\"> 681</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00682\" name=\"l00682\"></a><span class=\"lineno\"> 682</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01479.html#a141bd4b20ae309776f615f7ca33ce87b\">gridView_</a>;</div>\n-<div class=\"line\"><a id=\"l00683\" name=\"l00683\"></a><span class=\"lineno\"> 683</span> }</div>\n-<div class=\"line\"><a id=\"l00684\" name=\"l00684\"></a><span class=\"lineno\"> 684</span> </div>\n-<div class=\"line\"><a id=\"l00686\" name=\"l00686\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a7e14d2f4019dbe19e9d6595bc4f60d65\"> 686</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01479.html#a7e14d2f4019dbe19e9d6595bc4f60d65\">update</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01479.html#a71f4090ddbb632644769cb0a9c5f394c\">GridView</a>& gv)</div>\n-<div class=\"line\"><a id=\"l00687\" name=\"l00687\"></a><span class=\"lineno\"> 687</span> {</div>\n-<div class=\"line\"><a id=\"l00688\" name=\"l00688\"></a><span class=\"lineno\"> 688</span> <a class=\"code hl_variable\" href=\"a01479.html#a141bd4b20ae309776f615f7ca33ce87b\">gridView_</a> = gv;</div>\n-<div class=\"line\"><a id=\"l00689\" name=\"l00689\"></a><span class=\"lineno\"> 689</span> }</div>\n-<div class=\"line\"><a id=\"l00690\" name=\"l00690\"></a><span class=\"lineno\"> 690</span> </div>\n-<div class=\"line\"><a id=\"l00694\" name=\"l00694\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#ad63b66afedd5483d385a116e1244fdbd\"> 694</a></span> <a class=\"code hl_class\" href=\"a01495.html\">Node</a> <a class=\"code hl_function\" href=\"a01479.html#ad63b66afedd5483d385a116e1244fdbd\">makeNode</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00695\" name=\"l00695\"></a><span class=\"lineno\"> 695</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00696\" name=\"l00696\"></a><span class=\"lineno\"> 696</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01495.html\">Node</a>{<span class=\"keyword\">this</span>};</div>\n-<div class=\"line\"><a id=\"l00697\" name=\"l00697\"></a><span class=\"lineno\"> 697</span> }</div>\n-<div class=\"line\"><a id=\"l00698\" name=\"l00698\"></a><span class=\"lineno\"> 698</span> </div>\n-<div class=\"line\"><a id=\"l00699\" name=\"l00699\"></a><span class=\"lineno\"> 699</span> <span class=\"comment\">// Ideally this method should be implemented as</span></div>\n-<div class=\"line\"><a id=\"l00700\" name=\"l00700\"></a><span class=\"lineno\"> 700</span> <span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l00701\" name=\"l00701\"></a><span class=\"lineno\"> 701</span> <span class=\"comment\">// template<class SizePrefix></span></div>\n-<div class=\"line\"><a id=\"l00702\" name=\"l00702\"></a><span class=\"lineno\"> 702</span> <span class=\"comment\">// size_type size(const SizePrefix& prefix) const</span></div>\n-<div class=\"line\"><a id=\"l00703\" name=\"l00703\"></a><span class=\"lineno\"> 703</span> <span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l00704\" name=\"l00704\"></a><span class=\"lineno\"> 704</span> <span class=\"comment\">// But leads to ambiguity with the other size method:</span></div>\n-<div class=\"line\"><a id=\"l00705\" name=\"l00705\"></a><span class=\"lineno\"> 705</span> <span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l00706\" name=\"l00706\"></a><span class=\"lineno\"> 706</span> <span class=\"comment\">// unsigned int size (size_t d) const</span></div>\n-<div class=\"line\"><a id=\"l00707\" name=\"l00707\"></a><span class=\"lineno\"> 707</span> <span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l00708\" name=\"l00708\"></a><span class=\"lineno\"> 708</span> <span class=\"comment\">// Once the latter is removed, this implementation should be changed.</span></div>\n-<div class=\"line\"><a id=\"l00709\" name=\"l00709\"></a><span class=\"lineno\"> 709</span> </div>\n-<div class=\"line\"><a id=\"l00711\" name=\"l00711\"></a><span class=\"lineno\"> 711</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> ST, <span class=\"keywordtype\">int</span> i></div>\n-<div class=\"line\"><a id=\"l00712\" name=\"l00712\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#aae5d004ab9ccf9fb1d597505d493895a\"> 712</a></span> <a class=\"code hl_typedef\" href=\"a01479.html#a7aa8059fdf68035788a75cb680e89cdd\">size_type</a> <a class=\"code hl_function\" href=\"a01479.html#aae5d004ab9ccf9fb1d597505d493895a\">size</a>(<span class=\"keyword\">const</span> Dune::ReservedVector<ST, i>& prefix)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00713\" name=\"l00713\"></a><span class=\"lineno\"> 713</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00714\" name=\"l00714\"></a><span class=\"lineno\"> 714</span> assert(prefix.size() == 0 || prefix.size() == 1);</div>\n-<div class=\"line\"><a id=\"l00715\" name=\"l00715\"></a><span class=\"lineno\"> 715</span> <span class=\"keywordflow\">return</span> (prefix.size() == 0) ? <a class=\"code hl_function\" href=\"a01479.html#acbd350edf10b11a798c8d59285619646\">size</a>() : 0;</div>\n-<div class=\"line\"><a id=\"l00716\" name=\"l00716\"></a><span class=\"lineno\"> 716</span> }</div>\n-<div class=\"line\"><a id=\"l00717\" name=\"l00717\"></a><span class=\"lineno\"> 717</span> </div>\n-<div class=\"line\"><a id=\"l00719\" name=\"l00719\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a3ea7b013cc2160f1705b5567e613a568\"> 719</a></span> <a class=\"code hl_typedef\" href=\"a01479.html#a7aa8059fdf68035788a75cb680e89cdd\">size_type</a> <a class=\"code hl_function\" href=\"a01479.html#a3ea7b013cc2160f1705b5567e613a568\">dimension</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00720\" name=\"l00720\"></a><span class=\"lineno\"> 720</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00721\" name=\"l00721\"></a><span class=\"lineno\"> 721</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01479.html#acbd350edf10b11a798c8d59285619646\">size</a>();</div>\n-<div class=\"line\"><a id=\"l00722\" name=\"l00722\"></a><span class=\"lineno\"> 722</span> }</div>\n-<div class=\"line\"><a id=\"l00723\" name=\"l00723\"></a><span class=\"lineno\"> 723</span> </div>\n-<div class=\"line\"><a id=\"l00725\" name=\"l00725\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#af1b76255a0f308dbe049db50807ea041\"> 725</a></span> <a class=\"code hl_typedef\" href=\"a01479.html#a7aa8059fdf68035788a75cb680e89cdd\">size_type</a> <a class=\"code hl_function\" href=\"a01479.html#af1b76255a0f308dbe049db50807ea041\">maxNodeSize</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00726\" name=\"l00726\"></a><span class=\"lineno\"> 726</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00727\" name=\"l00727\"></a><span class=\"lineno\"> 727</span> <a class=\"code hl_typedef\" href=\"a01479.html#a7aa8059fdf68035788a75cb680e89cdd\">size_type</a> result = 1;</div>\n-<div class=\"line\"><a id=\"l00728\" name=\"l00728\"></a><span class=\"lineno\"> 728</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<dim; i++)</div>\n-<div class=\"line\"><a id=\"l00729\" name=\"l00729\"></a><span class=\"lineno\"> 729</span> result *= <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i]+1;</div>\n-<div class=\"line\"><a id=\"l00730\" name=\"l00730\"></a><span class=\"lineno\"> 730</span> <span class=\"keywordflow\">return</span> result;</div>\n-<div class=\"line\"><a id=\"l00731\" name=\"l00731\"></a><span class=\"lineno\"> 731</span> }</div>\n-<div class=\"line\"><a id=\"l00732\" name=\"l00732\"></a><span class=\"lineno\"> 732</span> </div>\n-<div class=\"line\"><a id=\"l00734\" name=\"l00734\"></a><span class=\"lineno\"> 734</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n-<div class=\"line\"><a id=\"l00735\" name=\"l00735\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a751c671d2effffac3167f66b1fe5755d\"> 735</a></span> It <a class=\"code hl_function\" href=\"a01479.html#a751c671d2effffac3167f66b1fe5755d\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01495.html\">Node</a>& node, It it)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00736\" name=\"l00736\"></a><span class=\"lineno\"> 736</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00737\" name=\"l00737\"></a><span class=\"lineno\"> 737</span> <span class=\"comment\">// Local degrees of freedom are arranged in a lattice.</span></div>\n-<div class=\"line\"><a id=\"l00738\" name=\"l00738\"></a><span class=\"lineno\"> 738</span> <span class=\"comment\">// We need the lattice dimensions to be able to compute lattice coordinates from a local index</span></div>\n-<div class=\"line\"><a id=\"l00739\" name=\"l00739\"></a><span class=\"lineno\"> 739</span> std::array<unsigned int, dim> localSizes;</div>\n-<div class=\"line\"><a id=\"l00740\" name=\"l00740\"></a><span class=\"lineno\"> 740</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<dim; i++)</div>\n-<div class=\"line\"><a id=\"l00741\" name=\"l00741\"></a><span class=\"lineno\"> 741</span> localSizes[i] = node.<a class=\"code hl_function\" href=\"a01495.html#a061007133830a1181adc187c1f6f692b\">finiteElement</a>().<a class=\"code hl_function\" href=\"a01475.html#ab15469899e86cb97eece21be2e207162\">size</a>(i);</div>\n-<div class=\"line\"><a id=\"l00742\" name=\"l00742\"></a><span class=\"lineno\"> 742</span> <span class=\"keywordflow\">for</span> (<a class=\"code hl_typedef\" href=\"a01479.html#a7aa8059fdf68035788a75cb680e89cdd\">size_type</a> i = 0, end = node.<a class=\"code hl_function\" href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">size</a>() ; i < end ; ++i, ++it)</div>\n-<div class=\"line\"><a id=\"l00743\" name=\"l00743\"></a><span class=\"lineno\"> 743</span> {</div>\n-<div class=\"line\"><a id=\"l00744\" name=\"l00744\"></a><span class=\"lineno\"> 744</span> std::array<unsigned int,dim> localIJK = <a class=\"code hl_function\" href=\"a01479.html#ad49a0bd70180481c702887c873386897\">getIJK</a>(i, localSizes);</div>\n-<div class=\"line\"><a id=\"l00745\" name=\"l00745\"></a><span class=\"lineno\"> 745</span> </div>\n-<div class=\"line\"><a id=\"l00746\" name=\"l00746\"></a><span class=\"lineno\"> 746</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span> currentKnotSpan = node.<a class=\"code hl_function\" href=\"a01495.html#a061007133830a1181adc187c1f6f692b\">finiteElement</a>().<a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>;</div>\n-<div class=\"line\"><a id=\"l00747\" name=\"l00747\"></a><span class=\"lineno\"> 747</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span> order = <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>;</div>\n-<div class=\"line\"><a id=\"l00748\" name=\"l00748\"></a><span class=\"lineno\"> 748</span> </div>\n-<div class=\"line\"><a id=\"l00749\" name=\"l00749\"></a><span class=\"lineno\"> 749</span> std::array<unsigned int,dim> globalIJK;</div>\n-<div class=\"line\"><a id=\"l00750\" name=\"l00750\"></a><span class=\"lineno\"> 750</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<dim; i++)</div>\n-<div class=\"line\"><a id=\"l00751\" name=\"l00751\"></a><span class=\"lineno\"> 751</span> globalIJK[i] = std::max((<span class=\"keywordtype\">int</span>)currentKnotSpan[i] - (<span class=\"keywordtype\">int</span>)order[i], 0) + localIJK[i]; <span class=\"comment\">// needs to be a signed type!</span></div>\n-<div class=\"line\"><a id=\"l00752\" name=\"l00752\"></a><span class=\"lineno\"> 752</span> </div>\n-<div class=\"line\"><a id=\"l00753\" name=\"l00753\"></a><span class=\"lineno\"> 753</span> <span class=\"comment\">// Make one global flat index from the globalIJK tuple</span></div>\n-<div class=\"line\"><a id=\"l00754\" name=\"l00754\"></a><span class=\"lineno\"> 754</span> <a class=\"code hl_typedef\" href=\"a01479.html#a7aa8059fdf68035788a75cb680e89cdd\">size_type</a> globalIdx = globalIJK[dim-1];</div>\n-<div class=\"line\"><a id=\"l00755\" name=\"l00755\"></a><span class=\"lineno\"> 755</span> </div>\n-<div class=\"line\"><a id=\"l00756\" name=\"l00756\"></a><span class=\"lineno\"> 756</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=dim-2; i>=0; i--)</div>\n-<div class=\"line\"><a id=\"l00757\" name=\"l00757\"></a><span class=\"lineno\"> 757</span> globalIdx = globalIdx * <a class=\"code hl_function\" href=\"a01479.html#acbd350edf10b11a798c8d59285619646\">size</a>(i) + globalIJK[i];</div>\n-<div class=\"line\"><a id=\"l00758\" name=\"l00758\"></a><span class=\"lineno\"> 758</span> </div>\n-<div class=\"line\"><a id=\"l00759\" name=\"l00759\"></a><span class=\"lineno\"> 759</span> *it = {{globalIdx}};</div>\n-<div class=\"line\"><a id=\"l00760\" name=\"l00760\"></a><span class=\"lineno\"> 760</span> }</div>\n-<div class=\"line\"><a id=\"l00761\" name=\"l00761\"></a><span class=\"lineno\"> 761</span> <span class=\"keywordflow\">return</span> it;</div>\n-<div class=\"line\"><a id=\"l00762\" name=\"l00762\"></a><span class=\"lineno\"> 762</span> }</div>\n-<div class=\"line\"><a id=\"l00763\" name=\"l00763\"></a><span class=\"lineno\"> 763</span> </div>\n-<div class=\"line\"><a id=\"l00765\" name=\"l00765\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#acbd350edf10b11a798c8d59285619646\"> 765</a></span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_function\" href=\"a01479.html#acbd350edf10b11a798c8d59285619646\">size</a> ()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00766\" name=\"l00766\"></a><span class=\"lineno\"> 766</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00767\" name=\"l00767\"></a><span class=\"lineno\"> 767</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> result = 1;</div>\n-<div class=\"line\"><a id=\"l00768\" name=\"l00768\"></a><span class=\"lineno\"> 768</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<dim; i++)</div>\n-<div class=\"line\"><a id=\"l00769\" name=\"l00769\"></a><span class=\"lineno\"> 769</span> result *= <a class=\"code hl_function\" href=\"a01479.html#acbd350edf10b11a798c8d59285619646\">size</a>(i);</div>\n-<div class=\"line\"><a id=\"l00770\" name=\"l00770\"></a><span class=\"lineno\"> 770</span> <span class=\"keywordflow\">return</span> result;</div>\n-<div class=\"line\"><a id=\"l00771\" name=\"l00771\"></a><span class=\"lineno\"> 771</span> }</div>\n-<div class=\"line\"><a id=\"l00772\" name=\"l00772\"></a><span class=\"lineno\"> 772</span> </div>\n-<div class=\"line\"><a id=\"l00774\" name=\"l00774\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a6522976d7c91ec4cbf1a193c1b114656\"> 774</a></span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_function\" href=\"a01479.html#a6522976d7c91ec4cbf1a193c1b114656\">size</a> (<span class=\"keywordtype\">size_t</span> d)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00775\" name=\"l00775\"></a><span class=\"lineno\"> 775</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00776\" name=\"l00776\"></a><span class=\"lineno\"> 776</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[d].size() - <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[d] - 1;</div>\n-<div class=\"line\"><a id=\"l00777\" name=\"l00777\"></a><span class=\"lineno\"> 777</span> }</div>\n-<div class=\"line\"><a id=\"l00778\" name=\"l00778\"></a><span class=\"lineno\"> 778</span> </div>\n-<div class=\"line\"><a id=\"l00781\" name=\"l00781\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a2f03d19256812e423ba918e480c03a7b\"> 781</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01479.html#a2f03d19256812e423ba918e480c03a7b\">evaluateFunction</a> (<span class=\"keyword\">const</span> FieldVector<typename GV::ctype,dim>& in,</div>\n-<div class=\"line\"><a id=\"l00782\" name=\"l00782\"></a><span class=\"lineno\"> 782</span> std::vector<FieldVector<R,1> >& out,</div>\n-<div class=\"line\"><a id=\"l00783\" name=\"l00783\"></a><span class=\"lineno\"> 783</span> <span class=\"keyword\">const</span> std::array<unsigned,dim>& currentKnotSpan)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00784\" name=\"l00784\"></a><span class=\"lineno\"> 784</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00785\" name=\"l00785\"></a><span class=\"lineno\"> 785</span> <span class=\"comment\">// Evaluate</span></div>\n-<div class=\"line\"><a id=\"l00786\" name=\"l00786\"></a><span class=\"lineno\"> 786</span> std::array<std::vector<R>, dim> oneDValues;</div>\n-<div class=\"line\"><a id=\"l00787\" name=\"l00787\"></a><span class=\"lineno\"> 787</span> </div>\n-<div class=\"line\"><a id=\"l00788\" name=\"l00788\"></a><span class=\"lineno\"> 788</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<dim; i++)</div>\n-<div class=\"line\"><a id=\"l00789\" name=\"l00789\"></a><span class=\"lineno\"> 789</span> <a class=\"code hl_function\" href=\"a01479.html#a2f03d19256812e423ba918e480c03a7b\">evaluateFunction</a>(in[i], oneDValues[i], <a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i], <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i], currentKnotSpan[i]);</div>\n-<div class=\"line\"><a id=\"l00790\" name=\"l00790\"></a><span class=\"lineno\"> 790</span> </div>\n-<div class=\"line\"><a id=\"l00791\" name=\"l00791\"></a><span class=\"lineno\"> 791</span> std::array<unsigned int, dim> limits;</div>\n-<div class=\"line\"><a id=\"l00792\" name=\"l00792\"></a><span class=\"lineno\"> 792</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<dim; i++)</div>\n-<div class=\"line\"><a id=\"l00793\" name=\"l00793\"></a><span class=\"lineno\"> 793</span> limits[i] = oneDValues[i].<a class=\"code hl_function\" href=\"a01479.html#acbd350edf10b11a798c8d59285619646\">size</a>();</div>\n-<div class=\"line\"><a id=\"l00794\" name=\"l00794\"></a><span class=\"lineno\"> 794</span> </div>\n-<div class=\"line\"><a id=\"l00795\" name=\"l00795\"></a><span class=\"lineno\"> 795</span> MultiDigitCounter ijkCounter(limits);</div>\n-<div class=\"line\"><a id=\"l00796\" name=\"l00796\"></a><span class=\"lineno\"> 796</span> </div>\n-<div class=\"line\"><a id=\"l00797\" name=\"l00797\"></a><span class=\"lineno\"> 797</span> out.resize(ijkCounter.cycle());</div>\n-<div class=\"line\"><a id=\"l00798\" name=\"l00798\"></a><span class=\"lineno\"> 798</span> </div>\n-<div class=\"line\"><a id=\"l00799\" name=\"l00799\"></a><span class=\"lineno\"> 799</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<out.size(); i++, ++ijkCounter)</div>\n-<div class=\"line\"><a id=\"l00800\" name=\"l00800\"></a><span class=\"lineno\"> 800</span> {</div>\n-<div class=\"line\"><a id=\"l00801\" name=\"l00801\"></a><span class=\"lineno\"> 801</span> out[i] = <a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a>(1.0);</div>\n-<div class=\"line\"><a id=\"l00802\" name=\"l00802\"></a><span class=\"lineno\"> 802</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> j=0; j<dim; j++)</div>\n-<div class=\"line\"><a id=\"l00803\" name=\"l00803\"></a><span class=\"lineno\"> 803</span> out[i] *= oneDValues[j][ijkCounter[j]];</div>\n-<div class=\"line\"><a id=\"l00804\" name=\"l00804\"></a><span class=\"lineno\"> 804</span> }</div>\n-<div class=\"line\"><a id=\"l00805\" name=\"l00805\"></a><span class=\"lineno\"> 805</span> }</div>\n-<div class=\"line\"><a id=\"l00806\" name=\"l00806\"></a><span class=\"lineno\"> 806</span> </div>\n-<div class=\"line\"><a id=\"l00812\" name=\"l00812\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#addecbb0942b0fa43f0abec42f1c848ab\"> 812</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01479.html#addecbb0942b0fa43f0abec42f1c848ab\">evaluateJacobian</a> (<span class=\"keyword\">const</span> FieldVector<typename GV::ctype,dim>& in,</div>\n-<div class=\"line\"><a id=\"l00813\" name=\"l00813\"></a><span class=\"lineno\"> 813</span> std::vector<FieldMatrix<R,1,dim> >& out,</div>\n-<div class=\"line\"><a id=\"l00814\" name=\"l00814\"></a><span class=\"lineno\"> 814</span> <span class=\"keyword\">const</span> std::array<unsigned,dim>& currentKnotSpan)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00815\" name=\"l00815\"></a><span class=\"lineno\"> 815</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00816\" name=\"l00816\"></a><span class=\"lineno\"> 816</span> <span class=\"comment\">// How many shape functions to we have in each coordinate direction?</span></div>\n-<div class=\"line\"><a id=\"l00817\" name=\"l00817\"></a><span class=\"lineno\"> 817</span> std::array<unsigned int, dim> limits;</div>\n-<div class=\"line\"><a id=\"l00818\" name=\"l00818\"></a><span class=\"lineno\"> 818</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<dim; i++)</div>\n-<div class=\"line\"><a id=\"l00819\" name=\"l00819\"></a><span class=\"lineno\"> 819</span> {</div>\n-<div class=\"line\"><a id=\"l00820\" name=\"l00820\"></a><span class=\"lineno\"> 820</span> limits[i] = <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i]+1; <span class=\"comment\">// The 'standard' value away from the boundaries of the knot vector</span></div>\n-<div class=\"line\"><a id=\"l00821\" name=\"l00821\"></a><span class=\"lineno\"> 821</span> <span class=\"keywordflow\">if</span> (currentKnotSpan[i]<<a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i])</div>\n-<div class=\"line\"><a id=\"l00822\" name=\"l00822\"></a><span class=\"lineno\"> 822</span> limits[i] -= (<a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i] - currentKnotSpan[i]);</div>\n-<div class=\"line\"><a id=\"l00823\" name=\"l00823\"></a><span class=\"lineno\"> 823</span> <span class=\"keywordflow\">if</span> ( <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i] > (<a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i].<a class=\"code hl_function\" href=\"a01479.html#acbd350edf10b11a798c8d59285619646\">size</a>() - currentKnotSpan[i] - 2) )</div>\n-<div class=\"line\"><a id=\"l00824\" name=\"l00824\"></a><span class=\"lineno\"> 824</span> limits[i] -= <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i] - (<a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i].<a class=\"code hl_function\" href=\"a01479.html#acbd350edf10b11a798c8d59285619646\">size</a>() - currentKnotSpan[i] - 2);</div>\n-<div class=\"line\"><a id=\"l00825\" name=\"l00825\"></a><span class=\"lineno\"> 825</span> }</div>\n-<div class=\"line\"><a id=\"l00826\" name=\"l00826\"></a><span class=\"lineno\"> 826</span> </div>\n-<div class=\"line\"><a id=\"l00827\" name=\"l00827\"></a><span class=\"lineno\"> 827</span> <span class=\"comment\">// The lowest knot spans that we need values from</span></div>\n-<div class=\"line\"><a id=\"l00828\" name=\"l00828\"></a><span class=\"lineno\"> 828</span> std::array<unsigned int, dim> offset;</div>\n-<div class=\"line\"><a id=\"l00829\" name=\"l00829\"></a><span class=\"lineno\"> 829</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<dim; i++)</div>\n-<div class=\"line\"><a id=\"l00830\" name=\"l00830\"></a><span class=\"lineno\"> 830</span> offset[i] = std::max((<span class=\"keywordtype\">int</span>)(currentKnotSpan[i] - <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i]),0);</div>\n-<div class=\"line\"><a id=\"l00831\" name=\"l00831\"></a><span class=\"lineno\"> 831</span> </div>\n-<div class=\"line\"><a id=\"l00832\" name=\"l00832\"></a><span class=\"lineno\"> 832</span> <span class=\"comment\">// Evaluate 1d function values (needed for the product rule)</span></div>\n-<div class=\"line\"><a id=\"l00833\" name=\"l00833\"></a><span class=\"lineno\"> 833</span> std::array<std::vector<R>, dim> oneDValues;</div>\n-<div class=\"line\"><a id=\"l00834\" name=\"l00834\"></a><span class=\"lineno\"> 834</span> </div>\n-<div class=\"line\"><a id=\"l00835\" name=\"l00835\"></a><span class=\"lineno\"> 835</span> <span class=\"comment\">// Evaluate 1d function values of one order lower (needed for the derivative formula)</span></div>\n-<div class=\"line\"><a id=\"l00836\" name=\"l00836\"></a><span class=\"lineno\"> 836</span> std::array<std::vector<R>, dim> lowOrderOneDValues;</div>\n-<div class=\"line\"><a id=\"l00837\" name=\"l00837\"></a><span class=\"lineno\"> 837</span> </div>\n-<div class=\"line\"><a id=\"l00838\" name=\"l00838\"></a><span class=\"lineno\"> 838</span> std::array<DynamicMatrix<R>, dim> values;</div>\n-<div class=\"line\"><a id=\"l00839\" name=\"l00839\"></a><span class=\"lineno\"> 839</span> </div>\n-<div class=\"line\"><a id=\"l00840\" name=\"l00840\"></a><span class=\"lineno\"> 840</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<dim; i++)</div>\n-<div class=\"line\"><a id=\"l00841\" name=\"l00841\"></a><span class=\"lineno\"> 841</span> {</div>\n-<div class=\"line\"><a id=\"l00842\" name=\"l00842\"></a><span class=\"lineno\"> 842</span> <a class=\"code hl_function\" href=\"a01479.html#a2c742d3ca0cb2c2dd3f5313295c84a63\">evaluateFunctionFull</a>(in[i], values[i], <a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i], <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i], currentKnotSpan[i]);</div>\n-<div class=\"line\"><a id=\"l00843\" name=\"l00843\"></a><span class=\"lineno\"> 843</span> oneDValues[i].resize(<a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i].<a class=\"code hl_function\" href=\"a01479.html#acbd350edf10b11a798c8d59285619646\">size</a>()-<a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i]-1);</div>\n-<div class=\"line\"><a id=\"l00844\" name=\"l00844\"></a><span class=\"lineno\"> 844</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> j=0; j<oneDValues[i].size(); j++)</div>\n-<div class=\"line\"><a id=\"l00845\" name=\"l00845\"></a><span class=\"lineno\"> 845</span> oneDValues[i][j] = values[i][<a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i]][j];</div>\n-<div class=\"line\"><a id=\"l00846\" name=\"l00846\"></a><span class=\"lineno\"> 846</span> </div>\n-<div class=\"line\"><a id=\"l00847\" name=\"l00847\"></a><span class=\"lineno\"> 847</span> <span class=\"keywordflow\">if</span> (<a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i]!=0)</div>\n-<div class=\"line\"><a id=\"l00848\" name=\"l00848\"></a><span class=\"lineno\"> 848</span> {</div>\n-<div class=\"line\"><a id=\"l00849\" name=\"l00849\"></a><span class=\"lineno\"> 849</span> lowOrderOneDValues[i].resize(<a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i].<a class=\"code hl_function\" href=\"a01479.html#acbd350edf10b11a798c8d59285619646\">size</a>()-(<a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i]-1)-1);</div>\n-<div class=\"line\"><a id=\"l00850\" name=\"l00850\"></a><span class=\"lineno\"> 850</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> j=0; j<lowOrderOneDValues[i].size(); j++)</div>\n-<div class=\"line\"><a id=\"l00851\" name=\"l00851\"></a><span class=\"lineno\"> 851</span> lowOrderOneDValues[i][j] = values[i][<a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i]-1][j];</div>\n-<div class=\"line\"><a id=\"l00852\" name=\"l00852\"></a><span class=\"lineno\"> 852</span> }</div>\n-<div class=\"line\"><a id=\"l00853\" name=\"l00853\"></a><span class=\"lineno\"> 853</span> }</div>\n-<div class=\"line\"><a id=\"l00854\" name=\"l00854\"></a><span class=\"lineno\"> 854</span> </div>\n-<div class=\"line\"><a id=\"l00855\" name=\"l00855\"></a><span class=\"lineno\"> 855</span> </div>\n-<div class=\"line\"><a id=\"l00856\" name=\"l00856\"></a><span class=\"lineno\"> 856</span> <span class=\"comment\">// Evaluate 1d function derivatives</span></div>\n-<div class=\"line\"><a id=\"l00857\" name=\"l00857\"></a><span class=\"lineno\"> 857</span> std::array<std::vector<R>, dim> oneDDerivatives;</div>\n-<div class=\"line\"><a id=\"l00858\" name=\"l00858\"></a><span class=\"lineno\"> 858</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<dim; i++)</div>\n-<div class=\"line\"><a id=\"l00859\" name=\"l00859\"></a><span class=\"lineno\"> 859</span> {</div>\n-<div class=\"line\"><a id=\"l00860\" name=\"l00860\"></a><span class=\"lineno\"> 860</span> oneDDerivatives[i].resize(limits[i]);</div>\n-<div class=\"line\"><a id=\"l00861\" name=\"l00861\"></a><span class=\"lineno\"> 861</span> </div>\n-<div class=\"line\"><a id=\"l00862\" name=\"l00862\"></a><span class=\"lineno\"> 862</span> <span class=\"keywordflow\">if</span> (<a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i]==0) <span class=\"comment\">// order-zero functions are piecewise constant, hence all derivatives are zero</span></div>\n-<div class=\"line\"><a id=\"l00863\" name=\"l00863\"></a><span class=\"lineno\"> 863</span> std::fill(oneDDerivatives[i].begin(), oneDDerivatives[i].end(), <a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a>(0.0));</div>\n-<div class=\"line\"><a id=\"l00864\" name=\"l00864\"></a><span class=\"lineno\"> 864</span> <span class=\"keywordflow\">else</span></div>\n-<div class=\"line\"><a id=\"l00865\" name=\"l00865\"></a><span class=\"lineno\"> 865</span> {</div>\n-<div class=\"line\"><a id=\"l00866\" name=\"l00866\"></a><span class=\"lineno\"> 866</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> j=offset[i]; j<offset[i]+limits[i]; j++)</div>\n-<div class=\"line\"><a id=\"l00867\" name=\"l00867\"></a><span class=\"lineno\"> 867</span> {</div>\n-<div class=\"line\"><a id=\"l00868\" name=\"l00868\"></a><span class=\"lineno\"> 868</span> <a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a> derivativeAddend1 = lowOrderOneDValues[i][j] / (<a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i][j+<a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i]]-<a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i][j]);</div>\n-<div class=\"line\"><a id=\"l00869\" name=\"l00869\"></a><span class=\"lineno\"> 869</span> <a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a> derivativeAddend2 = lowOrderOneDValues[i][j+1] / (<a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i][j+<a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i]+1]-<a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i][j+1]);</div>\n-<div class=\"line\"><a id=\"l00870\" name=\"l00870\"></a><span class=\"lineno\"> 870</span> <span class=\"comment\">// The two previous terms may evaluate as 0/0. This is to be interpreted as 0.</span></div>\n-<div class=\"line\"><a id=\"l00871\" name=\"l00871\"></a><span class=\"lineno\"> 871</span> <span class=\"keywordflow\">if</span> (std::isnan(derivativeAddend1))</div>\n-<div class=\"line\"><a id=\"l00872\" name=\"l00872\"></a><span class=\"lineno\"> 872</span> derivativeAddend1 = 0;</div>\n-<div class=\"line\"><a id=\"l00873\" name=\"l00873\"></a><span class=\"lineno\"> 873</span> <span class=\"keywordflow\">if</span> (std::isnan(derivativeAddend2))</div>\n-<div class=\"line\"><a id=\"l00874\" name=\"l00874\"></a><span class=\"lineno\"> 874</span> derivativeAddend2 = 0;</div>\n-<div class=\"line\"><a id=\"l00875\" name=\"l00875\"></a><span class=\"lineno\"> 875</span> oneDDerivatives[i][j-offset[i]] = <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i] * ( derivativeAddend1 - derivativeAddend2 );</div>\n-<div class=\"line\"><a id=\"l00876\" name=\"l00876\"></a><span class=\"lineno\"> 876</span> }</div>\n-<div class=\"line\"><a id=\"l00877\" name=\"l00877\"></a><span class=\"lineno\"> 877</span> }</div>\n-<div class=\"line\"><a id=\"l00878\" name=\"l00878\"></a><span class=\"lineno\"> 878</span> }</div>\n-<div class=\"line\"><a id=\"l00879\" name=\"l00879\"></a><span class=\"lineno\"> 879</span> </div>\n-<div class=\"line\"><a id=\"l00880\" name=\"l00880\"></a><span class=\"lineno\"> 880</span> <span class=\"comment\">// Working towards computing only the parts that we really need:</span></div>\n-<div class=\"line\"><a id=\"l00881\" name=\"l00881\"></a><span class=\"lineno\"> 881</span> <span class=\"comment\">// Let's copy them out into a separate array</span></div>\n-<div class=\"line\"><a id=\"l00882\" name=\"l00882\"></a><span class=\"lineno\"> 882</span> std::array<std::vector<R>, dim> oneDValuesShort;</div>\n-<div class=\"line\"><a id=\"l00883\" name=\"l00883\"></a><span class=\"lineno\"> 883</span> </div>\n-<div class=\"line\"><a id=\"l00884\" name=\"l00884\"></a><span class=\"lineno\"> 884</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<dim; i++)</div>\n-<div class=\"line\"><a id=\"l00885\" name=\"l00885\"></a><span class=\"lineno\"> 885</span> {</div>\n-<div class=\"line\"><a id=\"l00886\" name=\"l00886\"></a><span class=\"lineno\"> 886</span> oneDValuesShort[i].resize(limits[i]);</div>\n-<div class=\"line\"><a id=\"l00887\" name=\"l00887\"></a><span class=\"lineno\"> 887</span> </div>\n-<div class=\"line\"><a id=\"l00888\" name=\"l00888\"></a><span class=\"lineno\"> 888</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> j=0; j<limits[i]; j++)</div>\n-<div class=\"line\"><a id=\"l00889\" name=\"l00889\"></a><span class=\"lineno\"> 889</span> oneDValuesShort[i][j] = oneDValues[i][offset[i] + j];</div>\n-<div class=\"line\"><a id=\"l00890\" name=\"l00890\"></a><span class=\"lineno\"> 890</span> }</div>\n-<div class=\"line\"><a id=\"l00891\" name=\"l00891\"></a><span class=\"lineno\"> 891</span> </div>\n-<div class=\"line\"><a id=\"l00892\" name=\"l00892\"></a><span class=\"lineno\"> 892</span> </div>\n-<div class=\"line\"><a id=\"l00893\" name=\"l00893\"></a><span class=\"lineno\"> 893</span> </div>\n-<div class=\"line\"><a id=\"l00894\" name=\"l00894\"></a><span class=\"lineno\"> 894</span> <span class=\"comment\">// Set up a multi-index to go from consecutive indices to integer coordinates</span></div>\n-<div class=\"line\"><a id=\"l00895\" name=\"l00895\"></a><span class=\"lineno\"> 895</span> MultiDigitCounter ijkCounter(limits);</div>\n-<div class=\"line\"><a id=\"l00896\" name=\"l00896\"></a><span class=\"lineno\"> 896</span> </div>\n-<div class=\"line\"><a id=\"l00897\" name=\"l00897\"></a><span class=\"lineno\"> 897</span> out.resize(ijkCounter.cycle());</div>\n-<div class=\"line\"><a id=\"l00898\" name=\"l00898\"></a><span class=\"lineno\"> 898</span> </div>\n-<div class=\"line\"><a id=\"l00899\" name=\"l00899\"></a><span class=\"lineno\"> 899</span> <span class=\"comment\">// Complete Jacobian is given by the product rule</span></div>\n-<div class=\"line\"><a id=\"l00900\" name=\"l00900\"></a><span class=\"lineno\"> 900</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<out.size(); i++, ++ijkCounter)</div>\n-<div class=\"line\"><a id=\"l00901\" name=\"l00901\"></a><span class=\"lineno\"> 901</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> j=0; j<dim; j++)</div>\n-<div class=\"line\"><a id=\"l00902\" name=\"l00902\"></a><span class=\"lineno\"> 902</span> {</div>\n-<div class=\"line\"><a id=\"l00903\" name=\"l00903\"></a><span class=\"lineno\"> 903</span> out[i][0][j] = 1.0;</div>\n-<div class=\"line\"><a id=\"l00904\" name=\"l00904\"></a><span class=\"lineno\"> 904</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> k=0; k<dim; k++)</div>\n-<div class=\"line\"><a id=\"l00905\" name=\"l00905\"></a><span class=\"lineno\"> 905</span> out[i][0][j] *= (j==k) ? oneDDerivatives[k][ijkCounter[k]]</div>\n-<div class=\"line\"><a id=\"l00906\" name=\"l00906\"></a><span class=\"lineno\"> 906</span> : oneDValuesShort[k][ijkCounter[k]];</div>\n-<div class=\"line\"><a id=\"l00907\" name=\"l00907\"></a><span class=\"lineno\"> 907</span> }</div>\n-<div class=\"line\"><a id=\"l00908\" name=\"l00908\"></a><span class=\"lineno\"> 908</span> </div>\n-<div class=\"line\"><a id=\"l00909\" name=\"l00909\"></a><span class=\"lineno\"> 909</span> }</div>\n-<div class=\"line\"><a id=\"l00910\" name=\"l00910\"></a><span class=\"lineno\"> 910</span> </div>\n-<div class=\"line\"><a id=\"l00912\" name=\"l00912\"></a><span class=\"lineno\"> 912</span> <span class=\"keyword\">template</span> <<span class=\"keywordtype\">size_t</span>ype k></div>\n-<div class=\"line\"><a id=\"l00913\" name=\"l00913\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a7743becf779c5d57e8665798ac50ce0b\"> 913</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01479.html#a7743becf779c5d57e8665798ac50ce0b\">evaluate</a>(<span class=\"keyword\">const</span> <span class=\"keyword\">typename</span> std::array<int,k>& directions,</div>\n-<div class=\"line\"><a id=\"l00914\" name=\"l00914\"></a><span class=\"lineno\"> 914</span> <span class=\"keyword\">const</span> FieldVector<typename GV::ctype,dim>& in,</div>\n-<div class=\"line\"><a id=\"l00915\" name=\"l00915\"></a><span class=\"lineno\"> 915</span> std::vector<FieldVector<R,1> >& out,</div>\n-<div class=\"line\"><a id=\"l00916\" name=\"l00916\"></a><span class=\"lineno\"> 916</span> <span class=\"keyword\">const</span> std::array<unsigned,dim>& currentKnotSpan)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00917\" name=\"l00917\"></a><span class=\"lineno\"> 917</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00918\" name=\"l00918\"></a><span class=\"lineno\"> 918</span> <span class=\"keywordflow\">if</span> (k != 1 && k != 2)</div>\n-<div class=\"line\"><a id=\"l00919\" name=\"l00919\"></a><span class=\"lineno\"> 919</span> DUNE_THROW(RangeError, <span class=\"stringliteral\">"Differentiation order greater than 2 is not supported!"</span>);</div>\n-<div class=\"line\"><a id=\"l00920\" name=\"l00920\"></a><span class=\"lineno\"> 920</span> </div>\n-<div class=\"line\"><a id=\"l00921\" name=\"l00921\"></a><span class=\"lineno\"> 921</span> <span class=\"comment\">// Evaluate 1d function values (needed for the product rule)</span></div>\n-<div class=\"line\"><a id=\"l00922\" name=\"l00922\"></a><span class=\"lineno\"> 922</span> std::array<std::vector<R>, dim> oneDValues;</div>\n-<div class=\"line\"><a id=\"l00923\" name=\"l00923\"></a><span class=\"lineno\"> 923</span> std::array<std::vector<R>, dim> oneDDerivatives;</div>\n-<div class=\"line\"><a id=\"l00924\" name=\"l00924\"></a><span class=\"lineno\"> 924</span> std::array<std::vector<R>, dim> oneDSecondDerivatives;</div>\n-<div class=\"line\"><a id=\"l00925\" name=\"l00925\"></a><span class=\"lineno\"> 925</span> </div>\n-<div class=\"line\"><a id=\"l00926\" name=\"l00926\"></a><span class=\"lineno\"> 926</span> <span class=\"comment\">// Evaluate 1d function derivatives</span></div>\n-<div class=\"line\"><a id=\"l00927\" name=\"l00927\"></a><span class=\"lineno\"> 927</span> <span class=\"keywordflow\">if</span> (k==1)</div>\n-<div class=\"line\"><a id=\"l00928\" name=\"l00928\"></a><span class=\"lineno\"> 928</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<dim; i++)</div>\n-<div class=\"line\"><a id=\"l00929\" name=\"l00929\"></a><span class=\"lineno\"> 929</span> <a class=\"code hl_function\" href=\"a01479.html#a51538e3d5c7ba5c59d613e1aef37d8d5\">evaluateAll</a>(in[i], oneDValues[i], <span class=\"keyword\">true</span>, oneDDerivatives[i], <span class=\"keyword\">false</span>, oneDSecondDerivatives[i], <a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i], <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i], currentKnotSpan[i]);</div>\n-<div class=\"line\"><a id=\"l00930\" name=\"l00930\"></a><span class=\"lineno\"> 930</span> <span class=\"keywordflow\">else</span></div>\n-<div class=\"line\"><a id=\"l00931\" name=\"l00931\"></a><span class=\"lineno\"> 931</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<dim; i++)</div>\n-<div class=\"line\"><a id=\"l00932\" name=\"l00932\"></a><span class=\"lineno\"> 932</span> <a class=\"code hl_function\" href=\"a01479.html#a51538e3d5c7ba5c59d613e1aef37d8d5\">evaluateAll</a>(in[i], oneDValues[i], <span class=\"keyword\">true</span>, oneDDerivatives[i], <span class=\"keyword\">true</span>, oneDSecondDerivatives[i], <a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i], <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i], currentKnotSpan[i]);</div>\n-<div class=\"line\"><a id=\"l00933\" name=\"l00933\"></a><span class=\"lineno\"> 933</span> </div>\n-<div class=\"line\"><a id=\"l00934\" name=\"l00934\"></a><span class=\"lineno\"> 934</span> <span class=\"comment\">// The lowest knot spans that we need values from</span></div>\n-<div class=\"line\"><a id=\"l00935\" name=\"l00935\"></a><span class=\"lineno\"> 935</span> std::array<unsigned int, dim> offset;</div>\n-<div class=\"line\"><a id=\"l00936\" name=\"l00936\"></a><span class=\"lineno\"> 936</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<dim; i++)</div>\n-<div class=\"line\"><a id=\"l00937\" name=\"l00937\"></a><span class=\"lineno\"> 937</span> offset[i] = std::max((<span class=\"keywordtype\">int</span>)(currentKnotSpan[i] - <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i]),0);</div>\n-<div class=\"line\"><a id=\"l00938\" name=\"l00938\"></a><span class=\"lineno\"> 938</span> </div>\n-<div class=\"line\"><a id=\"l00939\" name=\"l00939\"></a><span class=\"lineno\"> 939</span> <span class=\"comment\">// Set up a multi-index to go from consecutive indices to integer coordinates</span></div>\n-<div class=\"line\"><a id=\"l00940\" name=\"l00940\"></a><span class=\"lineno\"> 940</span> std::array<unsigned int, dim> limits;</div>\n-<div class=\"line\"><a id=\"l00941\" name=\"l00941\"></a><span class=\"lineno\"> 941</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<dim; i++)</div>\n-<div class=\"line\"><a id=\"l00942\" name=\"l00942\"></a><span class=\"lineno\"> 942</span> {</div>\n-<div class=\"line\"><a id=\"l00943\" name=\"l00943\"></a><span class=\"lineno\"> 943</span> <span class=\"comment\">// In a proper implementation, the following line would do</span></div>\n-<div class=\"line\"><a id=\"l00944\" name=\"l00944\"></a><span class=\"lineno\"> 944</span> <span class=\"comment\">//limits[i] = oneDValues[i].size();</span></div>\n-<div class=\"line\"><a id=\"l00945\" name=\"l00945\"></a><span class=\"lineno\"> 945</span> limits[i] = <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i]+1; <span class=\"comment\">// The 'standard' value away from the boundaries of the knot vector</span></div>\n-<div class=\"line\"><a id=\"l00946\" name=\"l00946\"></a><span class=\"lineno\"> 946</span> <span class=\"keywordflow\">if</span> (currentKnotSpan[i]<<a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i])</div>\n-<div class=\"line\"><a id=\"l00947\" name=\"l00947\"></a><span class=\"lineno\"> 947</span> limits[i] -= (<a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i] - currentKnotSpan[i]);</div>\n-<div class=\"line\"><a id=\"l00948\" name=\"l00948\"></a><span class=\"lineno\"> 948</span> <span class=\"keywordflow\">if</span> ( <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i] > (<a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i].<a class=\"code hl_function\" href=\"a01479.html#acbd350edf10b11a798c8d59285619646\">size</a>() - currentKnotSpan[i] - 2) )</div>\n-<div class=\"line\"><a id=\"l00949\" name=\"l00949\"></a><span class=\"lineno\"> 949</span> limits[i] -= <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i] - (<a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i].<a class=\"code hl_function\" href=\"a01479.html#acbd350edf10b11a798c8d59285619646\">size</a>() - currentKnotSpan[i] - 2);</div>\n-<div class=\"line\"><a id=\"l00950\" name=\"l00950\"></a><span class=\"lineno\"> 950</span> }</div>\n-<div class=\"line\"><a id=\"l00951\" name=\"l00951\"></a><span class=\"lineno\"> 951</span> </div>\n-<div class=\"line\"><a id=\"l00952\" name=\"l00952\"></a><span class=\"lineno\"> 952</span> <span class=\"comment\">// Working towards computing only the parts that we really need:</span></div>\n-<div class=\"line\"><a id=\"l00953\" name=\"l00953\"></a><span class=\"lineno\"> 953</span> <span class=\"comment\">// Let's copy them out into a separate array</span></div>\n-<div class=\"line\"><a id=\"l00954\" name=\"l00954\"></a><span class=\"lineno\"> 954</span> std::array<std::vector<R>, dim> oneDValuesShort;</div>\n-<div class=\"line\"><a id=\"l00955\" name=\"l00955\"></a><span class=\"lineno\"> 955</span> </div>\n-<div class=\"line\"><a id=\"l00956\" name=\"l00956\"></a><span class=\"lineno\"> 956</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<dim; i++)</div>\n-<div class=\"line\"><a id=\"l00957\" name=\"l00957\"></a><span class=\"lineno\"> 957</span> {</div>\n-<div class=\"line\"><a id=\"l00958\" name=\"l00958\"></a><span class=\"lineno\"> 958</span> oneDValuesShort[i].resize(limits[i]);</div>\n-<div class=\"line\"><a id=\"l00959\" name=\"l00959\"></a><span class=\"lineno\"> 959</span> </div>\n-<div class=\"line\"><a id=\"l00960\" name=\"l00960\"></a><span class=\"lineno\"> 960</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> j=0; j<limits[i]; j++)</div>\n-<div class=\"line\"><a id=\"l00961\" name=\"l00961\"></a><span class=\"lineno\"> 961</span> oneDValuesShort[i][j] = oneDValues[i][offset[i] + j];</div>\n-<div class=\"line\"><a id=\"l00962\" name=\"l00962\"></a><span class=\"lineno\"> 962</span> }</div>\n-<div class=\"line\"><a id=\"l00963\" name=\"l00963\"></a><span class=\"lineno\"> 963</span> </div>\n-<div class=\"line\"><a id=\"l00964\" name=\"l00964\"></a><span class=\"lineno\"> 964</span> </div>\n-<div class=\"line\"><a id=\"l00965\" name=\"l00965\"></a><span class=\"lineno\"> 965</span> MultiDigitCounter ijkCounter(limits);</div>\n-<div class=\"line\"><a id=\"l00966\" name=\"l00966\"></a><span class=\"lineno\"> 966</span> </div>\n-<div class=\"line\"><a id=\"l00967\" name=\"l00967\"></a><span class=\"lineno\"> 967</span> out.resize(ijkCounter.cycle());</div>\n-<div class=\"line\"><a id=\"l00968\" name=\"l00968\"></a><span class=\"lineno\"> 968</span> </div>\n-<div class=\"line\"><a id=\"l00969\" name=\"l00969\"></a><span class=\"lineno\"> 969</span> <span class=\"keywordflow\">if</span> (k == 1)</div>\n-<div class=\"line\"><a id=\"l00970\" name=\"l00970\"></a><span class=\"lineno\"> 970</span> {</div>\n-<div class=\"line\"><a id=\"l00971\" name=\"l00971\"></a><span class=\"lineno\"> 971</span> <span class=\"comment\">// Complete Jacobian is given by the product rule</span></div>\n-<div class=\"line\"><a id=\"l00972\" name=\"l00972\"></a><span class=\"lineno\"> 972</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<out.size(); i++, ++ijkCounter)</div>\n-<div class=\"line\"><a id=\"l00973\" name=\"l00973\"></a><span class=\"lineno\"> 973</span> {</div>\n-<div class=\"line\"><a id=\"l00974\" name=\"l00974\"></a><span class=\"lineno\"> 974</span> out[i][0] = 1.0;</div>\n-<div class=\"line\"><a id=\"l00975\" name=\"l00975\"></a><span class=\"lineno\"> 975</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> l=0; l<dim; l++)</div>\n-<div class=\"line\"><a id=\"l00976\" name=\"l00976\"></a><span class=\"lineno\"> 976</span> out[i][0] *= (directions[0]==l) ? oneDDerivatives[l][ijkCounter[l]]</div>\n-<div class=\"line\"><a id=\"l00977\" name=\"l00977\"></a><span class=\"lineno\"> 977</span> : oneDValuesShort[l][ijkCounter[l]];</div>\n-<div class=\"line\"><a id=\"l00978\" name=\"l00978\"></a><span class=\"lineno\"> 978</span> }</div>\n-<div class=\"line\"><a id=\"l00979\" name=\"l00979\"></a><span class=\"lineno\"> 979</span> }</div>\n-<div class=\"line\"><a id=\"l00980\" name=\"l00980\"></a><span class=\"lineno\"> 980</span> </div>\n-<div class=\"line\"><a id=\"l00981\" name=\"l00981\"></a><span class=\"lineno\"> 981</span> <span class=\"keywordflow\">if</span> (k == 2)</div>\n-<div class=\"line\"><a id=\"l00982\" name=\"l00982\"></a><span class=\"lineno\"> 982</span> {</div>\n-<div class=\"line\"><a id=\"l00983\" name=\"l00983\"></a><span class=\"lineno\"> 983</span> <span class=\"comment\">// Complete derivation by deriving the tensor product</span></div>\n-<div class=\"line\"><a id=\"l00984\" name=\"l00984\"></a><span class=\"lineno\"> 984</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<out.size(); i++, ++ijkCounter)</div>\n-<div class=\"line\"><a id=\"l00985\" name=\"l00985\"></a><span class=\"lineno\"> 985</span> {</div>\n-<div class=\"line\"><a id=\"l00986\" name=\"l00986\"></a><span class=\"lineno\"> 986</span> out[i][0] = 1.0;</div>\n-<div class=\"line\"><a id=\"l00987\" name=\"l00987\"></a><span class=\"lineno\"> 987</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> j=0; j<dim; j++)</div>\n-<div class=\"line\"><a id=\"l00988\" name=\"l00988\"></a><span class=\"lineno\"> 988</span> {</div>\n-<div class=\"line\"><a id=\"l00989\" name=\"l00989\"></a><span class=\"lineno\"> 989</span> <span class=\"keywordflow\">if</span> (directions[0] != directions[1]) <span class=\"comment\">//derivation in two different variables</span></div>\n-<div class=\"line\"><a id=\"l00990\" name=\"l00990\"></a><span class=\"lineno\"> 990</span> <span class=\"keywordflow\">if</span> (directions[0] == j || directions[1] == j) <span class=\"comment\">//the spline has to be derived (once) in this direction</span></div>\n-<div class=\"line\"><a id=\"l00991\" name=\"l00991\"></a><span class=\"lineno\"> 991</span> out[i][0] *= oneDDerivatives[j][ijkCounter[j]];</div>\n-<div class=\"line\"><a id=\"l00992\" name=\"l00992\"></a><span class=\"lineno\"> 992</span> <span class=\"keywordflow\">else</span> <span class=\"comment\">//no derivation in this direction</span></div>\n-<div class=\"line\"><a id=\"l00993\" name=\"l00993\"></a><span class=\"lineno\"> 993</span> out[i][0] *= oneDValuesShort[j][ijkCounter[j]];</div>\n-<div class=\"line\"><a id=\"l00994\" name=\"l00994\"></a><span class=\"lineno\"> 994</span> <span class=\"keywordflow\">else</span> <span class=\"comment\">//spline is derived two times in the same direction</span></div>\n-<div class=\"line\"><a id=\"l00995\" name=\"l00995\"></a><span class=\"lineno\"> 995</span> <span class=\"keywordflow\">if</span> (directions[0] == j) <span class=\"comment\">//the spline is derived two times in this direction</span></div>\n-<div class=\"line\"><a id=\"l00996\" name=\"l00996\"></a><span class=\"lineno\"> 996</span> out[i][0] *= oneDSecondDerivatives[j][ijkCounter[j]];</div>\n-<div class=\"line\"><a id=\"l00997\" name=\"l00997\"></a><span class=\"lineno\"> 997</span> <span class=\"keywordflow\">else</span> <span class=\"comment\">//no derivation in this direction</span></div>\n-<div class=\"line\"><a id=\"l00998\" name=\"l00998\"></a><span class=\"lineno\"> 998</span> out[i][0] *= oneDValuesShort[j][ijkCounter[j]];</div>\n-<div class=\"line\"><a id=\"l00999\" name=\"l00999\"></a><span class=\"lineno\"> 999</span> }</div>\n-<div class=\"line\"><a id=\"l01000\" name=\"l01000\"></a><span class=\"lineno\"> 1000</span> }</div>\n-<div class=\"line\"><a id=\"l01001\" name=\"l01001\"></a><span class=\"lineno\"> 1001</span> }</div>\n-<div class=\"line\"><a id=\"l01002\" name=\"l01002\"></a><span class=\"lineno\"> 1002</span> }</div>\n-<div class=\"line\"><a id=\"l01003\" name=\"l01003\"></a><span class=\"lineno\"> 1003</span> </div>\n-<div class=\"line\"><a id=\"l01004\" name=\"l01004\"></a><span class=\"lineno\"> 1004</span> </div>\n-<div class=\"line\"><a id=\"l01009\" name=\"l01009\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#ad49a0bd70180481c702887c873386897\"> 1009</a></span> <span class=\"keyword\">static</span> std::array<unsigned int,dim> <a class=\"code hl_function\" href=\"a01479.html#ad49a0bd70180481c702887c873386897\">getIJK</a>(<span class=\"keyword\">typename</span> GridView::IndexSet::IndexType idx, std::array<unsigned int,dim> elements)</div>\n-<div class=\"line\"><a id=\"l01010\" name=\"l01010\"></a><span class=\"lineno\"> 1010</span> {</div>\n-<div class=\"line\"><a id=\"l01011\" name=\"l01011\"></a><span class=\"lineno\"> 1011</span> std::array<unsigned,dim> result;</div>\n-<div class=\"line\"><a id=\"l01012\" name=\"l01012\"></a><span class=\"lineno\"> 1012</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<dim; i++)</div>\n-<div class=\"line\"><a id=\"l01013\" name=\"l01013\"></a><span class=\"lineno\"> 1013</span> {</div>\n-<div class=\"line\"><a id=\"l01014\" name=\"l01014\"></a><span class=\"lineno\"> 1014</span> result[i] = idx%elements[i];</div>\n-<div class=\"line\"><a id=\"l01015\" name=\"l01015\"></a><span class=\"lineno\"> 1015</span> idx /= elements[i];</div>\n-<div class=\"line\"><a id=\"l01016\" name=\"l01016\"></a><span class=\"lineno\"> 1016</span> }</div>\n-<div class=\"line\"><a id=\"l01017\" name=\"l01017\"></a><span class=\"lineno\"> 1017</span> <span class=\"keywordflow\">return</span> result;</div>\n-<div class=\"line\"><a id=\"l01018\" name=\"l01018\"></a><span class=\"lineno\"> 1018</span> }</div>\n-<div class=\"line\"><a id=\"l01019\" name=\"l01019\"></a><span class=\"lineno\"> 1019</span> </div>\n-<div class=\"line\"><a id=\"l01028\" name=\"l01028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a520df331d03110c5713336ca32ca99c4\"> 1028</a></span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01479.html#a520df331d03110c5713336ca32ca99c4\">evaluateFunction</a> (<span class=\"keyword\">const</span> <span class=\"keyword\">typename</span> GV::ctype& in, std::vector<R>& out,</div>\n-<div class=\"line\"><a id=\"l01029\" name=\"l01029\"></a><span class=\"lineno\"> 1029</span> <span class=\"keyword\">const</span> std::vector<R>& knotVector,</div>\n-<div class=\"line\"><a id=\"l01030\" name=\"l01030\"></a><span class=\"lineno\"> 1030</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> order,</div>\n-<div class=\"line\"><a id=\"l01031\" name=\"l01031\"></a><span class=\"lineno\"> 1031</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> currentKnotSpan)</div>\n-<div class=\"line\"><a id=\"l01032\" name=\"l01032\"></a><span class=\"lineno\"> 1032</span> {</div>\n-<div class=\"line\"><a id=\"l01033\" name=\"l01033\"></a><span class=\"lineno\"> 1033</span> std::size_t outSize = order+1; <span class=\"comment\">// The 'standard' value away from the boundaries of the knot vector</span></div>\n-<div class=\"line\"><a id=\"l01034\" name=\"l01034\"></a><span class=\"lineno\"> 1034</span> <span class=\"keywordflow\">if</span> (currentKnotSpan<order) <span class=\"comment\">// Less near the left end of the knot vector</span></div>\n-<div class=\"line\"><a id=\"l01035\" name=\"l01035\"></a><span class=\"lineno\"> 1035</span> outSize -= (order - currentKnotSpan);</div>\n-<div class=\"line\"><a id=\"l01036\" name=\"l01036\"></a><span class=\"lineno\"> 1036</span> <span class=\"keywordflow\">if</span> ( order > (knotVector.size() - currentKnotSpan - 2) )</div>\n-<div class=\"line\"><a id=\"l01037\" name=\"l01037\"></a><span class=\"lineno\"> 1037</span> outSize -= order - (knotVector.size() - currentKnotSpan - 2);</div>\n-<div class=\"line\"><a id=\"l01038\" name=\"l01038\"></a><span class=\"lineno\"> 1038</span> out.resize(outSize);</div>\n-<div class=\"line\"><a id=\"l01039\" name=\"l01039\"></a><span class=\"lineno\"> 1039</span> </div>\n-<div class=\"line\"><a id=\"l01040\" name=\"l01040\"></a><span class=\"lineno\"> 1040</span> <span class=\"comment\">// It's not really a matrix that is needed here, a plain 2d array would do</span></div>\n-<div class=\"line\"><a id=\"l01041\" name=\"l01041\"></a><span class=\"lineno\"> 1041</span> DynamicMatrix<R> N(order+1, knotVector.size()-1);</div>\n-<div class=\"line\"><a id=\"l01042\" name=\"l01042\"></a><span class=\"lineno\"> 1042</span> </div>\n-<div class=\"line\"><a id=\"l01043\" name=\"l01043\"></a><span class=\"lineno\"> 1043</span> <span class=\"comment\">// The text books on splines use the following geometric condition here to fill the array N</span></div>\n-<div class=\"line\"><a id=\"l01044\" name=\"l01044\"></a><span class=\"lineno\"> 1044</span> <span class=\"comment\">// (see for example Cottrell, Hughes, Bazilevs, Formula (2.1). However, this condition</span></div>\n-<div class=\"line\"><a id=\"l01045\" name=\"l01045\"></a><span class=\"lineno\"> 1045</span> <span class=\"comment\">// only works if splines are never evaluated exactly on the knots.</span></div>\n-<div class=\"line\"><a id=\"l01046\" name=\"l01046\"></a><span class=\"lineno\"> 1046</span> <span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l01047\" name=\"l01047\"></a><span class=\"lineno\"> 1047</span> <span class=\"comment\">// for (size_t i=0; i<knotVector.size()-1; i++)</span></div>\n-<div class=\"line\"><a id=\"l01048\" name=\"l01048\"></a><span class=\"lineno\"> 1048</span> <span class=\"comment\">// N[0][i] = (knotVector[i] <= in) and (in < knotVector[i+1]);</span></div>\n-<div class=\"line\"><a id=\"l01049\" name=\"l01049\"></a><span class=\"lineno\"> 1049</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<knotVector.size()-1; i++)</div>\n-<div class=\"line\"><a id=\"l01050\" name=\"l01050\"></a><span class=\"lineno\"> 1050</span> N[0][i] = (i == currentKnotSpan);</div>\n-<div class=\"line\"><a id=\"l01051\" name=\"l01051\"></a><span class=\"lineno\"> 1051</span> </div>\n-<div class=\"line\"><a id=\"l01052\" name=\"l01052\"></a><span class=\"lineno\"> 1052</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> r=1; r<=order; r++)</div>\n-<div class=\"line\"><a id=\"l01053\" name=\"l01053\"></a><span class=\"lineno\"> 1053</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<knotVector.size()-r-1; i++)</div>\n-<div class=\"line\"><a id=\"l01054\" name=\"l01054\"></a><span class=\"lineno\"> 1054</span> {</div>\n-<div class=\"line\"><a id=\"l01055\" name=\"l01055\"></a><span class=\"lineno\"> 1055</span> <a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a> factor1 = ((knotVector[i+r] - knotVector[i]) > 1e-10)</div>\n-<div class=\"line\"><a id=\"l01056\" name=\"l01056\"></a><span class=\"lineno\"> 1056</span> ? (in - knotVector[i]) / (knotVector[i+r] - knotVector[i])</div>\n-<div class=\"line\"><a id=\"l01057\" name=\"l01057\"></a><span class=\"lineno\"> 1057</span> : 0;</div>\n-<div class=\"line\"><a id=\"l01058\" name=\"l01058\"></a><span class=\"lineno\"> 1058</span> <a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a> factor2 = ((knotVector[i+r+1] - knotVector[i+1]) > 1e-10)</div>\n-<div class=\"line\"><a id=\"l01059\" name=\"l01059\"></a><span class=\"lineno\"> 1059</span> ? (knotVector[i+r+1] - in) / (knotVector[i+r+1] - knotVector[i+1])</div>\n-<div class=\"line\"><a id=\"l01060\" name=\"l01060\"></a><span class=\"lineno\"> 1060</span> : 0;</div>\n-<div class=\"line\"><a id=\"l01061\" name=\"l01061\"></a><span class=\"lineno\"> 1061</span> N[r][i] = factor1 * N[r-1][i] + factor2 * N[r-1][i+1];</div>\n-<div class=\"line\"><a id=\"l01062\" name=\"l01062\"></a><span class=\"lineno\"> 1062</span> }</div>\n-<div class=\"line\"><a id=\"l01063\" name=\"l01063\"></a><span class=\"lineno\"> 1063</span> </div>\n-<div class=\"line\"><a id=\"l01068\" name=\"l01068\"></a><span class=\"lineno\"> 1068</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<out.size(); i++) {</div>\n-<div class=\"line\"><a id=\"l01069\" name=\"l01069\"></a><span class=\"lineno\"> 1069</span> out[i] = N[order][std::max((<span class=\"keywordtype\">int</span>)(currentKnotSpan - order),0) + i];</div>\n-<div class=\"line\"><a id=\"l01070\" name=\"l01070\"></a><span class=\"lineno\"> 1070</span> }</div>\n-<div class=\"line\"><a id=\"l01071\" name=\"l01071\"></a><span class=\"lineno\"> 1071</span> }</div>\n-<div class=\"line\"><a id=\"l01072\" name=\"l01072\"></a><span class=\"lineno\"> 1072</span> </div>\n-<div class=\"line\"><a id=\"l01085\" name=\"l01085\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a2c742d3ca0cb2c2dd3f5313295c84a63\"> 1085</a></span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01479.html#a2c742d3ca0cb2c2dd3f5313295c84a63\">evaluateFunctionFull</a>(<span class=\"keyword\">const</span> <span class=\"keyword\">typename</span> GV::ctype& in,</div>\n-<div class=\"line\"><a id=\"l01086\" name=\"l01086\"></a><span class=\"lineno\"> 1086</span> DynamicMatrix<R>& out,</div>\n-<div class=\"line\"><a id=\"l01087\" name=\"l01087\"></a><span class=\"lineno\"> 1087</span> <span class=\"keyword\">const</span> std::vector<R>& knotVector,</div>\n-<div class=\"line\"><a id=\"l01088\" name=\"l01088\"></a><span class=\"lineno\"> 1088</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> order,</div>\n-<div class=\"line\"><a id=\"l01089\" name=\"l01089\"></a><span class=\"lineno\"> 1089</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> currentKnotSpan)</div>\n-<div class=\"line\"><a id=\"l01090\" name=\"l01090\"></a><span class=\"lineno\"> 1090</span> {</div>\n-<div class=\"line\"><a id=\"l01091\" name=\"l01091\"></a><span class=\"lineno\"> 1091</span> <span class=\"comment\">// It's not really a matrix that is needed here, a plain 2d array would do</span></div>\n-<div class=\"line\"><a id=\"l01092\" name=\"l01092\"></a><span class=\"lineno\"> 1092</span> DynamicMatrix<R>& N = out;</div>\n-<div class=\"line\"><a id=\"l01093\" name=\"l01093\"></a><span class=\"lineno\"> 1093</span> </div>\n-<div class=\"line\"><a id=\"l01094\" name=\"l01094\"></a><span class=\"lineno\"> 1094</span> N.resize(order+1, knotVector.size()-1);</div>\n-<div class=\"line\"><a id=\"l01095\" name=\"l01095\"></a><span class=\"lineno\"> 1095</span> </div>\n-<div class=\"line\"><a id=\"l01096\" name=\"l01096\"></a><span class=\"lineno\"> 1096</span> <span class=\"comment\">// The text books on splines use the following geometric condition here to fill the array N</span></div>\n-<div class=\"line\"><a id=\"l01097\" name=\"l01097\"></a><span class=\"lineno\"> 1097</span> <span class=\"comment\">// (see for example Cottrell, Hughes, Bazilevs, Formula (2.1). However, this condition</span></div>\n-<div class=\"line\"><a id=\"l01098\" name=\"l01098\"></a><span class=\"lineno\"> 1098</span> <span class=\"comment\">// only works if splines are never evaluated exactly on the knots.</span></div>\n-<div class=\"line\"><a id=\"l01099\" name=\"l01099\"></a><span class=\"lineno\"> 1099</span> <span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l01100\" name=\"l01100\"></a><span class=\"lineno\"> 1100</span> <span class=\"comment\">// for (size_t i=0; i<knotVector.size()-1; i++)</span></div>\n-<div class=\"line\"><a id=\"l01101\" name=\"l01101\"></a><span class=\"lineno\"> 1101</span> <span class=\"comment\">// N[0][i] = (knotVector[i] <= in) and (in < knotVector[i+1]);</span></div>\n-<div class=\"line\"><a id=\"l01102\" name=\"l01102\"></a><span class=\"lineno\"> 1102</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<knotVector.size()-1; i++)</div>\n-<div class=\"line\"><a id=\"l01103\" name=\"l01103\"></a><span class=\"lineno\"> 1103</span> N[0][i] = (i == currentKnotSpan);</div>\n-<div class=\"line\"><a id=\"l01104\" name=\"l01104\"></a><span class=\"lineno\"> 1104</span> </div>\n-<div class=\"line\"><a id=\"l01105\" name=\"l01105\"></a><span class=\"lineno\"> 1105</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> r=1; r<=order; r++)</div>\n-<div class=\"line\"><a id=\"l01106\" name=\"l01106\"></a><span class=\"lineno\"> 1106</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<knotVector.size()-r-1; i++)</div>\n-<div class=\"line\"><a id=\"l01107\" name=\"l01107\"></a><span class=\"lineno\"> 1107</span> {</div>\n-<div class=\"line\"><a id=\"l01108\" name=\"l01108\"></a><span class=\"lineno\"> 1108</span> <a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a> factor1 = ((knotVector[i+r] - knotVector[i]) > 1e-10)</div>\n-<div class=\"line\"><a id=\"l01109\" name=\"l01109\"></a><span class=\"lineno\"> 1109</span> ? (in - knotVector[i]) / (knotVector[i+r] - knotVector[i])</div>\n-<div class=\"line\"><a id=\"l01110\" name=\"l01110\"></a><span class=\"lineno\"> 1110</span> : 0;</div>\n-<div class=\"line\"><a id=\"l01111\" name=\"l01111\"></a><span class=\"lineno\"> 1111</span> <a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a> factor2 = ((knotVector[i+r+1] - knotVector[i+1]) > 1e-10)</div>\n-<div class=\"line\"><a id=\"l01112\" name=\"l01112\"></a><span class=\"lineno\"> 1112</span> ? (knotVector[i+r+1] - in) / (knotVector[i+r+1] - knotVector[i+1])</div>\n-<div class=\"line\"><a id=\"l01113\" name=\"l01113\"></a><span class=\"lineno\"> 1113</span> : 0;</div>\n-<div class=\"line\"><a id=\"l01114\" name=\"l01114\"></a><span class=\"lineno\"> 1114</span> N[r][i] = factor1 * N[r-1][i] + factor2 * N[r-1][i+1];</div>\n-<div class=\"line\"><a id=\"l01115\" name=\"l01115\"></a><span class=\"lineno\"> 1115</span> }</div>\n-<div class=\"line\"><a id=\"l01116\" name=\"l01116\"></a><span class=\"lineno\"> 1116</span> }</div>\n-<div class=\"line\"><a id=\"l01117\" name=\"l01117\"></a><span class=\"lineno\"> 1117</span> </div>\n-<div class=\"line\"><a id=\"l01118\" name=\"l01118\"></a><span class=\"lineno\"> 1118</span> </div>\n-<div class=\"line\"><a id=\"l01128\" name=\"l01128\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a51538e3d5c7ba5c59d613e1aef37d8d5\"> 1128</a></span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01479.html#a51538e3d5c7ba5c59d613e1aef37d8d5\">evaluateAll</a>(<span class=\"keyword\">const</span> <span class=\"keyword\">typename</span> GV::ctype& in,</div>\n-<div class=\"line\"><a id=\"l01129\" name=\"l01129\"></a><span class=\"lineno\"> 1129</span> std::vector<R>& out,</div>\n-<div class=\"line\"><a id=\"l01130\" name=\"l01130\"></a><span class=\"lineno\"> 1130</span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a01479.html#addecbb0942b0fa43f0abec42f1c848ab\">evaluateJacobian</a>, std::vector<R>& outJac,</div>\n-<div class=\"line\"><a id=\"l01131\" name=\"l01131\"></a><span class=\"lineno\"> 1131</span> <span class=\"keywordtype\">bool</span> evaluateHessian, std::vector<R>& outHess,</div>\n-<div class=\"line\"><a id=\"l01132\" name=\"l01132\"></a><span class=\"lineno\"> 1132</span> <span class=\"keyword\">const</span> std::vector<R>& knotVector,</div>\n-<div class=\"line\"><a id=\"l01133\" name=\"l01133\"></a><span class=\"lineno\"> 1133</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> order,</div>\n-<div class=\"line\"><a id=\"l01134\" name=\"l01134\"></a><span class=\"lineno\"> 1134</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> currentKnotSpan)</div>\n-<div class=\"line\"><a id=\"l01135\" name=\"l01135\"></a><span class=\"lineno\"> 1135</span> {</div>\n-<div class=\"line\"><a id=\"l01136\" name=\"l01136\"></a><span class=\"lineno\"> 1136</span> <span class=\"comment\">// How many shape functions to we have in each coordinate direction?</span></div>\n-<div class=\"line\"><a id=\"l01137\" name=\"l01137\"></a><span class=\"lineno\"> 1137</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> limit;</div>\n-<div class=\"line\"><a id=\"l01138\" name=\"l01138\"></a><span class=\"lineno\"> 1138</span> limit = order+1; <span class=\"comment\">// The 'standard' value away from the boundaries of the knot vector</span></div>\n-<div class=\"line\"><a id=\"l01139\" name=\"l01139\"></a><span class=\"lineno\"> 1139</span> <span class=\"keywordflow\">if</span> (currentKnotSpan<order)</div>\n-<div class=\"line\"><a id=\"l01140\" name=\"l01140\"></a><span class=\"lineno\"> 1140</span> limit -= (order - currentKnotSpan);</div>\n-<div class=\"line\"><a id=\"l01141\" name=\"l01141\"></a><span class=\"lineno\"> 1141</span> <span class=\"keywordflow\">if</span> ( order > (knotVector.size() - currentKnotSpan - 2) )</div>\n-<div class=\"line\"><a id=\"l01142\" name=\"l01142\"></a><span class=\"lineno\"> 1142</span> limit -= order - (knotVector.size() - currentKnotSpan - 2);</div>\n-<div class=\"line\"><a id=\"l01143\" name=\"l01143\"></a><span class=\"lineno\"> 1143</span> </div>\n-<div class=\"line\"><a id=\"l01144\" name=\"l01144\"></a><span class=\"lineno\"> 1144</span> <span class=\"comment\">// The lowest knot spans that we need values from</span></div>\n-<div class=\"line\"><a id=\"l01145\" name=\"l01145\"></a><span class=\"lineno\"> 1145</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> offset;</div>\n-<div class=\"line\"><a id=\"l01146\" name=\"l01146\"></a><span class=\"lineno\"> 1146</span> offset = std::max((<span class=\"keywordtype\">int</span>)(currentKnotSpan - order),0);</div>\n-<div class=\"line\"><a id=\"l01147\" name=\"l01147\"></a><span class=\"lineno\"> 1147</span> </div>\n-<div class=\"line\"><a id=\"l01148\" name=\"l01148\"></a><span class=\"lineno\"> 1148</span> <span class=\"comment\">// Evaluate 1d function values (needed for the product rule)</span></div>\n-<div class=\"line\"><a id=\"l01149\" name=\"l01149\"></a><span class=\"lineno\"> 1149</span> DynamicMatrix<R> values;</div>\n-<div class=\"line\"><a id=\"l01150\" name=\"l01150\"></a><span class=\"lineno\"> 1150</span> </div>\n-<div class=\"line\"><a id=\"l01151\" name=\"l01151\"></a><span class=\"lineno\"> 1151</span> <a class=\"code hl_function\" href=\"a01479.html#a2c742d3ca0cb2c2dd3f5313295c84a63\">evaluateFunctionFull</a>(in, values, knotVector, order, currentKnotSpan);</div>\n-<div class=\"line\"><a id=\"l01152\" name=\"l01152\"></a><span class=\"lineno\"> 1152</span> </div>\n-<div class=\"line\"><a id=\"l01153\" name=\"l01153\"></a><span class=\"lineno\"> 1153</span> out.resize(knotVector.size()-order-1);</div>\n-<div class=\"line\"><a id=\"l01154\" name=\"l01154\"></a><span class=\"lineno\"> 1154</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> j=0; j<out.size(); j++)</div>\n-<div class=\"line\"><a id=\"l01155\" name=\"l01155\"></a><span class=\"lineno\"> 1155</span> out[j] = values[order][j];</div>\n-<div class=\"line\"><a id=\"l01156\" name=\"l01156\"></a><span class=\"lineno\"> 1156</span> </div>\n-<div class=\"line\"><a id=\"l01157\" name=\"l01157\"></a><span class=\"lineno\"> 1157</span> <span class=\"comment\">// Evaluate 1d function values of one order lower (needed for the derivative formula)</span></div>\n-<div class=\"line\"><a id=\"l01158\" name=\"l01158\"></a><span class=\"lineno\"> 1158</span> std::vector<R> lowOrderOneDValues;</div>\n-<div class=\"line\"><a id=\"l01159\" name=\"l01159\"></a><span class=\"lineno\"> 1159</span> </div>\n-<div class=\"line\"><a id=\"l01160\" name=\"l01160\"></a><span class=\"lineno\"> 1160</span> <span class=\"keywordflow\">if</span> (order!=0)</div>\n-<div class=\"line\"><a id=\"l01161\" name=\"l01161\"></a><span class=\"lineno\"> 1161</span> {</div>\n-<div class=\"line\"><a id=\"l01162\" name=\"l01162\"></a><span class=\"lineno\"> 1162</span> lowOrderOneDValues.resize(knotVector.size()-(order-1)-1);</div>\n-<div class=\"line\"><a id=\"l01163\" name=\"l01163\"></a><span class=\"lineno\"> 1163</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> j=0; j<lowOrderOneDValues.size(); j++)</div>\n-<div class=\"line\"><a id=\"l01164\" name=\"l01164\"></a><span class=\"lineno\"> 1164</span> lowOrderOneDValues[j] = values[order-1][j];</div>\n-<div class=\"line\"><a id=\"l01165\" name=\"l01165\"></a><span class=\"lineno\"> 1165</span> }</div>\n-<div class=\"line\"><a id=\"l01166\" name=\"l01166\"></a><span class=\"lineno\"> 1166</span> </div>\n-<div class=\"line\"><a id=\"l01167\" name=\"l01167\"></a><span class=\"lineno\"> 1167</span> <span class=\"comment\">// Evaluate 1d function values of two order lower (needed for the (second) derivative formula)</span></div>\n-<div class=\"line\"><a id=\"l01168\" name=\"l01168\"></a><span class=\"lineno\"> 1168</span> std::vector<R> lowOrderTwoDValues;</div>\n-<div class=\"line\"><a id=\"l01169\" name=\"l01169\"></a><span class=\"lineno\"> 1169</span> </div>\n-<div class=\"line\"><a id=\"l01170\" name=\"l01170\"></a><span class=\"lineno\"> 1170</span> <span class=\"keywordflow\">if</span> (order>1 && evaluateHessian)</div>\n-<div class=\"line\"><a id=\"l01171\" name=\"l01171\"></a><span class=\"lineno\"> 1171</span> {</div>\n-<div class=\"line\"><a id=\"l01172\" name=\"l01172\"></a><span class=\"lineno\"> 1172</span> lowOrderTwoDValues.resize(knotVector.size()-(order-2)-1);</div>\n-<div class=\"line\"><a id=\"l01173\" name=\"l01173\"></a><span class=\"lineno\"> 1173</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> j=0; j<lowOrderTwoDValues.size(); j++)</div>\n-<div class=\"line\"><a id=\"l01174\" name=\"l01174\"></a><span class=\"lineno\"> 1174</span> lowOrderTwoDValues[j] = values[order-2][j];</div>\n-<div class=\"line\"><a id=\"l01175\" name=\"l01175\"></a><span class=\"lineno\"> 1175</span> }</div>\n-<div class=\"line\"><a id=\"l01176\" name=\"l01176\"></a><span class=\"lineno\"> 1176</span> </div>\n-<div class=\"line\"><a id=\"l01177\" name=\"l01177\"></a><span class=\"lineno\"> 1177</span> <span class=\"comment\">// Evaluate 1d function derivatives</span></div>\n-<div class=\"line\"><a id=\"l01178\" name=\"l01178\"></a><span class=\"lineno\"> 1178</span> <span class=\"keywordflow\">if</span> (<a class=\"code hl_function\" href=\"a01479.html#addecbb0942b0fa43f0abec42f1c848ab\">evaluateJacobian</a>)</div>\n-<div class=\"line\"><a id=\"l01179\" name=\"l01179\"></a><span class=\"lineno\"> 1179</span> {</div>\n-<div class=\"line\"><a id=\"l01180\" name=\"l01180\"></a><span class=\"lineno\"> 1180</span> outJac.resize(limit);</div>\n-<div class=\"line\"><a id=\"l01181\" name=\"l01181\"></a><span class=\"lineno\"> 1181</span> </div>\n-<div class=\"line\"><a id=\"l01182\" name=\"l01182\"></a><span class=\"lineno\"> 1182</span> <span class=\"keywordflow\">if</span> (order==0) <span class=\"comment\">// order-zero functions are piecewise constant, hence all derivatives are zero</span></div>\n-<div class=\"line\"><a id=\"l01183\" name=\"l01183\"></a><span class=\"lineno\"> 1183</span> std::fill(outJac.begin(), outJac.end(), <a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a>(0.0));</div>\n-<div class=\"line\"><a id=\"l01184\" name=\"l01184\"></a><span class=\"lineno\"> 1184</span> <span class=\"keywordflow\">else</span></div>\n-<div class=\"line\"><a id=\"l01185\" name=\"l01185\"></a><span class=\"lineno\"> 1185</span> {</div>\n-<div class=\"line\"><a id=\"l01186\" name=\"l01186\"></a><span class=\"lineno\"> 1186</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> j=offset; j<offset+limit; j++)</div>\n-<div class=\"line\"><a id=\"l01187\" name=\"l01187\"></a><span class=\"lineno\"> 1187</span> {</div>\n-<div class=\"line\"><a id=\"l01188\" name=\"l01188\"></a><span class=\"lineno\"> 1188</span> <a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a> derivativeAddend1 = lowOrderOneDValues[j] / (knotVector[j+order]-knotVector[j]);</div>\n-<div class=\"line\"><a id=\"l01189\" name=\"l01189\"></a><span class=\"lineno\"> 1189</span> <a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a> derivativeAddend2 = lowOrderOneDValues[j+1] / (knotVector[j+order+1]-knotVector[j+1]);</div>\n-<div class=\"line\"><a id=\"l01190\" name=\"l01190\"></a><span class=\"lineno\"> 1190</span> <span class=\"comment\">// The two previous terms may evaluate as 0/0. This is to be interpreted as 0.</span></div>\n-<div class=\"line\"><a id=\"l01191\" name=\"l01191\"></a><span class=\"lineno\"> 1191</span> <span class=\"keywordflow\">if</span> (std::isnan(derivativeAddend1))</div>\n-<div class=\"line\"><a id=\"l01192\" name=\"l01192\"></a><span class=\"lineno\"> 1192</span> derivativeAddend1 = 0;</div>\n-<div class=\"line\"><a id=\"l01193\" name=\"l01193\"></a><span class=\"lineno\"> 1193</span> <span class=\"keywordflow\">if</span> (std::isnan(derivativeAddend2))</div>\n-<div class=\"line\"><a id=\"l01194\" name=\"l01194\"></a><span class=\"lineno\"> 1194</span> derivativeAddend2 = 0;</div>\n-<div class=\"line\"><a id=\"l01195\" name=\"l01195\"></a><span class=\"lineno\"> 1195</span> outJac[j-offset] = order * ( derivativeAddend1 - derivativeAddend2 );</div>\n-<div class=\"line\"><a id=\"l01196\" name=\"l01196\"></a><span class=\"lineno\"> 1196</span> }</div>\n-<div class=\"line\"><a id=\"l01197\" name=\"l01197\"></a><span class=\"lineno\"> 1197</span> }</div>\n-<div class=\"line\"><a id=\"l01198\" name=\"l01198\"></a><span class=\"lineno\"> 1198</span> }</div>\n-<div class=\"line\"><a id=\"l01199\" name=\"l01199\"></a><span class=\"lineno\"> 1199</span> </div>\n-<div class=\"line\"><a id=\"l01200\" name=\"l01200\"></a><span class=\"lineno\"> 1200</span> <span class=\"comment\">// Evaluate 1d function second derivatives</span></div>\n-<div class=\"line\"><a id=\"l01201\" name=\"l01201\"></a><span class=\"lineno\"> 1201</span> <span class=\"keywordflow\">if</span> (evaluateHessian)</div>\n-<div class=\"line\"><a id=\"l01202\" name=\"l01202\"></a><span class=\"lineno\"> 1202</span> {</div>\n-<div class=\"line\"><a id=\"l01203\" name=\"l01203\"></a><span class=\"lineno\"> 1203</span> outHess.resize(limit);</div>\n-<div class=\"line\"><a id=\"l01204\" name=\"l01204\"></a><span class=\"lineno\"> 1204</span> </div>\n-<div class=\"line\"><a id=\"l01205\" name=\"l01205\"></a><span class=\"lineno\"> 1205</span> <span class=\"keywordflow\">if</span> (order<2) <span class=\"comment\">// order-zero functions are piecewise constant, hence all derivatives are zero</span></div>\n-<div class=\"line\"><a id=\"l01206\" name=\"l01206\"></a><span class=\"lineno\"> 1206</span> std::fill(outHess.begin(), outHess.end(), <a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a>(0.0));</div>\n-<div class=\"line\"><a id=\"l01207\" name=\"l01207\"></a><span class=\"lineno\"> 1207</span> <span class=\"keywordflow\">else</span></div>\n-<div class=\"line\"><a id=\"l01208\" name=\"l01208\"></a><span class=\"lineno\"> 1208</span> {</div>\n-<div class=\"line\"><a id=\"l01209\" name=\"l01209\"></a><span class=\"lineno\"> 1209</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> j=offset; j<offset+limit; j++)</div>\n-<div class=\"line\"><a id=\"l01210\" name=\"l01210\"></a><span class=\"lineno\"> 1210</span> {</div>\n-<div class=\"line\"><a id=\"l01211\" name=\"l01211\"></a><span class=\"lineno\"> 1211</span> assert(j+2 < lowOrderTwoDValues.size());</div>\n-<div class=\"line\"><a id=\"l01212\" name=\"l01212\"></a><span class=\"lineno\"> 1212</span> <a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a> derivativeAddend1 = lowOrderTwoDValues[j] / (knotVector[j+order]-knotVector[j]) / (knotVector[j+order-1]-knotVector[j]);</div>\n-<div class=\"line\"><a id=\"l01213\" name=\"l01213\"></a><span class=\"lineno\"> 1213</span> <a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a> derivativeAddend2 = lowOrderTwoDValues[j+1] / (knotVector[j+order]-knotVector[j]) / (knotVector[j+order]-knotVector[j+1]);</div>\n-<div class=\"line\"><a id=\"l01214\" name=\"l01214\"></a><span class=\"lineno\"> 1214</span> <a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a> derivativeAddend3 = lowOrderTwoDValues[j+1] / (knotVector[j+order+1]-knotVector[j+1]) / (knotVector[j+order]-knotVector[j+1]);</div>\n-<div class=\"line\"><a id=\"l01215\" name=\"l01215\"></a><span class=\"lineno\"> 1215</span> <a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a> derivativeAddend4 = lowOrderTwoDValues[j+2] / (knotVector[j+order+1]-knotVector[j+1]) / (knotVector[j+1+order]-knotVector[j+2]);</div>\n-<div class=\"line\"><a id=\"l01216\" name=\"l01216\"></a><span class=\"lineno\"> 1216</span> <span class=\"comment\">// The two previous terms may evaluate as 0/0. This is to be interpreted as 0.</span></div>\n-<div class=\"line\"><a id=\"l01217\" name=\"l01217\"></a><span class=\"lineno\"> 1217</span> </div>\n-<div class=\"line\"><a id=\"l01218\" name=\"l01218\"></a><span class=\"lineno\"> 1218</span> <span class=\"keywordflow\">if</span> (std::isnan(derivativeAddend1))</div>\n-<div class=\"line\"><a id=\"l01219\" name=\"l01219\"></a><span class=\"lineno\"> 1219</span> derivativeAddend1 = 0;</div>\n-<div class=\"line\"><a id=\"l01220\" name=\"l01220\"></a><span class=\"lineno\"> 1220</span> <span class=\"keywordflow\">if</span> (std::isnan(derivativeAddend2))</div>\n-<div class=\"line\"><a id=\"l01221\" name=\"l01221\"></a><span class=\"lineno\"> 1221</span> derivativeAddend2 = 0;</div>\n-<div class=\"line\"><a id=\"l01222\" name=\"l01222\"></a><span class=\"lineno\"> 1222</span> <span class=\"keywordflow\">if</span> (std::isnan(derivativeAddend3))</div>\n-<div class=\"line\"><a id=\"l01223\" name=\"l01223\"></a><span class=\"lineno\"> 1223</span> derivativeAddend3 = 0;</div>\n-<div class=\"line\"><a id=\"l01224\" name=\"l01224\"></a><span class=\"lineno\"> 1224</span> <span class=\"keywordflow\">if</span> (std::isnan(derivativeAddend4))</div>\n-<div class=\"line\"><a id=\"l01225\" name=\"l01225\"></a><span class=\"lineno\"> 1225</span> derivativeAddend4 = 0;</div>\n-<div class=\"line\"><a id=\"l01226\" name=\"l01226\"></a><span class=\"lineno\"> 1226</span> outHess[j-offset] = order * (order-1) * ( derivativeAddend1 - derivativeAddend2 -derivativeAddend3 + derivativeAddend4 );</div>\n-<div class=\"line\"><a id=\"l01227\" name=\"l01227\"></a><span class=\"lineno\"> 1227</span> }</div>\n-<div class=\"line\"><a id=\"l01228\" name=\"l01228\"></a><span class=\"lineno\"> 1228</span> }</div>\n-<div class=\"line\"><a id=\"l01229\" name=\"l01229\"></a><span class=\"lineno\"> 1229</span> }</div>\n-<div class=\"line\"><a id=\"l01230\" name=\"l01230\"></a><span class=\"lineno\"> 1230</span> }</div>\n-<div class=\"line\"><a id=\"l01231\" name=\"l01231\"></a><span class=\"lineno\"> 1231</span> </div>\n-<div class=\"line\"><a id=\"l01232\" name=\"l01232\"></a><span class=\"lineno\"> 1232</span> </div>\n-<div class=\"line\"><a id=\"l01234\" name=\"l01234\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\"> 1234</a></span> std::array<unsigned int, dim> <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>;</div>\n-<div class=\"line\"><a id=\"l01235\" name=\"l01235\"></a><span class=\"lineno\"> 1235</span> </div>\n-<div class=\"line\"><a id=\"l01237\" name=\"l01237\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\"> 1237</a></span> std::array<std::vector<double>, dim> <a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>;</div>\n-<div class=\"line\"><a id=\"l01238\" name=\"l01238\"></a><span class=\"lineno\"> 1238</span> </div>\n-<div class=\"line\"><a id=\"l01240\" name=\"l01240\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a08746400f31c37c2294fc700f467d291\"> 1240</a></span> std::array<unsigned,dim> <a class=\"code hl_variable\" href=\"a01479.html#a08746400f31c37c2294fc700f467d291\">elements_</a>;</div>\n-<div class=\"line\"><a id=\"l01241\" name=\"l01241\"></a><span class=\"lineno\"> 1241</span> </div>\n-<div class=\"line\"><a id=\"l01242\" name=\"l01242\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a141bd4b20ae309776f615f7ca33ce87b\"> 1242</a></span> <a class=\"code hl_typedef\" href=\"a01479.html#a71f4090ddbb632644769cb0a9c5f394c\">GridView</a> <a class=\"code hl_variable\" href=\"a01479.html#a141bd4b20ae309776f615f7ca33ce87b\">gridView_</a>;</div>\n-<div class=\"line\"><a id=\"l01243\" name=\"l01243\"></a><span class=\"lineno\"> 1243</span>};</div>\n-<div class=\"line\"><a id=\"l01244\" name=\"l01244\"></a><span class=\"lineno\"> 1244</span> </div>\n-<div class=\"line\"><a id=\"l01245\" name=\"l01245\"></a><span class=\"lineno\"> 1245</span> </div>\n-<div class=\"line\"><a id=\"l01246\" name=\"l01246\"></a><span class=\"lineno\"> 1246</span> </div>\n-<div class=\"line\"><a id=\"l01247\" name=\"l01247\"></a><span class=\"lineno\"> 1247</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV></div>\n-<div class=\"line\"><a id=\"l01248\" name=\"l01248\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01495.html\"> 1248</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01495.html\">BSplineNode</a> :</div>\n-<div class=\"line\"><a id=\"l01249\" name=\"l01249\"></a><span class=\"lineno\"> 1249</span> <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01711.html\">LeafBasisNode</a></div>\n-<div class=\"line\"><a id=\"l01250\" name=\"l01250\"></a><span class=\"lineno\"> 1250</span>{</div>\n-<div class=\"line\"><a id=\"l01251\" name=\"l01251\"></a><span class=\"lineno\"> 1251</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dim = GV::dimension;</div>\n-<div class=\"line\"><a id=\"l01252\" name=\"l01252\"></a><span class=\"lineno\"> 1252</span> </div>\n-<div class=\"line\"><a id=\"l01253\" name=\"l01253\"></a><span class=\"lineno\"> 1253</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l01254\" name=\"l01254\"></a><span class=\"lineno\"> 1254</span> </div>\n-<div class=\"line\"><a id=\"l01255\" name=\"l01255\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01495.html#ae563738fb93ed2e7dc40775a1eb791ae\"> 1255</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01495.html#ae563738fb93ed2e7dc40775a1eb791ae\">size_type</a> = std::size_t;</div>\n-<div class=\"line\"><a id=\"l01256\" name=\"l01256\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01495.html#a3d6a0412f84c0739c42d61c3222f7097\"> 1256</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01495.html#a3d6a0412f84c0739c42d61c3222f7097\">Element</a> = <span class=\"keyword\">typename</span> GV::template Codim<0>::Entity;</div>\n-<div class=\"line\"><a id=\"l01257\" name=\"l01257\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01495.html#a5aac4db340f89109bffd53e731b38537\"> 1257</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01475.html\">FiniteElement</a> = <a class=\"code hl_class\" href=\"a01475.html\">BSplineLocalFiniteElement<GV,double></a>;</div>\n-<div class=\"line\"><a id=\"l01258\" name=\"l01258\"></a><span class=\"lineno\"> 1258</span> </div>\n-<div class=\"line\"><a id=\"l01259\" name=\"l01259\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01495.html#a7444a74873c84aacc8b9b6669b8c8a11\"> 1259</a></span> <a class=\"code hl_function\" href=\"a01495.html#a7444a74873c84aacc8b9b6669b8c8a11\">BSplineNode</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01479.html\">BSplinePreBasis<GV></a>* preBasis) :</div>\n-<div class=\"line\"><a id=\"l01260\" name=\"l01260\"></a><span class=\"lineno\"> 1260</span> <a class=\"code hl_variable\" href=\"a01495.html#a4f229be79854725c276ece5ac9d17b38\">preBasis_</a>(preBasis),</div>\n-<div class=\"line\"><a id=\"l01261\" name=\"l01261\"></a><span class=\"lineno\"> 1261</span> <a class=\"code hl_variable\" href=\"a01495.html#a8a7948553a4a579b1ab4720a9c156346\">finiteElement_</a>(*preBasis)</div>\n-<div class=\"line\"><a id=\"l01262\" name=\"l01262\"></a><span class=\"lineno\"> 1262</span> {}</div>\n-<div class=\"line\"><a id=\"l01263\" name=\"l01263\"></a><span class=\"lineno\"> 1263</span> </div>\n-<div class=\"line\"><a id=\"l01265\" name=\"l01265\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01495.html#a80df2171f3763abd188b3d3cb9b7732a\"> 1265</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01495.html#a3d6a0412f84c0739c42d61c3222f7097\">Element</a>& <a class=\"code hl_function\" href=\"a01495.html#a80df2171f3763abd188b3d3cb9b7732a\">element</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l01266\" name=\"l01266\"></a><span class=\"lineno\"> 1266</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l01267\" name=\"l01267\"></a><span class=\"lineno\"> 1267</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01495.html#a5bd21a21da78b173945356ede8ae39a6\">element_</a>;</div>\n-<div class=\"line\"><a id=\"l01268\" name=\"l01268\"></a><span class=\"lineno\"> 1268</span> }</div>\n-<div class=\"line\"><a id=\"l01269\" name=\"l01269\"></a><span class=\"lineno\"> 1269</span> </div>\n-<div class=\"line\"><a id=\"l01274\" name=\"l01274\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01495.html#a061007133830a1181adc187c1f6f692b\"> 1274</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01475.html\">FiniteElement</a>& <a class=\"code hl_function\" href=\"a01495.html#a061007133830a1181adc187c1f6f692b\">finiteElement</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l01275\" name=\"l01275\"></a><span class=\"lineno\"> 1275</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l01276\" name=\"l01276\"></a><span class=\"lineno\"> 1276</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01495.html#a8a7948553a4a579b1ab4720a9c156346\">finiteElement_</a>;</div>\n-<div class=\"line\"><a id=\"l01277\" name=\"l01277\"></a><span class=\"lineno\"> 1277</span> }</div>\n-<div class=\"line\"><a id=\"l01278\" name=\"l01278\"></a><span class=\"lineno\"> 1278</span> </div>\n-<div class=\"line\"><a id=\"l01280\" name=\"l01280\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01495.html#a6e2c2d3de78fe1f2cedb5da2a736d2ba\"> 1280</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01495.html#a6e2c2d3de78fe1f2cedb5da2a736d2ba\">bind</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01495.html#a3d6a0412f84c0739c42d61c3222f7097\">Element</a>& e)</div>\n-<div class=\"line\"><a id=\"l01281\" name=\"l01281\"></a><span class=\"lineno\"> 1281</span> {</div>\n-<div class=\"line\"><a id=\"l01282\" name=\"l01282\"></a><span class=\"lineno\"> 1282</span> <a class=\"code hl_variable\" href=\"a01495.html#a5bd21a21da78b173945356ede8ae39a6\">element_</a> = e;</div>\n-<div class=\"line\"><a id=\"l01283\" name=\"l01283\"></a><span class=\"lineno\"> 1283</span> <span class=\"keyword\">auto</span> elementIndex = <a class=\"code hl_variable\" href=\"a01495.html#a4f229be79854725c276ece5ac9d17b38\">preBasis_</a>->gridView().indexSet().index(e);</div>\n-<div class=\"line\"><a id=\"l01284\" name=\"l01284\"></a><span class=\"lineno\"> 1284</span> <a class=\"code hl_variable\" href=\"a01495.html#a8a7948553a4a579b1ab4720a9c156346\">finiteElement_</a>.<a class=\"code hl_function\" href=\"a01475.html#a8986ef55edc552afc79a0c5fb20e93e9\">bind</a>(<a class=\"code hl_variable\" href=\"a01495.html#a4f229be79854725c276ece5ac9d17b38\">preBasis_</a>->getIJK(elementIndex,<a class=\"code hl_variable\" href=\"a01495.html#a4f229be79854725c276ece5ac9d17b38\">preBasis_</a>->elements_));</div>\n-<div class=\"line\"><a id=\"l01285\" name=\"l01285\"></a><span class=\"lineno\"> 1285</span> this-><a class=\"code hl_function\" href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\">setSize</a>(<a class=\"code hl_variable\" href=\"a01495.html#a8a7948553a4a579b1ab4720a9c156346\">finiteElement_</a>.<a class=\"code hl_function\" href=\"a01475.html#ab15469899e86cb97eece21be2e207162\">size</a>());</div>\n-<div class=\"line\"><a id=\"l01286\" name=\"l01286\"></a><span class=\"lineno\"> 1286</span> }</div>\n-<div class=\"line\"><a id=\"l01287\" name=\"l01287\"></a><span class=\"lineno\"> 1287</span> </div>\n-<div class=\"line\"><a id=\"l01288\" name=\"l01288\"></a><span class=\"lineno\"> 1288</span><span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l01289\" name=\"l01289\"></a><span class=\"lineno\"> 1289</span> </div>\n-<div class=\"line\"><a id=\"l01290\" name=\"l01290\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01495.html#a4f229be79854725c276ece5ac9d17b38\"> 1290</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01479.html\">BSplinePreBasis<GV></a>* <a class=\"code hl_variable\" href=\"a01495.html#a4f229be79854725c276ece5ac9d17b38\">preBasis_</a>;</div>\n-<div class=\"line\"><a id=\"l01291\" name=\"l01291\"></a><span class=\"lineno\"> 1291</span> </div>\n-<div class=\"line\"><a id=\"l01292\" name=\"l01292\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01495.html#a8a7948553a4a579b1ab4720a9c156346\"> 1292</a></span> <a class=\"code hl_class\" href=\"a01475.html\">FiniteElement</a> <a class=\"code hl_variable\" href=\"a01495.html#a8a7948553a4a579b1ab4720a9c156346\">finiteElement_</a>;</div>\n-<div class=\"line\"><a id=\"l01293\" name=\"l01293\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01495.html#a5bd21a21da78b173945356ede8ae39a6\"> 1293</a></span> <a class=\"code hl_typedef\" href=\"a01495.html#a3d6a0412f84c0739c42d61c3222f7097\">Element</a> <a class=\"code hl_variable\" href=\"a01495.html#a5bd21a21da78b173945356ede8ae39a6\">element_</a>;</div>\n-<div class=\"line\"><a id=\"l01294\" name=\"l01294\"></a><span class=\"lineno\"> 1294</span>};</div>\n-<div class=\"line\"><a id=\"l01295\" name=\"l01295\"></a><span class=\"lineno\"> 1295</span> </div>\n-<div class=\"line\"><a id=\"l01296\" name=\"l01296\"></a><span class=\"lineno\"> 1296</span> </div>\n-<div class=\"line\"><a id=\"l01297\" name=\"l01297\"></a><span class=\"lineno\"> 1297</span> </div>\n-<div class=\"line\"><a id=\"l01298\" name=\"l01298\"></a><span class=\"lineno\"> 1298</span><span class=\"keyword\">namespace </span>BasisFactory {</div>\n-<div class=\"line\"><a id=\"l01299\" name=\"l01299\"></a><span class=\"lineno\"> 1299</span> </div>\n-<div class=\"line\"><a id=\"l01306\" name=\"l01306\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#ga63a9701af71fffbbb851a38cb8cf886f\"> 1306</a></span><span class=\"keyword\">inline</span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00213.html#ga63a9701af71fffbbb851a38cb8cf886f\">bSpline</a>(<span class=\"keyword\">const</span> std::vector<double>& knotVector,</div>\n-<div class=\"line\"><a id=\"l01307\" name=\"l01307\"></a><span class=\"lineno\"> 1307</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> order,</div>\n-<div class=\"line\"><a id=\"l01308\" name=\"l01308\"></a><span class=\"lineno\"> 1308</span> <span class=\"keywordtype\">bool</span> makeOpen = <span class=\"keyword\">true</span>)</div>\n-<div class=\"line\"><a id=\"l01309\" name=\"l01309\"></a><span class=\"lineno\"> 1309</span>{</div>\n-<div class=\"line\"><a id=\"l01310\" name=\"l01310\"></a><span class=\"lineno\"> 1310</span> <span class=\"keywordflow\">return</span> [&knotVector, order, makeOpen](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridView) {</div>\n-<div class=\"line\"><a id=\"l01311\" name=\"l01311\"></a><span class=\"lineno\"> 1311</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01479.html\">BSplinePreBasis</a><std::decay_t<<span class=\"keyword\">decltype</span>(gridView)>>(gridView, knotVector, order, makeOpen);</div>\n-<div class=\"line\"><a id=\"l01312\" name=\"l01312\"></a><span class=\"lineno\"> 1312</span> };</div>\n-<div class=\"line\"><a id=\"l01313\" name=\"l01313\"></a><span class=\"lineno\"> 1313</span>}</div>\n-<div class=\"line\"><a id=\"l01314\" name=\"l01314\"></a><span class=\"lineno\"> 1314</span> </div>\n-<div class=\"line\"><a id=\"l01315\" name=\"l01315\"></a><span class=\"lineno\"> 1315</span>} <span class=\"comment\">// end namespace BasisFactory</span></div>\n-<div class=\"line\"><a id=\"l01316\" name=\"l01316\"></a><span class=\"lineno\"> 1316</span> </div>\n-<div class=\"line\"><a id=\"l01317\" name=\"l01317\"></a><span class=\"lineno\"> 1317</span><span class=\"comment\">// *****************************************************************************</span></div>\n-<div class=\"line\"><a id=\"l01318\" name=\"l01318\"></a><span class=\"lineno\"> 1318</span><span class=\"comment\">// This is the actual global basis implementation based on the reusable parts.</span></div>\n-<div class=\"line\"><a id=\"l01319\" name=\"l01319\"></a><span class=\"lineno\"> 1319</span><span class=\"comment\">// *****************************************************************************</span></div>\n-<div class=\"line\"><a id=\"l01320\" name=\"l01320\"></a><span class=\"lineno\"> 1320</span> </div>\n-<div class=\"line\"><a id=\"l01327\" name=\"l01327\"></a><span class=\"lineno\"> 1327</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV></div>\n-<div class=\"line\"><a id=\"l01328\" name=\"l01328\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#ga189243b64e66543614a954706d70ce4a\"> 1328</a></span><span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01555.html\">BSplineBasis</a> = <a class=\"code hl_class\" href=\"a01555.html\">DefaultGlobalBasis<BSplinePreBasis<GV></a> >;</div>\n-<div class=\"line\"><a id=\"l01329\" name=\"l01329\"></a><span class=\"lineno\"> 1329</span> </div>\n-<div class=\"line\"><a id=\"l01330\" name=\"l01330\"></a><span class=\"lineno\"> 1330</span> </div>\n-<div class=\"line\"><a id=\"l01331\" name=\"l01331\"></a><span class=\"lineno\"> 1331</span>} <span class=\"comment\">// namespace Functions</span></div>\n-<div class=\"line\"><a id=\"l01332\" name=\"l01332\"></a><span class=\"lineno\"> 1332</span> </div>\n-<div class=\"line\"><a id=\"l01333\" name=\"l01333\"></a><span class=\"lineno\"> 1333</span>} <span class=\"comment\">// namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l01334\" name=\"l01334\"></a><span class=\"lineno\"> 1334</span> </div>\n-<div class=\"line\"><a id=\"l01335\" name=\"l01335\"></a><span class=\"lineno\"> 1335</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH</span></div>\n-<div class=\"ttc\" id=\"aa00119_html\"><div class=\"ttname\"><a href=\"a00119.html\">defaultglobalbasis.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00191_html\"><div class=\"ttname\"><a href=\"a00191.html\">nodes.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00213_html_ga63a9701af71fffbbb851a38cb8cf886f\"><div class=\"ttname\"><a href=\"a00213.html#ga63a9701af71fffbbb851a38cb8cf886f\">Dune::Functions::BasisFactory::bSpline</a></div><div class=\"ttdeci\">auto bSpline(const std::vector< double > &knotVector, unsigned int order, bool makeOpen=true)</div><div class=\"ttdoc\">Create a pre-basis factory that can create a B-spline pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1306</div></div>\n+<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> </div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span>} <span class=\"comment\">// end namespace Functions</span></div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span>} <span class=\"comment\">// end namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> </div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> </div>\n+<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> </div>\n+<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH</span></div>\n+<div class=\"ttc\" id=\"aa00029_html\"><div class=\"ttname\"><a href=\"a00029.html\">type_traits.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00188_html\"><div class=\"ttname\"><a href=\"a00188.html\">subspacelocalview.hh</a></div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa01475_html\"><div class=\"ttname\"><a href=\"a01475.html\">Dune::Functions::BSplineLocalFiniteElement</a></div><div class=\"ttdoc\">LocalFiniteElement in the sense of dune-localfunctions, for the B-spline basis on tensor-product grid...</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:362</div></div>\n-<div class=\"ttc\" id=\"aa01475_html_a056defb77857b94194963eaac1d9116e\"><div class=\"ttname\"><a href=\"a01475.html#a056defb77857b94194963eaac1d9116e\">Dune::Functions::BSplineLocalFiniteElement::BSplineLocalFiniteElement</a></div><div class=\"ttdeci\">BSplineLocalFiniteElement(const BSplineLocalFiniteElement &other)</div><div class=\"ttdoc\">Copy constructor.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:383</div></div>\n-<div class=\"ttc\" id=\"aa01475_html_a3e7f4cd0ac478f9bf6e9b1d091693fbe\"><div class=\"ttname\"><a href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\">Dune::Functions::BSplineLocalFiniteElement::preBasis_</a></div><div class=\"ttdeci\">const BSplinePreBasis< GV > & preBasis_</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:474</div></div>\n-<div class=\"ttc\" id=\"aa01475_html_a6663c7b259e38c50201d6341b426d96c\"><div class=\"ttname\"><a href=\"a01475.html#a6663c7b259e38c50201d6341b426d96c\">Dune::Functions::BSplineLocalFiniteElement::localInterpolation</a></div><div class=\"ttdeci\">const BSplineLocalInterpolation< dim, BSplineLocalBasis< GV, R > > & localInterpolation() const</div><div class=\"ttdoc\">Hand out a LocalInterpolation object.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:439</div></div>\n-<div class=\"ttc\" id=\"aa01475_html_a6ea8a8267e93cbd52fed3395b7730817\"><div class=\"ttname\"><a href=\"a01475.html#a6ea8a8267e93cbd52fed3395b7730817\">Dune::Functions::BSplineLocalFiniteElement::Traits</a></div><div class=\"ttdeci\">LocalFiniteElementTraits< BSplineLocalBasis< GV, R >, BSplineLocalCoefficients< dim >, BSplineLocalInterpolation< dim, BSplineLocalBasis< GV, R > > > Traits</div><div class=\"ttdoc\">Export various types related to this LocalFiniteElement.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:372</div></div>\n-<div class=\"ttc\" id=\"aa01475_html_a755a5575093daca735c8cc8fb353883b\"><div class=\"ttname\"><a href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">Dune::Functions::BSplineLocalFiniteElement::currentKnotSpan_</a></div><div class=\"ttdeci\">std::array< unsigned, dim > currentKnotSpan_</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:481</div></div>\n-<div class=\"ttc\" id=\"aa01475_html_a85328bfc4b5eb230da71a04dd8198f2f\"><div class=\"ttname\"><a href=\"a01475.html#a85328bfc4b5eb230da71a04dd8198f2f\">Dune::Functions::BSplineLocalFiniteElement::BSplineLocalFiniteElement</a></div><div class=\"ttdeci\">BSplineLocalFiniteElement(const BSplinePreBasis< GV > &preBasis)</div><div class=\"ttdoc\">Constructor with a given B-spline basis.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:376</div></div>\n-<div class=\"ttc\" id=\"aa01475_html_a896fba4c7d267d272cb866f5e7064877\"><div class=\"ttname\"><a href=\"a01475.html#a896fba4c7d267d272cb866f5e7064877\">Dune::Functions::BSplineLocalFiniteElement::localCoefficients</a></div><div class=\"ttdeci\">const BSplineLocalCoefficients< dim > & localCoefficients() const</div><div class=\"ttdoc\">Hand out a LocalCoefficients object.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:433</div></div>\n-<div class=\"ttc\" id=\"aa01475_html_a8986ef55edc552afc79a0c5fb20e93e9\"><div class=\"ttname\"><a href=\"a01475.html#a8986ef55edc552afc79a0c5fb20e93e9\">Dune::Functions::BSplineLocalFiniteElement::bind</a></div><div class=\"ttdeci\">void bind(const std::array< unsigned, dim > &elementIdx)</div><div class=\"ttdoc\">Bind LocalFiniteElement to a specific knot span of the spline patch.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:394</div></div>\n-<div class=\"ttc\" id=\"aa01475_html_aa279d56a77941dce374774818d74434e\"><div class=\"ttname\"><a href=\"a01475.html#aa279d56a77941dce374774818d74434e\">Dune::Functions::BSplineLocalFiniteElement::localInterpolation_</a></div><div class=\"ttdeci\">BSplineLocalInterpolation< dim, BSplineLocalBasis< GV, R > > localInterpolation_</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:478</div></div>\n-<div class=\"ttc\" id=\"aa01475_html_aa67e3cd78a28ab0f2a64f78de18f47e2\"><div class=\"ttname\"><a href=\"a01475.html#aa67e3cd78a28ab0f2a64f78de18f47e2\">Dune::Functions::BSplineLocalFiniteElement::type</a></div><div class=\"ttdeci\">GeometryType type() const</div><div class=\"ttdoc\">Return the reference element that the local finite element is defined on (here, a hypercube)</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:455</div></div>\n-<div class=\"ttc\" id=\"aa01475_html_ab15469899e86cb97eece21be2e207162\"><div class=\"ttname\"><a href=\"a01475.html#ab15469899e86cb97eece21be2e207162\">Dune::Functions::BSplineLocalFiniteElement::size</a></div><div class=\"ttdeci\">unsigned size() const</div><div class=\"ttdoc\">Number of shape functions in this finite element.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:445</div></div>\n-<div class=\"ttc\" id=\"aa01475_html_acdec5e2d8a6827228df155110117108c\"><div class=\"ttname\"><a href=\"a01475.html#acdec5e2d8a6827228df155110117108c\">Dune::Functions::BSplineLocalFiniteElement::localCoefficients_</a></div><div class=\"ttdeci\">BSplineLocalCoefficients< dim > localCoefficients_</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:477</div></div>\n-<div class=\"ttc\" id=\"aa01475_html_ace5084afe0e9f66e0dacc99fe80bf171\"><div class=\"ttname\"><a href=\"a01475.html#ace5084afe0e9f66e0dacc99fe80bf171\">Dune::Functions::BSplineLocalFiniteElement::size</a></div><div class=\"ttdeci\">unsigned int size(int i) const</div><div class=\"ttdoc\">Number of degrees of freedom for one coordinate direction.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:463</div></div>\n-<div class=\"ttc\" id=\"aa01475_html_adc958ccea9712397f9894c927c199d1d\"><div class=\"ttname\"><a href=\"a01475.html#adc958ccea9712397f9894c927c199d1d\">Dune::Functions::BSplineLocalFiniteElement::localBasis_</a></div><div class=\"ttdeci\">BSplineLocalBasis< GV, R > localBasis_</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:476</div></div>\n-<div class=\"ttc\" id=\"aa01475_html_af2e635b34f6682599e45f34263b95326\"><div class=\"ttname\"><a href=\"a01475.html#af2e635b34f6682599e45f34263b95326\">Dune::Functions::BSplineLocalFiniteElement::localBasis</a></div><div class=\"ttdeci\">const BSplineLocalBasis< GV, R > & localBasis() const</div><div class=\"ttdoc\">Hand out a LocalBasis object.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:427</div></div>\n-<div class=\"ttc\" id=\"aa01479_html\"><div class=\"ttname\"><a href=\"a01479.html\">Dune::Functions::BSplinePreBasis</a></div><div class=\"ttdoc\">Pre-basis for B-spline basis.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:499</div></div>\n-<div class=\"ttc\" id=\"aa01479_html_a0051c4b5a4b375ab5d453ffa8902787d\"><div class=\"ttname\"><a href=\"a01479.html#a0051c4b5a4b375ab5d453ffa8902787d\">Dune::Functions::BSplinePreBasis::multiIndexBufferSize</a></div><div class=\"ttdeci\">static constexpr size_type multiIndexBufferSize</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:567</div></div>\n-<div class=\"ttc\" id=\"aa01479_html_a08746400f31c37c2294fc700f467d291\"><div class=\"ttname\"><a href=\"a01479.html#a08746400f31c37c2294fc700f467d291\">Dune::Functions::BSplinePreBasis::elements_</a></div><div class=\"ttdeci\">std::array< unsigned, dim > elements_</div><div class=\"ttdoc\">Number of grid elements in the different coordinate directions.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1240</div></div>\n-<div class=\"ttc\" id=\"aa01479_html_a141bd4b20ae309776f615f7ca33ce87b\"><div class=\"ttname\"><a href=\"a01479.html#a141bd4b20ae309776f615f7ca33ce87b\">Dune::Functions::BSplinePreBasis::gridView_</a></div><div class=\"ttdeci\">GridView gridView_</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1242</div></div>\n-<div class=\"ttc\" id=\"aa01479_html_a17beca7558ea69ac90503feebfc7a7b0\"><div class=\"ttname\"><a href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">Dune::Functions::BSplinePreBasis::R</a></div><div class=\"ttdeci\">double R</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:570</div></div>\n-<div class=\"ttc\" id=\"aa01479_html_a2c742d3ca0cb2c2dd3f5313295c84a63\"><div class=\"ttname\"><a href=\"a01479.html#a2c742d3ca0cb2c2dd3f5313295c84a63\">Dune::Functions::BSplinePreBasis::evaluateFunctionFull</a></div><div class=\"ttdeci\">static void evaluateFunctionFull(const typename GV::ctype &in, DynamicMatrix< R > &out, const std::vector< R > &knotVector, unsigned int order, unsigned int currentKnotSpan)</div><div class=\"ttdoc\">Evaluate all one-dimensional B-spline functions for a given coordinate direction.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1085</div></div>\n-<div class=\"ttc\" id=\"aa01479_html_a2f03d19256812e423ba918e480c03a7b\"><div class=\"ttname\"><a href=\"a01479.html#a2f03d19256812e423ba918e480c03a7b\">Dune::Functions::BSplinePreBasis::evaluateFunction</a></div><div class=\"ttdeci\">void evaluateFunction(const FieldVector< typename GV::ctype, dim > &in, std::vector< FieldVector< R, 1 > > &out, const std::array< unsigned, dim > &currentKnotSpan) const</div><div class=\"ttdoc\">Evaluate all B-spline basis functions at a given point.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:781</div></div>\n-<div class=\"ttc\" id=\"aa01479_html_a2f2c1860b31056fcd863bc2f721632e6\"><div class=\"ttname\"><a href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">Dune::Functions::BSplinePreBasis::order_</a></div><div class=\"ttdeci\">std::array< unsigned int, dim > order_</div><div class=\"ttdoc\">Order of the B-spline for each space dimension.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1234</div></div>\n-<div class=\"ttc\" id=\"aa01479_html_a3ea7b013cc2160f1705b5567e613a568\"><div class=\"ttname\"><a href=\"a01479.html#a3ea7b013cc2160f1705b5567e613a568\">Dune::Functions::BSplinePreBasis::dimension</a></div><div class=\"ttdeci\">size_type dimension() const</div><div class=\"ttdoc\">Get the total dimension of the space spanned by this basis.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:719</div></div>\n-<div class=\"ttc\" id=\"aa01479_html_a51538e3d5c7ba5c59d613e1aef37d8d5\"><div class=\"ttname\"><a href=\"a01479.html#a51538e3d5c7ba5c59d613e1aef37d8d5\">Dune::Functions::BSplinePreBasis::evaluateAll</a></div><div class=\"ttdeci\">static void evaluateAll(const typename GV::ctype &in, std::vector< R > &out, bool evaluateJacobian, std::vector< R > &outJac, bool evaluateHessian, std::vector< R > &outHess, const std::vector< R > &knotVector, unsigned int order, unsigned int currentKnotSpan)</div><div class=\"ttdoc\">Evaluate the second derivatives of all one-dimensional B-spline functions for a given coordinate dire...</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1128</div></div>\n-<div class=\"ttc\" id=\"aa01479_html_a520df331d03110c5713336ca32ca99c4\"><div class=\"ttname\"><a href=\"a01479.html#a520df331d03110c5713336ca32ca99c4\">Dune::Functions::BSplinePreBasis::evaluateFunction</a></div><div class=\"ttdeci\">static void evaluateFunction(const typename GV::ctype &in, std::vector< R > &out, const std::vector< R > &knotVector, unsigned int order, unsigned int currentKnotSpan)</div><div class=\"ttdoc\">Evaluate all one-dimensional B-spline functions for a given coordinate direction.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1028</div></div>\n-<div class=\"ttc\" id=\"aa01479_html_a6522976d7c91ec4cbf1a193c1b114656\"><div class=\"ttname\"><a href=\"a01479.html#a6522976d7c91ec4cbf1a193c1b114656\">Dune::Functions::BSplinePreBasis::size</a></div><div class=\"ttdeci\">unsigned int size(size_t d) const</div><div class=\"ttdoc\">Number of shape functions in one direction.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:774</div></div>\n-<div class=\"ttc\" id=\"aa01479_html_a71f4090ddbb632644769cb0a9c5f394c\"><div class=\"ttname\"><a href=\"a01479.html#a71f4090ddbb632644769cb0a9c5f394c\">Dune::Functions::BSplinePreBasis::GridView</a></div><div class=\"ttdeci\">GV GridView</div><div class=\"ttdoc\">The grid view that the FE space is defined on.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:560</div></div>\n-<div class=\"ttc\" id=\"aa01479_html_a751c671d2effffac3167f66b1fe5755d\"><div class=\"ttname\"><a href=\"a01479.html#a751c671d2effffac3167f66b1fe5755d\">Dune::Functions::BSplinePreBasis::indices</a></div><div class=\"ttdeci\">It indices(const Node &node, It it) const</div><div class=\"ttdoc\">Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:735</div></div>\n-<div class=\"ttc\" id=\"aa01479_html_a7743becf779c5d57e8665798ac50ce0b\"><div class=\"ttname\"><a href=\"a01479.html#a7743becf779c5d57e8665798ac50ce0b\">Dune::Functions::BSplinePreBasis::evaluate</a></div><div class=\"ttdeci\">void evaluate(const typename std::array< int, k > &directions, const FieldVector< typename GV::ctype, dim > &in, std::vector< FieldVector< R, 1 > > &out, const std::array< unsigned, dim > &currentKnotSpan) const</div><div class=\"ttdoc\">Evaluate Derivatives of all B-spline basis functions.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:913</div></div>\n-<div class=\"ttc\" id=\"aa01479_html_a7aa8059fdf68035788a75cb680e89cdd\"><div class=\"ttname\"><a href=\"a01479.html#a7aa8059fdf68035788a75cb680e89cdd\">Dune::Functions::BSplinePreBasis::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:561</div></div>\n-<div class=\"ttc\" id=\"aa01479_html_a7ba55d70ff3c6d156bb31d2d52817533\"><div class=\"ttname\"><a href=\"a01479.html#a7ba55d70ff3c6d156bb31d2d52817533\">Dune::Functions::BSplinePreBasis::maxMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type maxMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:565</div></div>\n-<div class=\"ttc\" id=\"aa01479_html_a7e14d2f4019dbe19e9d6595bc4f60d65\"><div class=\"ttname\"><a href=\"a01479.html#a7e14d2f4019dbe19e9d6595bc4f60d65\">Dune::Functions::BSplinePreBasis::update</a></div><div class=\"ttdeci\">void update(const GridView &gv)</div><div class=\"ttdoc\">Update the stored grid view, to be called if the grid has changed.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:686</div></div>\n-<div class=\"ttc\" id=\"aa01479_html_a9292ccd68d50240f94f75f54989fd7dd\"><div class=\"ttname\"><a href=\"a01479.html#a9292ccd68d50240f94f75f54989fd7dd\">Dune::Functions::BSplinePreBasis::initializeIndices</a></div><div class=\"ttdeci\">void initializeIndices()</div><div class=\"ttdoc\">Initialize the global indices.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:676</div></div>\n-<div class=\"ttc\" id=\"aa01479_html_aae5d004ab9ccf9fb1d597505d493895a\"><div class=\"ttname\"><a href=\"a01479.html#aae5d004ab9ccf9fb1d597505d493895a\">Dune::Functions::BSplinePreBasis::size</a></div><div class=\"ttdeci\">size_type size(const Dune::ReservedVector< ST, i > &prefix) const</div><div class=\"ttdoc\">Return number of possible values for next position in multi index.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:712</div></div>\n-<div class=\"ttc\" id=\"aa01479_html_acbd350edf10b11a798c8d59285619646\"><div class=\"ttname\"><a href=\"a01479.html#acbd350edf10b11a798c8d59285619646\">Dune::Functions::BSplinePreBasis::size</a></div><div class=\"ttdeci\">unsigned int size() const</div><div class=\"ttdoc\">Total number of B-spline basis functions.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:765</div></div>\n-<div class=\"ttc\" id=\"aa01479_html_ace12350629857a803f32d158bbf4dd25\"><div class=\"ttname\"><a href=\"a01479.html#ace12350629857a803f32d158bbf4dd25\">Dune::Functions::BSplinePreBasis::gridView</a></div><div class=\"ttdeci\">const GridView & gridView() const</div><div class=\"ttdoc\">Obtain the grid view that the basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:680</div></div>\n-<div class=\"ttc\" id=\"aa01479_html_ad49a0bd70180481c702887c873386897\"><div class=\"ttname\"><a href=\"a01479.html#ad49a0bd70180481c702887c873386897\">Dune::Functions::BSplinePreBasis::getIJK</a></div><div class=\"ttdeci\">static std::array< unsigned int, dim > getIJK(typename GridView::IndexSet::IndexType idx, std::array< unsigned int, dim > elements)</div><div class=\"ttdoc\">Compute integer element coordinates from the element index.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1009</div></div>\n-<div class=\"ttc\" id=\"aa01479_html_ad63b66afedd5483d385a116e1244fdbd\"><div class=\"ttname\"><a href=\"a01479.html#ad63b66afedd5483d385a116e1244fdbd\">Dune::Functions::BSplinePreBasis::makeNode</a></div><div class=\"ttdeci\">Node makeNode() const</div><div class=\"ttdoc\">Create tree node.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:694</div></div>\n-<div class=\"ttc\" id=\"aa01479_html_ad75bb49a82848a47e41698d9a7657e97\"><div class=\"ttname\"><a href=\"a01479.html#ad75bb49a82848a47e41698d9a7657e97\">Dune::Functions::BSplinePreBasis::BSplinePreBasis</a></div><div class=\"ttdeci\">BSplinePreBasis(const GridView &gridView, const std::vector< double > &knotVector, unsigned int order, bool makeOpen=true)</div><div class=\"ttdoc\">Construct a B-spline basis for a given grid view and set of knot vectors.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:590</div></div>\n-<div class=\"ttc\" id=\"aa01479_html_addecbb0942b0fa43f0abec42f1c848ab\"><div class=\"ttname\"><a href=\"a01479.html#addecbb0942b0fa43f0abec42f1c848ab\">Dune::Functions::BSplinePreBasis::evaluateJacobian</a></div><div class=\"ttdeci\">void evaluateJacobian(const FieldVector< typename GV::ctype, dim > &in, std::vector< FieldMatrix< R, 1, dim > > &out, const std::array< unsigned, dim > &currentKnotSpan) const</div><div class=\"ttdoc\">Evaluate Jacobian of all B-spline basis functions.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:812</div></div>\n-<div class=\"ttc\" id=\"aa01479_html_ae1482f3df0012d1fe5ce976cbc0b377a\"><div class=\"ttname\"><a href=\"a01479.html#ae1482f3df0012d1fe5ce976cbc0b377a\">Dune::Functions::BSplinePreBasis::minMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type minMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:566</div></div>\n-<div class=\"ttc\" id=\"aa01479_html_aeb66e58f5e9497858e9a1402d8309017\"><div class=\"ttname\"><a href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">Dune::Functions::BSplinePreBasis::knotVectors_</a></div><div class=\"ttdeci\">std::array< std::vector< double >, dim > knotVectors_</div><div class=\"ttdoc\">The knot vectors, one for each space dimension.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1237</div></div>\n-<div class=\"ttc\" id=\"aa01479_html_af1b76255a0f308dbe049db50807ea041\"><div class=\"ttname\"><a href=\"a01479.html#af1b76255a0f308dbe049db50807ea041\">Dune::Functions::BSplinePreBasis::maxNodeSize</a></div><div class=\"ttdeci\">size_type maxNodeSize() const</div><div class=\"ttdoc\">Get the maximal number of DOFs associated to node for any element.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:725</div></div>\n-<div class=\"ttc\" id=\"aa01479_html_afdc9d93d63de521026ce13ccc9f0e27e\"><div class=\"ttname\"><a href=\"a01479.html#afdc9d93d63de521026ce13ccc9f0e27e\">Dune::Functions::BSplinePreBasis::BSplinePreBasis</a></div><div class=\"ttdeci\">BSplinePreBasis(const GridView &gridView, const FieldVector< double, dim > &lowerLeft, const FieldVector< double, dim > &upperRight, const std::array< unsigned int, dim > &elements, unsigned int order, bool makeOpen=true)</div><div class=\"ttdoc\">Construct a B-spline basis for a given grid view with uniform knot vectors.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:642</div></div>\n-<div class=\"ttc\" id=\"aa01483_html\"><div class=\"ttname\"><a href=\"a01483.html\">Dune::Functions::BSplineLocalBasis</a></div><div class=\"ttdoc\">LocalBasis class in the sense of dune-localfunctions, presenting the restriction of a B-spline patch ...</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:46</div></div>\n-<div class=\"ttc\" id=\"aa01483_html_a0ec676c23af5cfb27d18260102af08ca\"><div class=\"ttname\"><a href=\"a01483.html#a0ec676c23af5cfb27d18260102af08ca\">Dune::Functions::BSplineLocalBasis::Traits</a></div><div class=\"ttdeci\">LocalBasisTraits< D, dim, FieldVector< D, dim >, R, 1, FieldVector< R, 1 >, FieldMatrix< R, 1, dim > > Traits</div><div class=\"ttdoc\">export type traits for function signature</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:55</div></div>\n-<div class=\"ttc\" id=\"aa01483_html_a34a29cc9e1ac3d7f03fadb568014a847\"><div class=\"ttname\"><a href=\"a01483.html#a34a29cc9e1ac3d7f03fadb568014a847\">Dune::Functions::BSplineLocalBasis::order</a></div><div class=\"ttdeci\">unsigned int order() const</div><div class=\"ttdoc\">Polynomial order of the shape functions.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:140</div></div>\n-<div class=\"ttc\" id=\"aa01483_html_a35462641ee16ccfd06c65d692b9b309f\"><div class=\"ttname\"><a href=\"a01483.html#a35462641ee16ccfd06c65d692b9b309f\">Dune::Functions::BSplineLocalBasis::size</a></div><div class=\"ttdeci\">std::size_t size() const</div><div class=\"ttdoc\">Return the number of basis functions on the current knot span.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:147</div></div>\n-<div class=\"ttc\" id=\"aa01483_html_a515832d188de13e946d113c4b562fb0f\"><div class=\"ttname\"><a href=\"a01483.html#a515832d188de13e946d113c4b562fb0f\">Dune::Functions::BSplineLocalBasis::evaluate</a></div><div class=\"ttdeci\">void evaluate(const typename std::array< int, k > &directions, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const</div><div class=\"ttdoc\">Evaluate all shape functions and derivatives of any order.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:97</div></div>\n-<div class=\"ttc\" id=\"aa01483_html_a6f6f0d5f6137fc30c687a913a9794ef9\"><div class=\"ttname\"><a href=\"a01483.html#a6f6f0d5f6137fc30c687a913a9794ef9\">Dune::Functions::BSplineLocalBasis::evaluateFunction</a></div><div class=\"ttdeci\">void evaluateFunction(const FieldVector< D, dim > &in, std::vector< FieldVector< R, 1 > > &out) const</div><div class=\"ttdoc\">Evaluate all shape functions.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:70</div></div>\n-<div class=\"ttc\" id=\"aa01483_html_a7bece6d4241e57b2f43e52f4427c7c7c\"><div class=\"ttname\"><a href=\"a01483.html#a7bece6d4241e57b2f43e52f4427c7c7c\">Dune::Functions::BSplineLocalBasis::evaluateJacobian</a></div><div class=\"ttdeci\">void evaluateJacobian(const FieldVector< D, dim > &in, std::vector< FieldMatrix< D, 1, dim > > &out) const</div><div class=\"ttdoc\">Evaluate Jacobian of all shape functions.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:82</div></div>\n-<div class=\"ttc\" id=\"aa01483_html_ab66fbd26ea34c67071da5c0fa9504191\"><div class=\"ttname\"><a href=\"a01483.html#ab66fbd26ea34c67071da5c0fa9504191\">Dune::Functions::BSplineLocalBasis::BSplineLocalBasis</a></div><div class=\"ttdeci\">BSplineLocalBasis(const BSplinePreBasis< GV > &preBasis, const BSplineLocalFiniteElement< GV, R > &lFE)</div><div class=\"ttdoc\">Constructor with a given B-spline patch.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:61</div></div>\n-<div class=\"ttc\" id=\"aa01487_html\"><div class=\"ttname\"><a href=\"a01487.html\">Dune::Functions::BSplineLocalCoefficients</a></div><div class=\"ttdoc\">Attaches a shape function to an entity.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:178</div></div>\n-<div class=\"ttc\" id=\"aa01487_html_a49f42a4b71756628c60f20cf4868e451\"><div class=\"ttname\"><a href=\"a01487.html#a49f42a4b71756628c60f20cf4868e451\">Dune::Functions::BSplineLocalCoefficients::localKey</a></div><div class=\"ttdeci\">const LocalKey & localKey(std::size_t i) const</div><div class=\"ttdoc\">get i'th index</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:321</div></div>\n-<div class=\"ttc\" id=\"aa01487_html_a73ed6bc866499e512d96cb6d6c315c6f\"><div class=\"ttname\"><a href=\"a01487.html#a73ed6bc866499e512d96cb6d6c315c6f\">Dune::Functions::BSplineLocalCoefficients::init</a></div><div class=\"ttdeci\">void init(const std::array< unsigned, dim > &sizes)</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:256</div></div>\n-<div class=\"ttc\" id=\"aa01487_html_acee2241933e75ae41972b3ce44ceb0c1\"><div class=\"ttname\"><a href=\"a01487.html#acee2241933e75ae41972b3ce44ceb0c1\">Dune::Functions::BSplineLocalCoefficients::size</a></div><div class=\"ttdeci\">std::size_t size() const</div><div class=\"ttdoc\">number of coefficients</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:315</div></div>\n-<div class=\"ttc\" id=\"aa01491_html\"><div class=\"ttname\"><a href=\"a01491.html\">Dune::Functions::BSplineLocalInterpolation</a></div><div class=\"ttdoc\">Local interpolation in the sense of dune-localfunctions, for the B-spline basis on tensor-product gri...</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:340</div></div>\n-<div class=\"ttc\" id=\"aa01491_html_a338c7d6e7a54eefba6398c11c5fa1531\"><div class=\"ttname\"><a href=\"a01491.html#a338c7d6e7a54eefba6398c11c5fa1531\">Dune::Functions::BSplineLocalInterpolation::interpolate</a></div><div class=\"ttdeci\">void interpolate(const F &f, std::vector< C > &out) const</div><div class=\"ttdoc\">Local interpolation of a function.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:344</div></div>\n-<div class=\"ttc\" id=\"aa01495_html\"><div class=\"ttname\"><a href=\"a01495.html\">Dune::Functions::BSplineNode</a></div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1250</div></div>\n-<div class=\"ttc\" id=\"aa01495_html_a061007133830a1181adc187c1f6f692b\"><div class=\"ttname\"><a href=\"a01495.html#a061007133830a1181adc187c1f6f692b\">Dune::Functions::BSplineNode::finiteElement</a></div><div class=\"ttdeci\">const FiniteElement & finiteElement() const</div><div class=\"ttdoc\">Return the LocalFiniteElement for the element we are bound to.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1274</div></div>\n-<div class=\"ttc\" id=\"aa01495_html_a3d6a0412f84c0739c42d61c3222f7097\"><div class=\"ttname\"><a href=\"a01495.html#a3d6a0412f84c0739c42d61c3222f7097\">Dune::Functions::BSplineNode::Element</a></div><div class=\"ttdeci\">typename GV::template Codim< 0 >::Entity Element</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1256</div></div>\n-<div class=\"ttc\" id=\"aa01495_html_a4f229be79854725c276ece5ac9d17b38\"><div class=\"ttname\"><a href=\"a01495.html#a4f229be79854725c276ece5ac9d17b38\">Dune::Functions::BSplineNode::preBasis_</a></div><div class=\"ttdeci\">const BSplinePreBasis< GV > * preBasis_</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1290</div></div>\n-<div class=\"ttc\" id=\"aa01495_html_a5bd21a21da78b173945356ede8ae39a6\"><div class=\"ttname\"><a href=\"a01495.html#a5bd21a21da78b173945356ede8ae39a6\">Dune::Functions::BSplineNode::element_</a></div><div class=\"ttdeci\">Element element_</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1293</div></div>\n-<div class=\"ttc\" id=\"aa01495_html_a6e2c2d3de78fe1f2cedb5da2a736d2ba\"><div class=\"ttname\"><a href=\"a01495.html#a6e2c2d3de78fe1f2cedb5da2a736d2ba\">Dune::Functions::BSplineNode::bind</a></div><div class=\"ttdeci\">void bind(const Element &e)</div><div class=\"ttdoc\">Bind to element.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1280</div></div>\n-<div class=\"ttc\" id=\"aa01495_html_a7444a74873c84aacc8b9b6669b8c8a11\"><div class=\"ttname\"><a href=\"a01495.html#a7444a74873c84aacc8b9b6669b8c8a11\">Dune::Functions::BSplineNode::BSplineNode</a></div><div class=\"ttdeci\">BSplineNode(const BSplinePreBasis< GV > *preBasis)</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1259</div></div>\n-<div class=\"ttc\" id=\"aa01495_html_a80df2171f3763abd188b3d3cb9b7732a\"><div class=\"ttname\"><a href=\"a01495.html#a80df2171f3763abd188b3d3cb9b7732a\">Dune::Functions::BSplineNode::element</a></div><div class=\"ttdeci\">const Element & element() const</div><div class=\"ttdoc\">Return current element, throw if unbound.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1265</div></div>\n-<div class=\"ttc\" id=\"aa01495_html_a8a7948553a4a579b1ab4720a9c156346\"><div class=\"ttname\"><a href=\"a01495.html#a8a7948553a4a579b1ab4720a9c156346\">Dune::Functions::BSplineNode::finiteElement_</a></div><div class=\"ttdeci\">FiniteElement finiteElement_</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1292</div></div>\n-<div class=\"ttc\" id=\"aa01495_html_ae563738fb93ed2e7dc40775a1eb791ae\"><div class=\"ttname\"><a href=\"a01495.html#ae563738fb93ed2e7dc40775a1eb791ae\">Dune::Functions::BSplineNode::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1255</div></div>\n-<div class=\"ttc\" id=\"aa01555_html\"><div class=\"ttname\"><a href=\"a01555.html\">Dune::Functions::DefaultGlobalBasis</a></div><div class=\"ttdoc\">Global basis for given pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:46</div></div>\n-<div class=\"ttc\" id=\"aa01707_html_a859d50513645ef2ea0188d0779c1df30\"><div class=\"ttname\"><a href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">Dune::Functions::BasisNodeMixin::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:142</div></div>\n-<div class=\"ttc\" id=\"aa01707_html_ae93815e5c4012f7be5d11786f40d267a\"><div class=\"ttname\"><a href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\">Dune::Functions::BasisNodeMixin::setSize</a></div><div class=\"ttdeci\">void setSize(const size_type size)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:164</div></div>\n-<div class=\"ttc\" id=\"aa01711_html\"><div class=\"ttname\"><a href=\"a01711.html\">Dune::Functions::LeafBasisNode</a></div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:186</div></div>\n+<div class=\"ttc\" id=\"aa00219_html_a17589fdc18b015644525c7ad037e6441\"><div class=\"ttname\"><a href=\"a00219.html#a17589fdc18b015644525c7ad037e6441\">Dune::Functions::SubspaceBasis</a></div><div class=\"ttdeci\">SubspaceBasis(const RB &, const TP) -> SubspaceBasis< RB, TP ></div></div>\n+<div class=\"ttc\" id=\"aa00219_html_a9effbb98da0e9104a60979fa734c1220\"><div class=\"ttname\"><a href=\"a00219.html#a9effbb98da0e9104a60979fa734c1220\">Dune::Functions::subspaceBasis</a></div><div class=\"ttdeci\">auto subspaceBasis(const RootBasis &rootBasis, const TypeTree::HybridTreePath< PrefixTreeIndices... > &prefixPath)</div><div class=\"ttdoc\">Create SubspaceBasis from a root basis and a prefixPath.</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:151</div></div>\n+<div class=\"ttc\" id=\"aa01807_html\"><div class=\"ttname\"><a href=\"a01807.html\">Dune::Functions::SubspaceBasis</a></div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:38</div></div>\n+<div class=\"ttc\" id=\"aa01807_html_a00d424aa40e6c051f610a308317cc57e\"><div class=\"ttname\"><a href=\"a01807.html#a00d424aa40e6c051f610a308317cc57e\">Dune::Functions::SubspaceBasis::RootLocalView</a></div><div class=\"ttdeci\">typename RootBasis::LocalView RootLocalView</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:43</div></div>\n+<div class=\"ttc\" id=\"aa01807_html_a14c47ee1637a33fa73dbac78dd93b4e6\"><div class=\"ttname\"><a href=\"a01807.html#a14c47ee1637a33fa73dbac78dd93b4e6\">Dune::Functions::SubspaceBasis::localView</a></div><div class=\"ttdeci\">LocalView localView() const</div><div class=\"ttdoc\">Return local view for basis.</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:108</div></div>\n+<div class=\"ttc\" id=\"aa01807_html_a2f6185785e7ee3ad97f7239fed6f3e39\"><div class=\"ttname\"><a href=\"a01807.html#a2f6185785e7ee3ad97f7239fed6f3e39\">Dune::Functions::SubspaceBasis::rootBasis_</a></div><div class=\"ttdeci\">const RootBasis * rootBasis_</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:124</div></div>\n+<div class=\"ttc\" id=\"aa01807_html_a330b42b7087eca7afb92ec40eba36440\"><div class=\"ttname\"><a href=\"a01807.html#a330b42b7087eca7afb92ec40eba36440\">Dune::Functions::SubspaceBasis::SizePrefix</a></div><div class=\"ttdeci\">typename RootBasis::SizePrefix SizePrefix</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:58</div></div>\n+<div class=\"ttc\" id=\"aa01807_html_a5dcb19c46539c51ce32a6fdc55738387\"><div class=\"ttname\"><a href=\"a01807.html#a5dcb19c46539c51ce32a6fdc55738387\">Dune::Functions::SubspaceBasis::PrefixPath</a></div><div class=\"ttdeci\">TP PrefixPath</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:45</div></div>\n+<div class=\"ttc\" id=\"aa01807_html_a616eaadc3d1d8706041ab1b0d03510bc\"><div class=\"ttname\"><a href=\"a01807.html#a616eaadc3d1d8706041ab1b0d03510bc\">Dune::Functions::SubspaceBasis::LocalView</a></div><div class=\"ttdeci\">SubspaceLocalView< RootLocalView, PrefixPath > LocalView</div><div class=\"ttdoc\">Type of the local view on the restriction of the basis to a single element.</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:56</div></div>\n+<div class=\"ttc\" id=\"aa01807_html_a658452a597522c630fab82679da0a167\"><div class=\"ttname\"><a href=\"a01807.html#a658452a597522c630fab82679da0a167\">Dune::Functions::SubspaceBasis::size</a></div><div class=\"ttdeci\">size_type size(const SizePrefix &prefix) const</div><div class=\"ttdoc\">Return number possible values for next position in multi index.</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:100</div></div>\n+<div class=\"ttc\" id=\"aa01807_html_a6e7dd708494382dad7cc288ce6cfe6b8\"><div class=\"ttname\"><a href=\"a01807.html#a6e7dd708494382dad7cc288ce6cfe6b8\">Dune::Functions::SubspaceBasis::GridView</a></div><div class=\"ttdeci\">typename RootBasis::GridView GridView</div><div class=\"ttdoc\">The grid view that the FE space is defined on.</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:48</div></div>\n+<div class=\"ttc\" id=\"aa01807_html_a7c1756f78b770fbbe6937b8a146cdc81\"><div class=\"ttname\"><a href=\"a01807.html#a7c1756f78b770fbbe6937b8a146cdc81\">Dune::Functions::SubspaceBasis::prefixPath</a></div><div class=\"ttdeci\">const PrefixPath & prefixPath() const</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:118</div></div>\n+<div class=\"ttc\" id=\"aa01807_html_a8994e4c3215b21b9b4d4e1b09a97f4c4\"><div class=\"ttname\"><a href=\"a01807.html#a8994e4c3215b21b9b4d4e1b09a97f4c4\">Dune::Functions::SubspaceBasis::SubspaceBasis</a></div><div class=\"ttdeci\">SubspaceBasis(const SubspaceBasis< RootRootBasis, InnerTP > &rootBasis, const OuterTP &prefixPath)</div><div class=\"ttdoc\">Constructor from another SubspaceBasis.</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:73</div></div>\n+<div class=\"ttc\" id=\"aa01807_html_a8ce8499d3a9117e5138f1ba231a80fcf\"><div class=\"ttname\"><a href=\"a01807.html#a8ce8499d3a9117e5138f1ba231a80fcf\">Dune::Functions::SubspaceBasis::gridView</a></div><div class=\"ttdeci\">const GridView & gridView() const</div><div class=\"ttdoc\">Obtain the grid view that the basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:80</div></div>\n+<div class=\"ttc\" id=\"aa01807_html_aaa9c058bcb0bc05bdba112801201f281\"><div class=\"ttname\"><a href=\"a01807.html#aaa9c058bcb0bc05bdba112801201f281\">Dune::Functions::SubspaceBasis::RootBasis</a></div><div class=\"ttdeci\">RB RootBasis</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:41</div></div>\n+<div class=\"ttc\" id=\"aa01807_html_ab3509a847b8dfb33032f14ca666c13bb\"><div class=\"ttname\"><a href=\"a01807.html#ab3509a847b8dfb33032f14ca666c13bb\">Dune::Functions::SubspaceBasis::prefixPath_</a></div><div class=\"ttdeci\">PrefixPath prefixPath_</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:125</div></div>\n+<div class=\"ttc\" id=\"aa01807_html_abe1c4a616c0acdf861fbbc5f52046645\"><div class=\"ttname\"><a href=\"a01807.html#abe1c4a616c0acdf861fbbc5f52046645\">Dune::Functions::SubspaceBasis::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdoc\">Return number of possible values for next position in empty multi index.</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:94</div></div>\n+<div class=\"ttc\" id=\"aa01807_html_ac6fc5a04ad73460ae55c73bb8f515712\"><div class=\"ttname\"><a href=\"a01807.html#ac6fc5a04ad73460ae55c73bb8f515712\">Dune::Functions::SubspaceBasis::rootBasis</a></div><div class=\"ttdeci\">const RootBasis & rootBasis() const</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:113</div></div>\n+<div class=\"ttc\" id=\"aa01807_html_acb8fddcafde83205b67e57926c84ace5\"><div class=\"ttname\"><a href=\"a01807.html#acb8fddcafde83205b67e57926c84ace5\">Dune::Functions::SubspaceBasis::MultiIndex</a></div><div class=\"ttdeci\">typename RootBasis::MultiIndex MultiIndex</div><div class=\"ttdoc\">Type used for global numbering of the basis vectors.</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:51</div></div>\n+<div class=\"ttc\" id=\"aa01807_html_acbfda46d0971e6f82b7649e195663702\"><div class=\"ttname\"><a href=\"a01807.html#acbfda46d0971e6f82b7649e195663702\">Dune::Functions::SubspaceBasis::dimension</a></div><div class=\"ttdeci\">size_type dimension() const</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:88</div></div>\n+<div class=\"ttc\" id=\"aa01807_html_ad328a135f42bb2a6b9bf60983f61f254\"><div class=\"ttname\"><a href=\"a01807.html#ad328a135f42bb2a6b9bf60983f61f254\">Dune::Functions::SubspaceBasis::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:53</div></div>\n+<div class=\"ttc\" id=\"aa01807_html_aee8689dac160442b891bc738c55c1087\"><div class=\"ttname\"><a href=\"a01807.html#aee8689dac160442b891bc738c55c1087\">Dune::Functions::SubspaceBasis::SubspaceBasis</a></div><div class=\"ttdeci\">SubspaceBasis(const RootBasis &rootBasis, const PrefixPath &prefixPath)</div><div class=\"ttdoc\">Constructor for a given grid view object.</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:62</div></div>\n+<div class=\"ttc\" id=\"aa01811_html\"><div class=\"ttname\"><a href=\"a01811.html\">Dune::Functions::SubspaceLocalView</a></div><div class=\"ttdoc\">The restriction of a finite element basis to a single element.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:30</div></div>\n+<div class=\"ttc\" id=\"aa02876_html\"><div class=\"ttname\"><a href=\"a02876.html\">concepts.hh</a></div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,1509 +5,246 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-bsplinebasis.hh\n+subspacebasis.hh\n Go_to_the_documentation_of_this_file.\n-1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n+ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH\n- 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH\n+ 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_HH\n+ 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_HH\n 5\n- 10#include <array>\n- 11#include <numeric>\n- 12\n- 14#include <dune/common/dynmatrix.hh>\n+ 6#include <dune/common/reservedvector.hh>\n+ 7#include <dune/common/typeutilities.hh>\n+ 8#include <dune/common/concept.hh>\n+ 9\n+ 10#include <dune/functions/common/type_traits.hh>\n+ 11#include <dune/functions/functionspacebases/subspacelocalview.hh>\n+ 12#include <dune/functions/functionspacebases/concepts.hh>\n+ 13\n+ 14\n 15\n- 16#include <dune/localfunctions/common/localbasis.hh>\n- 17#include <dune/common/diagonalmatrix.hh>\n- 18#include <dune/localfunctions/common/localkey.hh>\n- 19#include <dune/localfunctions/common/localfiniteelementtraits.hh>\n- 20#include <dune/geometry/type.hh>\n- 21#include <dune/functions/functionspacebases/nodes.hh>\n- 22#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n- 23\n- 24namespace Dune\n- 25{\n- 26namespace Functions {\n- 27\n- 28// A maze of dependencies between the different parts of this. We need a few\n-forward declarations\n- 29template<typename GV, typename R>\n- 30class BSplineLocalFiniteElement;\n+ 16namespace Dune {\n+ 17namespace Functions {\n+ 18\n+ 19\n+ 20\n+ 21namespace Impl {\n+ 22\n+ 23 template<class... Inner, class... Outer>\n+ 24 auto joinTreePaths(const TypeTree::HybridTreePath<Inner...>& inner, const\n+TypeTree::HybridTreePath<Outer...> outer)\n+ 25 {\n+ 26 return TypeTree::HybridTreePath<Inner..., Outer...>(std::tuple_cat\n+(inner._data, outer._data));\n+ 27 }\n+ 28\n+ 29 template<class InnerTP, class OuterTP>\n+ 30 using JoinTreePath_t = std::decay_t<decltype(joinTreePaths(std::\n+declval<InnerTP>(), std::declval<OuterTP>()))>;\n 31\n- 32template<typename GV>\n- 33class BSplinePreBasis;\n+ 32}\n+ 33\n 34\n 35\n- 44template<class GV, class R>\n-45class BSplineLocalBasis\n- 46{\n- 47 friend class BSplineLocalFiniteElement<GV,R>;\n- 48\n- 49 typedef typename GV::ctype D;\n- 50 enum {dim = GV::dimension};\n- 51public:\n+ 36template<class RB, class TP>\n+37class SubspaceBasis\n+ 38{\n+ 39public:\n+ 40\n+41 using RootBasis = RB;\n+ 42\n+43 using RootLocalView = typename RootBasis::LocalView;\n+ 44\n+45 using PrefixPath = TP;\n+ 46\n+48 using GridView = typename RootBasis::GridView;\n+ 49\n+51 using MultiIndex = typename RootBasis::MultiIndex;\n 52\n- 54 typedef LocalBasisTraits<D,dim,FieldVector<D,dim>,R,1,FieldVector<R,1>,\n-55 FieldMatrix<R,1,dim> > Traits;\n- 56\n-61 BSplineLocalBasis(const BSplinePreBasis<GV>& preBasis,\n- 62 const BSplineLocalFiniteElement<GV,R>& lFE)\n- 63 : preBasis_(preBasis),\n- 64 lFE_(lFE)\n+53 using size_type = std::size_t;\n+ 54\n+56 using LocalView = SubspaceLocalView<RootLocalView,_PrefixPath>;\n+ 57\n+58 using SizePrefix = typename RootBasis::SizePrefix;\n+ 59\n+ 60\n+62 SubspaceBasis(const RootBasis& rootBasis, const PrefixPath& prefixPath) :\n+ 63 rootBasis_(&rootBasis),\n+ 64 prefixPath_(prefixPath)\n 65 {}\n 66\n-70 void evaluateFunction (const FieldVector<D,dim>& in,\n- 71 std::vector<FieldVector<R,1> >& out) const\n- 72 {\n- 73 FieldVector<D,dim> globalIn = offset_;\n- 74 scaling_.umv(in,globalIn);\n- 75\n- 76 preBasis_.evaluateFunction(globalIn, out, lFE_.currentKnotSpan_);\n- 77 }\n- 78\n-82 void evaluateJacobian (const FieldVector<D,dim>& in,\n- 83 std::vector<FieldMatrix<D,1,dim> >& out) const\n- 84 {\n- 85 FieldVector<D,dim> globalIn = offset_;\n- 86 scaling_.umv(in,globalIn);\n- 87\n- 88 preBasis_.evaluateJacobian(globalIn, out, lFE_.currentKnotSpan_);\n- 89\n- 90 for (size_t i=0; i<out.size(); i++)\n- 91 for (int j=0; j<dim; j++)\n- 92 out[i][0][j] *= scaling_[j][j];\n- 93 }\n- 94\n- 96 template<size_t k>\n-97 inline void evaluate (const typename std::array<int,k>& directions,\n- 98 const typename Traits::DomainType& in,\n- 99 std::vector<typename Traits::RangeType>& out) const\n- 100 {\n- 101 switch(k)\n- 102 {\n- 103 case 0:\n- 104 evaluateFunction(in, out);\n- 105 break;\n- 106 case 1:\n- 107 {\n- 108 FieldVector<D,dim> globalIn = offset_;\n- 109 scaling_.umv(in,globalIn);\n- 110\n- 111 preBasis_.evaluate(directions, globalIn, out, lFE_.currentKnotSpan_);\n+ 72 template<class RootRootBasis, class InnerTP, class OuterTP>\n+73 SubspaceBasis(const SubspaceBasis<RootRootBasis,_InnerTP>& rootBasis, const\n+OuterTP& prefixPath) :\n+ 74 SubspaceBasis(rootBasis.rootBasis(), Impl::joinTreePaths\n+(rootBasis.prefixPath(), prefixPath))\n+ 75 {}\n+ 76\n+ 77\n+80 const GridView& gridView() const\n+ 81 {\n+ 82 return rootBasis_->gridView();\n+ 83 }\n+ 84\n+88 size_type dimension() const\n+ 89 {\n+ 90 return rootBasis_->dimension();\n+ 91 }\n+ 92\n+94 size_type size() const\n+ 95 {\n+ 96 return rootBasis_->size();\n+ 97 }\n+ 98\n+100 size_type size(const SizePrefix& prefix) const\n+ 101 {\n+ 102 return rootBasis_->size(prefix);\n+ 103 }\n+ 104\n+108 LocalView localView() const\n+ 109 {\n+ 110 return LocalView(*this, prefixPath_);\n+ 111 }\n 112\n- 113 for (size_t i=0; i<out.size(); i++)\n- 114 out[i][0] *= scaling_[directions[0]][directions[0]];\n- 115 break;\n+113 const RootBasis& rootBasis() const\n+ 114 {\n+ 115 return *rootBasis_;\n 116 }\n- 117 case 2:\n- 118 {\n- 119 FieldVector<D,dim> globalIn = offset_;\n- 120 scaling_.umv(in,globalIn);\n- 121\n- 122 preBasis_.evaluate(directions, globalIn, out, lFE_.currentKnotSpan_);\n- 123\n- 124 for (size_t i=0; i<out.size(); i++)\n- 125 out[i][0] *= scaling_[directions[0]][directions[0]]*scaling_[directions\n-[1]][directions[1]];\n- 126 break;\n- 127 }\n- 128 default:\n- 129 DUNE_THROW(NotImplemented, \"B-Spline derivatives of order \" << k << \" not\n-implemented yet!\");\n- 130 }\n- 131 }\n+ 117\n+118 const PrefixPath& prefixPath() const\n+ 119 {\n+ 120 return prefixPath_;\n+ 121 }\n+ 122\n+ 123protected:\n+124 const RootBasis* rootBasis_;\n+125 PrefixPath prefixPath_;\n+ 126};\n+ 127\n+ 128\n+ 129// CTAD guide for a non-SubspaceBasis root basis\n+ 130template<class RB, class TP>\n+131SubspaceBasis(const RB&, const TP) -> SubspaceBasis<RB,_TP>;\n 132\n-140 unsigned int order () const\n- 141 {\n- 142 return *std::max_element(preBasis_.order_.begin(), preBasis_.order_.end\n-());\n- 143 }\n- 144\n-147 std::size_t size() const\n- 148 {\n- 149 return lFE_.size();\n- 150 }\n- 151\n- 152private:\n- 153 const BSplinePreBasis<GV>& preBasis_;\n- 154\n- 155 const BSplineLocalFiniteElement<GV,R>& lFE_;\n- 156\n- 157 // Coordinates in a single knot span differ from coordinates on the B-\n-spline patch\n- 158 // by an affine transformation. This transformation is stored in offset_\n-and scaling_.\n- 159 FieldVector<D,dim> offset_;\n- 160 DiagonalMatrix<D,dim> scaling_;\n- 161};\n+ 133// CTAD guide for a SubspaceBasis root basis\n+ 134template<class RootRootBasis, class InnerTP, class OuterTP>\n+135SubspaceBasis(const SubspaceBasis<RootRootBasis,_InnerTP>& rootBasis, const\n+OuterTP& prefixPath)\n+ 136 -> SubspaceBasis<std::decay_t<decltype(rootBasis.rootBasis())>, Impl::\n+JoinTreePath_t<InnerTP, OuterTP>>;\n+ 137\n+ 138\n+ 139\n+ 150template<class RootBasis, class... PrefixTreeIndices>\n+151auto subspaceBasis(const RootBasis& rootBasis, const TypeTree::\n+HybridTreePath<PrefixTreeIndices...>& prefixPath)\n+ 152{\n+ 153 return SubspaceBasis(rootBasis, prefixPath);\n+ 154}\n+ 155\n+ 156template<class RootBasis, class... PrefixTreeIndices>\n+157auto subspaceBasis(const RootBasis& rootBasis, const PrefixTreeIndices&...\n+prefixTreeIndices)\n+ 158{\n+ 159 return subspaceBasis(rootBasis, TypeTree::hybridTreePath\n+(prefixTreeIndices...));\n+ 160}\n+ 161\n 162\n- 176template<int dim>\n-177class BSplineLocalCoefficients\n- 178{\n- 179 // Return i as a d-digit number in the (k+1)-nary system\n- 180 std::array<unsigned int,dim> multiindex (unsigned int i) const\n- 181 {\n- 182 std::array<unsigned int,dim> alpha;\n- 183 for (int j=0; j<dim; j++)\n- 184 {\n- 185 alpha[j] = i % sizes_[j];\n- 186 i = i/sizes_[j];\n- 187 }\n- 188 return alpha;\n- 189 }\n- 190\n- 192 void setup1d(std::vector<unsigned int>& subEntity)\n- 193 {\n- 194 if (sizes_[0]==1)\n- 195 {\n- 196 subEntity[0] = 0;\n- 197 return;\n- 198 }\n- 199\n- 200 /* edge and vertex numbering\n- 201 0----0----1\n- 202 */\n- 203 unsigned lastIndex=0;\n- 204 subEntity[lastIndex++] = 0; // corner 0\n- 205 for (unsigned i = 0; i < sizes_[0] - 2; ++i)\n- 206 subEntity[lastIndex++] = 0; // inner dofs of element (0)\n- 207\n- 208 subEntity[lastIndex++] = 1; // corner 1\n- 209\n- 210 assert(size()==lastIndex);\n- 211 }\n- 212\n- 213 void setup2d(std::vector<unsigned int>& subEntity)\n- 214 {\n- 215 unsigned lastIndex=0;\n- 216\n- 217 // LocalKey: entity number , entity codim, dof indices within each entity\n- 218 /* edge and vertex numbering\n- 219 2----3----3\n- 220 | |\n- 221 | |\n- 222 0 1\n- 223 | |\n- 224 | |\n- 225 0----2----1\n- 226 */\n- 227\n- 228 // lower edge (2)\n- 229 subEntity[lastIndex++] = 0; // corner 0\n- 230 for (unsigned i = 0; i < sizes_[0]-2; ++i)\n- 231 subEntity[lastIndex++] = 2; // inner dofs of lower edge (2)\n- 232\n- 233 subEntity[lastIndex++] = 1; // corner 1\n- 234\n- 235 // iterate from bottom to top over inner edge dofs\n- 236 for (unsigned e = 0; e < sizes_[1]-2; ++e)\n- 237 {\n- 238 subEntity[lastIndex++] = 0; // left edge (0)\n- 239 for (unsigned i = 0; i < sizes_[0]-2; ++i)\n- 240 subEntity[lastIndex++] = 0; // face dofs\n- 241 subEntity[lastIndex++] = 1; // right edge (1)\n- 242 }\n- 243\n- 244 // upper edge (3)\n- 245 subEntity[lastIndex++] = 2; // corner 2\n- 246 for (unsigned i = 0; i < sizes_[0]-2; ++i)\n- 247 subEntity[lastIndex++] = 3; // inner dofs of upper edge (3)\n- 248\n- 249 subEntity[lastIndex++] = 3; // corner 3\n- 250\n- 251 assert(size()==lastIndex);\n- 252 }\n- 253\n- 254\n- 255public:\n-256 void init(const std::array<unsigned,dim>& sizes)\n- 257 {\n- 258 sizes_ = sizes;\n- 259\n- 260 li_.resize(size());\n- 261\n- 262 // Set up array of codimension-per-dof-number\n- 263 std::vector<unsigned int> codim(li_.size());\n- 264\n- 265 for (std::size_t i=0; i<codim.size(); i++)\n- 266 {\n- 267 codim[i] = 0;\n- 268 // Codimension gets increased by 1 for each coordinate direction\n- 269 // where dof is on boundary\n- 270 std::array<unsigned int,dim> mIdx = multiindex(i);\n- 271 for (int j=0; j<dim; j++)\n- 272 if (mIdx[j]==0 or mIdx[j]==sizes[j]-1)\n- 273 codim[i]++;\n- 274 }\n- 275\n- 276 // Set up index vector (the index of the dof in the set of dofs of a given\n-subentity)\n- 277 // Algorithm: the 'index' has the same ordering as the dof number 'i'.\n- 278 // To make it consecutive we interpret 'i' in the (k+1)-adic system, omit\n-all digits\n- 279 // that correspond to axes where the dof is on the element boundary, and\n-transform the\n- 280 // rest to the (k-1)-adic system.\n- 281 std::vector<unsigned int> index(size());\n- 282\n- 283 for (std::size_t i=0; i<index.size(); i++)\n- 284 {\n- 285 index[i] = 0;\n- 286\n- 287 std::array<unsigned int,dim> mIdx = multiindex(i);\n- 288\n- 289 for (int j=dim-1; j>=0; j--)\n- 290 if (mIdx[j]>0 and mIdx[j]<sizes[j]-1)\n- 291 index[i] = (sizes[j]-1)*index[i] + (mIdx[j]-1);\n- 292 }\n- 293\n- 294 // Set up entity and dof numbers for each (supported) dimension separately\n- 295 std::vector<unsigned int> subEntity(li_.size());\n- 296\n- 297 if (subEntity.size() > 0)\n- 298 {\n- 299 if (dim==1) {\n- 300\n- 301 setup1d(subEntity);\n- 302\n- 303 } else if (dim==2 and sizes_[0]>1 and sizes_[1]>1) {\n- 304\n- 305 setup2d(subEntity);\n- 306\n- 307 }\n- 308 }\n- 309\n- 310 for (size_t i=0; i<li_.size(); i++)\n- 311 li_[i] = LocalKey(subEntity[i], codim[i], index[i]);\n- 312 }\n- 313\n-315 std::size_t size () const\n- 316 {\n- 317 return std::accumulate(sizes_.begin(), sizes_.end(), 1, std::\n-multiplies<unsigned int>());\n- 318 }\n- 319\n-321 const LocalKey& localKey (std::size_t i) const\n- 322 {\n- 323 return li_[i];\n- 324 }\n- 325\n- 326private:\n- 327\n- 328 // Number of shape functions on this element per coordinate direction\n- 329 std::array<unsigned, dim> sizes_;\n- 330\n- 331 std::vector<LocalKey> li_;\n- 332};\n- 333\n- 338template<int dim, class LB>\n-339class BSplineLocalInterpolation\n- 340{\n- 341public:\n- 343 template<typename F, typename C>\n-344 void interpolate (const F& f, std::vector<C>& out) const\n- 345 {\n- 346 DUNE_THROW(NotImplemented, \"BSplineLocalInterpolation::interpolate\");\n- 347 }\n- 348\n- 349};\n- 350\n- 360template<class GV, class R>\n-361class BSplineLocalFiniteElement\n- 362{\n-363 typedef typename GV::ctype D;\n- 364 enum {dim = GV::dimension};\n- 365 friend class BSplineLocalBasis<GV,R>;\n- 366public:\n- 367\n- 370 typedef LocalFiniteElementTraits<BSplineLocalBasis<GV,R>,\n- 371 BSplineLocalCoefficients<dim>,\n-372 BSplineLocalInterpolation<dim,BSplineLocalBasis<GV,R> > > Traits;\n- 373\n-376 BSplineLocalFiniteElement(const BSplinePreBasis<GV>& preBasis)\n- 377 : preBasis_(preBasis),\n- 378 localBasis_(preBasis,*this)\n- 379 {}\n- 380\n-383 BSplineLocalFiniteElement(const BSplineLocalFiniteElement& other)\n- 384 : preBasis_(other.preBasis_),\n- 385 localBasis_(preBasis_,*this)\n- 386 {}\n- 387\n-394 void bind(const std::array<unsigned,dim>& elementIdx)\n- 395 {\n- 396 /* \\todo In the long run we need to precompute a table for this */\n- 397 for (size_t i=0; i<elementIdx.size(); i++)\n- 398 {\n- 399 currentKnotSpan_[i] = 0;\n- 400\n- 401 // Skip over degenerate knot spans\n- 402 while (preBasis_.knotVectors_[i][currentKnotSpan_[i]+1] <\n-preBasis_.knotVectors_[i][currentKnotSpan_[i]]+1e-8)\n- 403 currentKnotSpan_[i]++;\n- 404\n- 405 for (size_t j=0; j<elementIdx[i]; j++)\n- 406 {\n- 407 currentKnotSpan_[i]++;\n- 408\n- 409 // Skip over degenerate knot spans\n- 410 while (preBasis_.knotVectors_[i][currentKnotSpan_[i]+1] <\n-preBasis_.knotVectors_[i][currentKnotSpan_[i]]+1e-8)\n- 411 currentKnotSpan_[i]++;\n- 412 }\n- 413\n- 414 // Compute the geometric transformation from knotspan-local to global\n-coordinates\n- 415 localBasis_.offset_[i] = preBasis_.knotVectors_[i][currentKnotSpan_[i]];\n- 416 localBasis_.scaling_[i][i] = preBasis_.knotVectors_[i][currentKnotSpan_\n-[i]+1] - preBasis_.knotVectors_[i][currentKnotSpan_[i]];\n- 417 }\n- 418\n- 419 // Set up the LocalCoefficients object\n- 420 std::array<unsigned int, dim> sizes;\n- 421 for (size_t i=0; i<dim; i++)\n- 422 sizes[i] = size(i);\n- 423 localCoefficients_.init(sizes);\n- 424 }\n- 425\n-427 const BSplineLocalBasis<GV,R>& localBasis() const\n- 428 {\n- 429 return localBasis_;\n- 430 }\n- 431\n-433 const BSplineLocalCoefficients<dim>& localCoefficients() const\n- 434 {\n- 435 return localCoefficients_;\n- 436 }\n- 437\n-439 const BSplineLocalInterpolation<dim,BSplineLocalBasis<GV,R> >&\n-localInterpolation() const\n- 440 {\n- 441 return localInterpolation_;\n- 442 }\n- 443\n-445 unsigned size () const\n- 446 {\n- 447 std::size_t r = 1;\n- 448 for (int i=0; i<dim; i++)\n- 449 r *= size(i);\n- 450 return r;\n- 451 }\n- 452\n-455 GeometryType type () const\n- 456 {\n- 457 return GeometryTypes::cube(dim);\n- 458 }\n- 459\n- 460//private:\n- 461\n-463 unsigned int size(int i) const\n- 464 {\n- 465 const auto& order = preBasis_.order_;\n- 466 unsigned int r = order[i]+1; // The 'normal' value\n- 467 if (currentKnotSpan_[i]<order[i]) // Less near the left end of the knot\n-vector\n- 468 r -= (order[i] - currentKnotSpan_[i]);\n- 469 if ( order[i] > (preBasis_.knotVectors_[i].size() - currentKnotSpan_[i] -\n-2) )\n- 470 r -= order[i] - (preBasis_.knotVectors_[i].size() - currentKnotSpan_[i] -\n-2);\n- 471 return r;\n- 472 }\n- 473\n-474 const BSplinePreBasis<GV>& preBasis_;\n- 475\n-476 BSplineLocalBasis<GV,R> localBasis_;\n-477 BSplineLocalCoefficients<dim> localCoefficients_;\n-478 BSplineLocalInterpolation<dim,BSplineLocalBasis<GV,R> >\n-localInterpolation_;\n- 479\n- 480 // The knot span we are bound to\n-481 std::array<unsigned,dim> currentKnotSpan_;\n- 482};\n- 483\n- 484\n- 485template<typename GV>\n- 486class BSplineNode;\n- 487\n- 497template<typename GV>\n-498class BSplinePreBasis\n- 499{\n- 500 static const int dim = GV::dimension;\n- 501\n- 503 class MultiDigitCounter\n- 504 {\n- 505 public:\n- 506\n- 510 MultiDigitCounter(const std::array<unsigned int,dim>& limits)\n- 511 : limits_(limits)\n- 512 {\n- 513 std::fill(counter_.begin(), counter_.end(), 0);\n- 514 }\n- 515\n- 517 MultiDigitCounter& operator++()\n- 518 {\n- 519 for (int i=0; i<dim; i++)\n- 520 {\n- 521 ++counter_[i];\n- 522\n- 523 // no overflow?\n- 524 if (counter_[i] < limits_[i])\n- 525 break;\n- 526\n- 527 counter_[i] = 0;\n- 528 }\n- 529 return *this;\n- 530 }\n- 531\n- 533 const unsigned int& operator[](int i) const\n- 534 {\n- 535 return counter_[i];\n- 536 }\n- 537\n- 539 unsigned int cycle() const\n- 540 {\n- 541 unsigned int r = 1;\n- 542 for (int i=0; i<dim; i++)\n- 543 r *= limits_[i];\n- 544 return r;\n- 545 }\n- 546\n- 547 private:\n- 548\n- 550 const std::array<unsigned int,dim> limits_;\n- 551\n- 553 std::array<unsigned int,dim> counter_;\n- 554\n- 555 };\n- 556\n- 557public:\n- 558\n-560 using GridView = GV;\n-561 using size_type = std::size_t;\n- 562\n-563 using Node = BSplineNode<GV>;\n- 564\n-565 static constexpr size_type maxMultiIndexSize = 1;\n-566 static constexpr size_type minMultiIndexSize = 1;\n-567 static constexpr size_type multiIndexBufferSize = 1;\n- 568\n- 569 // Type used for function values\n-570 using R = double;\n- 571\n-590 BSplinePreBasis(const GridView& gridView,\n- 591 const std::vector<double>& knotVector,\n- 592 unsigned int order,\n- 593 bool makeOpen = true)\n- 594 : gridView_(gridView)\n- 595 {\n- 596 // \\todo Detection of duplicate knots\n- 597 std::fill(elements_.begin(), elements_.end(), knotVector.size()-1);\n- 598\n- 599 // Mediocre sanity check: we don't know the number of grid elements in\n-each direction.\n- 600 // but at least we know the total number of elements.\n- 601 assert( std::accumulate(elements_.begin(), elements_.end(), 1, std::\n-multiplies<unsigned>()) == gridView_.size(0) );\n- 602\n- 603 for (int i=0; i<dim; i++)\n- 604 {\n- 605 // Prepend the correct number of additional knots to open the knot vector\n- 607 if (makeOpen)\n- 608 for (unsigned int j=0; j<order; j++)\n- 609 knotVectors_[i].push_back(knotVector[0]);\n- 610\n- 611 knotVectors_[i].insert(knotVectors_[i].end(), knotVector.begin(),\n-knotVector.end());\n- 612\n- 613 if (makeOpen)\n- 614 for (unsigned int j=0; j<order; j++)\n- 615 knotVectors_[i].push_back(knotVector.back());\n- 616 }\n- 617\n- 618 std::fill(order_.begin(), order_.end(), order);\n- 619 }\n- 620\n-642 BSplinePreBasis(const GridView& gridView,\n- 643 const FieldVector<double,dim>& lowerLeft,\n- 644 const FieldVector<double,dim>& upperRight,\n- 645 const std::array<unsigned int,dim>& elements,\n- 646 unsigned int order,\n- 647 bool makeOpen = true)\n- 648 : elements_(elements),\n- 649 gridView_(gridView)\n- 650 {\n- 651 // Mediocre sanity check: we don't know the number of grid elements in\n-each direction.\n- 652 // but at least we know the total number of elements.\n- 653 assert( std::accumulate(elements_.begin(), elements_.end(), 1, std::\n-multiplies<unsigned>()) == gridView_.size(0) );\n- 654\n- 655 for (int i=0; i<dim; i++)\n- 656 {\n- 657 // Prepend the correct number of additional knots to open the knot vector\n- 659 if (makeOpen)\n- 660 for (unsigned int j=0; j<order; j++)\n- 661 knotVectors_[i].push_back(lowerLeft[i]);\n- 662\n- 663 // Construct the actual knot vector\n- 664 for (size_t j=0; j<elements[i]+1; j++)\n- 665 knotVectors_[i].push_back(lowerLeft[i] + j*(upperRight[i]-lowerLeft[i]) /\n-elements[i]);\n- 666\n- 667 if (makeOpen)\n- 668 for (unsigned int j=0; j<order; j++)\n- 669 knotVectors_[i].push_back(upperRight[i]);\n- 670 }\n- 671\n- 672 std::fill(order_.begin(), order_.end(), order);\n- 673 }\n- 674\n-676 void initializeIndices()\n- 677 {}\n- 678\n-680 const GridView& gridView() const\n- 681 {\n- 682 return gridView_;\n- 683 }\n- 684\n-686 void update(const GridView& gv)\n- 687 {\n- 688 gridView_ = gv;\n- 689 }\n- 690\n-694 Node makeNode() const\n- 695 {\n- 696 return Node{this};\n- 697 }\n- 698\n- 699 // Ideally this method should be implemented as\n- 700 //\n- 701 // template<class SizePrefix>\n- 702 // size_type size(const SizePrefix& prefix) const\n- 703 //\n- 704 // But leads to ambiguity with the other size method:\n- 705 //\n- 706 // unsigned int size (size_t d) const\n- 707 //\n- 708 // Once the latter is removed, this implementation should be changed.\n- 709\n- 711 template<class ST, int i>\n-712 size_type size(const Dune::ReservedVector<ST, i>& prefix) const\n- 713 {\n- 714 assert(prefix.size() == 0 || prefix.size() == 1);\n- 715 return (prefix.size() == 0) ? size() : 0;\n- 716 }\n- 717\n-719 size_type dimension() const\n- 720 {\n- 721 return size();\n- 722 }\n- 723\n-725 size_type maxNodeSize() const\n- 726 {\n- 727 size_type result = 1;\n- 728 for (int i=0; i<dim; i++)\n- 729 result *= order_[i]+1;\n- 730 return result;\n- 731 }\n- 732\n- 734 template<typename It>\n-735 It indices(const Node& node, It it) const\n- 736 {\n- 737 // Local degrees of freedom are arranged in a lattice.\n- 738 // We need the lattice dimensions to be able to compute lattice\n-coordinates from a local index\n- 739 std::array<unsigned int, dim> localSizes;\n- 740 for (int i=0; i<dim; i++)\n- 741 localSizes[i] = node.finiteElement().size(i);\n- 742 for (size_type i = 0, end = node.size() ; i < end ; ++i, ++it)\n- 743 {\n- 744 std::array<unsigned int,dim> localIJK = getIJK(i, localSizes);\n- 745\n- 746 const auto currentKnotSpan = node.finiteElement().currentKnotSpan_;\n- 747 const auto order = order_;\n- 748\n- 749 std::array<unsigned int,dim> globalIJK;\n- 750 for (int i=0; i<dim; i++)\n- 751 globalIJK[i] = std::max((int)currentKnotSpan[i] - (int)order[i], 0) +\n-localIJK[i]; // needs to be a signed type!\n- 752\n- 753 // Make one global flat index from the globalIJK tuple\n- 754 size_type globalIdx = globalIJK[dim-1];\n- 755\n- 756 for (int i=dim-2; i>=0; i--)\n- 757 globalIdx = globalIdx * size(i) + globalIJK[i];\n- 758\n- 759 *it = {{globalIdx}};\n- 760 }\n- 761 return it;\n- 762 }\n- 763\n-765 unsigned int size () const\n- 766 {\n- 767 unsigned int result = 1;\n- 768 for (size_t i=0; i<dim; i++)\n- 769 result *= size(i);\n- 770 return result;\n- 771 }\n- 772\n-774 unsigned int size (size_t d) const\n- 775 {\n- 776 return knotVectors_[d].size() - order_[d] - 1;\n- 777 }\n- 778\n-781 void evaluateFunction (const FieldVector<typename GV::ctype,dim>& in,\n- 782 std::vector<FieldVector<R,1> >& out,\n- 783 const std::array<unsigned,dim>& currentKnotSpan) const\n- 784 {\n- 785 // Evaluate\n- 786 std::array<std::vector<R>, dim> oneDValues;\n- 787\n- 788 for (size_t i=0; i<dim; i++)\n- 789 evaluateFunction(in[i], oneDValues[i], knotVectors_[i], order_[i],\n-currentKnotSpan[i]);\n- 790\n- 791 std::array<unsigned int, dim> limits;\n- 792 for (int i=0; i<dim; i++)\n- 793 limits[i] = oneDValues[i].size();\n- 794\n- 795 MultiDigitCounter ijkCounter(limits);\n- 796\n- 797 out.resize(ijkCounter.cycle());\n- 798\n- 799 for (size_t i=0; i<out.size(); i++, ++ijkCounter)\n- 800 {\n- 801 out[i] = R(1.0);\n- 802 for (size_t j=0; j<dim; j++)\n- 803 out[i] *= oneDValues[j][ijkCounter[j]];\n- 804 }\n- 805 }\n- 806\n-812 void evaluateJacobian (const FieldVector<typename GV::ctype,dim>& in,\n- 813 std::vector<FieldMatrix<R,1,dim> >& out,\n- 814 const std::array<unsigned,dim>& currentKnotSpan) const\n- 815 {\n- 816 // How many shape functions to we have in each coordinate direction?\n- 817 std::array<unsigned int, dim> limits;\n- 818 for (int i=0; i<dim; i++)\n- 819 {\n- 820 limits[i] = order_[i]+1; // The 'standard' value away from the boundaries\n-of the knot vector\n- 821 if (currentKnotSpan[i]<order_[i])\n- 822 limits[i] -= (order_[i] - currentKnotSpan[i]);\n- 823 if ( order_[i] > (knotVectors_[i].size() - currentKnotSpan[i] - 2) )\n- 824 limits[i] -= order_[i] - (knotVectors_[i].size() - currentKnotSpan[i] -\n-2);\n- 825 }\n- 826\n- 827 // The lowest knot spans that we need values from\n- 828 std::array<unsigned int, dim> offset;\n- 829 for (int i=0; i<dim; i++)\n- 830 offset[i] = std::max((int)(currentKnotSpan[i] - order_[i]),0);\n- 831\n- 832 // Evaluate 1d function values (needed for the product rule)\n- 833 std::array<std::vector<R>, dim> oneDValues;\n- 834\n- 835 // Evaluate 1d function values of one order lower (needed for the\n-derivative formula)\n- 836 std::array<std::vector<R>, dim> lowOrderOneDValues;\n- 837\n- 838 std::array<DynamicMatrix<R>, dim> values;\n- 839\n- 840 for (size_t i=0; i<dim; i++)\n- 841 {\n- 842 evaluateFunctionFull(in[i], values[i], knotVectors_[i], order_[i],\n-currentKnotSpan[i]);\n- 843 oneDValues[i].resize(knotVectors_[i].size()-order_[i]-1);\n- 844 for (size_t j=0; j<oneDValues[i].size(); j++)\n- 845 oneDValues[i][j] = values[i][order_[i]][j];\n- 846\n- 847 if (order_[i]!=0)\n- 848 {\n- 849 lowOrderOneDValues[i].resize(knotVectors_[i].size()-(order_[i]-1)-1);\n- 850 for (size_t j=0; j<lowOrderOneDValues[i].size(); j++)\n- 851 lowOrderOneDValues[i][j] = values[i][order_[i]-1][j];\n- 852 }\n- 853 }\n- 854\n- 855\n- 856 // Evaluate 1d function derivatives\n- 857 std::array<std::vector<R>, dim> oneDDerivatives;\n- 858 for (size_t i=0; i<dim; i++)\n- 859 {\n- 860 oneDDerivatives[i].resize(limits[i]);\n- 861\n- 862 if (order_[i]==0) // order-zero functions are piecewise constant, hence\n-all derivatives are zero\n- 863 std::fill(oneDDerivatives[i].begin(), oneDDerivatives[i].end(), R(0.0));\n- 864 else\n- 865 {\n- 866 for (size_t j=offset[i]; j<offset[i]+limits[i]; j++)\n- 867 {\n- 868 R derivativeAddend1 = lowOrderOneDValues[i][j] / (knotVectors_[i][j+order_\n-[i]]-knotVectors_[i][j]);\n- 869 R derivativeAddend2 = lowOrderOneDValues[i][j+1] / (knotVectors_[i]\n-[j+order_[i]+1]-knotVectors_[i][j+1]);\n- 870 // The two previous terms may evaluate as 0/0. This is to be interpreted\n-as 0.\n- 871 if (std::isnan(derivativeAddend1))\n- 872 derivativeAddend1 = 0;\n- 873 if (std::isnan(derivativeAddend2))\n- 874 derivativeAddend2 = 0;\n- 875 oneDDerivatives[i][j-offset[i]] = order_[i] * ( derivativeAddend1 -\n-derivativeAddend2 );\n- 876 }\n- 877 }\n- 878 }\n- 879\n- 880 // Working towards computing only the parts that we really need:\n- 881 // Let's copy them out into a separate array\n- 882 std::array<std::vector<R>, dim> oneDValuesShort;\n- 883\n- 884 for (int i=0; i<dim; i++)\n- 885 {\n- 886 oneDValuesShort[i].resize(limits[i]);\n- 887\n- 888 for (size_t j=0; j<limits[i]; j++)\n- 889 oneDValuesShort[i][j] = oneDValues[i][offset[i] + j];\n- 890 }\n- 891\n- 892\n- 893\n- 894 // Set up a multi-index to go from consecutive indices to integer\n-coordinates\n- 895 MultiDigitCounter ijkCounter(limits);\n- 896\n- 897 out.resize(ijkCounter.cycle());\n- 898\n- 899 // Complete Jacobian is given by the product rule\n- 900 for (size_t i=0; i<out.size(); i++, ++ijkCounter)\n- 901 for (int j=0; j<dim; j++)\n- 902 {\n- 903 out[i][0][j] = 1.0;\n- 904 for (int k=0; k<dim; k++)\n- 905 out[i][0][j] *= (j==k) ? oneDDerivatives[k][ijkCounter[k]]\n- 906 : oneDValuesShort[k][ijkCounter[k]];\n- 907 }\n- 908\n- 909 }\n- 910\n- 912 template <size_type k>\n-913 void evaluate(const typename std::array<int,k>& directions,\n- 914 const FieldVector<typename GV::ctype,dim>& in,\n- 915 std::vector<FieldVector<R,1> >& out,\n- 916 const std::array<unsigned,dim>& currentKnotSpan) const\n- 917 {\n- 918 if (k != 1 && k != 2)\n- 919 DUNE_THROW(RangeError, \"Differentiation order greater than 2 is not\n-supported!\");\n- 920\n- 921 // Evaluate 1d function values (needed for the product rule)\n- 922 std::array<std::vector<R>, dim> oneDValues;\n- 923 std::array<std::vector<R>, dim> oneDDerivatives;\n- 924 std::array<std::vector<R>, dim> oneDSecondDerivatives;\n- 925\n- 926 // Evaluate 1d function derivatives\n- 927 if (k==1)\n- 928 for (size_t i=0; i<dim; i++)\n- 929 evaluateAll(in[i], oneDValues[i], true, oneDDerivatives[i], false,\n-oneDSecondDerivatives[i], knotVectors_[i], order_[i], currentKnotSpan[i]);\n- 930 else\n- 931 for (size_t i=0; i<dim; i++)\n- 932 evaluateAll(in[i], oneDValues[i], true, oneDDerivatives[i], true,\n-oneDSecondDerivatives[i], knotVectors_[i], order_[i], currentKnotSpan[i]);\n- 933\n- 934 // The lowest knot spans that we need values from\n- 935 std::array<unsigned int, dim> offset;\n- 936 for (int i=0; i<dim; i++)\n- 937 offset[i] = std::max((int)(currentKnotSpan[i] - order_[i]),0);\n- 938\n- 939 // Set up a multi-index to go from consecutive indices to integer\n-coordinates\n- 940 std::array<unsigned int, dim> limits;\n- 941 for (int i=0; i<dim; i++)\n- 942 {\n- 943 // In a proper implementation, the following line would do\n- 944 //limits[i] = oneDValues[i].size();\n- 945 limits[i] = order_[i]+1; // The 'standard' value away from the boundaries\n-of the knot vector\n- 946 if (currentKnotSpan[i]<order_[i])\n- 947 limits[i] -= (order_[i] - currentKnotSpan[i]);\n- 948 if ( order_[i] > (knotVectors_[i].size() - currentKnotSpan[i] - 2) )\n- 949 limits[i] -= order_[i] - (knotVectors_[i].size() - currentKnotSpan[i] -\n-2);\n- 950 }\n- 951\n- 952 // Working towards computing only the parts that we really need:\n- 953 // Let's copy them out into a separate array\n- 954 std::array<std::vector<R>, dim> oneDValuesShort;\n- 955\n- 956 for (int i=0; i<dim; i++)\n- 957 {\n- 958 oneDValuesShort[i].resize(limits[i]);\n- 959\n- 960 for (size_t j=0; j<limits[i]; j++)\n- 961 oneDValuesShort[i][j] = oneDValues[i][offset[i] + j];\n- 962 }\n- 963\n- 964\n- 965 MultiDigitCounter ijkCounter(limits);\n- 966\n- 967 out.resize(ijkCounter.cycle());\n- 968\n- 969 if (k == 1)\n- 970 {\n- 971 // Complete Jacobian is given by the product rule\n- 972 for (size_t i=0; i<out.size(); i++, ++ijkCounter)\n- 973 {\n- 974 out[i][0] = 1.0;\n- 975 for (int l=0; l<dim; l++)\n- 976 out[i][0] *= (directions[0]==l) ? oneDDerivatives[l][ijkCounter[l]]\n- 977 : oneDValuesShort[l][ijkCounter[l]];\n- 978 }\n- 979 }\n- 980\n- 981 if (k == 2)\n- 982 {\n- 983 // Complete derivation by deriving the tensor product\n- 984 for (size_t i=0; i<out.size(); i++, ++ijkCounter)\n- 985 {\n- 986 out[i][0] = 1.0;\n- 987 for (int j=0; j<dim; j++)\n- 988 {\n- 989 if (directions[0] != directions[1]) //derivation in two different\n-variables\n- 990 if (directions[0] == j || directions[1] == j) //the spline has to be\n-derived (once) in this direction\n- 991 out[i][0] *= oneDDerivatives[j][ijkCounter[j]];\n- 992 else //no derivation in this direction\n- 993 out[i][0] *= oneDValuesShort[j][ijkCounter[j]];\n- 994 else //spline is derived two times in the same direction\n- 995 if (directions[0] == j) //the spline is derived two times in this\n-direction\n- 996 out[i][0] *= oneDSecondDerivatives[j][ijkCounter[j]];\n- 997 else //no derivation in this direction\n- 998 out[i][0] *= oneDValuesShort[j][ijkCounter[j]];\n- 999 }\n- 1000 }\n- 1001 }\n- 1002 }\n- 1003\n- 1004\n-1009 static std::array<unsigned int,dim> getIJK(typename GridView::IndexSet::\n-IndexType idx, std::array<unsigned int,dim> elements)\n- 1010 {\n- 1011 std::array<unsigned,dim> result;\n- 1012 for (int i=0; i<dim; i++)\n- 1013 {\n- 1014 result[i] = idx%elements[i];\n- 1015 idx /= elements[i];\n- 1016 }\n- 1017 return result;\n- 1018 }\n- 1019\n-1028 static void evaluateFunction (const typename GV::ctype& in, std::\n-vector<R>& out,\n- 1029 const std::vector<R>& knotVector,\n- 1030 unsigned int order,\n- 1031 unsigned int currentKnotSpan)\n- 1032 {\n- 1033 std::size_t outSize = order+1; // The 'standard' value away from the\n-boundaries of the knot vector\n- 1034 if (currentKnotSpan<order) // Less near the left end of the knot vector\n- 1035 outSize -= (order - currentKnotSpan);\n- 1036 if ( order > (knotVector.size() - currentKnotSpan - 2) )\n- 1037 outSize -= order - (knotVector.size() - currentKnotSpan - 2);\n- 1038 out.resize(outSize);\n- 1039\n- 1040 // It's not really a matrix that is needed here, a plain 2d array would\n-do\n- 1041 DynamicMatrix<R> N(order+1, knotVector.size()-1);\n- 1042\n- 1043 // The text books on splines use the following geometric condition here\n-to fill the array N\n- 1044 // (see for example Cottrell, Hughes, Bazilevs, Formula (2.1). However,\n-this condition\n- 1045 // only works if splines are never evaluated exactly on the knots.\n- 1046 //\n- 1047 // for (size_t i=0; i<knotVector.size()-1; i++)\n- 1048 // N[0][i] = (knotVector[i] <= in) and (in < knotVector[i+1]);\n- 1049 for (size_t i=0; i<knotVector.size()-1; i++)\n- 1050 N[0][i] = (i == currentKnotSpan);\n- 1051\n- 1052 for (size_t r=1; r<=order; r++)\n- 1053 for (size_t i=0; i<knotVector.size()-r-1; i++)\n- 1054 {\n- 1055 R factor1 = ((knotVector[i+r] - knotVector[i]) > 1e-10)\n- 1056 ? (in - knotVector[i]) / (knotVector[i+r] - knotVector[i])\n- 1057 : 0;\n- 1058 R factor2 = ((knotVector[i+r+1] - knotVector[i+1]) > 1e-10)\n- 1059 ? (knotVector[i+r+1] - in) / (knotVector[i+r+1] - knotVector[i+1])\n- 1060 : 0;\n- 1061 N[r][i] = factor1 * N[r-1][i] + factor2 * N[r-1][i+1];\n- 1062 }\n- 1063\n- 1068 for (size_t i=0; i<out.size(); i++) {\n- 1069 out[i] = N[order][std::max((int)(currentKnotSpan - order),0) + i];\n- 1070 }\n- 1071 }\n- 1072\n-1085 static void evaluateFunctionFull(const typename GV::ctype& in,\n- 1086 DynamicMatrix<R>& out,\n- 1087 const std::vector<R>& knotVector,\n- 1088 unsigned int order,\n- 1089 unsigned int currentKnotSpan)\n- 1090 {\n- 1091 // It's not really a matrix that is needed here, a plain 2d array would\n-do\n- 1092 DynamicMatrix<R>& N = out;\n- 1093\n- 1094 N.resize(order+1, knotVector.size()-1);\n- 1095\n- 1096 // The text books on splines use the following geometric condition here\n-to fill the array N\n- 1097 // (see for example Cottrell, Hughes, Bazilevs, Formula (2.1). However,\n-this condition\n- 1098 // only works if splines are never evaluated exactly on the knots.\n- 1099 //\n- 1100 // for (size_t i=0; i<knotVector.size()-1; i++)\n- 1101 // N[0][i] = (knotVector[i] <= in) and (in < knotVector[i+1]);\n- 1102 for (size_t i=0; i<knotVector.size()-1; i++)\n- 1103 N[0][i] = (i == currentKnotSpan);\n- 1104\n- 1105 for (size_t r=1; r<=order; r++)\n- 1106 for (size_t i=0; i<knotVector.size()-r-1; i++)\n- 1107 {\n- 1108 R factor1 = ((knotVector[i+r] - knotVector[i]) > 1e-10)\n- 1109 ? (in - knotVector[i]) / (knotVector[i+r] - knotVector[i])\n- 1110 : 0;\n- 1111 R factor2 = ((knotVector[i+r+1] - knotVector[i+1]) > 1e-10)\n- 1112 ? (knotVector[i+r+1] - in) / (knotVector[i+r+1] - knotVector[i+1])\n- 1113 : 0;\n- 1114 N[r][i] = factor1 * N[r-1][i] + factor2 * N[r-1][i+1];\n- 1115 }\n- 1116 }\n- 1117\n- 1118\n-1128 static void evaluateAll(const typename GV::ctype& in,\n- 1129 std::vector<R>& out,\n- 1130 bool evaluateJacobian, std::vector<R>& outJac,\n- 1131 bool evaluateHessian, std::vector<R>& outHess,\n- 1132 const std::vector<R>& knotVector,\n- 1133 unsigned int order,\n- 1134 unsigned int currentKnotSpan)\n- 1135 {\n- 1136 // How many shape functions to we have in each coordinate direction?\n- 1137 unsigned int limit;\n- 1138 limit = order+1; // The 'standard' value away from the boundaries of the\n-knot vector\n- 1139 if (currentKnotSpan<order)\n- 1140 limit -= (order - currentKnotSpan);\n- 1141 if ( order > (knotVector.size() - currentKnotSpan - 2) )\n- 1142 limit -= order - (knotVector.size() - currentKnotSpan - 2);\n- 1143\n- 1144 // The lowest knot spans that we need values from\n- 1145 unsigned int offset;\n- 1146 offset = std::max((int)(currentKnotSpan - order),0);\n- 1147\n- 1148 // Evaluate 1d function values (needed for the product rule)\n- 1149 DynamicMatrix<R> values;\n- 1150\n- 1151 evaluateFunctionFull(in, values, knotVector, order, currentKnotSpan);\n- 1152\n- 1153 out.resize(knotVector.size()-order-1);\n- 1154 for (size_t j=0; j<out.size(); j++)\n- 1155 out[j] = values[order][j];\n- 1156\n- 1157 // Evaluate 1d function values of one order lower (needed for the\n-derivative formula)\n- 1158 std::vector<R> lowOrderOneDValues;\n- 1159\n- 1160 if (order!=0)\n- 1161 {\n- 1162 lowOrderOneDValues.resize(knotVector.size()-(order-1)-1);\n- 1163 for (size_t j=0; j<lowOrderOneDValues.size(); j++)\n- 1164 lowOrderOneDValues[j] = values[order-1][j];\n- 1165 }\n- 1166\n- 1167 // Evaluate 1d function values of two order lower (needed for the\n-(second) derivative formula)\n- 1168 std::vector<R> lowOrderTwoDValues;\n- 1169\n- 1170 if (order>1 && evaluateHessian)\n- 1171 {\n- 1172 lowOrderTwoDValues.resize(knotVector.size()-(order-2)-1);\n- 1173 for (size_t j=0; j<lowOrderTwoDValues.size(); j++)\n- 1174 lowOrderTwoDValues[j] = values[order-2][j];\n- 1175 }\n- 1176\n- 1177 // Evaluate 1d function derivatives\n- 1178 if (evaluateJacobian)\n- 1179 {\n- 1180 outJac.resize(limit);\n- 1181\n- 1182 if (order==0) // order-zero functions are piecewise constant, hence all\n-derivatives are zero\n- 1183 std::fill(outJac.begin(), outJac.end(), R(0.0));\n- 1184 else\n- 1185 {\n- 1186 for (size_t j=offset; j<offset+limit; j++)\n- 1187 {\n- 1188 R derivativeAddend1 = lowOrderOneDValues[j] / (knotVector[j+order]-\n-knotVector[j]);\n- 1189 R derivativeAddend2 = lowOrderOneDValues[j+1] / (knotVector[j+order+1]-\n-knotVector[j+1]);\n- 1190 // The two previous terms may evaluate as 0/0. This is to be interpreted\n-as 0.\n- 1191 if (std::isnan(derivativeAddend1))\n- 1192 derivativeAddend1 = 0;\n- 1193 if (std::isnan(derivativeAddend2))\n- 1194 derivativeAddend2 = 0;\n- 1195 outJac[j-offset] = order * ( derivativeAddend1 - derivativeAddend2 );\n- 1196 }\n- 1197 }\n- 1198 }\n- 1199\n- 1200 // Evaluate 1d function second derivatives\n- 1201 if (evaluateHessian)\n- 1202 {\n- 1203 outHess.resize(limit);\n- 1204\n- 1205 if (order<2) // order-zero functions are piecewise constant, hence all\n-derivatives are zero\n- 1206 std::fill(outHess.begin(), outHess.end(), R(0.0));\n- 1207 else\n- 1208 {\n- 1209 for (size_t j=offset; j<offset+limit; j++)\n- 1210 {\n- 1211 assert(j+2 < lowOrderTwoDValues.size());\n- 1212 R derivativeAddend1 = lowOrderTwoDValues[j] / (knotVector[j+order]-\n-knotVector[j]) / (knotVector[j+order-1]-knotVector[j]);\n- 1213 R derivativeAddend2 = lowOrderTwoDValues[j+1] / (knotVector[j+order]-\n-knotVector[j]) / (knotVector[j+order]-knotVector[j+1]);\n- 1214 R derivativeAddend3 = lowOrderTwoDValues[j+1] / (knotVector[j+order+1]-\n-knotVector[j+1]) / (knotVector[j+order]-knotVector[j+1]);\n- 1215 R derivativeAddend4 = lowOrderTwoDValues[j+2] / (knotVector[j+order+1]-\n-knotVector[j+1]) / (knotVector[j+1+order]-knotVector[j+2]);\n- 1216 // The two previous terms may evaluate as 0/0. This is to be interpreted\n-as 0.\n- 1217\n- 1218 if (std::isnan(derivativeAddend1))\n- 1219 derivativeAddend1 = 0;\n- 1220 if (std::isnan(derivativeAddend2))\n- 1221 derivativeAddend2 = 0;\n- 1222 if (std::isnan(derivativeAddend3))\n- 1223 derivativeAddend3 = 0;\n- 1224 if (std::isnan(derivativeAddend4))\n- 1225 derivativeAddend4 = 0;\n- 1226 outHess[j-offset] = order * (order-1) * ( derivativeAddend1 -\n-derivativeAddend2 -derivativeAddend3 + derivativeAddend4 );\n- 1227 }\n- 1228 }\n- 1229 }\n- 1230 }\n- 1231\n- 1232\n-1234 std::array<unsigned int, dim> order_;\n- 1235\n-1237 std::array<std::vector<double>, dim> knotVectors_;\n- 1238\n-1240 std::array<unsigned,dim> elements_;\n- 1241\n-1242 GridView gridView_;\n- 1243};\n- 1244\n- 1245\n- 1246\n- 1247template<typename GV>\n-1248class BSplineNode :\n- 1249 public LeafBasisNode\n- 1250{\n- 1251 static const int dim = GV::dimension;\n- 1252\n- 1253public:\n- 1254\n-1255 using size_type = std::size_t;\n-1256 using Element = typename GV::template Codim<0>::Entity;\n-1257 using FiniteElement = BSplineLocalFiniteElement<GV,double>;\n- 1258\n-1259 BSplineNode(const BSplinePreBasis<GV>* preBasis) :\n- 1260 preBasis_(preBasis),\n- 1261 finiteElement_(*preBasis)\n- 1262 {}\n- 1263\n-1265 const Element& element() const\n- 1266 {\n- 1267 return element_;\n- 1268 }\n- 1269\n-1274 const FiniteElement& finiteElement() const\n- 1275 {\n- 1276 return finiteElement_;\n- 1277 }\n- 1278\n-1280 void bind(const Element& e)\n- 1281 {\n- 1282 element_ = e;\n- 1283 auto elementIndex = preBasis_->gridView().indexSet().index(e);\n- 1284 finiteElement_.bind(preBasis_->getIJK(elementIndex,preBasis_-\n->elements_));\n- 1285 this->setSize(finiteElement_.size());\n- 1286 }\n- 1287\n- 1288protected:\n- 1289\n-1290 const BSplinePreBasis<GV>* preBasis_;\n- 1291\n-1292 FiniteElement finiteElement_;\n-1293 Element element_;\n- 1294};\n- 1295\n- 1296\n- 1297\n- 1298namespace BasisFactory {\n- 1299\n-1306inline auto bSpline(const std::vector<double>& knotVector,\n- 1307 unsigned int order,\n- 1308 bool makeOpen = true)\n- 1309{\n- 1310 return [&knotVector, order, makeOpen](const auto& gridView) {\n- 1311 return BSplinePreBasis<std::decay_t<decltype(gridView)>>(gridView,\n-knotVector, order, makeOpen);\n- 1312 };\n- 1313}\n- 1314\n- 1315} // end namespace BasisFactory\n- 1316\n- 1317/\n-/ *****************************************************************************\n- 1318// This is the actual global basis implementation based on the reusable\n-parts.\n- 1319/\n-/ *****************************************************************************\n- 1320\n- 1327template<typename GV>\n-1328using BSplineBasis = DefaultGlobalBasis<BSplinePreBasis<GV> >;\n- 1329\n- 1330\n- 1331} // namespace Functions\n- 1332\n- 1333} // namespace Dune\n- 1334\n- 1335#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH\n-defaultglobalbasis.hh\n-nodes.hh\n-Dune::Functions::BasisFactory::bSpline\n-auto bSpline(const std::vector< double > &knotVector, unsigned int order, bool\n-makeOpen=true)\n-Create a pre-basis factory that can create a B-spline pre-basis.\n-Definition: bsplinebasis.hh:1306\n+ 163\n+ 164} // end namespace Functions\n+ 165} // end namespace Dune\n+ 166\n+ 167\n+ 168\n+ 169#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH\n+type_traits.hh\n+subspacelocalview.hh\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::BSplineLocalFiniteElement\n-LocalFiniteElement in the sense of dune-localfunctions, for the B-spline basis\n-on tensor-product grid...\n-Definition: bsplinebasis.hh:362\n-Dune::Functions::BSplineLocalFiniteElement::BSplineLocalFiniteElement\n-BSplineLocalFiniteElement(const BSplineLocalFiniteElement &other)\n-Copy constructor.\n-Definition: bsplinebasis.hh:383\n-Dune::Functions::BSplineLocalFiniteElement::preBasis_\n-const BSplinePreBasis< GV > & preBasis_\n-Definition: bsplinebasis.hh:474\n-Dune::Functions::BSplineLocalFiniteElement::localInterpolation\n-const BSplineLocalInterpolation< dim, BSplineLocalBasis< GV, R > > &\n-localInterpolation() const\n-Hand out a LocalInterpolation object.\n-Definition: bsplinebasis.hh:439\n-Dune::Functions::BSplineLocalFiniteElement::Traits\n-LocalFiniteElementTraits< BSplineLocalBasis< GV, R >, BSplineLocalCoefficients<\n-dim >, BSplineLocalInterpolation< dim, BSplineLocalBasis< GV, R > > > Traits\n-Export various types related to this LocalFiniteElement.\n-Definition: bsplinebasis.hh:372\n-Dune::Functions::BSplineLocalFiniteElement::currentKnotSpan_\n-std::array< unsigned, dim > currentKnotSpan_\n-Definition: bsplinebasis.hh:481\n-Dune::Functions::BSplineLocalFiniteElement::BSplineLocalFiniteElement\n-BSplineLocalFiniteElement(const BSplinePreBasis< GV > &preBasis)\n-Constructor with a given B-spline basis.\n-Definition: bsplinebasis.hh:376\n-Dune::Functions::BSplineLocalFiniteElement::localCoefficients\n-const BSplineLocalCoefficients< dim > & localCoefficients() const\n-Hand out a LocalCoefficients object.\n-Definition: bsplinebasis.hh:433\n-Dune::Functions::BSplineLocalFiniteElement::bind\n-void bind(const std::array< unsigned, dim > &elementIdx)\n-Bind LocalFiniteElement to a specific knot span of the spline patch.\n-Definition: bsplinebasis.hh:394\n-Dune::Functions::BSplineLocalFiniteElement::localInterpolation_\n-BSplineLocalInterpolation< dim, BSplineLocalBasis< GV, R > >\n-localInterpolation_\n-Definition: bsplinebasis.hh:478\n-Dune::Functions::BSplineLocalFiniteElement::type\n-GeometryType type() const\n-Return the reference element that the local finite element is defined on (here,\n-a hypercube)\n-Definition: bsplinebasis.hh:455\n-Dune::Functions::BSplineLocalFiniteElement::size\n-unsigned size() const\n-Number of shape functions in this finite element.\n-Definition: bsplinebasis.hh:445\n-Dune::Functions::BSplineLocalFiniteElement::localCoefficients_\n-BSplineLocalCoefficients< dim > localCoefficients_\n-Definition: bsplinebasis.hh:477\n-Dune::Functions::BSplineLocalFiniteElement::size\n-unsigned int size(int i) const\n-Number of degrees of freedom for one coordinate direction.\n-Definition: bsplinebasis.hh:463\n-Dune::Functions::BSplineLocalFiniteElement::localBasis_\n-BSplineLocalBasis< GV, R > localBasis_\n-Definition: bsplinebasis.hh:476\n-Dune::Functions::BSplineLocalFiniteElement::localBasis\n-const BSplineLocalBasis< GV, R > & localBasis() const\n-Hand out a LocalBasis object.\n-Definition: bsplinebasis.hh:427\n-Dune::Functions::BSplinePreBasis\n-Pre-basis for B-spline basis.\n-Definition: bsplinebasis.hh:499\n-Dune::Functions::BSplinePreBasis::multiIndexBufferSize\n-static constexpr size_type multiIndexBufferSize\n-Definition: bsplinebasis.hh:567\n-Dune::Functions::BSplinePreBasis::elements_\n-std::array< unsigned, dim > elements_\n-Number of grid elements in the different coordinate directions.\n-Definition: bsplinebasis.hh:1240\n-Dune::Functions::BSplinePreBasis::gridView_\n-GridView gridView_\n-Definition: bsplinebasis.hh:1242\n-Dune::Functions::BSplinePreBasis::R\n-double R\n-Definition: bsplinebasis.hh:570\n-Dune::Functions::BSplinePreBasis::evaluateFunctionFull\n-static void evaluateFunctionFull(const typename GV::ctype &in, DynamicMatrix< R\n-> &out, const std::vector< R > &knotVector, unsigned int order, unsigned int\n-currentKnotSpan)\n-Evaluate all one-dimensional B-spline functions for a given coordinate\n-direction.\n-Definition: bsplinebasis.hh:1085\n-Dune::Functions::BSplinePreBasis::evaluateFunction\n-void evaluateFunction(const FieldVector< typename GV::ctype, dim > &in, std::\n-vector< FieldVector< R, 1 > > &out, const std::array< unsigned, dim >\n-¤tKnotSpan) const\n-Evaluate all B-spline basis functions at a given point.\n-Definition: bsplinebasis.hh:781\n-Dune::Functions::BSplinePreBasis::order_\n-std::array< unsigned int, dim > order_\n-Order of the B-spline for each space dimension.\n-Definition: bsplinebasis.hh:1234\n-Dune::Functions::BSplinePreBasis::dimension\n-size_type dimension() const\n-Get the total dimension of the space spanned by this basis.\n-Definition: bsplinebasis.hh:719\n-Dune::Functions::BSplinePreBasis::evaluateAll\n-static void evaluateAll(const typename GV::ctype &in, std::vector< R > &out,\n-bool evaluateJacobian, std::vector< R > &outJac, bool evaluateHessian, std::\n-vector< R > &outHess, const std::vector< R > &knotVector, unsigned int order,\n-unsigned int currentKnotSpan)\n-Evaluate the second derivatives of all one-dimensional B-spline functions for a\n-given coordinate dire...\n-Definition: bsplinebasis.hh:1128\n-Dune::Functions::BSplinePreBasis::evaluateFunction\n-static void evaluateFunction(const typename GV::ctype &in, std::vector< R >\n-&out, const std::vector< R > &knotVector, unsigned int order, unsigned int\n-currentKnotSpan)\n-Evaluate all one-dimensional B-spline functions for a given coordinate\n-direction.\n-Definition: bsplinebasis.hh:1028\n-Dune::Functions::BSplinePreBasis::size\n-unsigned int size(size_t d) const\n-Number of shape functions in one direction.\n-Definition: bsplinebasis.hh:774\n-Dune::Functions::BSplinePreBasis::GridView\n-GV GridView\n+Dune::Functions::SubspaceBasis\n+SubspaceBasis(const RB &, const TP) -> SubspaceBasis< RB, TP >\n+Dune::Functions::subspaceBasis\n+auto subspaceBasis(const RootBasis &rootBasis, const TypeTree::HybridTreePath<\n+PrefixTreeIndices... > &prefixPath)\n+Create SubspaceBasis from a root basis and a prefixPath.\n+Definition: subspacebasis.hh:151\n+Dune::Functions::SubspaceBasis\n+Definition: subspacebasis.hh:38\n+Dune::Functions::SubspaceBasis::RootLocalView\n+typename RootBasis::LocalView RootLocalView\n+Definition: subspacebasis.hh:43\n+Dune::Functions::SubspaceBasis::localView\n+LocalView localView() const\n+Return local view for basis.\n+Definition: subspacebasis.hh:108\n+Dune::Functions::SubspaceBasis::rootBasis_\n+const RootBasis * rootBasis_\n+Definition: subspacebasis.hh:124\n+Dune::Functions::SubspaceBasis::SizePrefix\n+typename RootBasis::SizePrefix SizePrefix\n+Definition: subspacebasis.hh:58\n+Dune::Functions::SubspaceBasis::PrefixPath\n+TP PrefixPath\n+Definition: subspacebasis.hh:45\n+Dune::Functions::SubspaceBasis::LocalView\n+SubspaceLocalView< RootLocalView, PrefixPath > LocalView\n+Type of the local view on the restriction of the basis to a single element.\n+Definition: subspacebasis.hh:56\n+Dune::Functions::SubspaceBasis::size\n+size_type size(const SizePrefix &prefix) const\n+Return number possible values for next position in multi index.\n+Definition: subspacebasis.hh:100\n+Dune::Functions::SubspaceBasis::GridView\n+typename RootBasis::GridView GridView\n The grid view that the FE space is defined on.\n-Definition: bsplinebasis.hh:560\n-Dune::Functions::BSplinePreBasis::indices\n-It indices(const Node &node, It it) const\n-Maps from subtree index set [0..size-1] to a globally unique multi index in\n-global basis.\n-Definition: bsplinebasis.hh:735\n-Dune::Functions::BSplinePreBasis::evaluate\n-void evaluate(const typename std::array< int, k > &directions, const\n-FieldVector< typename GV::ctype, dim > &in, std::vector< FieldVector< R, 1 > >\n-&out, const std::array< unsigned, dim > ¤tKnotSpan) const\n-Evaluate Derivatives of all B-spline basis functions.\n-Definition: bsplinebasis.hh:913\n-Dune::Functions::BSplinePreBasis::size_type\n-std::size_t size_type\n-Definition: bsplinebasis.hh:561\n-Dune::Functions::BSplinePreBasis::maxMultiIndexSize\n-static constexpr size_type maxMultiIndexSize\n-Definition: bsplinebasis.hh:565\n-Dune::Functions::BSplinePreBasis::update\n-void update(const GridView &gv)\n-Update the stored grid view, to be called if the grid has changed.\n-Definition: bsplinebasis.hh:686\n-Dune::Functions::BSplinePreBasis::initializeIndices\n-void initializeIndices()\n-Initialize the global indices.\n-Definition: bsplinebasis.hh:676\n-Dune::Functions::BSplinePreBasis::size\n-size_type size(const Dune::ReservedVector< ST, i > &prefix) const\n-Return number of possible values for next position in multi index.\n-Definition: bsplinebasis.hh:712\n-Dune::Functions::BSplinePreBasis::size\n-unsigned int size() const\n-Total number of B-spline basis functions.\n-Definition: bsplinebasis.hh:765\n-Dune::Functions::BSplinePreBasis::gridView\n+Definition: subspacebasis.hh:48\n+Dune::Functions::SubspaceBasis::prefixPath\n+const PrefixPath & prefixPath() const\n+Definition: subspacebasis.hh:118\n+Dune::Functions::SubspaceBasis::SubspaceBasis\n+SubspaceBasis(const SubspaceBasis< RootRootBasis, InnerTP > &rootBasis, const\n+OuterTP &prefixPath)\n+Constructor from another SubspaceBasis.\n+Definition: subspacebasis.hh:73\n+Dune::Functions::SubspaceBasis::gridView\n const GridView & gridView() const\n Obtain the grid view that the basis is defined on.\n-Definition: bsplinebasis.hh:680\n-Dune::Functions::BSplinePreBasis::getIJK\n-static std::array< unsigned int, dim > getIJK(typename GridView::IndexSet::\n-IndexType idx, std::array< unsigned int, dim > elements)\n-Compute integer element coordinates from the element index.\n-Definition: bsplinebasis.hh:1009\n-Dune::Functions::BSplinePreBasis::makeNode\n-Node makeNode() const\n-Create tree node.\n-Definition: bsplinebasis.hh:694\n-Dune::Functions::BSplinePreBasis::BSplinePreBasis\n-BSplinePreBasis(const GridView &gridView, const std::vector< double >\n-&knotVector, unsigned int order, bool makeOpen=true)\n-Construct a B-spline basis for a given grid view and set of knot vectors.\n-Definition: bsplinebasis.hh:590\n-Dune::Functions::BSplinePreBasis::evaluateJacobian\n-void evaluateJacobian(const FieldVector< typename GV::ctype, dim > &in, std::\n-vector< FieldMatrix< R, 1, dim > > &out, const std::array< unsigned, dim >\n-¤tKnotSpan) const\n-Evaluate Jacobian of all B-spline basis functions.\n-Definition: bsplinebasis.hh:812\n-Dune::Functions::BSplinePreBasis::minMultiIndexSize\n-static constexpr size_type minMultiIndexSize\n-Definition: bsplinebasis.hh:566\n-Dune::Functions::BSplinePreBasis::knotVectors_\n-std::array< std::vector< double >, dim > knotVectors_\n-The knot vectors, one for each space dimension.\n-Definition: bsplinebasis.hh:1237\n-Dune::Functions::BSplinePreBasis::maxNodeSize\n-size_type maxNodeSize() const\n-Get the maximal number of DOFs associated to node for any element.\n-Definition: bsplinebasis.hh:725\n-Dune::Functions::BSplinePreBasis::BSplinePreBasis\n-BSplinePreBasis(const GridView &gridView, const FieldVector< double, dim >\n-&lowerLeft, const FieldVector< double, dim > &upperRight, const std::array<\n-unsigned int, dim > &elements, unsigned int order, bool makeOpen=true)\n-Construct a B-spline basis for a given grid view with uniform knot vectors.\n-Definition: bsplinebasis.hh:642\n-Dune::Functions::BSplineLocalBasis\n-LocalBasis class in the sense of dune-localfunctions, presenting the\n-restriction of a B-spline patch ...\n-Definition: bsplinebasis.hh:46\n-Dune::Functions::BSplineLocalBasis::Traits\n-LocalBasisTraits< D, dim, FieldVector< D, dim >, R, 1, FieldVector< R, 1 >,\n-FieldMatrix< R, 1, dim > > Traits\n-export type traits for function signature\n-Definition: bsplinebasis.hh:55\n-Dune::Functions::BSplineLocalBasis::order\n-unsigned int order() const\n-Polynomial order of the shape functions.\n-Definition: bsplinebasis.hh:140\n-Dune::Functions::BSplineLocalBasis::size\n-std::size_t size() const\n-Return the number of basis functions on the current knot span.\n-Definition: bsplinebasis.hh:147\n-Dune::Functions::BSplineLocalBasis::evaluate\n-void evaluate(const typename std::array< int, k > &directions, const typename\n-Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const\n-Evaluate all shape functions and derivatives of any order.\n-Definition: bsplinebasis.hh:97\n-Dune::Functions::BSplineLocalBasis::evaluateFunction\n-void evaluateFunction(const FieldVector< D, dim > &in, std::vector<\n-FieldVector< R, 1 > > &out) const\n-Evaluate all shape functions.\n-Definition: bsplinebasis.hh:70\n-Dune::Functions::BSplineLocalBasis::evaluateJacobian\n-void evaluateJacobian(const FieldVector< D, dim > &in, std::vector<\n-FieldMatrix< D, 1, dim > > &out) const\n-Evaluate Jacobian of all shape functions.\n-Definition: bsplinebasis.hh:82\n-Dune::Functions::BSplineLocalBasis::BSplineLocalBasis\n-BSplineLocalBasis(const BSplinePreBasis< GV > &preBasis, const\n-BSplineLocalFiniteElement< GV, R > &lFE)\n-Constructor with a given B-spline patch.\n-Definition: bsplinebasis.hh:61\n-Dune::Functions::BSplineLocalCoefficients\n-Attaches a shape function to an entity.\n-Definition: bsplinebasis.hh:178\n-Dune::Functions::BSplineLocalCoefficients::localKey\n-const LocalKey & localKey(std::size_t i) const\n-get i'th index\n-Definition: bsplinebasis.hh:321\n-Dune::Functions::BSplineLocalCoefficients::init\n-void init(const std::array< unsigned, dim > &sizes)\n-Definition: bsplinebasis.hh:256\n-Dune::Functions::BSplineLocalCoefficients::size\n-std::size_t size() const\n-number of coefficients\n-Definition: bsplinebasis.hh:315\n-Dune::Functions::BSplineLocalInterpolation\n-Local interpolation in the sense of dune-localfunctions, for the B-spline basis\n-on tensor-product gri...\n-Definition: bsplinebasis.hh:340\n-Dune::Functions::BSplineLocalInterpolation::interpolate\n-void interpolate(const F &f, std::vector< C > &out) const\n-Local interpolation of a function.\n-Definition: bsplinebasis.hh:344\n-Dune::Functions::BSplineNode\n-Definition: bsplinebasis.hh:1250\n-Dune::Functions::BSplineNode::finiteElement\n-const FiniteElement & finiteElement() const\n-Return the LocalFiniteElement for the element we are bound to.\n-Definition: bsplinebasis.hh:1274\n-Dune::Functions::BSplineNode::Element\n-typename GV::template Codim< 0 >::Entity Element\n-Definition: bsplinebasis.hh:1256\n-Dune::Functions::BSplineNode::preBasis_\n-const BSplinePreBasis< GV > * preBasis_\n-Definition: bsplinebasis.hh:1290\n-Dune::Functions::BSplineNode::element_\n-Element element_\n-Definition: bsplinebasis.hh:1293\n-Dune::Functions::BSplineNode::bind\n-void bind(const Element &e)\n-Bind to element.\n-Definition: bsplinebasis.hh:1280\n-Dune::Functions::BSplineNode::BSplineNode\n-BSplineNode(const BSplinePreBasis< GV > *preBasis)\n-Definition: bsplinebasis.hh:1259\n-Dune::Functions::BSplineNode::element\n-const Element & element() const\n-Return current element, throw if unbound.\n-Definition: bsplinebasis.hh:1265\n-Dune::Functions::BSplineNode::finiteElement_\n-FiniteElement finiteElement_\n-Definition: bsplinebasis.hh:1292\n-Dune::Functions::BSplineNode::size_type\n-std::size_t size_type\n-Definition: bsplinebasis.hh:1255\n-Dune::Functions::DefaultGlobalBasis\n-Global basis for given pre-basis.\n-Definition: defaultglobalbasis.hh:46\n-Dune::Functions::BasisNodeMixin::size\n+Definition: subspacebasis.hh:80\n+Dune::Functions::SubspaceBasis::RootBasis\n+RB RootBasis\n+Definition: subspacebasis.hh:41\n+Dune::Functions::SubspaceBasis::prefixPath_\n+PrefixPath prefixPath_\n+Definition: subspacebasis.hh:125\n+Dune::Functions::SubspaceBasis::size\n size_type size() const\n-Definition: nodes.hh:142\n-Dune::Functions::BasisNodeMixin::setSize\n-void setSize(const size_type size)\n-Definition: nodes.hh:164\n-Dune::Functions::LeafBasisNode\n-Definition: nodes.hh:186\n+Return number of possible values for next position in empty multi index.\n+Definition: subspacebasis.hh:94\n+Dune::Functions::SubspaceBasis::rootBasis\n+const RootBasis & rootBasis() const\n+Definition: subspacebasis.hh:113\n+Dune::Functions::SubspaceBasis::MultiIndex\n+typename RootBasis::MultiIndex MultiIndex\n+Type used for global numbering of the basis vectors.\n+Definition: subspacebasis.hh:51\n+Dune::Functions::SubspaceBasis::dimension\n+size_type dimension() const\n+Definition: subspacebasis.hh:88\n+Dune::Functions::SubspaceBasis::size_type\n+std::size_t size_type\n+Definition: subspacebasis.hh:53\n+Dune::Functions::SubspaceBasis::SubspaceBasis\n+SubspaceBasis(const RootBasis &rootBasis, const PrefixPath &prefixPath)\n+Constructor for a given grid view object.\n+Definition: subspacebasis.hh:62\n+Dune::Functions::SubspaceLocalView\n+The restriction of a finite element basis to a single element.\n+Definition: subspacelocalview.hh:30\n+concepts.hh\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00110.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00110.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: taylorhoodbasis.hh File Reference</title>\n+<title>dune-functions: sizeinfo.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -65,61 +65,40 @@\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> |\n-<a href=\"#typedef-members\">Typedefs</a> |\n <a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">taylorhoodbasis.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">sizeinfo.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <dune/common/exceptions.hh></code><br />\n-<code>#include <dune/common/reservedvector.hh></code><br />\n-<code>#include <dune/common/indices.hh></code><br />\n-<code>#include <dune/typetree/powernode.hh></code><br />\n-<code>#include <dune/typetree/compositenode.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00191_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00125_source.html\">dune/functions/functionspacebases/lagrangebasis.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00119_source.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></code><br />\n+<div class=\"textblock\"><code>#include <array></code><br />\n </div>\n <p><a href=\"a00110_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01823.html\">Dune::Functions::TaylorHoodPreBasis< GV, HI ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Pre-basis for lowest order Taylor-Hood basis. <a href=\"a01823.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01815.html\">Dune::Functions::TaylorHoodVelocityTree< GV ></a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01819.html\">Dune::Functions::TaylorHoodBasisTree< GV ></a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01799.html\">Dune::Functions::SizeInfo< B ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A class encapsulating size information. <a href=\"a01799.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a00224\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00224.html\">Dune::Functions::BasisFactory</a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-</table><table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"typedef-members\" name=\"typedef-members\"></a>\n-Typedefs</h2></td></tr>\n-<tr class=\"memitem:ga2ddcf1f3f5bddd7f49ab4d81472aa69a\"><td class=\"memTemplParams\" colspan=\"2\">template<typename GV > </td></tr>\n-<tr class=\"memitem:ga2ddcf1f3f5bddd7f49ab4d81472aa69a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#ga2ddcf1f3f5bddd7f49ab4d81472aa69a\">Dune::Functions::TaylorHoodBasis</a> = DefaultGlobalBasis< TaylorHoodPreBasis< GV > ></td></tr>\n-<tr class=\"memdesc:ga2ddcf1f3f5bddd7f49ab4d81472aa69a\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Nodal basis for a lowest order Taylor-Hood Lagrangean finite element space. <a href=\"a00213.html#ga2ddcf1f3f5bddd7f49ab4d81472aa69a\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga2ddcf1f3f5bddd7f49ab4d81472aa69a\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n Functions</h2></td></tr>\n-<tr class=\"memitem:ga2384fc6a8ee2005fb29adb7221609ce3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#ga2384fc6a8ee2005fb29adb7221609ce3\">Dune::Functions::BasisFactory::taylorHood</a> ()</td></tr>\n-<tr class=\"memdesc:ga2384fc6a8ee2005fb29adb7221609ce3\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a pre-basis factory that can create a Taylor-Hood pre-basis. <a href=\"a00213.html#ga2384fc6a8ee2005fb29adb7221609ce3\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga2384fc6a8ee2005fb29adb7221609ce3\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:abd7e25a89325dbe2232b17308dae45f2\"><td class=\"memTemplParams\" colspan=\"2\">template<class Basis > </td></tr>\n+<tr class=\"memitem:abd7e25a89325dbe2232b17308dae45f2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">SizeInfo< Basis > </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#abd7e25a89325dbe2232b17308dae45f2\">Dune::Functions::sizeInfo</a> (const Basis &basis)</td></tr>\n+<tr class=\"separator:abd7e25a89325dbe2232b17308dae45f2\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,48 +5,27 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-Classes | Namespaces | Typedefs | Functions\n-taylorhoodbasis.hh File Reference\n-#include <dune/common/exceptions.hh>\n-#include <dune/common/reservedvector.hh>\n-#include <dune/common/indices.hh>\n-#include <dune/typetree/powernode.hh>\n-#include <dune/typetree/compositenode.hh>\n-#include <dune/functions/functionspacebases/nodes.hh>\n-#include <dune/functions/functionspacebases/lagrangebasis.hh>\n-#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n+Classes | Namespaces | Functions\n+sizeinfo.hh File Reference\n+#include <array>\n Go_to_the_source_code_of_this_file.\n Classes\n-class \u00a0Dune::Functions::TaylorHoodPreBasis<_GV,_HI_>\n-\u00a0 Pre-basis for lowest order Taylor-Hood basis. More...\n-\u00a0\n-class \u00a0Dune::Functions::TaylorHoodVelocityTree<_GV_>\n-\u00a0\n-class \u00a0Dune::Functions::TaylorHoodBasisTree<_GV_>\n+class \u00a0Dune::Functions::SizeInfo<_B_>\n+\u00a0 A class encapsulating size information. More...\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n-namespace \u00a0Dune::Functions::BasisFactory\n-\u00a0\n- Typedefs\n-template<typename GV >\n-using\u00a0Dune::Functions::TaylorHoodBasis = DefaultGlobalBasis<\n- TaylorHoodPreBasis< GV > >\n-\u00a0 Nodal basis for a lowest order Taylor-Hood Lagrangean finite element\n- space. More...\n-\u00a0\n Functions\n-auto\u00a0Dune::Functions::BasisFactory::taylorHood ()\n-\u00a0 Create a pre-basis factory that can create a Taylor-Hood pre-basis.\n- More...\n+template<class Basis >\n+SizeInfo< Basis >\u00a0Dune::Functions::sizeInfo (const Basis &basis)\n \u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00110_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00110_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: taylorhoodbasis.hh Source File</title>\n+<title>dune-functions: sizeinfo.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,352 +62,84 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">taylorhoodbasis.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">sizeinfo.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00110.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <dune/common/exceptions.hh></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <dune/common/reservedvector.hh></span></div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <dune/common/indices.hh></span></div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/typetree/powernode.hh></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/typetree/compositenode.hh></span></div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <array></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span> </div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span> </div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n <div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00191.html\">dune/functions/functionspacebases/nodes.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00125.html\">dune/functions/functionspacebases/lagrangebasis.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00119.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span> </div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> </div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"comment\">// *****************************************************************************</span></div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"comment\">// This is the reusable part of the basis. It contains</span></div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span><span class=\"comment\">// TaylorHoodPreBasis</span></div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"comment\">// TaylorHoodBasisTree</span></div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span><span class=\"comment\">// TaylorHoodVelocityTree</span></div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span><span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span><span class=\"comment\">// The pre-basis allows to create the others and is the owner of possible shared</span></div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span><span class=\"comment\">// state. These components do _not_ depend on the global basis and local view</span></div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span><span class=\"comment\">// and can be used without a global basis.</span></div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span><span class=\"comment\">// *****************************************************************************</span></div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> </div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV></div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span><span class=\"keyword\">class </span>TaylorHoodVelocityTree;</div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> </div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV></div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span><span class=\"keyword\">class </span>TaylorHoodBasisTree;</div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> </div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">bool</span> HI=false></div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html\"> 60</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01823.html\">TaylorHoodPreBasis</a></div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span>{</div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">bool</span> useHybridIndices = HI;</div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> B></div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01799.html\"> 24</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01799.html\">SizeInfo</a></div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span>{</div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01799.html#aa558e8687398c74affd92abb8af9bd58\"> 27</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01799.html#aa558e8687398c74affd92abb8af9bd58\">Basis</a> = B;</div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01799.html#a9d54b03391ba53f2cde374099ef62c21\"> 28</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01799.html#a9d54b03391ba53f2cde374099ef62c21\">size_type</a> = <span class=\"keyword\">typename</span> Basis::size_type;</div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01799.html#a36c68248ee3be872cf53a7c8915773f2\"> 29</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01799.html#a36c68248ee3be872cf53a7c8915773f2\">SizePrefix</a> = <span class=\"keyword\">typename</span> Basis::SizePrefix;</div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> </div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01799.html#ac3e18dc3b17c52eafe2e803562d72c5b\"> 34</a></span> <a class=\"code hl_function\" href=\"a01799.html#ac3e18dc3b17c52eafe2e803562d72c5b\">SizeInfo</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01799.html#aa558e8687398c74affd92abb8af9bd58\">Basis</a>& basis) :</div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> <a class=\"code hl_variable\" href=\"a01799.html#add41e7177edce69126ff66367bfef2fc\">basis_</a>(&basis)</div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> {}</div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> </div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01799.html#a9c71fa33343b928c5b93e2c8dcb9595f\"> 41</a></span> <a class=\"code hl_typedef\" href=\"a01799.html#a9d54b03391ba53f2cde374099ef62c21\">size_type</a> <a class=\"code hl_function\" href=\"a01799.html#a9c71fa33343b928c5b93e2c8dcb9595f\">operator()</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01799.html#a36c68248ee3be872cf53a7c8915773f2\">SizePrefix</a>& prefix)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01799.html#add41e7177edce69126ff66367bfef2fc\">basis_</a>->size(prefix);</div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> }</div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> </div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01799.html#a4f2343f16899076f68aa9dbeef992d80\"> 52</a></span> <a class=\"code hl_typedef\" href=\"a01799.html#a9d54b03391ba53f2cde374099ef62c21\">size_type</a> <a class=\"code hl_function\" href=\"a01799.html#a4f2343f16899076f68aa9dbeef992d80\">size</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01799.html#a36c68248ee3be872cf53a7c8915773f2\">SizePrefix</a>& prefix)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01799.html#add41e7177edce69126ff66367bfef2fc\">basis_</a>->size(prefix);</div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> }</div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> </div>\n+<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01799.html#a7a6245f9d3517156801ffdb27c2c879e\"> 57</a></span> <span class=\"keyword\">operator</span> <a class=\"code hl_typedef\" href=\"a01799.html#a9d54b03391ba53f2cde374099ef62c21\">size_type</a> ()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01799.html#add41e7177edce69126ff66367bfef2fc\">basis_</a>->dimension();</div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> }</div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> </div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span><span class=\"keyword\">protected</span>:</div>\n <div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> </div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dim = GV::dimension;</div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> </div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01799.html#add41e7177edce69126ff66367bfef2fc\"> 64</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01799.html#aa558e8687398c74affd92abb8af9bd58\">Basis</a>* <a class=\"code hl_variable\" href=\"a01799.html#add41e7177edce69126ff66367bfef2fc\">basis_</a>;</div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span>};</div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> </div>\n <div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> </div>\n-<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#a4fbd3d92587a03f3871066968035f194\"> 69</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01823.html#a4fbd3d92587a03f3871066968035f194\">GridView</a> = GV;</div>\n-<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> </div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\"> 72</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">size_type</a> = std::size_t;</div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Basis></div>\n+<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#abd7e25a89325dbe2232b17308dae45f2\"> 69</a></span><a class=\"code hl_class\" href=\"a01799.html\">SizeInfo<Basis></a> <a class=\"code hl_function\" href=\"a00219.html#abd7e25a89325dbe2232b17308dae45f2\">sizeInfo</a>(<span class=\"keyword\">const</span> Basis& basis)</div>\n+<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span>{</div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01799.html\">SizeInfo<Basis></a>(basis);</div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span>}</div>\n <div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> </div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#a8082f8fdbed2c5236bd5a318dd05fe6a\"> 75</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01819.html\">Node</a> = <a class=\"code hl_class\" href=\"a01819.html\">TaylorHoodBasisTree<GV></a>;</div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> </div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#aa392e5ef9f61616b5761fe47dec36471\"> 77</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">size_type</a> <a class=\"code hl_variable\" href=\"a01823.html#aa392e5ef9f61616b5761fe47dec36471\">maxMultiIndexSize</a> = useHybridIndices ? 3 : 2;</div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#a2ab779870149b404f47be6e5550257ea\"> 78</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">size_type</a> <a class=\"code hl_variable\" href=\"a01823.html#a2ab779870149b404f47be6e5550257ea\">minMultiIndexSize</a> = 2;</div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#ac232b435a11882f871f15bb1dc9b70aa\"> 79</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">size_type</a> <a class=\"code hl_variable\" href=\"a01823.html#ac232b435a11882f871f15bb1dc9b70aa\">multiIndexBufferSize</a> = <a class=\"code hl_variable\" href=\"a01823.html#aa392e5ef9f61616b5761fe47dec36471\">maxMultiIndexSize</a>;</div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> </div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span><span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> </div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01671.html\">PQ1PreBasis</a> = <a class=\"code hl_class\" href=\"a01671.html\">LagrangePreBasis<GV,1></a>;</div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01671.html\">PQ2PreBasis</a> = <a class=\"code hl_class\" href=\"a01671.html\">LagrangePreBasis<GV,2></a>;</div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> </div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> </div>\n-<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#a12fa8eb410a271861631e77ada59b3ba\"> 89</a></span> <a class=\"code hl_function\" href=\"a01823.html#a12fa8eb410a271861631e77ada59b3ba\">TaylorHoodPreBasis</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01823.html#a4fbd3d92587a03f3871066968035f194\">GridView</a>& gv) :</div>\n-<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> <a class=\"code hl_variable\" href=\"a01823.html#a4ba12b2015f3761ec28e95b3a120cffb\">gridView_</a>(gv),</div>\n-<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> <a class=\"code hl_variable\" href=\"a01823.html#a9d26725c5f9e2f84e0b504c3bffcfe42\">pq1PreBasis_</a>(gv),</div>\n-<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> <a class=\"code hl_variable\" href=\"a01823.html#a86ed45c92fecf521019dcc18d90dc4d3\">pq2PreBasis_</a>(gv)</div>\n-<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> {}</div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> </div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#ae9dddae8c0e1f977aee5acbcaef8cca7\"> 96</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01823.html#ae9dddae8c0e1f977aee5acbcaef8cca7\">initializeIndices</a>()</div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> {</div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> <a class=\"code hl_variable\" href=\"a01823.html#a9d26725c5f9e2f84e0b504c3bffcfe42\">pq1PreBasis_</a>.<a class=\"code hl_function\" href=\"a01671.html#a7318cbabd5f57d0b6cbab1b2dc41fff8\">initializeIndices</a>();</div>\n-<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> <a class=\"code hl_variable\" href=\"a01823.html#a86ed45c92fecf521019dcc18d90dc4d3\">pq2PreBasis_</a>.<a class=\"code hl_function\" href=\"a01671.html#a7318cbabd5f57d0b6cbab1b2dc41fff8\">initializeIndices</a>();</div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> }</div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> </div>\n-<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#a18a80001dfe453ce542ab7896e27c10e\"> 103</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01823.html#a4fbd3d92587a03f3871066968035f194\">GridView</a>& <a class=\"code hl_function\" href=\"a01823.html#a18a80001dfe453ce542ab7896e27c10e\">gridView</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01823.html#a4ba12b2015f3761ec28e95b3a120cffb\">gridView_</a>;</div>\n-<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> }</div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> </div>\n-<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#a6f5f71bba7ced2b2a1fe84798bd39e81\"> 109</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01823.html#a6f5f71bba7ced2b2a1fe84798bd39e81\">update</a> (<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01823.html#a4fbd3d92587a03f3871066968035f194\">GridView</a>& gv)</div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> {</div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> <a class=\"code hl_variable\" href=\"a01823.html#a9d26725c5f9e2f84e0b504c3bffcfe42\">pq1PreBasis_</a>.<a class=\"code hl_function\" href=\"a01671.html#a9a9c2b3c8b2b46160d68d46cd2ed2c00\">update</a>(gv);</div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> <a class=\"code hl_variable\" href=\"a01823.html#a86ed45c92fecf521019dcc18d90dc4d3\">pq2PreBasis_</a>.<a class=\"code hl_function\" href=\"a01671.html#a9a9c2b3c8b2b46160d68d46cd2ed2c00\">update</a>(gv);</div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> }</div>\n-<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> </div>\n-<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#ab02c713869cdc66f6a5baec76211773c\"> 118</a></span> <a class=\"code hl_class\" href=\"a01819.html\">Node</a> <a class=\"code hl_function\" href=\"a01823.html#ab02c713869cdc66f6a5baec76211773c\">makeNode</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01819.html\">Node</a>{};</div>\n-<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> }</div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> </div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#a91e51ff12e346b507bf0c538ea80f0de\"> 124</a></span> <a class=\"code hl_typedef\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">size_type</a> <a class=\"code hl_function\" href=\"a01823.html#a91e51ff12e346b507bf0c538ea80f0de\">size</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> <span class=\"keywordflow\">return</span> 2;</div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> }</div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> </div>\n-<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n-<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#a496ca50aeae7e9ac1e3cdb4e8118213d\"> 131</a></span> <a class=\"code hl_typedef\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">size_type</a> <a class=\"code hl_function\" href=\"a01823.html#a496ca50aeae7e9ac1e3cdb4e8118213d\">size</a>(<span class=\"keyword\">const</span> SizePrefix& prefix)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> <span class=\"keywordflow\">return</span> sizeImp<useHybridIndices>(prefix);</div>\n-<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> }</div>\n-<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> </div>\n-<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span><span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> </div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> <span class=\"keyword\">template</span><<span class=\"keywordtype\">bool</span> hi, <span class=\"keyword\">class </span>SizePrefix,</div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> <span class=\"keyword\">typename</span> std::enable_if<not hi,int>::type = 0></div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> <a class=\"code hl_typedef\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">size_type</a> sizeImp(<span class=\"keyword\">const</span> SizePrefix& prefix)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> <span class=\"keywordflow\">if</span> (prefix.size() == 0)</div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> <span class=\"keywordflow\">return</span> 2;</div>\n-<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> <span class=\"keywordflow\">if</span> (prefix.size() == 1)</div>\n-<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> {</div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> <span class=\"keywordflow\">if</span> (prefix[0] == 0)</div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> <span class=\"keywordflow\">return</span> dim * <a class=\"code hl_variable\" href=\"a01823.html#a86ed45c92fecf521019dcc18d90dc4d3\">pq2PreBasis_</a>.<a class=\"code hl_function\" href=\"a01671.html#adabf2688eef2d33a180ae9cfbde492b1\">size</a>();</div>\n-<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> <span class=\"keywordflow\">if</span> (prefix[0] == 1)</div>\n-<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01823.html#a9d26725c5f9e2f84e0b504c3bffcfe42\">pq1PreBasis_</a>.<a class=\"code hl_function\" href=\"a01671.html#adabf2688eef2d33a180ae9cfbde492b1\">size</a>();</div>\n-<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> }</div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> assert(prefix.size() == 2);</div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> <span class=\"keywordflow\">return</span> 0;</div>\n-<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> }</div>\n-<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> </div>\n-<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> <span class=\"keyword\">template</span><<span class=\"keywordtype\">bool</span> hi, <span class=\"keyword\">class </span>SizePrefix,</div>\n-<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> <span class=\"keyword\">typename</span> std::enable_if<hi,int>::type = 0></div>\n-<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> <a class=\"code hl_typedef\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">size_type</a> sizeImp(<span class=\"keyword\">const</span> SizePrefix& prefix)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> <span class=\"keywordflow\">if</span> (prefix.size() == 0)</div>\n-<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> <span class=\"keywordflow\">return</span> 2;</div>\n-<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> <span class=\"keywordflow\">if</span> (prefix.size() == 1)</div>\n-<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> {</div>\n-<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> <span class=\"keywordflow\">if</span> (prefix[0] == 0)</div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01823.html#a86ed45c92fecf521019dcc18d90dc4d3\">pq2PreBasis_</a>.<a class=\"code hl_function\" href=\"a01671.html#adabf2688eef2d33a180ae9cfbde492b1\">size</a>();</div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> <span class=\"keywordflow\">if</span> (prefix[0] == 1)</div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01823.html#a9d26725c5f9e2f84e0b504c3bffcfe42\">pq1PreBasis_</a>.<a class=\"code hl_function\" href=\"a01671.html#adabf2688eef2d33a180ae9cfbde492b1\">size</a>();</div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> }</div>\n-<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> <span class=\"keywordflow\">if</span> (prefix.size() == 2)</div>\n-<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> {</div>\n-<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> <span class=\"keywordflow\">if</span> (prefix[0] == 0)</div>\n-<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> <span class=\"keywordflow\">return</span> dim;</div>\n-<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> <span class=\"keywordflow\">if</span> (prefix[0] == 1)</div>\n-<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> <span class=\"keywordflow\">return</span> 0;</div>\n-<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> }</div>\n-<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> assert(prefix.size() == 3);</div>\n-<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> <span class=\"keywordflow\">return</span> 0;</div>\n-<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> }</div>\n-<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> </div>\n-<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> </div>\n-<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#a93d67530c52138ed6cdf815a4b657eaf\"> 182</a></span> <a class=\"code hl_typedef\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">size_type</a> <a class=\"code hl_function\" href=\"a01823.html#a93d67530c52138ed6cdf815a4b657eaf\">dimension</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span> <span class=\"keywordflow\">return</span> dim * <a class=\"code hl_variable\" href=\"a01823.html#a86ed45c92fecf521019dcc18d90dc4d3\">pq2PreBasis_</a>.<a class=\"code hl_function\" href=\"a01671.html#adabf2688eef2d33a180ae9cfbde492b1\">size</a>() + <a class=\"code hl_variable\" href=\"a01823.html#a9d26725c5f9e2f84e0b504c3bffcfe42\">pq1PreBasis_</a>.<a class=\"code hl_function\" href=\"a01671.html#adabf2688eef2d33a180ae9cfbde492b1\">size</a>();</div>\n-<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> }</div>\n-<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> </div>\n-<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#aeebe78092668f359c8a790810f413372\"> 188</a></span> <a class=\"code hl_typedef\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">size_type</a> <a class=\"code hl_function\" href=\"a01823.html#aeebe78092668f359c8a790810f413372\">maxNodeSize</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span> <span class=\"keywordflow\">return</span> dim * <a class=\"code hl_variable\" href=\"a01823.html#a86ed45c92fecf521019dcc18d90dc4d3\">pq2PreBasis_</a>.<a class=\"code hl_function\" href=\"a01671.html#ac91dcb0f3589b23598df3ced95d50d0c\">maxNodeSize</a>() + <a class=\"code hl_variable\" href=\"a01823.html#a9d26725c5f9e2f84e0b504c3bffcfe42\">pq1PreBasis_</a>.<a class=\"code hl_function\" href=\"a01671.html#ac91dcb0f3589b23598df3ced95d50d0c\">maxNodeSize</a>();</div>\n-<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> }</div>\n-<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> </div>\n-<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n-<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#ab5bb04fffb5031fd76d11efcf28d738b\"> 194</a></span> It <a class=\"code hl_function\" href=\"a01823.html#ab5bb04fffb5031fd76d11efcf28d738b\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01819.html\">Node</a>& node, It it)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> <span class=\"keywordflow\">return</span> indicesImp<useHybridIndices>(node, it);</div>\n-<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> }</div>\n-<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> </div>\n-<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span><span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> </div>\n-<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> MultiIndex></div>\n-<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#a9ef33019c438c6bceea7d2b9c44df05a\"> 202</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01823.html#a9ef33019c438c6bceea7d2b9c44df05a\">multiIndexPushFront</a>(MultiIndex& M, <a class=\"code hl_typedef\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">size_type</a> M0)</div>\n-<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> {</div>\n-<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> M.resize(M.size()+1);</div>\n-<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span> <span class=\"keywordflow\">for</span>(std::size_t i=M.size()-1; i>0; --i)</div>\n-<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> M[i] = M[i-1];</div>\n-<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> M[0] = M0;</div>\n-<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span> }</div>\n-<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> </div>\n-<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> <span class=\"keyword\">template</span><<span class=\"keywordtype\">bool</span> hi, <span class=\"keyword\">class </span>It,</div>\n-<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> <span class=\"keyword\">typename</span> std::enable_if<not hi,int>::type = 0></div>\n-<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#af9b43f29d448a89030668dc23ecfbade\"> 212</a></span> It <a class=\"code hl_function\" href=\"a01823.html#af9b43f29d448a89030668dc23ecfbade\">indicesImp</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01819.html\">Node</a>& node, It multiIndices)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> <span class=\"keyword\">using namespace </span>Dune::Indices;</div>\n-<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> <span class=\"keywordflow\">for</span>(std::size_t child=0; child<dim; ++child)</div>\n-<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span> {</div>\n-<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> <a class=\"code hl_typedef\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">size_type</a> subTreeSize = node.child(_0, 0).<a class=\"code hl_function\" href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">size</a>();</div>\n-<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> <a class=\"code hl_variable\" href=\"a01823.html#a86ed45c92fecf521019dcc18d90dc4d3\">pq2PreBasis_</a>.<a class=\"code hl_function\" href=\"a01671.html#a45c031d3793e53e9413b86d49bffa5b0\">indices</a>(node.child(_0, 0), multiIndices);</div>\n-<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> <span class=\"keywordflow\">for</span> (std::size_t i = 0; i<subTreeSize; ++i)</div>\n-<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span> {</div>\n-<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> <a class=\"code hl_function\" href=\"a01823.html#a9ef33019c438c6bceea7d2b9c44df05a\">multiIndexPushFront</a>(multiIndices[i], 0);</div>\n-<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span> multiIndices[i][1] = multiIndices[i][1]*dim + child;</div>\n-<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> }</div>\n-<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> multiIndices += subTreeSize;</div>\n-<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span> }</div>\n-<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> <a class=\"code hl_typedef\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">size_type</a> subTreeSize = node.child(_1).<a class=\"code hl_function\" href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">size</a>();</div>\n-<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> <a class=\"code hl_variable\" href=\"a01823.html#a9d26725c5f9e2f84e0b504c3bffcfe42\">pq1PreBasis_</a>.<a class=\"code hl_function\" href=\"a01671.html#a45c031d3793e53e9413b86d49bffa5b0\">indices</a>(node.child(_1), multiIndices);</div>\n-<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> <span class=\"keywordflow\">for</span> (std::size_t i = 0; i<subTreeSize; ++i)</div>\n-<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> <a class=\"code hl_function\" href=\"a01823.html#a9ef33019c438c6bceea7d2b9c44df05a\">multiIndexPushFront</a>(multiIndices[i], 1);</div>\n-<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span> multiIndices += subTreeSize;</div>\n-<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span> <span class=\"keywordflow\">return</span> multiIndices;</div>\n-<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> }</div>\n-<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> </div>\n-<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> <span class=\"keyword\">template</span><<span class=\"keywordtype\">bool</span> hi, <span class=\"keyword\">class </span>It,</div>\n-<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> <span class=\"keyword\">typename</span> std::enable_if<hi,int>::type = 0></div>\n-<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#af9b43f29d448a89030668dc23ecfbade\"> 236</a></span> It <a class=\"code hl_function\" href=\"a01823.html#af9b43f29d448a89030668dc23ecfbade\">indicesImp</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01819.html\">Node</a>& node, It multiIndices)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span> <span class=\"keyword\">using namespace </span>Dune::Indices;</div>\n-<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span> <span class=\"keywordflow\">for</span>(std::size_t child=0; child<dim; ++child)</div>\n-<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"> 240</span> {</div>\n-<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span> <a class=\"code hl_typedef\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">size_type</a> subTreeSize = node.child(_0, 0).<a class=\"code hl_function\" href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">size</a>();</div>\n-<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span> <a class=\"code hl_variable\" href=\"a01823.html#a86ed45c92fecf521019dcc18d90dc4d3\">pq2PreBasis_</a>.<a class=\"code hl_function\" href=\"a01671.html#a45c031d3793e53e9413b86d49bffa5b0\">indices</a>(node.child(_0, 0), multiIndices);</div>\n-<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> <span class=\"keywordflow\">for</span> (std::size_t i = 0; i<subTreeSize; ++i)</div>\n-<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> {</div>\n-<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> <a class=\"code hl_function\" href=\"a01823.html#a9ef33019c438c6bceea7d2b9c44df05a\">multiIndexPushFront</a>(multiIndices[i], 0);</div>\n-<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span> multiIndices[i].push_back(i);</div>\n-<div class=\"line\"><a id=\"l00247\" name=\"l00247\"></a><span class=\"lineno\"> 247</span> }</div>\n-<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"> 248</span> multiIndices += subTreeSize;</div>\n-<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span> }</div>\n-<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span> <a class=\"code hl_typedef\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">size_type</a> subTreeSize = node.child(_1).<a class=\"code hl_function\" href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">size</a>();</div>\n-<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span> <a class=\"code hl_variable\" href=\"a01823.html#a9d26725c5f9e2f84e0b504c3bffcfe42\">pq1PreBasis_</a>.<a class=\"code hl_function\" href=\"a01671.html#a45c031d3793e53e9413b86d49bffa5b0\">indices</a>(node.child(_1), multiIndices);</div>\n-<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span> <span class=\"keywordflow\">for</span> (std::size_t i = 0; i<subTreeSize; ++i)</div>\n-<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"> 253</span> <a class=\"code hl_function\" href=\"a01823.html#a9ef33019c438c6bceea7d2b9c44df05a\">multiIndexPushFront</a>(multiIndices[i], 1);</div>\n-<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"> 254</span> multiIndices += subTreeSize;</div>\n-<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span> <span class=\"keywordflow\">return</span> multiIndices;</div>\n-<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"> 256</span> }</div>\n-<div class=\"line\"><a id=\"l00257\" name=\"l00257\"></a><span class=\"lineno\"> 257</span> </div>\n-<div class=\"line\"><a id=\"l00258\" name=\"l00258\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#a4ba12b2015f3761ec28e95b3a120cffb\"> 258</a></span> <a class=\"code hl_typedef\" href=\"a01823.html#a4fbd3d92587a03f3871066968035f194\">GridView</a> <a class=\"code hl_variable\" href=\"a01823.html#a4ba12b2015f3761ec28e95b3a120cffb\">gridView_</a>;</div>\n-<div class=\"line\"><a id=\"l00259\" name=\"l00259\"></a><span class=\"lineno\"> 259</span> </div>\n-<div class=\"line\"><a id=\"l00260\" name=\"l00260\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#a9d26725c5f9e2f84e0b504c3bffcfe42\"> 260</a></span> <a class=\"code hl_class\" href=\"a01671.html\">PQ1PreBasis</a> <a class=\"code hl_variable\" href=\"a01823.html#a9d26725c5f9e2f84e0b504c3bffcfe42\">pq1PreBasis_</a>;</div>\n-<div class=\"line\"><a id=\"l00261\" name=\"l00261\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#a86ed45c92fecf521019dcc18d90dc4d3\"> 261</a></span> <a class=\"code hl_class\" href=\"a01671.html\">PQ2PreBasis</a> <a class=\"code hl_variable\" href=\"a01823.html#a86ed45c92fecf521019dcc18d90dc4d3\">pq2PreBasis_</a>;</div>\n-<div class=\"line\"><a id=\"l00262\" name=\"l00262\"></a><span class=\"lineno\"> 262</span>};</div>\n-<div class=\"line\"><a id=\"l00263\" name=\"l00263\"></a><span class=\"lineno\"> 263</span> </div>\n-<div class=\"line\"><a id=\"l00264\" name=\"l00264\"></a><span class=\"lineno\"> 264</span> </div>\n-<div class=\"line\"><a id=\"l00265\" name=\"l00265\"></a><span class=\"lineno\"> 265</span> </div>\n-<div class=\"line\"><a id=\"l00266\" name=\"l00266\"></a><span class=\"lineno\"> 266</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV></div>\n-<div class=\"line\"><a id=\"l00267\" name=\"l00267\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01815.html\"> 267</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01815.html\">TaylorHoodVelocityTree</a> :</div>\n-<div class=\"line\"><a id=\"l00268\" name=\"l00268\"></a><span class=\"lineno\"> 268</span> <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01715.html\">PowerBasisNode</a><LagrangeNode<GV,2>, GV::dimension></div>\n-<div class=\"line\"><a id=\"l00269\" name=\"l00269\"></a><span class=\"lineno\"> 269</span>{</div>\n-<div class=\"line\"><a id=\"l00270\" name=\"l00270\"></a><span class=\"lineno\"> 270</span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01667.html\">PQ2Node</a> = <a class=\"code hl_class\" href=\"a01667.html\">LagrangeNode<GV,2></a>;</div>\n-<div class=\"line\"><a id=\"l00271\" name=\"l00271\"></a><span class=\"lineno\"> 271</span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01715.html\">Base</a> = <a class=\"code hl_class\" href=\"a01715.html\">PowerBasisNode<PQ2Node, GV::dimension></a>;</div>\n-<div class=\"line\"><a id=\"l00272\" name=\"l00272\"></a><span class=\"lineno\"> 272</span> </div>\n-<div class=\"line\"><a id=\"l00273\" name=\"l00273\"></a><span class=\"lineno\"> 273</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00274\" name=\"l00274\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01815.html#a0be9d13cf09261281b9fe16187e90bff\"> 274</a></span> <a class=\"code hl_function\" href=\"a01815.html#a0be9d13cf09261281b9fe16187e90bff\">TaylorHoodVelocityTree</a>()</div>\n-<div class=\"line\"><a id=\"l00275\" name=\"l00275\"></a><span class=\"lineno\"> 275</span> {</div>\n-<div class=\"line\"><a id=\"l00276\" name=\"l00276\"></a><span class=\"lineno\"> 276</span> <span class=\"keywordflow\">for</span>(<span class=\"keywordtype\">int</span> i=0; i<GV::dimension; ++i)</div>\n-<div class=\"line\"><a id=\"l00277\" name=\"l00277\"></a><span class=\"lineno\"> 277</span> this->setChild(i, std::make_shared<PQ2Node>());</div>\n-<div class=\"line\"><a id=\"l00278\" name=\"l00278\"></a><span class=\"lineno\"> 278</span> }</div>\n-<div class=\"line\"><a id=\"l00279\" name=\"l00279\"></a><span class=\"lineno\"> 279</span>};</div>\n-<div class=\"line\"><a id=\"l00280\" name=\"l00280\"></a><span class=\"lineno\"> 280</span> </div>\n-<div class=\"line\"><a id=\"l00281\" name=\"l00281\"></a><span class=\"lineno\"> 281</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV></div>\n-<div class=\"line\"><a id=\"l00282\" name=\"l00282\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01819.html\"> 282</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01819.html\">TaylorHoodBasisTree</a> :</div>\n-<div class=\"line\"><a id=\"l00283\" name=\"l00283\"></a><span class=\"lineno\"> 283</span> <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01719.html\">CompositeBasisNode</a><</div>\n-<div class=\"line\"><a id=\"l00284\" name=\"l00284\"></a><span class=\"lineno\"> 284</span> TaylorHoodVelocityTree<GV>,</div>\n-<div class=\"line\"><a id=\"l00285\" name=\"l00285\"></a><span class=\"lineno\"> 285</span> LagrangeNode<GV,1></div>\n-<div class=\"line\"><a id=\"l00286\" name=\"l00286\"></a><span class=\"lineno\"> 286</span> ></div>\n-<div class=\"line\"><a id=\"l00287\" name=\"l00287\"></a><span class=\"lineno\"> 287</span>{</div>\n-<div class=\"line\"><a id=\"l00288\" name=\"l00288\"></a><span class=\"lineno\"> 288</span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01815.html\">VelocityNode</a>=<a class=\"code hl_class\" href=\"a01815.html\">TaylorHoodVelocityTree<GV></a>;</div>\n-<div class=\"line\"><a id=\"l00289\" name=\"l00289\"></a><span class=\"lineno\"> 289</span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01667.html\">PressureNode</a>=<a class=\"code hl_class\" href=\"a01667.html\">LagrangeNode<GV,1></a>;</div>\n-<div class=\"line\"><a id=\"l00290\" name=\"l00290\"></a><span class=\"lineno\"> 290</span> </div>\n-<div class=\"line\"><a id=\"l00291\" name=\"l00291\"></a><span class=\"lineno\"> 291</span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01719.html\">Base</a>=<a class=\"code hl_class\" href=\"a01719.html\">CompositeBasisNode<VelocityNode, PressureNode></a>;</div>\n-<div class=\"line\"><a id=\"l00292\" name=\"l00292\"></a><span class=\"lineno\"> 292</span> </div>\n-<div class=\"line\"><a id=\"l00293\" name=\"l00293\"></a><span class=\"lineno\"> 293</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00294\" name=\"l00294\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01819.html#a046d55e939cbff7263d0df1e2b8e6356\"> 294</a></span> <a class=\"code hl_function\" href=\"a01819.html#a046d55e939cbff7263d0df1e2b8e6356\">TaylorHoodBasisTree</a>()</div>\n-<div class=\"line\"><a id=\"l00295\" name=\"l00295\"></a><span class=\"lineno\"> 295</span> {</div>\n-<div class=\"line\"><a id=\"l00296\" name=\"l00296\"></a><span class=\"lineno\"> 296</span> this-><span class=\"keyword\">template</span> setChild<0>(std::make_shared<VelocityNode>());</div>\n-<div class=\"line\"><a id=\"l00297\" name=\"l00297\"></a><span class=\"lineno\"> 297</span> this-><span class=\"keyword\">template</span> setChild<1>(std::make_shared<PressureNode>());</div>\n-<div class=\"line\"><a id=\"l00298\" name=\"l00298\"></a><span class=\"lineno\"> 298</span> }</div>\n-<div class=\"line\"><a id=\"l00299\" name=\"l00299\"></a><span class=\"lineno\"> 299</span>};</div>\n-<div class=\"line\"><a id=\"l00300\" name=\"l00300\"></a><span class=\"lineno\"> 300</span> </div>\n-<div class=\"line\"><a id=\"l00301\" name=\"l00301\"></a><span class=\"lineno\"> 301</span> </div>\n-<div class=\"line\"><a id=\"l00302\" name=\"l00302\"></a><span class=\"lineno\"> 302</span> </div>\n-<div class=\"line\"><a id=\"l00303\" name=\"l00303\"></a><span class=\"lineno\"> 303</span><span class=\"keyword\">namespace </span>BasisFactory {</div>\n-<div class=\"line\"><a id=\"l00304\" name=\"l00304\"></a><span class=\"lineno\"> 304</span> </div>\n-<div class=\"line\"><a id=\"l00311\" name=\"l00311\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#ga2384fc6a8ee2005fb29adb7221609ce3\"> 311</a></span><span class=\"keyword\">inline</span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00213.html#ga2384fc6a8ee2005fb29adb7221609ce3\">taylorHood</a>()</div>\n-<div class=\"line\"><a id=\"l00312\" name=\"l00312\"></a><span class=\"lineno\"> 312</span>{</div>\n-<div class=\"line\"><a id=\"l00313\" name=\"l00313\"></a><span class=\"lineno\"> 313</span> <span class=\"keywordflow\">return</span> [](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridView) {</div>\n-<div class=\"line\"><a id=\"l00314\" name=\"l00314\"></a><span class=\"lineno\"> 314</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01823.html\">TaylorHoodPreBasis</a><std::decay_t<<span class=\"keyword\">decltype</span>(gridView)>>(gridView);</div>\n-<div class=\"line\"><a id=\"l00315\" name=\"l00315\"></a><span class=\"lineno\"> 315</span> };</div>\n-<div class=\"line\"><a id=\"l00316\" name=\"l00316\"></a><span class=\"lineno\"> 316</span>}</div>\n-<div class=\"line\"><a id=\"l00317\" name=\"l00317\"></a><span class=\"lineno\"> 317</span> </div>\n-<div class=\"line\"><a id=\"l00318\" name=\"l00318\"></a><span class=\"lineno\"> 318</span>} <span class=\"comment\">// end namespace BasisFactory</span></div>\n-<div class=\"line\"><a id=\"l00319\" name=\"l00319\"></a><span class=\"lineno\"> 319</span> </div>\n-<div class=\"line\"><a id=\"l00320\" name=\"l00320\"></a><span class=\"lineno\"> 320</span><span class=\"comment\">// *****************************************************************************</span></div>\n-<div class=\"line\"><a id=\"l00321\" name=\"l00321\"></a><span class=\"lineno\"> 321</span><span class=\"comment\">// This is the actual global basis implementation based on the reusable parts.</span></div>\n-<div class=\"line\"><a id=\"l00322\" name=\"l00322\"></a><span class=\"lineno\"> 322</span><span class=\"comment\">// *****************************************************************************</span></div>\n-<div class=\"line\"><a id=\"l00323\" name=\"l00323\"></a><span class=\"lineno\"> 323</span> </div>\n-<div class=\"line\"><a id=\"l00345\" name=\"l00345\"></a><span class=\"lineno\"> 345</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV></div>\n-<div class=\"line\"><a id=\"l00346\" name=\"l00346\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#ga2ddcf1f3f5bddd7f49ab4d81472aa69a\"> 346</a></span><span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01555.html\">TaylorHoodBasis</a> = <a class=\"code hl_class\" href=\"a01555.html\">DefaultGlobalBasis<TaylorHoodPreBasis<GV></a> >;</div>\n-<div class=\"line\"><a id=\"l00347\" name=\"l00347\"></a><span class=\"lineno\"> 347</span> </div>\n-<div class=\"line\"><a id=\"l00348\" name=\"l00348\"></a><span class=\"lineno\"> 348</span> </div>\n-<div class=\"line\"><a id=\"l00349\" name=\"l00349\"></a><span class=\"lineno\"> 349</span> </div>\n-<div class=\"line\"><a id=\"l00350\" name=\"l00350\"></a><span class=\"lineno\"> 350</span>} <span class=\"comment\">// end namespace Functions</span></div>\n-<div class=\"line\"><a id=\"l00351\" name=\"l00351\"></a><span class=\"lineno\"> 351</span>} <span class=\"comment\">// end namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00352\" name=\"l00352\"></a><span class=\"lineno\"> 352</span> </div>\n-<div class=\"line\"><a id=\"l00353\" name=\"l00353\"></a><span class=\"lineno\"> 353</span> </div>\n-<div class=\"line\"><a id=\"l00354\" name=\"l00354\"></a><span class=\"lineno\"> 354</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH</span></div>\n-<div class=\"ttc\" id=\"aa00119_html\"><div class=\"ttname\"><a href=\"a00119.html\">defaultglobalbasis.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00125_html\"><div class=\"ttname\"><a href=\"a00125.html\">lagrangebasis.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00191_html\"><div class=\"ttname\"><a href=\"a00191.html\">nodes.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00213_html_ga2384fc6a8ee2005fb29adb7221609ce3\"><div class=\"ttname\"><a href=\"a00213.html#ga2384fc6a8ee2005fb29adb7221609ce3\">Dune::Functions::BasisFactory::taylorHood</a></div><div class=\"ttdeci\">auto taylorHood()</div><div class=\"ttdoc\">Create a pre-basis factory that can create a Taylor-Hood pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:311</div></div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> </div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> </div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span>} <span class=\"comment\">// end namespace Functions</span></div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span>} <span class=\"comment\">// end namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> </div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH</span></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa01555_html\"><div class=\"ttname\"><a href=\"a01555.html\">Dune::Functions::DefaultGlobalBasis</a></div><div class=\"ttdoc\">Global basis for given pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:46</div></div>\n-<div class=\"ttc\" id=\"aa01667_html\"><div class=\"ttname\"><a href=\"a01667.html\">Dune::Functions::LagrangeNode</a></div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:387</div></div>\n-<div class=\"ttc\" id=\"aa01671_html\"><div class=\"ttname\"><a href=\"a01671.html\">Dune::Functions::LagrangePreBasis< GV, 1 ></a></div></div>\n-<div class=\"ttc\" id=\"aa01671_html_a45c031d3793e53e9413b86d49bffa5b0\"><div class=\"ttname\"><a href=\"a01671.html#a45c031d3793e53e9413b86d49bffa5b0\">Dune::Functions::LagrangePreBasis::indices</a></div><div class=\"ttdeci\">It indices(const Node &node, It it) const</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:192</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_a7318cbabd5f57d0b6cbab1b2dc41fff8\"><div class=\"ttname\"><a href=\"a01671.html#a7318cbabd5f57d0b6cbab1b2dc41fff8\">Dune::Functions::LagrangePreBasis::initializeIndices</a></div><div class=\"ttdeci\">void initializeIndices()</div><div class=\"ttdoc\">Initialize the global indices.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:96</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_a9a9c2b3c8b2b46160d68d46cd2ed2c00\"><div class=\"ttname\"><a href=\"a01671.html#a9a9c2b3c8b2b46160d68d46cd2ed2c00\">Dune::Functions::LagrangePreBasis::update</a></div><div class=\"ttdeci\">void update(const GridView &gv)</div><div class=\"ttdoc\">Update the stored grid view, to be called if the grid has changed.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:126</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_ac91dcb0f3589b23598df3ced95d50d0c\"><div class=\"ttname\"><a href=\"a01671.html#ac91dcb0f3589b23598df3ced95d50d0c\">Dune::Functions::LagrangePreBasis::maxNodeSize</a></div><div class=\"ttdeci\">size_type maxNodeSize() const</div><div class=\"ttdoc\">Get the maximal number of DOFs associated to node for any element.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:184</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_adabf2688eef2d33a180ae9cfbde492b1\"><div class=\"ttname\"><a href=\"a01671.html#adabf2688eef2d33a180ae9cfbde492b1\">Dune::Functions::LagrangePreBasis::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdoc\">Same as size(prefix) with empty prefix.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:140</div></div>\n-<div class=\"ttc\" id=\"aa01707_html_a859d50513645ef2ea0188d0779c1df30\"><div class=\"ttname\"><a href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">Dune::Functions::BasisNodeMixin::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:142</div></div>\n-<div class=\"ttc\" id=\"aa01715_html\"><div class=\"ttname\"><a href=\"a01715.html\">Dune::Functions::PowerBasisNode</a></div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:193</div></div>\n-<div class=\"ttc\" id=\"aa01719_html\"><div class=\"ttname\"><a href=\"a01719.html\">Dune::Functions::CompositeBasisNode</a></div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:219</div></div>\n-<div class=\"ttc\" id=\"aa01815_html\"><div class=\"ttname\"><a href=\"a01815.html\">Dune::Functions::TaylorHoodVelocityTree</a></div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:269</div></div>\n-<div class=\"ttc\" id=\"aa01815_html_a0be9d13cf09261281b9fe16187e90bff\"><div class=\"ttname\"><a href=\"a01815.html#a0be9d13cf09261281b9fe16187e90bff\">Dune::Functions::TaylorHoodVelocityTree::TaylorHoodVelocityTree</a></div><div class=\"ttdeci\">TaylorHoodVelocityTree()</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:274</div></div>\n-<div class=\"ttc\" id=\"aa01819_html\"><div class=\"ttname\"><a href=\"a01819.html\">Dune::Functions::TaylorHoodBasisTree</a></div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:287</div></div>\n-<div class=\"ttc\" id=\"aa01819_html_a046d55e939cbff7263d0df1e2b8e6356\"><div class=\"ttname\"><a href=\"a01819.html#a046d55e939cbff7263d0df1e2b8e6356\">Dune::Functions::TaylorHoodBasisTree::TaylorHoodBasisTree</a></div><div class=\"ttdeci\">TaylorHoodBasisTree()</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:294</div></div>\n-<div class=\"ttc\" id=\"aa01823_html\"><div class=\"ttname\"><a href=\"a01823.html\">Dune::Functions::TaylorHoodPreBasis</a></div><div class=\"ttdoc\">Pre-basis for lowest order Taylor-Hood basis.</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:61</div></div>\n-<div class=\"ttc\" id=\"aa01823_html_a12fa8eb410a271861631e77ada59b3ba\"><div class=\"ttname\"><a href=\"a01823.html#a12fa8eb410a271861631e77ada59b3ba\">Dune::Functions::TaylorHoodPreBasis::TaylorHoodPreBasis</a></div><div class=\"ttdeci\">TaylorHoodPreBasis(const GridView &gv)</div><div class=\"ttdoc\">Constructor for a given grid view object.</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:89</div></div>\n-<div class=\"ttc\" id=\"aa01823_html_a18a80001dfe453ce542ab7896e27c10e\"><div class=\"ttname\"><a href=\"a01823.html#a18a80001dfe453ce542ab7896e27c10e\">Dune::Functions::TaylorHoodPreBasis::gridView</a></div><div class=\"ttdeci\">const GridView & gridView() const</div><div class=\"ttdoc\">Obtain the grid view that the basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:103</div></div>\n-<div class=\"ttc\" id=\"aa01823_html_a2ab779870149b404f47be6e5550257ea\"><div class=\"ttname\"><a href=\"a01823.html#a2ab779870149b404f47be6e5550257ea\">Dune::Functions::TaylorHoodPreBasis::minMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type minMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:78</div></div>\n-<div class=\"ttc\" id=\"aa01823_html_a496ca50aeae7e9ac1e3cdb4e8118213d\"><div class=\"ttname\"><a href=\"a01823.html#a496ca50aeae7e9ac1e3cdb4e8118213d\">Dune::Functions::TaylorHoodPreBasis::size</a></div><div class=\"ttdeci\">size_type size(const SizePrefix &prefix) const</div><div class=\"ttdoc\">Return number of possible values for next position in multi index.</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:131</div></div>\n-<div class=\"ttc\" id=\"aa01823_html_a4ba12b2015f3761ec28e95b3a120cffb\"><div class=\"ttname\"><a href=\"a01823.html#a4ba12b2015f3761ec28e95b3a120cffb\">Dune::Functions::TaylorHoodPreBasis::gridView_</a></div><div class=\"ttdeci\">GridView gridView_</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:258</div></div>\n-<div class=\"ttc\" id=\"aa01823_html_a4fbd3d92587a03f3871066968035f194\"><div class=\"ttname\"><a href=\"a01823.html#a4fbd3d92587a03f3871066968035f194\">Dune::Functions::TaylorHoodPreBasis::GridView</a></div><div class=\"ttdeci\">GV GridView</div><div class=\"ttdoc\">The grid view that the FE basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:69</div></div>\n-<div class=\"ttc\" id=\"aa01823_html_a6f5f71bba7ced2b2a1fe84798bd39e81\"><div class=\"ttname\"><a href=\"a01823.html#a6f5f71bba7ced2b2a1fe84798bd39e81\">Dune::Functions::TaylorHoodPreBasis::update</a></div><div class=\"ttdeci\">void update(const GridView &gv)</div><div class=\"ttdoc\">Update the stored grid view, to be called if the grid has changed.</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:109</div></div>\n-<div class=\"ttc\" id=\"aa01823_html_a86ed45c92fecf521019dcc18d90dc4d3\"><div class=\"ttname\"><a href=\"a01823.html#a86ed45c92fecf521019dcc18d90dc4d3\">Dune::Functions::TaylorHoodPreBasis::pq2PreBasis_</a></div><div class=\"ttdeci\">PQ2PreBasis pq2PreBasis_</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:261</div></div>\n-<div class=\"ttc\" id=\"aa01823_html_a91e51ff12e346b507bf0c538ea80f0de\"><div class=\"ttname\"><a href=\"a01823.html#a91e51ff12e346b507bf0c538ea80f0de\">Dune::Functions::TaylorHoodPreBasis::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdoc\">Same as size(prefix) with empty prefix.</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:124</div></div>\n-<div class=\"ttc\" id=\"aa01823_html_a93d67530c52138ed6cdf815a4b657eaf\"><div class=\"ttname\"><a href=\"a01823.html#a93d67530c52138ed6cdf815a4b657eaf\">Dune::Functions::TaylorHoodPreBasis::dimension</a></div><div class=\"ttdeci\">size_type dimension() const</div><div class=\"ttdoc\">Get the total dimension of the space spanned by this basis.</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:182</div></div>\n-<div class=\"ttc\" id=\"aa01823_html_a9d26725c5f9e2f84e0b504c3bffcfe42\"><div class=\"ttname\"><a href=\"a01823.html#a9d26725c5f9e2f84e0b504c3bffcfe42\">Dune::Functions::TaylorHoodPreBasis::pq1PreBasis_</a></div><div class=\"ttdeci\">PQ1PreBasis pq1PreBasis_</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:260</div></div>\n-<div class=\"ttc\" id=\"aa01823_html_a9ef33019c438c6bceea7d2b9c44df05a\"><div class=\"ttname\"><a href=\"a01823.html#a9ef33019c438c6bceea7d2b9c44df05a\">Dune::Functions::TaylorHoodPreBasis::multiIndexPushFront</a></div><div class=\"ttdeci\">static const void multiIndexPushFront(MultiIndex &M, size_type M0)</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:202</div></div>\n-<div class=\"ttc\" id=\"aa01823_html_aa392e5ef9f61616b5761fe47dec36471\"><div class=\"ttname\"><a href=\"a01823.html#aa392e5ef9f61616b5761fe47dec36471\">Dune::Functions::TaylorHoodPreBasis::maxMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type maxMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:77</div></div>\n-<div class=\"ttc\" id=\"aa01823_html_ab02c713869cdc66f6a5baec76211773c\"><div class=\"ttname\"><a href=\"a01823.html#ab02c713869cdc66f6a5baec76211773c\">Dune::Functions::TaylorHoodPreBasis::makeNode</a></div><div class=\"ttdeci\">Node makeNode() const</div><div class=\"ttdoc\">Create tree node.</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:118</div></div>\n-<div class=\"ttc\" id=\"aa01823_html_ab5bb04fffb5031fd76d11efcf28d738b\"><div class=\"ttname\"><a href=\"a01823.html#ab5bb04fffb5031fd76d11efcf28d738b\">Dune::Functions::TaylorHoodPreBasis::indices</a></div><div class=\"ttdeci\">It indices(const Node &node, It it) const</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:194</div></div>\n-<div class=\"ttc\" id=\"aa01823_html_ac232b435a11882f871f15bb1dc9b70aa\"><div class=\"ttname\"><a href=\"a01823.html#ac232b435a11882f871f15bb1dc9b70aa\">Dune::Functions::TaylorHoodPreBasis::multiIndexBufferSize</a></div><div class=\"ttdeci\">static constexpr size_type multiIndexBufferSize</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:79</div></div>\n-<div class=\"ttc\" id=\"aa01823_html_ae9dddae8c0e1f977aee5acbcaef8cca7\"><div class=\"ttname\"><a href=\"a01823.html#ae9dddae8c0e1f977aee5acbcaef8cca7\">Dune::Functions::TaylorHoodPreBasis::initializeIndices</a></div><div class=\"ttdeci\">void initializeIndices()</div><div class=\"ttdoc\">Initialize the global indices.</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:96</div></div>\n-<div class=\"ttc\" id=\"aa01823_html_aeebe78092668f359c8a790810f413372\"><div class=\"ttname\"><a href=\"a01823.html#aeebe78092668f359c8a790810f413372\">Dune::Functions::TaylorHoodPreBasis::maxNodeSize</a></div><div class=\"ttdeci\">size_type maxNodeSize() const</div><div class=\"ttdoc\">Get the maximal number of DOFs associated to node for any element.</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:188</div></div>\n-<div class=\"ttc\" id=\"aa01823_html_aeed4421421902dc5900eedca651e56b9\"><div class=\"ttname\"><a href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">Dune::Functions::TaylorHoodPreBasis::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdoc\">Type used for indices and size information.</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:72</div></div>\n-<div class=\"ttc\" id=\"aa01823_html_af9b43f29d448a89030668dc23ecfbade\"><div class=\"ttname\"><a href=\"a01823.html#af9b43f29d448a89030668dc23ecfbade\">Dune::Functions::TaylorHoodPreBasis::indicesImp</a></div><div class=\"ttdeci\">It indicesImp(const Node &node, It multiIndices) const</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:212</div></div>\n+<div class=\"ttc\" id=\"aa00219_html_abd7e25a89325dbe2232b17308dae45f2\"><div class=\"ttname\"><a href=\"a00219.html#abd7e25a89325dbe2232b17308dae45f2\">Dune::Functions::sizeInfo</a></div><div class=\"ttdeci\">SizeInfo< Basis > sizeInfo(const Basis &basis)</div><div class=\"ttdef\"><b>Definition:</b> sizeinfo.hh:69</div></div>\n+<div class=\"ttc\" id=\"aa01799_html\"><div class=\"ttname\"><a href=\"a01799.html\">Dune::Functions::SizeInfo</a></div><div class=\"ttdoc\">A class encapsulating size information.</div><div class=\"ttdef\"><b>Definition:</b> sizeinfo.hh:25</div></div>\n+<div class=\"ttc\" id=\"aa01799_html_a36c68248ee3be872cf53a7c8915773f2\"><div class=\"ttname\"><a href=\"a01799.html#a36c68248ee3be872cf53a7c8915773f2\">Dune::Functions::SizeInfo::SizePrefix</a></div><div class=\"ttdeci\">typename Basis::SizePrefix SizePrefix</div><div class=\"ttdef\"><b>Definition:</b> sizeinfo.hh:29</div></div>\n+<div class=\"ttc\" id=\"aa01799_html_a4f2343f16899076f68aa9dbeef992d80\"><div class=\"ttname\"><a href=\"a01799.html#a4f2343f16899076f68aa9dbeef992d80\">Dune::Functions::SizeInfo::size</a></div><div class=\"ttdeci\">size_type size(const SizePrefix &prefix) const</div><div class=\"ttdoc\">Return number possible values for next position in multi index.</div><div class=\"ttdef\"><b>Definition:</b> sizeinfo.hh:52</div></div>\n+<div class=\"ttc\" id=\"aa01799_html_a9c71fa33343b928c5b93e2c8dcb9595f\"><div class=\"ttname\"><a href=\"a01799.html#a9c71fa33343b928c5b93e2c8dcb9595f\">Dune::Functions::SizeInfo::operator()</a></div><div class=\"ttdeci\">size_type operator()(const SizePrefix &prefix) const</div><div class=\"ttdoc\">Return number possible values for next position in multi index.</div><div class=\"ttdef\"><b>Definition:</b> sizeinfo.hh:41</div></div>\n+<div class=\"ttc\" id=\"aa01799_html_a9d54b03391ba53f2cde374099ef62c21\"><div class=\"ttname\"><a href=\"a01799.html#a9d54b03391ba53f2cde374099ef62c21\">Dune::Functions::SizeInfo::size_type</a></div><div class=\"ttdeci\">typename Basis::size_type size_type</div><div class=\"ttdef\"><b>Definition:</b> sizeinfo.hh:28</div></div>\n+<div class=\"ttc\" id=\"aa01799_html_aa558e8687398c74affd92abb8af9bd58\"><div class=\"ttname\"><a href=\"a01799.html#aa558e8687398c74affd92abb8af9bd58\">Dune::Functions::SizeInfo::Basis</a></div><div class=\"ttdeci\">B Basis</div><div class=\"ttdef\"><b>Definition:</b> sizeinfo.hh:27</div></div>\n+<div class=\"ttc\" id=\"aa01799_html_ac3e18dc3b17c52eafe2e803562d72c5b\"><div class=\"ttname\"><a href=\"a01799.html#ac3e18dc3b17c52eafe2e803562d72c5b\">Dune::Functions::SizeInfo::SizeInfo</a></div><div class=\"ttdeci\">SizeInfo(const Basis &basis)</div><div class=\"ttdoc\">Construct from basis.</div><div class=\"ttdef\"><b>Definition:</b> sizeinfo.hh:34</div></div>\n+<div class=\"ttc\" id=\"aa01799_html_add41e7177edce69126ff66367bfef2fc\"><div class=\"ttname\"><a href=\"a01799.html#add41e7177edce69126ff66367bfef2fc\">Dune::Functions::SizeInfo::basis_</a></div><div class=\"ttdeci\">const Basis * basis_</div><div class=\"ttdef\"><b>Definition:</b> sizeinfo.hh:64</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,438 +5,101 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-taylorhoodbasis.hh\n+sizeinfo.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH\n- 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH\n+ 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH\n+ 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH\n 5\n- 6#include <dune/common/exceptions.hh>\n- 7#include <dune/common/reservedvector.hh>\n- 8#include <dune/common/indices.hh>\n- 9\n- 10#include <dune/typetree/powernode.hh>\n- 11#include <dune/typetree/compositenode.hh>\n+ 6#include <array>\n+ 7\n+ 8namespace Dune {\n+ 9namespace Functions {\n+ 10\n+ 11\n 12\n- 13#include <dune/functions/functionspacebases/nodes.hh>\n- 14\n- 15#include <dune/functions/functionspacebases/lagrangebasis.hh>\n- 16#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n- 17\n- 18namespace Dune {\n- 19namespace Functions {\n- 20\n- 21\n- 22/\n-/ *****************************************************************************\n- 23// This is the reusable part of the basis. It contains\n- 24//\n- 25// TaylorHoodPreBasis\n- 26// TaylorHoodBasisTree\n- 27// TaylorHoodVelocityTree\n- 28//\n- 29// The pre-basis allows to create the others and is the owner of possible\n-shared\n- 30// state. These components do _not_ depend on the global basis and local\n-view\n- 31// and can be used without a global basis.\n- 32/\n-/ *****************************************************************************\n- 33\n- 34template<typename GV>\n- 35class TaylorHoodVelocityTree;\n- 36\n- 37template<typename GV>\n- 38class TaylorHoodBasisTree;\n- 39\n- 59template<typename GV, bool HI=false>\n-60class TaylorHoodPreBasis\n- 61{\n- 62 static const bool useHybridIndices = HI;\n+ 23template<class B>\n+24class SizeInfo\n+ 25{\n+ 26public:\n+27 using Basis = B;\n+28 using size_type = typename Basis::size_type;\n+29 using SizePrefix = typename Basis::SizePrefix;\n+ 30\n+34 SizeInfo(const Basis& basis) :\n+ 35 basis_(&basis)\n+ 36 {}\n+ 37\n+41 size_type operator()(const SizePrefix& prefix) const\n+ 42 {\n+ 43 return basis_->size(prefix);\n+ 44 }\n+ 45\n+52 size_type size(const SizePrefix& prefix) const\n+ 53 {\n+ 54 return basis_->size(prefix);\n+ 55 }\n+ 56\n+57 operator size_type () const\n+ 58 {\n+ 59 return basis_->dimension();\n+ 60 }\n+ 61\n+ 62protected:\n 63\n- 64 static const int dim = GV::dimension;\n- 65\n- 66public:\n+64 const Basis* basis_;\n+ 65};\n+ 66\n 67\n-69 using GridView = GV;\n- 70\n-72 using size_type = std::size_t;\n+ 68template<class Basis>\n+69SizeInfo<Basis> sizeInfo(const Basis& basis)\n+ 70{\n+ 71 return SizeInfo<Basis>(basis);\n+ 72}\n 73\n-75 using Node = TaylorHoodBasisTree<GV>;\n- 76\n-77 static constexpr size_type maxMultiIndexSize = useHybridIndices ? 3 : 2;\n-78 static constexpr size_type minMultiIndexSize = 2;\n-79 static constexpr size_type multiIndexBufferSize = maxMultiIndexSize;\n- 80\n- 81private:\n- 82\n- 83 using PQ1PreBasis = LagrangePreBasis<GV,1>;\n- 84 using PQ2PreBasis = LagrangePreBasis<GV,2>;\n- 85\n- 86public:\n- 87\n-89 TaylorHoodPreBasis(const GridView& gv) :\n- 90 gridView_(gv),\n- 91 pq1PreBasis_(gv),\n- 92 pq2PreBasis_(gv)\n- 93 {}\n- 94\n-96 void initializeIndices()\n- 97 {\n- 98 pq1PreBasis_.initializeIndices();\n- 99 pq2PreBasis_.initializeIndices();\n- 100 }\n- 101\n-103 const GridView& gridView() const\n- 104 {\n- 105 return gridView_;\n- 106 }\n- 107\n-109 void update (const GridView& gv)\n- 110 {\n- 111 pq1PreBasis_.update(gv);\n- 112 pq2PreBasis_.update(gv);\n- 113 }\n- 114\n-118 Node makeNode() const\n- 119 {\n- 120 return Node{};\n- 121 }\n- 122\n-124 size_type size() const\n- 125 {\n- 126 return 2;\n- 127 }\n- 128\n- 130 template<class SizePrefix>\n-131 size_type size(const SizePrefix& prefix) const\n- 132 {\n- 133 return sizeImp<useHybridIndices>(prefix);\n- 134 }\n- 135\n- 136private:\n- 137\n- 138 template<bool hi, class SizePrefix,\n- 139 typename std::enable_if<not hi,int>::type = 0>\n- 140 size_type sizeImp(const SizePrefix& prefix) const\n- 141 {\n- 142 if (prefix.size() == 0)\n- 143 return 2;\n- 144 if (prefix.size() == 1)\n- 145 {\n- 146 if (prefix[0] == 0)\n- 147 return dim * pq2PreBasis_.size();\n- 148 if (prefix[0] == 1)\n- 149 return pq1PreBasis_.size();\n- 150 }\n- 151 assert(prefix.size() == 2);\n- 152 return 0;\n- 153 }\n- 154\n- 155 template<bool hi, class SizePrefix,\n- 156 typename std::enable_if<hi,int>::type = 0>\n- 157 size_type sizeImp(const SizePrefix& prefix) const\n- 158 {\n- 159 if (prefix.size() == 0)\n- 160 return 2;\n- 161 if (prefix.size() == 1)\n- 162 {\n- 163 if (prefix[0] == 0)\n- 164 return pq2PreBasis_.size();\n- 165 if (prefix[0] == 1)\n- 166 return pq1PreBasis_.size();\n- 167 }\n- 168 if (prefix.size() == 2)\n- 169 {\n- 170 if (prefix[0] == 0)\n- 171 return dim;\n- 172 if (prefix[0] == 1)\n- 173 return 0;\n- 174 }\n- 175 assert(prefix.size() == 3);\n- 176 return 0;\n- 177 }\n- 178\n- 179public:\n- 180\n-182 size_type dimension() const\n- 183 {\n- 184 return dim * pq2PreBasis_.size() + pq1PreBasis_.size();\n- 185 }\n- 186\n-188 size_type maxNodeSize() const\n- 189 {\n- 190 return dim * pq2PreBasis_.maxNodeSize() + pq1PreBasis_.maxNodeSize();\n- 191 }\n- 192\n- 193 template<typename It>\n-194 It indices(const Node& node, It it) const\n- 195 {\n- 196 return indicesImp<useHybridIndices>(node, it);\n- 197 }\n- 198\n- 199protected:\n- 200\n- 201 template<class MultiIndex>\n-202 static const void multiIndexPushFront(MultiIndex& M, size_type M0)\n- 203 {\n- 204 M.resize(M.size()+1);\n- 205 for(std::size_t i=M.size()-1; i>0; --i)\n- 206 M[i] = M[i-1];\n- 207 M[0] = M0;\n- 208 }\n- 209\n- 210 template<bool hi, class It,\n- 211 typename std::enable_if<not hi,int>::type = 0>\n-212 It indicesImp(const Node& node, It multiIndices) const\n- 213 {\n- 214 using namespace Dune::Indices;\n- 215 for(std::size_t child=0; child<dim; ++child)\n- 216 {\n- 217 size_type subTreeSize = node.child(_0, 0).size();\n- 218 pq2PreBasis_.indices(node.child(_0, 0), multiIndices);\n- 219 for (std::size_t i = 0; i<subTreeSize; ++i)\n- 220 {\n- 221 multiIndexPushFront(multiIndices[i], 0);\n- 222 multiIndices[i][1] = multiIndices[i][1]*dim + child;\n- 223 }\n- 224 multiIndices += subTreeSize;\n- 225 }\n- 226 size_type subTreeSize = node.child(_1).size();\n- 227 pq1PreBasis_.indices(node.child(_1), multiIndices);\n- 228 for (std::size_t i = 0; i<subTreeSize; ++i)\n- 229 multiIndexPushFront(multiIndices[i], 1);\n- 230 multiIndices += subTreeSize;\n- 231 return multiIndices;\n- 232 }\n- 233\n- 234 template<bool hi, class It,\n- 235 typename std::enable_if<hi,int>::type = 0>\n-236 It indicesImp(const Node& node, It multiIndices) const\n- 237 {\n- 238 using namespace Dune::Indices;\n- 239 for(std::size_t child=0; child<dim; ++child)\n- 240 {\n- 241 size_type subTreeSize = node.child(_0, 0).size();\n- 242 pq2PreBasis_.indices(node.child(_0, 0), multiIndices);\n- 243 for (std::size_t i = 0; i<subTreeSize; ++i)\n- 244 {\n- 245 multiIndexPushFront(multiIndices[i], 0);\n- 246 multiIndices[i].push_back(i);\n- 247 }\n- 248 multiIndices += subTreeSize;\n- 249 }\n- 250 size_type subTreeSize = node.child(_1).size();\n- 251 pq1PreBasis_.indices(node.child(_1), multiIndices);\n- 252 for (std::size_t i = 0; i<subTreeSize; ++i)\n- 253 multiIndexPushFront(multiIndices[i], 1);\n- 254 multiIndices += subTreeSize;\n- 255 return multiIndices;\n- 256 }\n- 257\n-258 GridView gridView_;\n- 259\n-260 PQ1PreBasis pq1PreBasis_;\n-261 PQ2PreBasis pq2PreBasis_;\n- 262};\n- 263\n- 264\n- 265\n- 266template<typename GV>\n-267class TaylorHoodVelocityTree :\n- 268 public PowerBasisNode<LagrangeNode<GV,2>, GV::dimension>\n- 269{\n- 270 using PQ2Node = LagrangeNode<GV,2>;\n- 271 using Base = PowerBasisNode<PQ2Node,_GV::dimension>;\n- 272\n- 273public:\n-274 TaylorHoodVelocityTree()\n- 275 {\n- 276 for(int i=0; i<GV::dimension; ++i)\n- 277 this->setChild(i, std::make_shared<PQ2Node>());\n- 278 }\n- 279};\n- 280\n- 281template<typename GV>\n-282class TaylorHoodBasisTree :\n- 283 public CompositeBasisNode<\n- 284 TaylorHoodVelocityTree<GV>,\n- 285 LagrangeNode<GV,1>\n- 286 >\n- 287{\n- 288 using VelocityNode=TaylorHoodVelocityTree<GV>;\n- 289 using PressureNode=LagrangeNode<GV,1>;\n- 290\n- 291 using Base=CompositeBasisNode<VelocityNode,_PressureNode>;\n- 292\n- 293public:\n-294 TaylorHoodBasisTree()\n- 295 {\n- 296 this->template setChild<0>(std::make_shared<VelocityNode>());\n- 297 this->template setChild<1>(std::make_shared<PressureNode>());\n- 298 }\n- 299};\n- 300\n- 301\n- 302\n- 303namespace BasisFactory {\n- 304\n-311inline auto taylorHood()\n- 312{\n- 313 return [](const auto& gridView) {\n- 314 return TaylorHoodPreBasis<std::decay_t<decltype(gridView)>>(gridView);\n- 315 };\n- 316}\n- 317\n- 318} // end namespace BasisFactory\n- 319\n- 320/\n-/ *****************************************************************************\n- 321// This is the actual global basis implementation based on the reusable\n-parts.\n- 322/\n-/ *****************************************************************************\n- 323\n- 345template<typename GV>\n-346using TaylorHoodBasis = DefaultGlobalBasis<TaylorHoodPreBasis<GV> >;\n- 347\n- 348\n- 349\n- 350} // end namespace Functions\n- 351} // end namespace Dune\n- 352\n- 353\n- 354#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH\n-defaultglobalbasis.hh\n-lagrangebasis.hh\n-nodes.hh\n-Dune::Functions::BasisFactory::taylorHood\n-auto taylorHood()\n-Create a pre-basis factory that can create a Taylor-Hood pre-basis.\n-Definition: taylorhoodbasis.hh:311\n+ 74\n+ 75\n+ 76} // end namespace Functions\n+ 77} // end namespace Dune\n+ 78\n+ 79#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::DefaultGlobalBasis\n-Global basis for given pre-basis.\n-Definition: defaultglobalbasis.hh:46\n-Dune::Functions::LagrangeNode\n-Definition: lagrangebasis.hh:387\n-Dune::Functions::LagrangePreBasis<_GV,_1_>\n-Dune::Functions::LagrangePreBasis::indices\n-It indices(const Node &node, It it) const\n-Definition: lagrangebasis.hh:192\n-Dune::Functions::LagrangePreBasis::initializeIndices\n-void initializeIndices()\n-Initialize the global indices.\n-Definition: lagrangebasis.hh:96\n-Dune::Functions::LagrangePreBasis::update\n-void update(const GridView &gv)\n-Update the stored grid view, to be called if the grid has changed.\n-Definition: lagrangebasis.hh:126\n-Dune::Functions::LagrangePreBasis::maxNodeSize\n-size_type maxNodeSize() const\n-Get the maximal number of DOFs associated to node for any element.\n-Definition: lagrangebasis.hh:184\n-Dune::Functions::LagrangePreBasis::size\n-size_type size() const\n-Same as size(prefix) with empty prefix.\n-Definition: lagrangebasis.hh:140\n-Dune::Functions::BasisNodeMixin::size\n-size_type size() const\n-Definition: nodes.hh:142\n-Dune::Functions::PowerBasisNode\n-Definition: nodes.hh:193\n-Dune::Functions::CompositeBasisNode\n-Definition: nodes.hh:219\n-Dune::Functions::TaylorHoodVelocityTree\n-Definition: taylorhoodbasis.hh:269\n-Dune::Functions::TaylorHoodVelocityTree::TaylorHoodVelocityTree\n-TaylorHoodVelocityTree()\n-Definition: taylorhoodbasis.hh:274\n-Dune::Functions::TaylorHoodBasisTree\n-Definition: taylorhoodbasis.hh:287\n-Dune::Functions::TaylorHoodBasisTree::TaylorHoodBasisTree\n-TaylorHoodBasisTree()\n-Definition: taylorhoodbasis.hh:294\n-Dune::Functions::TaylorHoodPreBasis\n-Pre-basis for lowest order Taylor-Hood basis.\n-Definition: taylorhoodbasis.hh:61\n-Dune::Functions::TaylorHoodPreBasis::TaylorHoodPreBasis\n-TaylorHoodPreBasis(const GridView &gv)\n-Constructor for a given grid view object.\n-Definition: taylorhoodbasis.hh:89\n-Dune::Functions::TaylorHoodPreBasis::gridView\n-const GridView & gridView() const\n-Obtain the grid view that the basis is defined on.\n-Definition: taylorhoodbasis.hh:103\n-Dune::Functions::TaylorHoodPreBasis::minMultiIndexSize\n-static constexpr size_type minMultiIndexSize\n-Definition: taylorhoodbasis.hh:78\n-Dune::Functions::TaylorHoodPreBasis::size\n+Dune::Functions::sizeInfo\n+SizeInfo< Basis > sizeInfo(const Basis &basis)\n+Definition: sizeinfo.hh:69\n+Dune::Functions::SizeInfo\n+A class encapsulating size information.\n+Definition: sizeinfo.hh:25\n+Dune::Functions::SizeInfo::SizePrefix\n+typename Basis::SizePrefix SizePrefix\n+Definition: sizeinfo.hh:29\n+Dune::Functions::SizeInfo::size\n size_type size(const SizePrefix &prefix) const\n-Return number of possible values for next position in multi index.\n-Definition: taylorhoodbasis.hh:131\n-Dune::Functions::TaylorHoodPreBasis::gridView_\n-GridView gridView_\n-Definition: taylorhoodbasis.hh:258\n-Dune::Functions::TaylorHoodPreBasis::GridView\n-GV GridView\n-The grid view that the FE basis is defined on.\n-Definition: taylorhoodbasis.hh:69\n-Dune::Functions::TaylorHoodPreBasis::update\n-void update(const GridView &gv)\n-Update the stored grid view, to be called if the grid has changed.\n-Definition: taylorhoodbasis.hh:109\n-Dune::Functions::TaylorHoodPreBasis::pq2PreBasis_\n-PQ2PreBasis pq2PreBasis_\n-Definition: taylorhoodbasis.hh:261\n-Dune::Functions::TaylorHoodPreBasis::size\n-size_type size() const\n-Same as size(prefix) with empty prefix.\n-Definition: taylorhoodbasis.hh:124\n-Dune::Functions::TaylorHoodPreBasis::dimension\n-size_type dimension() const\n-Get the total dimension of the space spanned by this basis.\n-Definition: taylorhoodbasis.hh:182\n-Dune::Functions::TaylorHoodPreBasis::pq1PreBasis_\n-PQ1PreBasis pq1PreBasis_\n-Definition: taylorhoodbasis.hh:260\n-Dune::Functions::TaylorHoodPreBasis::multiIndexPushFront\n-static const void multiIndexPushFront(MultiIndex &M, size_type M0)\n-Definition: taylorhoodbasis.hh:202\n-Dune::Functions::TaylorHoodPreBasis::maxMultiIndexSize\n-static constexpr size_type maxMultiIndexSize\n-Definition: taylorhoodbasis.hh:77\n-Dune::Functions::TaylorHoodPreBasis::makeNode\n-Node makeNode() const\n-Create tree node.\n-Definition: taylorhoodbasis.hh:118\n-Dune::Functions::TaylorHoodPreBasis::indices\n-It indices(const Node &node, It it) const\n-Definition: taylorhoodbasis.hh:194\n-Dune::Functions::TaylorHoodPreBasis::multiIndexBufferSize\n-static constexpr size_type multiIndexBufferSize\n-Definition: taylorhoodbasis.hh:79\n-Dune::Functions::TaylorHoodPreBasis::initializeIndices\n-void initializeIndices()\n-Initialize the global indices.\n-Definition: taylorhoodbasis.hh:96\n-Dune::Functions::TaylorHoodPreBasis::maxNodeSize\n-size_type maxNodeSize() const\n-Get the maximal number of DOFs associated to node for any element.\n-Definition: taylorhoodbasis.hh:188\n-Dune::Functions::TaylorHoodPreBasis::size_type\n-std::size_t size_type\n-Type used for indices and size information.\n-Definition: taylorhoodbasis.hh:72\n-Dune::Functions::TaylorHoodPreBasis::indicesImp\n-It indicesImp(const Node &node, It multiIndices) const\n-Definition: taylorhoodbasis.hh:212\n+Return number possible values for next position in multi index.\n+Definition: sizeinfo.hh:52\n+Dune::Functions::SizeInfo::operator()\n+size_type operator()(const SizePrefix &prefix) const\n+Return number possible values for next position in multi index.\n+Definition: sizeinfo.hh:41\n+Dune::Functions::SizeInfo::size_type\n+typename Basis::size_type size_type\n+Definition: sizeinfo.hh:28\n+Dune::Functions::SizeInfo::Basis\n+B Basis\n+Definition: sizeinfo.hh:27\n+Dune::Functions::SizeInfo::SizeInfo\n+SizeInfo(const Basis &basis)\n+Construct from basis.\n+Definition: sizeinfo.hh:34\n+Dune::Functions::SizeInfo::basis_\n+const Basis * basis_\n+Definition: sizeinfo.hh:64\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00113.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00113.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: powerbasis.hh File Reference</title>\n+<title>dune-functions: subentitydofs.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -66,56 +66,50 @@\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> |\n <a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">powerbasis.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">subentitydofs.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <dune/common/reservedvector.hh></code><br />\n-<code>#include <dune/common/typeutilities.hh></code><br />\n-<code>#include <dune/common/indices.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00050_source.html\">dune/functions/common/utility.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00092_source.html\">dune/functions/common/type_traits.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00179_source.html\">dune/functions/functionspacebases/basistags.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00191_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a02876_source.html\">dune/functions/functionspacebases/concepts.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00119_source.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></code><br />\n+<div class=\"textblock\"><code>#include <vector></code><br />\n+<code>#include <dune/geometry/referenceelements.hh></code><br />\n+<code>#include <dune/typetree/traversal.hh></code><br />\n </div>\n <p><a href=\"a00113_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01735.html\">Dune::Functions::PowerPreBasis< IMS, SPB, C ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A pre-basis for power bases. <a href=\"a01735.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01803.html\">Dune::Functions::SubEntityDOFs< GridView ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Range of DOFs associated to sub-entity. <a href=\"a01803.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a00224\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00224.html\">Dune::Functions::BasisFactory</a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a00225\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00225.html\">Dune::Functions::BasisBuilder</a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n Functions</h2></td></tr>\n-<tr class=\"memitem:ga0d8eb549af76bc2563ab189e63668ee5\"><td class=\"memTemplParams\" colspan=\"2\">template<std::size_t k, class ChildPreBasisFactory , class IndexMergingStrategy > </td></tr>\n-<tr class=\"memitem:ga0d8eb549af76bc2563ab189e63668ee5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#ga0d8eb549af76bc2563ab189e63668ee5\">Dune::Functions::BasisFactory::power</a> (ChildPreBasisFactory &&childPreBasisFactory, const IndexMergingStrategy &)</td></tr>\n-<tr class=\"memdesc:ga0d8eb549af76bc2563ab189e63668ee5\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a pre-basis factory that can build a <a class=\"el\" href=\"a01735.html\" title=\"A pre-basis for power bases.\">PowerPreBasis</a>. <a href=\"a00213.html#ga0d8eb549af76bc2563ab189e63668ee5\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga0d8eb549af76bc2563ab189e63668ee5\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:gab84b622cf7be16d0373640b6f0478eb0\"><td class=\"memTemplParams\" colspan=\"2\">template<std::size_t k, class ChildPreBasisFactory > </td></tr>\n-<tr class=\"memitem:gab84b622cf7be16d0373640b6f0478eb0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#gab84b622cf7be16d0373640b6f0478eb0\">Dune::Functions::BasisFactory::power</a> (ChildPreBasisFactory &&childPreBasisFactory)</td></tr>\n-<tr class=\"memdesc:gab84b622cf7be16d0373640b6f0478eb0\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a factory builder that can build a <a class=\"el\" href=\"a01735.html\" title=\"A pre-basis for power bases.\">PowerPreBasis</a>. <a href=\"a00213.html#gab84b622cf7be16d0373640b6f0478eb0\">More...</a><br /></td></tr>\n-<tr class=\"separator:gab84b622cf7be16d0373640b6f0478eb0\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga0b9da94fff21e98877d0e3fe1c1554c7\"><td class=\"memTemplParams\" colspan=\"2\">template<class T > </td></tr>\n+<tr class=\"memitem:ga0b9da94fff21e98877d0e3fe1c1554c7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00214.html#ga0b9da94fff21e98877d0e3fe1c1554c7\">Dune::Functions::subEntityDOFs</a> (const T &)</td></tr>\n+<tr class=\"memdesc:ga0b9da94fff21e98877d0e3fe1c1554c7\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create <a class=\"el\" href=\"a01803.html\" title=\"Range of DOFs associated to sub-entity.\">SubEntityDOFs</a> object. <a href=\"a00214.html#ga0b9da94fff21e98877d0e3fe1c1554c7\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga0b9da94fff21e98877d0e3fe1c1554c7\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga5803226b1ed4bf848a9532181c952244\"><td class=\"memTemplParams\" colspan=\"2\">template<class LocalView > </td></tr>\n+<tr class=\"memitem:ga5803226b1ed4bf848a9532181c952244\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00214.html#ga5803226b1ed4bf848a9532181c952244\">Dune::Functions::subEntityDOFs</a> (const LocalView &localView, std::size_t subEntityIndex, std::size_t subEntityCodim)</td></tr>\n+<tr class=\"memdesc:ga5803226b1ed4bf848a9532181c952244\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create bound <a class=\"el\" href=\"a01803.html\" title=\"Range of DOFs associated to sub-entity.\">SubEntityDOFs</a> object. <a href=\"a00214.html#ga5803226b1ed4bf848a9532181c952244\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga5803226b1ed4bf848a9532181c952244\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga09ad7987f85909bfcf269a0de9c652d8\"><td class=\"memTemplParams\" colspan=\"2\">template<class LocalView , class Intersection > </td></tr>\n+<tr class=\"memitem:ga09ad7987f85909bfcf269a0de9c652d8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00214.html#ga09ad7987f85909bfcf269a0de9c652d8\">Dune::Functions::subEntityDOFs</a> (const LocalView &localView, const Intersection &intersection)</td></tr>\n+<tr class=\"memdesc:ga09ad7987f85909bfcf269a0de9c652d8\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create bound <a class=\"el\" href=\"a01803.html\" title=\"Range of DOFs associated to sub-entity.\">SubEntityDOFs</a> object. <a href=\"a00214.html#ga09ad7987f85909bfcf269a0de9c652d8\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga09ad7987f85909bfcf269a0de9c652d8\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -6,46 +6,39 @@\n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n Classes | Namespaces | Functions\n-powerbasis.hh File Reference\n-#include <dune/common/reservedvector.hh>\n-#include <dune/common/typeutilities.hh>\n-#include <dune/common/indices.hh>\n-#include <dune/functions/common/utility.hh>\n-#include <dune/functions/common/type_traits.hh>\n-#include <dune/functions/functionspacebases/basistags.hh>\n-#include <dune/functions/functionspacebases/nodes.hh>\n-#include <dune/functions/functionspacebases/concepts.hh>\n-#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n+subentitydofs.hh File Reference\n+#include <vector>\n+#include <dune/geometry/referenceelements.hh>\n+#include <dune/typetree/traversal.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-class \u00a0Dune::Functions::PowerPreBasis<_IMS,_SPB,_C_>\n-\u00a0 A pre-basis for power bases. More...\n+class \u00a0Dune::Functions::SubEntityDOFs<_GridView_>\n+\u00a0 Range of DOFs associated to sub-entity. More...\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n-namespace \u00a0Dune::Functions::BasisFactory\n-\u00a0\n-namespace \u00a0Dune::Functions::BasisBuilder\n-\u00a0\n Functions\n-template<std::size_t k, class ChildPreBasisFactory , class\n-IndexMergingStrategy >\n-auto\u00a0Dune::Functions::BasisFactory::power (ChildPreBasisFactory\n- &&childPreBasisFactory, const IndexMergingStrategy &)\n-\u00a0 Create a pre-basis factory that can build a PowerPreBasis. More...\n-\u00a0\n-template<std::size_t k, class ChildPreBasisFactory >\n-auto\u00a0Dune::Functions::BasisFactory::power (ChildPreBasisFactory\n- &&childPreBasisFactory)\n-\u00a0 Create a factory builder that can build a PowerPreBasis. More...\n+template<class T >\n+auto\u00a0Dune::Functions::subEntityDOFs (const T &)\n+\u00a0 Create SubEntityDOFs object. More...\n+\u00a0\n+template<class LocalView >\n+auto\u00a0Dune::Functions::subEntityDOFs (const LocalView &localView, std::size_t\n+ subEntityIndex, std::size_t subEntityCodim)\n+\u00a0 Create bound SubEntityDOFs object. More...\n+\u00a0\n+template<class LocalView , class Intersection >\n+auto\u00a0Dune::Functions::subEntityDOFs (const LocalView &localView, const\n+ Intersection &intersection)\n+\u00a0 Create bound SubEntityDOFs object. More...\n \u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00113_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00113_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: powerbasis.hh Source File</title>\n+<title>dune-functions: subentitydofs.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,406 +62,148 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">powerbasis.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">subentitydofs.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00113.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <dune/common/reservedvector.hh></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <dune/common/typeutilities.hh></span></div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <dune/common/indices.hh></span></div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00050.html\">dune/functions/common/utility.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00092.html\">dune/functions/common/type_traits.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00179.html\">dune/functions/functionspacebases/basistags.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00191.html\">dune/functions/functionspacebases/nodes.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a02876.html\">dune/functions/functionspacebases/concepts.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00119.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <vector></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span> </div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <dune/geometry/referenceelements.hh></span></div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/typetree/traversal.hh></span></div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span> </div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n <div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n <div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> </div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> </div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"comment\">// *****************************************************************************</span></div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"comment\">// This is the reusable part of the power bases. It contains</span></div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span><span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"comment\">// PowerPreBasis</span></div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span><span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span><span class=\"comment\">// The pre-basis allows to create the others and is the owner of possible shared</span></div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span><span class=\"comment\">// state. These components do _not_ depend on the global basis and local view</span></div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span><span class=\"comment\">// and can be used without a global basis.</span></div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span><span class=\"comment\">// *****************************************************************************</span></div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> </div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> IMS, <span class=\"keyword\">class</span> SPB, std::<span class=\"keywordtype\">size_t</span> C></div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html\"> 44</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01735.html\">PowerPreBasis</a></div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span>{</div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> std::size_t children = C;</div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">bool</span> isBlocked = std::is_same_v<IMS,BasisFactory::BlockedLexicographic> or std::is_same_v<IMS,BasisFactory::BlockedInterleaved>;</div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> </div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> </div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#a419106855686e36864eea0100d8e618e\"> 52</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01735.html#a419106855686e36864eea0100d8e618e\">SubPreBasis</a> = SPB;</div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> </div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#a37d97aeb515a5abfd55259f1fb320d12\"> 55</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01735.html#a37d97aeb515a5abfd55259f1fb320d12\">GridView</a> = <span class=\"keyword\">typename</span> SPB::GridView;</div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> </div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\"> 58</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> = std::size_t;</div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> </div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#a1c74f8319f302dc61ba704be6489cf37\"> 61</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01735.html#a1c74f8319f302dc61ba704be6489cf37\">IndexMergingStrategy</a> = IMS;</div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> </div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#a7b5f1965bab95ba5c42821645f548c38\"> 63</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01735.html#a7b5f1965bab95ba5c42821645f548c38\">SubNode</a> = <span class=\"keyword\">typename</span> SubPreBasis::Node;</div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> </div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#a32df93d56f2f547813944cb7bcd04ffa\"> 66</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01715.html\">Node</a> = <a class=\"code hl_class\" href=\"a01715.html\">PowerBasisNode<SubNode, children></a>;</div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> </div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#adc20cd44a238188f2f0117d30cfb3ea6\"> 68</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> <a class=\"code hl_variable\" href=\"a01735.html#adc20cd44a238188f2f0117d30cfb3ea6\">maxMultiIndexSize</a> = SubPreBasis::maxMultiIndexSize + isBlocked;</div>\n-<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#aea6df17c50528be1cecdbd8f40264063\"> 69</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> <a class=\"code hl_variable\" href=\"a01735.html#aea6df17c50528be1cecdbd8f40264063\">minMultiIndexSize</a> = SubPreBasis::minMultiIndexSize + isBlocked;</div>\n-<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#a3a52441f0c9a8d94a76b6e0a87cdd6fc\"> 70</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> <a class=\"code hl_variable\" href=\"a01735.html#a3a52441f0c9a8d94a76b6e0a87cdd6fc\">multiIndexBufferSize</a> = SubPreBasis::multiIndexBufferSize + isBlocked;</div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Gr<span class=\"keywordtype\">id</span>View></div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01803.html\"> 41</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01803.html\">SubEntityDOFs</a></div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span>{</div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dim = GridView::dimension;</div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> </div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> </div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> LocalView></div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01803.html#acac48052c1a9079f779b64e68ce52e82\"> 64</a></span> <a class=\"code hl_class\" href=\"a01803.html\">SubEntityDOFs</a>& <a class=\"code hl_function\" href=\"a01803.html#acac48052c1a9079f779b64e68ce52e82\">bind</a>(<span class=\"keyword\">const</span> LocalView& localView, std::size_t subEntityIndex, std::size_t subEntityCodim)</div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> {</div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> <span class=\"comment\">// fill vector with local indices of all DOFs contained in subentity</span></div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> containedDOFs_.clear();</div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> dofIsContained_.assign(localView.size(), <span class=\"keyword\">false</span>);</div>\n+<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> </div>\n+<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> <span class=\"keyword\">auto</span> re = Dune::referenceElement<double,dim>(localView.element().type());</div>\n <div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> </div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>... SFArgs,</div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> disableCopyMove<<a class=\"code hl_function\" href=\"a01735.html#ab0335222dc72364fe128e8459751377b\">PowerPreBasis</a>, SFArgs...> = 0,</div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> <a class=\"code hl_typedef\" href=\"a00215.html#ga673247dd74bcdd9e5acfc7735faf8a5b\">enableIfConstructible</a><<a class=\"code hl_typedef\" href=\"a01735.html#a419106855686e36864eea0100d8e618e\">SubPreBasis</a>, SFArgs...> = 0></div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#ab0335222dc72364fe128e8459751377b\"> 80</a></span> <a class=\"code hl_function\" href=\"a01735.html#ab0335222dc72364fe128e8459751377b\">PowerPreBasis</a>(SFArgs&&... sfArgs) :</div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> subPreBasis_(std::forward<SFArgs>(sfArgs)...)</div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> {</div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> <span class=\"keyword\">static_assert</span>(models<Concept::PreBasis<GridView>, <a class=\"code hl_typedef\" href=\"a01735.html#a419106855686e36864eea0100d8e618e\">SubPreBasis</a>>(), <span class=\"stringliteral\">"Subprebasis passed to PowerPreBasis does not model the PreBasis concept."</span>);</div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> }</div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> </div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#a813f4c07a10db215c7a19c9552993baa\"> 87</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01735.html#a813f4c07a10db215c7a19c9552993baa\">initializeIndices</a>()</div>\n-<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> {</div>\n-<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> subPreBasis_.initializeIndices();</div>\n-<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> }</div>\n-<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> </div>\n-<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#aee8905e7295cf03b6b7d9888d8594666\"> 93</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01735.html#a37d97aeb515a5abfd55259f1fb320d12\">GridView</a>& <a class=\"code hl_function\" href=\"a01735.html#aee8905e7295cf03b6b7d9888d8594666\">gridView</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> <span class=\"keywordflow\">return</span> subPreBasis_.gridView();</div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> }</div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> </div>\n-<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#a982ebd97f308612c4dca7d980cf16070\"> 99</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01735.html#a982ebd97f308612c4dca7d980cf16070\">update</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01735.html#a37d97aeb515a5abfd55259f1fb320d12\">GridView</a>& gv)</div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> {</div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> subPreBasis_.update(gv);</div>\n-<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> }</div>\n-<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> </div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#ad5fae28034251ff8e4429288f951f3af\"> 107</a></span> <a class=\"code hl_class\" href=\"a01715.html\">Node</a> <a class=\"code hl_function\" href=\"a01735.html#ad5fae28034251ff8e4429288f951f3af\">makeNode</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> <span class=\"keyword\">auto</span> node = <a class=\"code hl_class\" href=\"a01715.html\">Node</a>{};</div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> <span class=\"keywordflow\">for</span> (std::size_t i=0; i<children; ++i)</div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> node.setChild(i, subPreBasis_.makeNode());</div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> <span class=\"keywordflow\">return</span> node;</div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> Dune::TypeTree::forEachLeafNode(localView.tree(), [&](<span class=\"keyword\">auto</span>&& node, <span class=\"keyword\">auto</span>&& <span class=\"comment\">/*treePath*/</span>) {</div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> const auto& localCoefficients = node.finiteElement().localCoefficients();</div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> std::size_t localSize = localCoefficients.size();</div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> for(std::size_t i=0; i<localSize; ++i)</div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> {</div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> auto localKey = localCoefficients.localKey(i);</div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> if (re.subEntities(subEntityIndex, subEntityCodim, localKey.codim()).contains(localKey.subEntity()))</div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> {</div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> containedDOFs_.push_back(node.localIndex(i));</div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> dofIsContained_[node.localIndex(i)] = true;</div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> }</div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> }</div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> });</div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>;</div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> }</div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> </div>\n+<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> LocalView, <span class=\"keyword\">class</span> Intersection></div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01803.html#a263bb19c72865bbad450b3c21ba6ad23\"> 104</a></span> <a class=\"code hl_class\" href=\"a01803.html\">SubEntityDOFs</a>& <a class=\"code hl_function\" href=\"a01803.html#a263bb19c72865bbad450b3c21ba6ad23\">bind</a>(<span class=\"keyword\">const</span> LocalView& localView, <span class=\"keyword\">const</span> Intersection& intersection)</div>\n+<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> {</div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> <span class=\"keywordflow\">return</span> bind(localView, intersection.indexInInside(), 1);</div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> }</div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> </div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01803.html#a1cdf6bb0ea464ebf9df5ac067a218fd9\"> 110</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a01803.html#a1cdf6bb0ea464ebf9df5ac067a218fd9\">begin</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> <span class=\"keywordflow\">return</span> containedDOFs_.cbegin();</div>\n <div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> }</div>\n <div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> </div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#ac9e9c317b759d7dbb3ae74ee66595d5a\"> 116</a></span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> <a class=\"code hl_function\" href=\"a01735.html#ac9e9c317b759d7dbb3ae74ee66595d5a\">size</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01803.html#a773f6413ae560bdbccdfedf332b602dd\"> 116</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a01803.html#a773f6413ae560bdbccdfedf332b602dd\">end</a>()<span class=\"keyword\"> const</span></div>\n <div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01735.html#ac9e9c317b759d7dbb3ae74ee66595d5a\">size</a>(Dune::ReservedVector<size_type, multiIndexBufferSize>{});</div>\n+<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> <span class=\"keywordflow\">return</span> containedDOFs_.cend();</div>\n <div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> }</div>\n <div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> </div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> </div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#aef3ffd96fc0d2a2926295da866014bef\"> 124</a></span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> <a class=\"code hl_function\" href=\"a01735.html#aef3ffd96fc0d2a2926295da866014bef\">size</a>(<span class=\"keyword\">const</span> SizePrefix& prefix)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01735.html#ac9e9c317b759d7dbb3ae74ee66595d5a\">size</a>(prefix, <a class=\"code hl_typedef\" href=\"a01735.html#a1c74f8319f302dc61ba704be6489cf37\">IndexMergingStrategy</a>{});</div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> }</div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> </div>\n-<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span><span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> </div>\n-<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n-<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> <a class=\"code hl_function\" href=\"a01735.html#ac9e9c317b759d7dbb3ae74ee66595d5a\">size</a>(<span class=\"keyword\">const</span> SizePrefix& prefix, <a class=\"code hl_struct\" href=\"a01423.html\">BasisFactory::FlatInterleaved</a>)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> <span class=\"comment\">// The root index size is the root index size of a single subnode</span></div>\n-<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> <span class=\"comment\">// multiplied by the number of subnodes because we enumerate all</span></div>\n-<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> <span class=\"comment\">// child indices in a row.</span></div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> <span class=\"keywordflow\">if</span> (prefix.size() == 0)</div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> <span class=\"keywordflow\">return</span> children*subPreBasis_.size();</div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> </div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> <span class=\"comment\">// The first prefix entry refers to one of the (root index size)</span></div>\n-<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> <span class=\"comment\">// subindex trees. Hence we have to first compute the corresponding</span></div>\n-<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> <span class=\"comment\">// prefix entry for a single subnode subnode. The we can append</span></div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> <span class=\"comment\">// the other prefix entries unmodified, because the index tree</span></div>\n-<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> <span class=\"comment\">// looks the same after the first level.</span></div>\n-<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> SizePrefix subPrefix;</div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> subPrefix.push_back(prefix[0] / children);</div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> <span class=\"keywordflow\">for</span>(std::size_t i=1; i<prefix.size(); ++i)</div>\n-<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> subPrefix.push_back(prefix[i]);</div>\n-<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> <span class=\"keywordflow\">return</span> subPreBasis_.size(subPrefix);</div>\n-<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> }</div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> </div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n-<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> <a class=\"code hl_function\" href=\"a01735.html#ac9e9c317b759d7dbb3ae74ee66595d5a\">size</a>(<span class=\"keyword\">const</span> SizePrefix& prefix, BasisFactory::FlatLexicographic)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> <span class=\"comment\">// The size at the index tree root is the size of at the index tree</span></div>\n-<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> <span class=\"comment\">// root of a single subnode multiplied by the number of subnodes</span></div>\n-<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> <span class=\"comment\">// because we enumerate all child indices in a row.</span></div>\n-<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> <span class=\"keywordflow\">if</span> (prefix.size() == 0)</div>\n-<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> <span class=\"keywordflow\">return</span> children*subPreBasis_.size();</div>\n-<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> </div>\n-<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> <span class=\"comment\">// The first prefix entry refers to one of the (root index size)</span></div>\n-<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> <span class=\"comment\">// subindex trees. Hence we have to first compute the corresponding</span></div>\n-<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> <span class=\"comment\">// prefix entry for a single subnode subnode. The we can append</span></div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> <span class=\"comment\">// the other prefix entries unmodified, because the index tree</span></div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> <span class=\"comment\">// looks the same after the first level.</span></div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> SizePrefix subPrefix;</div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> subPrefix.push_back(prefix[0] % children);</div>\n-<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> <span class=\"keywordflow\">for</span>(std::size_t i=1; i<prefix.size(); ++i)</div>\n-<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> subPrefix.push_back(prefix[i]);</div>\n-<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> <span class=\"keywordflow\">return</span> subPreBasis_.size(subPrefix);</div>\n-<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> }</div>\n-<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> </div>\n-<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n-<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> <a class=\"code hl_function\" href=\"a01735.html#ac9e9c317b759d7dbb3ae74ee66595d5a\">size</a>(<span class=\"keyword\">const</span> SizePrefix& prefix, BasisFactory::BlockedLexicographic)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> <span class=\"keywordflow\">if</span> (prefix.size() == 0)</div>\n-<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> <span class=\"keywordflow\">return</span> children;</div>\n-<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> SizePrefix subPrefix;</div>\n-<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> <span class=\"keywordflow\">for</span>(std::size_t i=1; i<prefix.size(); ++i)</div>\n-<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> subPrefix.push_back(prefix[i]);</div>\n-<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> <span class=\"keywordflow\">return</span> subPreBasis_.size(subPrefix);</div>\n-<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> }</div>\n-<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span> </div>\n-<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n-<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> <a class=\"code hl_function\" href=\"a01735.html#ac9e9c317b759d7dbb3ae74ee66595d5a\">size</a>(<span class=\"keyword\">const</span> SizePrefix& prefix, BasisFactory::BlockedInterleaved)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> <span class=\"keywordflow\">if</span> (prefix.size() == 0)</div>\n-<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> <span class=\"keywordflow\">return</span> subPreBasis_.size();</div>\n-<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> </div>\n-<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span> SizePrefix subPrefix;</div>\n-<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> <span class=\"keywordflow\">for</span>(std::size_t i=0; i<prefix.size()-1; ++i)</div>\n-<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> subPrefix.push_back(prefix[i]);</div>\n-<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> </div>\n-<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> r = subPreBasis_.size(subPrefix);</div>\n-<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> <span class=\"keywordflow\">if</span> (r==0)</div>\n-<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> <span class=\"keywordflow\">return</span> 0;</div>\n-<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> subPrefix.push_back(prefix.back());</div>\n-<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> r = subPreBasis_.size(subPrefix);</div>\n-<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> <span class=\"keywordflow\">if</span> (r==0)</div>\n-<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> <span class=\"keywordflow\">return</span> children;</div>\n-<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> <span class=\"keywordflow\">return</span> r;</div>\n-<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> }</div>\n-<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> </div>\n-<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span> </div>\n-<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#a092a9a0c5fa8feb7cde428eb9d37d8e3\"> 207</a></span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> <a class=\"code hl_function\" href=\"a01735.html#a092a9a0c5fa8feb7cde428eb9d37d8e3\">dimension</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> <span class=\"keywordflow\">return</span> subPreBasis_.dimension() * children;</div>\n-<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> }</div>\n-<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> </div>\n-<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#aeb555ecc3254d9be197f8d5157b3668c\"> 213</a></span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> <a class=\"code hl_function\" href=\"a01735.html#aeb555ecc3254d9be197f8d5157b3668c\">maxNodeSize</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> <span class=\"keywordflow\">return</span> subPreBasis_.maxNodeSize() * children;</div>\n-<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span> }</div>\n-<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> </div>\n-<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#af2b075686a4ae66836d8ec0db85ae251\"> 219</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01735.html#a419106855686e36864eea0100d8e618e\">SubPreBasis</a>& <a class=\"code hl_function\" href=\"a01735.html#af2b075686a4ae66836d8ec0db85ae251\">subPreBasis</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> <span class=\"keywordflow\">return</span> subPreBasis_;</div>\n-<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span> }</div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01803.html#a2192e4fe71d9642ccd3ba5a64797a823\"> 122</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a01803.html#a2192e4fe71d9642ccd3ba5a64797a823\">size</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> <span class=\"keywordflow\">return</span> containedDOFs_.size();</div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> }</div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> </div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01803.html#ad8ae0869865b9f6a2aaa09a1a1ade514\"> 128</a></span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <span class=\"keyword\">operator</span>[](std::size_t i) <span class=\"keyword\">const</span></div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> {</div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> <span class=\"keywordflow\">return</span> containedDOFs_[i];</div>\n+<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> }</div>\n+<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> </div>\n+<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01803.html#a4c581279b643d6b1800dfdadd73f4bda\"> 134</a></span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a01803.html#a4c581279b643d6b1800dfdadd73f4bda\">contains</a>(std::size_t localIndex)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> <span class=\"keywordflow\">return</span> dofIsContained_[localIndex];</div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> }</div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> </div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> </div>\n+<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> std::vector<std::size_t> containedDOFs_;</div>\n+<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> std::vector<bool> dofIsContained_;</div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span>};</div>\n+<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> </div>\n+<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> </div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> </div>\n+<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n+<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00214.html#ga0b9da94fff21e98877d0e3fe1c1554c7\"> 160</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00214.html#ga09ad7987f85909bfcf269a0de9c652d8\">subEntityDOFs</a>(<span class=\"keyword\">const</span> T&)</div>\n+<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span>{</div>\n+<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01803.html\">SubEntityDOFs<typename T::GridView></a>{};</div>\n+<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span>}</div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> </div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> </div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> </div>\n+<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> LocalView></div>\n+<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00214.html#ga5803226b1ed4bf848a9532181c952244\"> 187</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00214.html#ga09ad7987f85909bfcf269a0de9c652d8\">subEntityDOFs</a>(<span class=\"keyword\">const</span> LocalView& localView, std::size_t subEntityIndex, std::size_t subEntityCodim)</div>\n+<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span>{</div>\n+<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> <span class=\"keyword\">using </span>GridView = <span class=\"keyword\">typename</span> LocalView::GridView;</div>\n+<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span> <a class=\"code hl_class\" href=\"a01803.html\">SubEntityDOFs<GridView></a> <a class=\"code hl_function\" href=\"a00214.html#ga09ad7987f85909bfcf269a0de9c652d8\">subEntityDOFs</a>;</div>\n+<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> <a class=\"code hl_function\" href=\"a00214.html#ga09ad7987f85909bfcf269a0de9c652d8\">subEntityDOFs</a>.bind(localView, subEntityIndex, subEntityCodim);</div>\n+<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00214.html#ga09ad7987f85909bfcf269a0de9c652d8\">subEntityDOFs</a>;</div>\n+<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span>}</div>\n+<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> </div>\n+<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> </div>\n+<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> </div>\n+<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> LocalView, <span class=\"keyword\">class</span> Intersection></div>\n+<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00214.html#ga09ad7987f85909bfcf269a0de9c652d8\"> 216</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00214.html#ga09ad7987f85909bfcf269a0de9c652d8\">subEntityDOFs</a>(<span class=\"keyword\">const</span> LocalView& localView, <span class=\"keyword\">const</span> Intersection& intersection)</div>\n+<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span>{</div>\n+<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> <span class=\"keyword\">using </span>GridView = <span class=\"keyword\">typename</span> LocalView::GridView;</div>\n+<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> <a class=\"code hl_class\" href=\"a01803.html\">SubEntityDOFs<GridView></a> <a class=\"code hl_function\" href=\"a00214.html#ga09ad7987f85909bfcf269a0de9c652d8\">subEntityDOFs</a>;</div>\n+<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span> <a class=\"code hl_function\" href=\"a00214.html#ga09ad7987f85909bfcf269a0de9c652d8\">subEntityDOFs</a>.bind(localView, intersection);</div>\n+<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00214.html#ga09ad7987f85909bfcf269a0de9c652d8\">subEntityDOFs</a>;</div>\n+<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span>}</div>\n <div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> </div>\n-<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#ad3551fe05e2d4e6e9631a78e3f2f150a\"> 225</a></span> <a class=\"code hl_typedef\" href=\"a01735.html#a419106855686e36864eea0100d8e618e\">SubPreBasis</a>& <a class=\"code hl_function\" href=\"a01735.html#ad3551fe05e2d4e6e9631a78e3f2f150a\">subPreBasis</a>()</div>\n-<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> {</div>\n-<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> <span class=\"keywordflow\">return</span> subPreBasis_;</div>\n-<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> }</div>\n-<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> </div>\n-<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n-<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#aaf0cd03264066ab6e7ed385e6e74c578\"> 232</a></span> It <a class=\"code hl_function\" href=\"a01735.html#aaf0cd03264066ab6e7ed385e6e74c578\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01715.html\">Node</a>& node, It it)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01735.html#aaf0cd03264066ab6e7ed385e6e74c578\">indices</a>(node, it, <a class=\"code hl_typedef\" href=\"a01735.html#a1c74f8319f302dc61ba704be6489cf37\">IndexMergingStrategy</a>{});</div>\n-<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> }</div>\n-<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span> </div>\n-<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span><span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span> </div>\n-<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n-<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"> 240</span> It <a class=\"code hl_function\" href=\"a01735.html#aaf0cd03264066ab6e7ed385e6e74c578\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01735.html#a32df93d56f2f547813944cb7bcd04ffa\">Node</a>& node, It multiIndices, <a class=\"code hl_struct\" href=\"a01423.html\">BasisFactory::FlatInterleaved</a>)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span> <span class=\"keyword\">using namespace </span>Dune::Indices;</div>\n-<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> subTreeSize = node.child(_0).size();</div>\n-<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> <span class=\"comment\">// Fill indices for first child at the beginning.</span></div>\n-<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> <span class=\"keyword\">auto</span> next = <a class=\"code hl_function\" href=\"a01735.html#af2b075686a4ae66836d8ec0db85ae251\">subPreBasis</a>().indices(node.child(_0), multiIndices);</div>\n-<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span> <span class=\"comment\">// Multiply first component of all indices for first child by</span></div>\n-<div class=\"line\"><a id=\"l00247\" name=\"l00247\"></a><span class=\"lineno\"> 247</span> <span class=\"comment\">// number of children to stretch the index range for interleaving.</span></div>\n-<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"> 248</span> <span class=\"keywordflow\">for</span> (std::size_t i = 0; i<subTreeSize; ++i)</div>\n-<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span> multiIndices[i][0] *= children;</div>\n-<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span> <span class=\"keywordflow\">for</span> (std::size_t child = 1; child<children; ++child)</div>\n-<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span> {</div>\n-<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span> <span class=\"keywordflow\">for</span> (std::size_t i = 0; i<subTreeSize; ++i)</div>\n-<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"> 253</span> {</div>\n-<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"> 254</span> <span class=\"comment\">// Copy indices from first child for all other children</span></div>\n-<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span> <span class=\"comment\">// and shift them by child index to interleave indices.</span></div>\n-<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"> 256</span> <span class=\"comment\">// multiIndices[child*subTreeSize+i] = multiIndices[i];</span></div>\n-<div class=\"line\"><a id=\"l00257\" name=\"l00257\"></a><span class=\"lineno\"> 257</span> <span class=\"comment\">// multiIndices[child*subTreeSize+i][0] = multiIndices[i][0]+child;</span></div>\n-<div class=\"line\"><a id=\"l00258\" name=\"l00258\"></a><span class=\"lineno\"> 258</span> (*next) = multiIndices[i];</div>\n-<div class=\"line\"><a id=\"l00259\" name=\"l00259\"></a><span class=\"lineno\"> 259</span> (*next)[0] = multiIndices[i][0]+child;</div>\n-<div class=\"line\"><a id=\"l00260\" name=\"l00260\"></a><span class=\"lineno\"> 260</span> ++next;</div>\n-<div class=\"line\"><a id=\"l00261\" name=\"l00261\"></a><span class=\"lineno\"> 261</span> }</div>\n-<div class=\"line\"><a id=\"l00262\" name=\"l00262\"></a><span class=\"lineno\"> 262</span> }</div>\n-<div class=\"line\"><a id=\"l00263\" name=\"l00263\"></a><span class=\"lineno\"> 263</span> <span class=\"keywordflow\">return</span> next;</div>\n-<div class=\"line\"><a id=\"l00264\" name=\"l00264\"></a><span class=\"lineno\"> 264</span> }</div>\n-<div class=\"line\"><a id=\"l00265\" name=\"l00265\"></a><span class=\"lineno\"> 265</span> </div>\n-<div class=\"line\"><a id=\"l00266\" name=\"l00266\"></a><span class=\"lineno\"> 266</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n-<div class=\"line\"><a id=\"l00267\" name=\"l00267\"></a><span class=\"lineno\"> 267</span> It <a class=\"code hl_function\" href=\"a01735.html#aaf0cd03264066ab6e7ed385e6e74c578\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01735.html#a32df93d56f2f547813944cb7bcd04ffa\">Node</a>& node, It multiIndices, BasisFactory::FlatLexicographic)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00268\" name=\"l00268\"></a><span class=\"lineno\"> 268</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00269\" name=\"l00269\"></a><span class=\"lineno\"> 269</span> <span class=\"keyword\">using namespace </span>Dune::Indices;</div>\n-<div class=\"line\"><a id=\"l00270\" name=\"l00270\"></a><span class=\"lineno\"> 270</span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> subTreeSize = node.child(_0).size();</div>\n-<div class=\"line\"><a id=\"l00271\" name=\"l00271\"></a><span class=\"lineno\"> 271</span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> firstIndexEntrySize = <a class=\"code hl_function\" href=\"a01735.html#af2b075686a4ae66836d8ec0db85ae251\">subPreBasis</a>().size();</div>\n-<div class=\"line\"><a id=\"l00272\" name=\"l00272\"></a><span class=\"lineno\"> 272</span> <span class=\"comment\">// Fill indices for first child at the beginning.</span></div>\n-<div class=\"line\"><a id=\"l00273\" name=\"l00273\"></a><span class=\"lineno\"> 273</span> <span class=\"keyword\">auto</span> next = <a class=\"code hl_function\" href=\"a01735.html#af2b075686a4ae66836d8ec0db85ae251\">subPreBasis</a>().indices(node.child(_0), multiIndices);</div>\n-<div class=\"line\"><a id=\"l00274\" name=\"l00274\"></a><span class=\"lineno\"> 274</span> <span class=\"keywordflow\">for</span> (std::size_t child = 1; child<children; ++child)</div>\n-<div class=\"line\"><a id=\"l00275\" name=\"l00275\"></a><span class=\"lineno\"> 275</span> {</div>\n-<div class=\"line\"><a id=\"l00276\" name=\"l00276\"></a><span class=\"lineno\"> 276</span> <span class=\"keywordflow\">for</span> (std::size_t i = 0; i<subTreeSize; ++i)</div>\n-<div class=\"line\"><a id=\"l00277\" name=\"l00277\"></a><span class=\"lineno\"> 277</span> {</div>\n-<div class=\"line\"><a id=\"l00278\" name=\"l00278\"></a><span class=\"lineno\"> 278</span> <span class=\"comment\">// Copy indices from first child for all other children</span></div>\n-<div class=\"line\"><a id=\"l00279\" name=\"l00279\"></a><span class=\"lineno\"> 279</span> <span class=\"comment\">// and shift them by suitable offset to get lexicographic indices.</span></div>\n-<div class=\"line\"><a id=\"l00280\" name=\"l00280\"></a><span class=\"lineno\"> 280</span> <span class=\"comment\">// multiIndices[child*subTreeSize+i] = multiIndices[i];</span></div>\n-<div class=\"line\"><a id=\"l00281\" name=\"l00281\"></a><span class=\"lineno\"> 281</span> <span class=\"comment\">// multiIndices[child*subTreeSize+i][0] += child*firstIndexEntrySize;</span></div>\n-<div class=\"line\"><a id=\"l00282\" name=\"l00282\"></a><span class=\"lineno\"> 282</span> (*next) = multiIndices[i];</div>\n-<div class=\"line\"><a id=\"l00283\" name=\"l00283\"></a><span class=\"lineno\"> 283</span> (*next)[0] += child*firstIndexEntrySize;</div>\n-<div class=\"line\"><a id=\"l00284\" name=\"l00284\"></a><span class=\"lineno\"> 284</span> ++next;</div>\n-<div class=\"line\"><a id=\"l00285\" name=\"l00285\"></a><span class=\"lineno\"> 285</span> }</div>\n-<div class=\"line\"><a id=\"l00286\" name=\"l00286\"></a><span class=\"lineno\"> 286</span> }</div>\n-<div class=\"line\"><a id=\"l00287\" name=\"l00287\"></a><span class=\"lineno\"> 287</span> <span class=\"keywordflow\">return</span> next;</div>\n-<div class=\"line\"><a id=\"l00288\" name=\"l00288\"></a><span class=\"lineno\"> 288</span> }</div>\n-<div class=\"line\"><a id=\"l00289\" name=\"l00289\"></a><span class=\"lineno\"> 289</span> </div>\n-<div class=\"line\"><a id=\"l00290\" name=\"l00290\"></a><span class=\"lineno\"> 290</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> MultiIndex></div>\n-<div class=\"line\"><a id=\"l00291\" name=\"l00291\"></a><span class=\"lineno\"> 291</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> multiIndexPushFront(MultiIndex& M, <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> M0)</div>\n-<div class=\"line\"><a id=\"l00292\" name=\"l00292\"></a><span class=\"lineno\"> 292</span> {</div>\n-<div class=\"line\"><a id=\"l00293\" name=\"l00293\"></a><span class=\"lineno\"> 293</span> M.resize(M.size()+1);</div>\n-<div class=\"line\"><a id=\"l00294\" name=\"l00294\"></a><span class=\"lineno\"> 294</span> <span class=\"keywordflow\">for</span>(std::size_t i=M.size()-1; i>0; --i)</div>\n-<div class=\"line\"><a id=\"l00295\" name=\"l00295\"></a><span class=\"lineno\"> 295</span> M[i] = M[i-1];</div>\n-<div class=\"line\"><a id=\"l00296\" name=\"l00296\"></a><span class=\"lineno\"> 296</span> M[0] = M0;</div>\n-<div class=\"line\"><a id=\"l00297\" name=\"l00297\"></a><span class=\"lineno\"> 297</span> }</div>\n-<div class=\"line\"><a id=\"l00298\" name=\"l00298\"></a><span class=\"lineno\"> 298</span> </div>\n-<div class=\"line\"><a id=\"l00299\" name=\"l00299\"></a><span class=\"lineno\"> 299</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n-<div class=\"line\"><a id=\"l00300\" name=\"l00300\"></a><span class=\"lineno\"> 300</span> It <a class=\"code hl_function\" href=\"a01735.html#aaf0cd03264066ab6e7ed385e6e74c578\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01735.html#a32df93d56f2f547813944cb7bcd04ffa\">Node</a>& node, It multiIndices, BasisFactory::BlockedLexicographic)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00301\" name=\"l00301\"></a><span class=\"lineno\"> 301</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00302\" name=\"l00302\"></a><span class=\"lineno\"> 302</span> <span class=\"keyword\">using namespace </span>Dune::Indices;</div>\n-<div class=\"line\"><a id=\"l00303\" name=\"l00303\"></a><span class=\"lineno\"> 303</span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> subTreeSize = node.child(_0).size();</div>\n-<div class=\"line\"><a id=\"l00304\" name=\"l00304\"></a><span class=\"lineno\"> 304</span> <span class=\"comment\">// Fill indices for first child at the beginning.</span></div>\n-<div class=\"line\"><a id=\"l00305\" name=\"l00305\"></a><span class=\"lineno\"> 305</span> <span class=\"keyword\">auto</span> next = <a class=\"code hl_function\" href=\"a01735.html#af2b075686a4ae66836d8ec0db85ae251\">subPreBasis</a>().indices(node.child(_0), multiIndices);</div>\n-<div class=\"line\"><a id=\"l00306\" name=\"l00306\"></a><span class=\"lineno\"> 306</span> <span class=\"comment\">// Insert 0 before first component of all indices for first child.</span></div>\n-<div class=\"line\"><a id=\"l00307\" name=\"l00307\"></a><span class=\"lineno\"> 307</span> <span class=\"keywordflow\">for</span> (std::size_t i = 0; i<subTreeSize; ++i)</div>\n-<div class=\"line\"><a id=\"l00308\" name=\"l00308\"></a><span class=\"lineno\"> 308</span> multiIndexPushFront(multiIndices[i], 0);</div>\n-<div class=\"line\"><a id=\"l00309\" name=\"l00309\"></a><span class=\"lineno\"> 309</span> <span class=\"keywordflow\">for</span> (std::size_t child = 1; child<children; ++child)</div>\n-<div class=\"line\"><a id=\"l00310\" name=\"l00310\"></a><span class=\"lineno\"> 310</span> {</div>\n-<div class=\"line\"><a id=\"l00311\" name=\"l00311\"></a><span class=\"lineno\"> 311</span> <span class=\"keywordflow\">for</span> (std::size_t i = 0; i<subTreeSize; ++i)</div>\n-<div class=\"line\"><a id=\"l00312\" name=\"l00312\"></a><span class=\"lineno\"> 312</span> {</div>\n-<div class=\"line\"><a id=\"l00313\" name=\"l00313\"></a><span class=\"lineno\"> 313</span> <span class=\"comment\">// Copy indices from first child for all other children and overwrite</span></div>\n-<div class=\"line\"><a id=\"l00314\" name=\"l00314\"></a><span class=\"lineno\"> 314</span> <span class=\"comment\">// zero in first component as inserted above by child index.</span></div>\n-<div class=\"line\"><a id=\"l00315\" name=\"l00315\"></a><span class=\"lineno\"> 315</span> <span class=\"comment\">// multiIndices[child*subTreeSize+i] = multiIndices[i];</span></div>\n-<div class=\"line\"><a id=\"l00316\" name=\"l00316\"></a><span class=\"lineno\"> 316</span> <span class=\"comment\">// multiIndices[child*subTreeSize+i][0] = child;</span></div>\n-<div class=\"line\"><a id=\"l00317\" name=\"l00317\"></a><span class=\"lineno\"> 317</span> (*next) = multiIndices[i];</div>\n-<div class=\"line\"><a id=\"l00318\" name=\"l00318\"></a><span class=\"lineno\"> 318</span> (*next)[0] = child;</div>\n-<div class=\"line\"><a id=\"l00319\" name=\"l00319\"></a><span class=\"lineno\"> 319</span> ++next;</div>\n-<div class=\"line\"><a id=\"l00320\" name=\"l00320\"></a><span class=\"lineno\"> 320</span> }</div>\n-<div class=\"line\"><a id=\"l00321\" name=\"l00321\"></a><span class=\"lineno\"> 321</span> }</div>\n-<div class=\"line\"><a id=\"l00322\" name=\"l00322\"></a><span class=\"lineno\"> 322</span> <span class=\"keywordflow\">return</span> next;</div>\n-<div class=\"line\"><a id=\"l00323\" name=\"l00323\"></a><span class=\"lineno\"> 323</span> }</div>\n-<div class=\"line\"><a id=\"l00324\" name=\"l00324\"></a><span class=\"lineno\"> 324</span> </div>\n-<div class=\"line\"><a id=\"l00325\" name=\"l00325\"></a><span class=\"lineno\"> 325</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n-<div class=\"line\"><a id=\"l00326\" name=\"l00326\"></a><span class=\"lineno\"> 326</span> It <a class=\"code hl_function\" href=\"a01735.html#aaf0cd03264066ab6e7ed385e6e74c578\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01735.html#a32df93d56f2f547813944cb7bcd04ffa\">Node</a>& node, It multiIndices, BasisFactory::BlockedInterleaved)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00327\" name=\"l00327\"></a><span class=\"lineno\"> 327</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00328\" name=\"l00328\"></a><span class=\"lineno\"> 328</span> <span class=\"keyword\">using namespace </span>Dune::Indices;</div>\n-<div class=\"line\"><a id=\"l00329\" name=\"l00329\"></a><span class=\"lineno\"> 329</span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> subTreeSize = node.child(_0).size();</div>\n-<div class=\"line\"><a id=\"l00330\" name=\"l00330\"></a><span class=\"lineno\"> 330</span> <span class=\"comment\">// Fill indices for first child at the beginning.</span></div>\n-<div class=\"line\"><a id=\"l00331\" name=\"l00331\"></a><span class=\"lineno\"> 331</span> <span class=\"keyword\">auto</span> next = <a class=\"code hl_function\" href=\"a01735.html#af2b075686a4ae66836d8ec0db85ae251\">subPreBasis</a>().indices(node.child(_0), multiIndices);</div>\n-<div class=\"line\"><a id=\"l00332\" name=\"l00332\"></a><span class=\"lineno\"> 332</span> <span class=\"comment\">// Append 0 after last component of all indices for first child.</span></div>\n-<div class=\"line\"><a id=\"l00333\" name=\"l00333\"></a><span class=\"lineno\"> 333</span> <span class=\"keywordflow\">for</span> (std::size_t i = 0; i<subTreeSize; ++i)</div>\n-<div class=\"line\"><a id=\"l00334\" name=\"l00334\"></a><span class=\"lineno\"> 334</span> multiIndices[i].push_back(0);</div>\n-<div class=\"line\"><a id=\"l00335\" name=\"l00335\"></a><span class=\"lineno\"> 335</span> <span class=\"keywordflow\">for</span> (std::size_t child = 1; child<children; ++child)</div>\n-<div class=\"line\"><a id=\"l00336\" name=\"l00336\"></a><span class=\"lineno\"> 336</span> {</div>\n-<div class=\"line\"><a id=\"l00337\" name=\"l00337\"></a><span class=\"lineno\"> 337</span> <span class=\"keywordflow\">for</span> (std::size_t i = 0; i<subTreeSize; ++i)</div>\n-<div class=\"line\"><a id=\"l00338\" name=\"l00338\"></a><span class=\"lineno\"> 338</span> {</div>\n-<div class=\"line\"><a id=\"l00339\" name=\"l00339\"></a><span class=\"lineno\"> 339</span> <span class=\"comment\">// Copy indices from first child for all other children and overwrite</span></div>\n-<div class=\"line\"><a id=\"l00340\" name=\"l00340\"></a><span class=\"lineno\"> 340</span> <span class=\"comment\">// zero in last component as appended above by child index.</span></div>\n-<div class=\"line\"><a id=\"l00341\" name=\"l00341\"></a><span class=\"lineno\"> 341</span> (*next) = multiIndices[i];</div>\n-<div class=\"line\"><a id=\"l00342\" name=\"l00342\"></a><span class=\"lineno\"> 342</span> (*next).back() = child;</div>\n-<div class=\"line\"><a id=\"l00343\" name=\"l00343\"></a><span class=\"lineno\"> 343</span> ++next;</div>\n-<div class=\"line\"><a id=\"l00344\" name=\"l00344\"></a><span class=\"lineno\"> 344</span> }</div>\n-<div class=\"line\"><a id=\"l00345\" name=\"l00345\"></a><span class=\"lineno\"> 345</span> }</div>\n-<div class=\"line\"><a id=\"l00346\" name=\"l00346\"></a><span class=\"lineno\"> 346</span> <span class=\"keywordflow\">return</span> next;</div>\n-<div class=\"line\"><a id=\"l00347\" name=\"l00347\"></a><span class=\"lineno\"> 347</span> }</div>\n-<div class=\"line\"><a id=\"l00348\" name=\"l00348\"></a><span class=\"lineno\"> 348</span> </div>\n-<div class=\"line\"><a id=\"l00349\" name=\"l00349\"></a><span class=\"lineno\"> 349</span> <a class=\"code hl_typedef\" href=\"a01735.html#a419106855686e36864eea0100d8e618e\">SubPreBasis</a> subPreBasis_;</div>\n-<div class=\"line\"><a id=\"l00350\" name=\"l00350\"></a><span class=\"lineno\"> 350</span>};</div>\n-<div class=\"line\"><a id=\"l00351\" name=\"l00351\"></a><span class=\"lineno\"> 351</span> </div>\n-<div class=\"line\"><a id=\"l00352\" name=\"l00352\"></a><span class=\"lineno\"> 352</span> </div>\n-<div class=\"line\"><a id=\"l00353\" name=\"l00353\"></a><span class=\"lineno\"> 353</span> </div>\n-<div class=\"line\"><a id=\"l00354\" name=\"l00354\"></a><span class=\"lineno\"> 354</span><span class=\"keyword\">namespace </span>BasisFactory {</div>\n-<div class=\"line\"><a id=\"l00355\" name=\"l00355\"></a><span class=\"lineno\"> 355</span> </div>\n-<div class=\"line\"><a id=\"l00368\" name=\"l00368\"></a><span class=\"lineno\"> 368</span><span class=\"keyword\">template</span><std::<span class=\"keywordtype\">size_t</span> k, <span class=\"keyword\">class</span> ChildPreBasisFactory, <span class=\"keyword\">class</span> IndexMergingStrategy></div>\n-<div class=\"line\"><a id=\"l00369\" name=\"l00369\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#ga0d8eb549af76bc2563ab189e63668ee5\"> 369</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00213.html#gab84b622cf7be16d0373640b6f0478eb0\">power</a>(ChildPreBasisFactory&& childPreBasisFactory, <span class=\"keyword\">const</span> <a class=\"code hl_struct\" href=\"a01415.html\">IndexMergingStrategy</a>&)</div>\n-<div class=\"line\"><a id=\"l00370\" name=\"l00370\"></a><span class=\"lineno\"> 370</span>{</div>\n-<div class=\"line\"><a id=\"l00371\" name=\"l00371\"></a><span class=\"lineno\"> 371</span> <span class=\"keywordflow\">return</span> [childPreBasisFactory](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridView) {</div>\n-<div class=\"line\"><a id=\"l00372\" name=\"l00372\"></a><span class=\"lineno\"> 372</span> <span class=\"keyword\">auto</span> childPreBasis = childPreBasisFactory(gridView);</div>\n-<div class=\"line\"><a id=\"l00373\" name=\"l00373\"></a><span class=\"lineno\"> 373</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01735.html\">PowerPreBasis<IndexMergingStrategy, decltype(childPreBasis), k></a>(std::move(childPreBasis));</div>\n-<div class=\"line\"><a id=\"l00374\" name=\"l00374\"></a><span class=\"lineno\"> 374</span> };</div>\n-<div class=\"line\"><a id=\"l00375\" name=\"l00375\"></a><span class=\"lineno\"> 375</span>}</div>\n-<div class=\"line\"><a id=\"l00376\" name=\"l00376\"></a><span class=\"lineno\"> 376</span> </div>\n-<div class=\"line\"><a id=\"l00387\" name=\"l00387\"></a><span class=\"lineno\"> 387</span><span class=\"keyword\">template</span><std::<span class=\"keywordtype\">size_t</span> k, <span class=\"keyword\">class</span> ChildPreBasisFactory></div>\n-<div class=\"line\"><a id=\"l00388\" name=\"l00388\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#gab84b622cf7be16d0373640b6f0478eb0\"> 388</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00213.html#gab84b622cf7be16d0373640b6f0478eb0\">power</a>(ChildPreBasisFactory&& childPreBasisFactory)</div>\n-<div class=\"line\"><a id=\"l00389\" name=\"l00389\"></a><span class=\"lineno\"> 389</span>{</div>\n-<div class=\"line\"><a id=\"l00390\" name=\"l00390\"></a><span class=\"lineno\"> 390</span> <span class=\"keywordflow\">return</span> [childPreBasisFactory](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridView) {</div>\n-<div class=\"line\"><a id=\"l00391\" name=\"l00391\"></a><span class=\"lineno\"> 391</span> <span class=\"keyword\">auto</span> childPreBasis = childPreBasisFactory(gridView);</div>\n-<div class=\"line\"><a id=\"l00392\" name=\"l00392\"></a><span class=\"lineno\"> 392</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01735.html\">PowerPreBasis<BlockedInterleaved, decltype(childPreBasis), k></a>(std::move(childPreBasis));</div>\n-<div class=\"line\"><a id=\"l00393\" name=\"l00393\"></a><span class=\"lineno\"> 393</span> };</div>\n-<div class=\"line\"><a id=\"l00394\" name=\"l00394\"></a><span class=\"lineno\"> 394</span>}</div>\n-<div class=\"line\"><a id=\"l00395\" name=\"l00395\"></a><span class=\"lineno\"> 395</span> </div>\n-<div class=\"line\"><a id=\"l00396\" name=\"l00396\"></a><span class=\"lineno\"> 396</span>} <span class=\"comment\">// end namespace BasisFactory</span></div>\n-<div class=\"line\"><a id=\"l00397\" name=\"l00397\"></a><span class=\"lineno\"> 397</span> </div>\n-<div class=\"line\"><a id=\"l00398\" name=\"l00398\"></a><span class=\"lineno\"> 398</span><span class=\"comment\">// Backward compatibility</span></div>\n-<div class=\"line\"><a id=\"l00399\" name=\"l00399\"></a><span class=\"lineno\"> 399</span><span class=\"keyword\">namespace </span>BasisBuilder {</div>\n-<div class=\"line\"><a id=\"l00400\" name=\"l00400\"></a><span class=\"lineno\"> 400</span> </div>\n-<div class=\"line\"><a id=\"l00401\" name=\"l00401\"></a><span class=\"lineno\"> 401</span> <span class=\"keyword\">using namespace </span>BasisFactory;</div>\n-<div class=\"line\"><a id=\"l00402\" name=\"l00402\"></a><span class=\"lineno\"> 402</span> </div>\n-<div class=\"line\"><a id=\"l00403\" name=\"l00403\"></a><span class=\"lineno\"> 403</span>}</div>\n-<div class=\"line\"><a id=\"l00404\" name=\"l00404\"></a><span class=\"lineno\"> 404</span> </div>\n-<div class=\"line\"><a id=\"l00405\" name=\"l00405\"></a><span class=\"lineno\"> 405</span> </div>\n-<div class=\"line\"><a id=\"l00406\" name=\"l00406\"></a><span class=\"lineno\"> 406</span>} <span class=\"comment\">// end namespace Functions</span></div>\n-<div class=\"line\"><a id=\"l00407\" name=\"l00407\"></a><span class=\"lineno\"> 407</span>} <span class=\"comment\">// end namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00408\" name=\"l00408\"></a><span class=\"lineno\"> 408</span> </div>\n-<div class=\"line\"><a id=\"l00409\" name=\"l00409\"></a><span class=\"lineno\"> 409</span> </div>\n-<div class=\"line\"><a id=\"l00410\" name=\"l00410\"></a><span class=\"lineno\"> 410</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH</span></div>\n-<div class=\"ttc\" id=\"aa00050_html\"><div class=\"ttname\"><a href=\"a00050.html\">utility.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00092_html\"><div class=\"ttname\"><a href=\"a00092.html\">type_traits.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00119_html\"><div class=\"ttname\"><a href=\"a00119.html\">defaultglobalbasis.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00179_html\"><div class=\"ttname\"><a href=\"a00179.html\">basistags.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00191_html\"><div class=\"ttname\"><a href=\"a00191.html\">nodes.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00213_html_gab84b622cf7be16d0373640b6f0478eb0\"><div class=\"ttname\"><a href=\"a00213.html#gab84b622cf7be16d0373640b6f0478eb0\">Dune::Functions::BasisFactory::power</a></div><div class=\"ttdeci\">auto power(ChildPreBasisFactory &&childPreBasisFactory)</div><div class=\"ttdoc\">Create a factory builder that can build a PowerPreBasis.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:388</div></div>\n-<div class=\"ttc\" id=\"aa00215_html_ga673247dd74bcdd9e5acfc7735faf8a5b\"><div class=\"ttname\"><a href=\"a00215.html#ga673247dd74bcdd9e5acfc7735faf8a5b\">Dune::Functions::enableIfConstructible</a></div><div class=\"ttdeci\">typename std::enable_if< std::is_constructible< T, Args... >::value, int >::type enableIfConstructible</div><div class=\"ttdoc\">Helper to constrain forwarding constructors.</div><div class=\"ttdef\"><b>Definition:</b> type_traits.hh:26</div></div>\n+<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> </div>\n+<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span> </div>\n+<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span>} <span class=\"comment\">// namespace Functions</span></div>\n+<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span>} <span class=\"comment\">// namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> </div>\n+<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH</span></div>\n+<div class=\"ttc\" id=\"aa00214_html_ga09ad7987f85909bfcf269a0de9c652d8\"><div class=\"ttname\"><a href=\"a00214.html#ga09ad7987f85909bfcf269a0de9c652d8\">Dune::Functions::subEntityDOFs</a></div><div class=\"ttdeci\">auto subEntityDOFs(const LocalView &localView, const Intersection &intersection)</div><div class=\"ttdoc\">Create bound SubEntityDOFs object.</div><div class=\"ttdef\"><b>Definition:</b> subentitydofs.hh:216</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa01415_html\"><div class=\"ttname\"><a href=\"a01415.html\">Dune::Functions::BasisFactory::IndexMergingStrategy</a></div><div class=\"ttdoc\">Base class for index merging strategies to simplify detection.</div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:44</div></div>\n-<div class=\"ttc\" id=\"aa01423_html\"><div class=\"ttname\"><a href=\"a01423.html\">Dune::Functions::BasisFactory::FlatInterleaved</a></div><div class=\"ttdoc\">Interleaved merging of direct children without blocking.</div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:114</div></div>\n-<div class=\"ttc\" id=\"aa01715_html\"><div class=\"ttname\"><a href=\"a01715.html\">Dune::Functions::PowerBasisNode</a></div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:193</div></div>\n-<div class=\"ttc\" id=\"aa01735_html\"><div class=\"ttname\"><a href=\"a01735.html\">Dune::Functions::PowerPreBasis</a></div><div class=\"ttdoc\">A pre-basis for power bases.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:45</div></div>\n-<div class=\"ttc\" id=\"aa01735_html_a092a9a0c5fa8feb7cde428eb9d37d8e3\"><div class=\"ttname\"><a href=\"a01735.html#a092a9a0c5fa8feb7cde428eb9d37d8e3\">Dune::Functions::PowerPreBasis::dimension</a></div><div class=\"ttdeci\">size_type dimension() const</div><div class=\"ttdoc\">Get the total dimension of the space spanned by this basis.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:207</div></div>\n-<div class=\"ttc\" id=\"aa01735_html_a127b27c81a242f3bbe7fe62ba0f2877b\"><div class=\"ttname\"><a href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">Dune::Functions::PowerPreBasis::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdoc\">Type used for indices and size information.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:58</div></div>\n-<div class=\"ttc\" id=\"aa01735_html_a1c74f8319f302dc61ba704be6489cf37\"><div class=\"ttname\"><a href=\"a01735.html#a1c74f8319f302dc61ba704be6489cf37\">Dune::Functions::PowerPreBasis::IndexMergingStrategy</a></div><div class=\"ttdeci\">IMS IndexMergingStrategy</div><div class=\"ttdoc\">Strategy used to merge the global indices of the child factories.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:61</div></div>\n-<div class=\"ttc\" id=\"aa01735_html_a32df93d56f2f547813944cb7bcd04ffa\"><div class=\"ttname\"><a href=\"a01735.html#a32df93d56f2f547813944cb7bcd04ffa\">Dune::Functions::PowerPreBasis::Node</a></div><div class=\"ttdeci\">PowerBasisNode< SubNode, children > Node</div><div class=\"ttdoc\">Template mapping root tree path to type of created tree node.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:66</div></div>\n-<div class=\"ttc\" id=\"aa01735_html_a37d97aeb515a5abfd55259f1fb320d12\"><div class=\"ttname\"><a href=\"a01735.html#a37d97aeb515a5abfd55259f1fb320d12\">Dune::Functions::PowerPreBasis::GridView</a></div><div class=\"ttdeci\">typename SPB::GridView GridView</div><div class=\"ttdoc\">The grid view that the FE basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:55</div></div>\n-<div class=\"ttc\" id=\"aa01735_html_a3a52441f0c9a8d94a76b6e0a87cdd6fc\"><div class=\"ttname\"><a href=\"a01735.html#a3a52441f0c9a8d94a76b6e0a87cdd6fc\">Dune::Functions::PowerPreBasis::multiIndexBufferSize</a></div><div class=\"ttdeci\">static constexpr size_type multiIndexBufferSize</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:70</div></div>\n-<div class=\"ttc\" id=\"aa01735_html_a419106855686e36864eea0100d8e618e\"><div class=\"ttname\"><a href=\"a01735.html#a419106855686e36864eea0100d8e618e\">Dune::Functions::PowerPreBasis::SubPreBasis</a></div><div class=\"ttdeci\">SPB SubPreBasis</div><div class=\"ttdoc\">The child pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:52</div></div>\n-<div class=\"ttc\" id=\"aa01735_html_a7b5f1965bab95ba5c42821645f548c38\"><div class=\"ttname\"><a href=\"a01735.html#a7b5f1965bab95ba5c42821645f548c38\">Dune::Functions::PowerPreBasis::SubNode</a></div><div class=\"ttdeci\">typename SubPreBasis::Node SubNode</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:63</div></div>\n-<div class=\"ttc\" id=\"aa01735_html_a813f4c07a10db215c7a19c9552993baa\"><div class=\"ttname\"><a href=\"a01735.html#a813f4c07a10db215c7a19c9552993baa\">Dune::Functions::PowerPreBasis::initializeIndices</a></div><div class=\"ttdeci\">void initializeIndices()</div><div class=\"ttdoc\">Initialize the global indices.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:87</div></div>\n-<div class=\"ttc\" id=\"aa01735_html_a982ebd97f308612c4dca7d980cf16070\"><div class=\"ttname\"><a href=\"a01735.html#a982ebd97f308612c4dca7d980cf16070\">Dune::Functions::PowerPreBasis::update</a></div><div class=\"ttdeci\">void update(const GridView &gv)</div><div class=\"ttdoc\">Update the stored grid view, to be called if the grid has changed.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:99</div></div>\n-<div class=\"ttc\" id=\"aa01735_html_aaf0cd03264066ab6e7ed385e6e74c578\"><div class=\"ttname\"><a href=\"a01735.html#aaf0cd03264066ab6e7ed385e6e74c578\">Dune::Functions::PowerPreBasis::indices</a></div><div class=\"ttdeci\">It indices(const Node &node, It it) const</div><div class=\"ttdoc\">Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:232</div></div>\n-<div class=\"ttc\" id=\"aa01735_html_ab0335222dc72364fe128e8459751377b\"><div class=\"ttname\"><a href=\"a01735.html#ab0335222dc72364fe128e8459751377b\">Dune::Functions::PowerPreBasis::PowerPreBasis</a></div><div class=\"ttdeci\">PowerPreBasis(SFArgs &&... sfArgs)</div><div class=\"ttdoc\">Constructor for given child pre-basis objects.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:80</div></div>\n-<div class=\"ttc\" id=\"aa01735_html_ac9e9c317b759d7dbb3ae74ee66595d5a\"><div class=\"ttname\"><a href=\"a01735.html#ac9e9c317b759d7dbb3ae74ee66595d5a\">Dune::Functions::PowerPreBasis::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdoc\">Same as size(prefix) with empty prefix.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:116</div></div>\n-<div class=\"ttc\" id=\"aa01735_html_ad3551fe05e2d4e6e9631a78e3f2f150a\"><div class=\"ttname\"><a href=\"a01735.html#ad3551fe05e2d4e6e9631a78e3f2f150a\">Dune::Functions::PowerPreBasis::subPreBasis</a></div><div class=\"ttdeci\">SubPreBasis & subPreBasis()</div><div class=\"ttdoc\">Mutable access to the stored prebasis of the factor in the power space.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:225</div></div>\n-<div class=\"ttc\" id=\"aa01735_html_ad5fae28034251ff8e4429288f951f3af\"><div class=\"ttname\"><a href=\"a01735.html#ad5fae28034251ff8e4429288f951f3af\">Dune::Functions::PowerPreBasis::makeNode</a></div><div class=\"ttdeci\">Node makeNode() const</div><div class=\"ttdoc\">Create tree node.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:107</div></div>\n-<div class=\"ttc\" id=\"aa01735_html_adc20cd44a238188f2f0117d30cfb3ea6\"><div class=\"ttname\"><a href=\"a01735.html#adc20cd44a238188f2f0117d30cfb3ea6\">Dune::Functions::PowerPreBasis::maxMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type maxMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:68</div></div>\n-<div class=\"ttc\" id=\"aa01735_html_aea6df17c50528be1cecdbd8f40264063\"><div class=\"ttname\"><a href=\"a01735.html#aea6df17c50528be1cecdbd8f40264063\">Dune::Functions::PowerPreBasis::minMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type minMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:69</div></div>\n-<div class=\"ttc\" id=\"aa01735_html_aeb555ecc3254d9be197f8d5157b3668c\"><div class=\"ttname\"><a href=\"a01735.html#aeb555ecc3254d9be197f8d5157b3668c\">Dune::Functions::PowerPreBasis::maxNodeSize</a></div><div class=\"ttdeci\">size_type maxNodeSize() const</div><div class=\"ttdoc\">Get the maximal number of DOFs associated to node for any element.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:213</div></div>\n-<div class=\"ttc\" id=\"aa01735_html_aee8905e7295cf03b6b7d9888d8594666\"><div class=\"ttname\"><a href=\"a01735.html#aee8905e7295cf03b6b7d9888d8594666\">Dune::Functions::PowerPreBasis::gridView</a></div><div class=\"ttdeci\">const GridView & gridView() const</div><div class=\"ttdoc\">Obtain the grid view that the basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:93</div></div>\n-<div class=\"ttc\" id=\"aa01735_html_aef3ffd96fc0d2a2926295da866014bef\"><div class=\"ttname\"><a href=\"a01735.html#aef3ffd96fc0d2a2926295da866014bef\">Dune::Functions::PowerPreBasis::size</a></div><div class=\"ttdeci\">size_type size(const SizePrefix &prefix) const</div><div class=\"ttdoc\">Return number of possible values for next position in multi index.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:124</div></div>\n-<div class=\"ttc\" id=\"aa01735_html_af2b075686a4ae66836d8ec0db85ae251\"><div class=\"ttname\"><a href=\"a01735.html#af2b075686a4ae66836d8ec0db85ae251\">Dune::Functions::PowerPreBasis::subPreBasis</a></div><div class=\"ttdeci\">const SubPreBasis & subPreBasis() const</div><div class=\"ttdoc\">Const access to the stored prebasis of the factor in the power space.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:219</div></div>\n-<div class=\"ttc\" id=\"aa02876_html\"><div class=\"ttname\"><a href=\"a02876.html\">concepts.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa01803_html\"><div class=\"ttname\"><a href=\"a01803.html\">Dune::Functions::SubEntityDOFs</a></div><div class=\"ttdoc\">Range of DOFs associated to sub-entity.</div><div class=\"ttdef\"><b>Definition:</b> subentitydofs.hh:42</div></div>\n+<div class=\"ttc\" id=\"aa01803_html_a1cdf6bb0ea464ebf9df5ac067a218fd9\"><div class=\"ttname\"><a href=\"a01803.html#a1cdf6bb0ea464ebf9df5ac067a218fd9\">Dune::Functions::SubEntityDOFs::begin</a></div><div class=\"ttdeci\">auto begin() const</div><div class=\"ttdoc\">Create begin iterator for access to range of contained local indices.</div><div class=\"ttdef\"><b>Definition:</b> subentitydofs.hh:110</div></div>\n+<div class=\"ttc\" id=\"aa01803_html_a2192e4fe71d9642ccd3ba5a64797a823\"><div class=\"ttname\"><a href=\"a01803.html#a2192e4fe71d9642ccd3ba5a64797a823\">Dune::Functions::SubEntityDOFs::size</a></div><div class=\"ttdeci\">auto size() const</div><div class=\"ttdoc\">Return number of contained DOFs.</div><div class=\"ttdef\"><b>Definition:</b> subentitydofs.hh:122</div></div>\n+<div class=\"ttc\" id=\"aa01803_html_a263bb19c72865bbad450b3c21ba6ad23\"><div class=\"ttname\"><a href=\"a01803.html#a263bb19c72865bbad450b3c21ba6ad23\">Dune::Functions::SubEntityDOFs::bind</a></div><div class=\"ttdeci\">SubEntityDOFs & bind(const LocalView &localView, const Intersection &intersection)</div><div class=\"ttdoc\">Bind SubEntityDOFs object to LocalView and sub-entity.</div><div class=\"ttdef\"><b>Definition:</b> subentitydofs.hh:104</div></div>\n+<div class=\"ttc\" id=\"aa01803_html_a4c581279b643d6b1800dfdadd73f4bda\"><div class=\"ttname\"><a href=\"a01803.html#a4c581279b643d6b1800dfdadd73f4bda\">Dune::Functions::SubEntityDOFs::contains</a></div><div class=\"ttdeci\">bool contains(std::size_t localIndex) const</div><div class=\"ttdoc\">Check if given local index is contained in this range of DOFs.</div><div class=\"ttdef\"><b>Definition:</b> subentitydofs.hh:134</div></div>\n+<div class=\"ttc\" id=\"aa01803_html_a773f6413ae560bdbccdfedf332b602dd\"><div class=\"ttname\"><a href=\"a01803.html#a773f6413ae560bdbccdfedf332b602dd\">Dune::Functions::SubEntityDOFs::end</a></div><div class=\"ttdeci\">auto end() const</div><div class=\"ttdoc\">Create end iterator for access to range of contained local indices.</div><div class=\"ttdef\"><b>Definition:</b> subentitydofs.hh:116</div></div>\n+<div class=\"ttc\" id=\"aa01803_html_acac48052c1a9079f779b64e68ce52e82\"><div class=\"ttname\"><a href=\"a01803.html#acac48052c1a9079f779b64e68ce52e82\">Dune::Functions::SubEntityDOFs::bind</a></div><div class=\"ttdeci\">SubEntityDOFs & bind(const LocalView &localView, std::size_t subEntityIndex, std::size_t subEntityCodim)</div><div class=\"ttdoc\">Bind SubEntityDOFs object to LocalView and sub-entity.</div><div class=\"ttdef\"><b>Definition:</b> subentitydofs.hh:64</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,497 +5,176 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-powerbasis.hh\n+subentitydofs.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH\n- 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH\n+ 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH\n+ 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH\n 5\n- 6#include <dune/common/reservedvector.hh>\n- 7#include <dune/common/typeutilities.hh>\n- 8#include <dune/common/indices.hh>\n- 9\n- 10#include <dune/functions/common/utility.hh>\n- 11#include <dune/functions/common/type_traits.hh>\n- 12#include <dune/functions/functionspacebases/basistags.hh>\n- 13#include <dune/functions/functionspacebases/nodes.hh>\n- 14#include <dune/functions/functionspacebases/concepts.hh>\n- 15#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n+ 6#include <vector>\n+ 7\n+ 8#include <dune/geometry/referenceelements.hh>\n+ 9#include <dune/typetree/traversal.hh>\n+ 10\n+ 11\n+ 12\n+ 13namespace Dune {\n+ 14namespace Functions {\n+ 15\n 16\n 17\n- 18\n- 19namespace Dune {\n- 20namespace Functions {\n- 21\n- 22\n- 23/\n-/ *****************************************************************************\n- 24// This is the reusable part of the power bases. It contains\n- 25//\n- 26// PowerPreBasis\n- 27//\n- 28// The pre-basis allows to create the others and is the owner of possible\n-shared\n- 29// state. These components do _not_ depend on the global basis and local\n-view\n- 30// and can be used without a global basis.\n- 31/\n-/ *****************************************************************************\n- 32\n- 43template<class IMS, class SPB, std::size_t C>\n-44class PowerPreBasis\n- 45{\n- 46 static const std::size_t children = C;\n- 47 static const bool isBlocked = std::is_same_v<IMS,BasisFactory::\n-BlockedLexicographic> or std::is_same_v<IMS,BasisFactory::BlockedInterleaved>;\n- 48\n- 49public:\n- 50\n-52 using SubPreBasis = SPB;\n- 53\n-55 using GridView = typename SPB::GridView;\n- 56\n-58 using size_type = std::size_t;\n- 59\n-61 using IndexMergingStrategy = IMS;\n- 62\n-63 using SubNode = typename SubPreBasis::Node;\n- 64\n-66 using Node = PowerBasisNode<SubNode,_children>;\n- 67\n-68 static constexpr size_type maxMultiIndexSize = SubPreBasis::\n-maxMultiIndexSize + isBlocked;\n-69 static constexpr size_type minMultiIndexSize = SubPreBasis::\n-minMultiIndexSize + isBlocked;\n-70 static constexpr size_type multiIndexBufferSize = SubPreBasis::\n-multiIndexBufferSize + isBlocked;\n+ 40template<class GridView>\n+41class SubEntityDOFs\n+ 42{\n+ 43 static const int dim = GridView::dimension;\n+ 44\n+ 45public:\n+ 46\n+ 63 template<class LocalView>\n+64 SubEntityDOFs& bind(const LocalView& localView, std::size_t subEntityIndex,\n+std::size_t subEntityCodim)\n+ 65 {\n+ 66 // fill vector with local indices of all DOFs contained in subentity\n+ 67 containedDOFs_.clear();\n+ 68 dofIsContained_.assign(localView.size(), false);\n+ 69\n+ 70 auto re = Dune::referenceElement<double,dim>(localView.element().type());\n 71\n- 77 template<class... SFArgs,\n- 78 disableCopyMove<PowerPreBasis, SFArgs...> = 0,\n- 79 enableIfConstructible<SubPreBasis, SFArgs...> = 0>\n-80 PowerPreBasis(SFArgs&&... sfArgs) :\n- 81 subPreBasis_(std::forward<SFArgs>(sfArgs)...)\n- 82 {\n- 83 static_assert(models<Concept::PreBasis<GridView>, SubPreBasis>(),\n-\"Subprebasis passed to PowerPreBasis does not model the PreBasis concept.\");\n- 84 }\n- 85\n-87 void initializeIndices()\n- 88 {\n- 89 subPreBasis_.initializeIndices();\n- 90 }\n- 91\n-93 const GridView& gridView() const\n- 94 {\n- 95 return subPreBasis_.gridView();\n- 96 }\n- 97\n-99 void update(const GridView& gv)\n- 100 {\n- 101 subPreBasis_.update(gv);\n- 102 }\n- 103\n-107 Node makeNode() const\n- 108 {\n- 109 auto node = Node{};\n- 110 for (std::size_t i=0; i<children; ++i)\n- 111 node.setChild(i, subPreBasis_.makeNode());\n- 112 return node;\n+ 72 Dune::TypeTree::forEachLeafNode(localView.tree(), [&](auto&& node, auto&& /\n+*treePath*/) {\n+ 73 const auto& localCoefficients = node.finiteElement().localCoefficients();\n+ 74 std::size_t localSize = localCoefficients.size();\n+ 75 for(std::size_t i=0; i<localSize; ++i)\n+ 76 {\n+ 77 auto localKey = localCoefficients.localKey(i);\n+ 78 if (re.subEntities(subEntityIndex, subEntityCodim, localKey.codim\n+()).contains(localKey.subEntity()))\n+ 79 {\n+ 80 containedDOFs_.push_back(node.localIndex(i));\n+ 81 dofIsContained_[node.localIndex(i)] = true;\n+ 82 }\n+ 83 }\n+ 84 });\n+ 85 return *this;\n+ 86 }\n+ 87\n+ 103 template<class LocalView, class Intersection>\n+104 SubEntityDOFs& bind(const LocalView& localView, const Intersection&\n+intersection)\n+ 105 {\n+ 106 return bind(localView, intersection.indexInInside(), 1);\n+ 107 }\n+ 108\n+110 auto begin() const\n+ 111 {\n+ 112 return containedDOFs_.cbegin();\n 113 }\n 114\n-116 size_type size() const\n+116 auto end() const\n 117 {\n- 118 return size(Dune::ReservedVector<size_type, multiIndexBufferSize>{});\n+ 118 return containedDOFs_.cend();\n 119 }\n 120\n- 122\n- 123 template<class SizePrefix>\n-124 size_type size(const SizePrefix& prefix) const\n- 125 {\n- 126 return size(prefix, IndexMergingStrategy{});\n- 127 }\n- 128\n- 129private:\n- 130\n- 131 template<class SizePrefix>\n- 132 size_type size(const SizePrefix& prefix, BasisFactory::FlatInterleaved)\n-const\n- 133 {\n- 134 // The root index size is the root index size of a single subnode\n- 135 // multiplied by the number of subnodes because we enumerate all\n- 136 // child indices in a row.\n- 137 if (prefix.size() == 0)\n- 138 return children*subPreBasis_.size();\n- 139\n- 140 // The first prefix entry refers to one of the (root index size)\n- 141 // subindex trees. Hence we have to first compute the corresponding\n- 142 // prefix entry for a single subnode subnode. The we can append\n- 143 // the other prefix entries unmodified, because the index tree\n- 144 // looks the same after the first level.\n- 145 SizePrefix subPrefix;\n- 146 subPrefix.push_back(prefix[0] / children);\n- 147 for(std::size_t i=1; i<prefix.size(); ++i)\n- 148 subPrefix.push_back(prefix[i]);\n- 149 return subPreBasis_.size(subPrefix);\n- 150 }\n- 151\n- 152 template<class SizePrefix>\n- 153 size_type size(const SizePrefix& prefix, BasisFactory::FlatLexicographic)\n-const\n- 154 {\n- 155 // The size at the index tree root is the size of at the index tree\n- 156 // root of a single subnode multiplied by the number of subnodes\n- 157 // because we enumerate all child indices in a row.\n- 158 if (prefix.size() == 0)\n- 159 return children*subPreBasis_.size();\n- 160\n- 161 // The first prefix entry refers to one of the (root index size)\n- 162 // subindex trees. Hence we have to first compute the corresponding\n- 163 // prefix entry for a single subnode subnode. The we can append\n- 164 // the other prefix entries unmodified, because the index tree\n- 165 // looks the same after the first level.\n- 166 SizePrefix subPrefix;\n- 167 subPrefix.push_back(prefix[0] % children);\n- 168 for(std::size_t i=1; i<prefix.size(); ++i)\n- 169 subPrefix.push_back(prefix[i]);\n- 170 return subPreBasis_.size(subPrefix);\n- 171 }\n- 172\n- 173 template<class SizePrefix>\n- 174 size_type size(const SizePrefix& prefix, BasisFactory::\n-BlockedLexicographic) const\n- 175 {\n- 176 if (prefix.size() == 0)\n- 177 return children;\n- 178 SizePrefix subPrefix;\n- 179 for(std::size_t i=1; i<prefix.size(); ++i)\n- 180 subPrefix.push_back(prefix[i]);\n- 181 return subPreBasis_.size(subPrefix);\n- 182 }\n- 183\n- 184 template<class SizePrefix>\n- 185 size_type size(const SizePrefix& prefix, BasisFactory::BlockedInterleaved)\n-const\n- 186 {\n- 187 if (prefix.size() == 0)\n- 188 return subPreBasis_.size();\n- 189\n- 190 SizePrefix subPrefix;\n- 191 for(std::size_t i=0; i<prefix.size()-1; ++i)\n- 192 subPrefix.push_back(prefix[i]);\n- 193\n- 194 size_type r = subPreBasis_.size(subPrefix);\n- 195 if (r==0)\n- 196 return 0;\n- 197 subPrefix.push_back(prefix.back());\n- 198 r = subPreBasis_.size(subPrefix);\n- 199 if (r==0)\n- 200 return children;\n- 201 return r;\n- 202 }\n- 203\n- 204public:\n- 205\n-207 size_type dimension() const\n- 208 {\n- 209 return subPreBasis_.dimension() * children;\n- 210 }\n- 211\n-213 size_type maxNodeSize() const\n- 214 {\n- 215 return subPreBasis_.maxNodeSize() * children;\n- 216 }\n- 217\n-219 const SubPreBasis& subPreBasis() const\n- 220 {\n- 221 return subPreBasis_;\n- 222 }\n+122 auto size() const\n+ 123 {\n+ 124 return containedDOFs_.size();\n+ 125 }\n+ 126\n+128 decltype(auto) operator[](std::size_t i) const\n+ 129 {\n+ 130 return containedDOFs_[i];\n+ 131 }\n+ 132\n+134 bool contains(std::size_t localIndex) const\n+ 135 {\n+ 136 return dofIsContained_[localIndex];\n+ 137 }\n+ 138\n+ 139private:\n+ 140\n+ 141 std::vector<std::size_t> containedDOFs_;\n+ 142 std::vector<bool> dofIsContained_;\n+ 143};\n+ 144\n+ 145\n+ 146\n+ 159template<class T>\n+160auto subEntityDOFs(const T&)\n+ 161{\n+ 162 return SubEntityDOFs<typename_T::GridView>{};\n+ 163}\n+ 164\n+ 165\n+ 166\n+ 186template<class LocalView>\n+187auto subEntityDOFs(const LocalView& localView, std::size_t subEntityIndex,\n+std::size_t subEntityCodim)\n+ 188{\n+ 189 using GridView = typename LocalView::GridView;\n+ 190 SubEntityDOFs<GridView> subEntityDOFs;\n+ 191 subEntityDOFs.bind(localView, subEntityIndex, subEntityCodim);\n+ 192 return subEntityDOFs;\n+ 193}\n+ 194\n+ 195\n+ 196\n+ 215template<class LocalView, class Intersection>\n+216auto subEntityDOFs(const LocalView& localView, const Intersection&\n+intersection)\n+ 217{\n+ 218 using GridView = typename LocalView::GridView;\n+ 219 SubEntityDOFs<GridView> subEntityDOFs;\n+ 220 subEntityDOFs.bind(localView, intersection);\n+ 221 return subEntityDOFs;\n+ 222}\n 223\n-225 SubPreBasis& subPreBasis()\n- 226 {\n- 227 return subPreBasis_;\n- 228 }\n- 229\n- 231 template<typename It>\n-232 It indices(const Node& node, It it) const\n- 233 {\n- 234 return indices(node, it, IndexMergingStrategy{});\n- 235 }\n- 236\n- 237private:\n- 238\n- 239 template<typename It>\n- 240 It indices(const Node& node, It multiIndices, BasisFactory::\n-FlatInterleaved) const\n- 241 {\n- 242 using namespace Dune::Indices;\n- 243 size_type subTreeSize = node.child(_0).size();\n- 244 // Fill indices for first child at the beginning.\n- 245 auto next = subPreBasis().indices(node.child(_0), multiIndices);\n- 246 // Multiply first component of all indices for first child by\n- 247 // number of children to stretch the index range for interleaving.\n- 248 for (std::size_t i = 0; i<subTreeSize; ++i)\n- 249 multiIndices[i][0] *= children;\n- 250 for (std::size_t child = 1; child<children; ++child)\n- 251 {\n- 252 for (std::size_t i = 0; i<subTreeSize; ++i)\n- 253 {\n- 254 // Copy indices from first child for all other children\n- 255 // and shift them by child index to interleave indices.\n- 256 // multiIndices[child*subTreeSize+i] = multiIndices[i];\n- 257 // multiIndices[child*subTreeSize+i][0] = multiIndices[i][0]+child;\n- 258 (*next) = multiIndices[i];\n- 259 (*next)[0] = multiIndices[i][0]+child;\n- 260 ++next;\n- 261 }\n- 262 }\n- 263 return next;\n- 264 }\n- 265\n- 266 template<typename It>\n- 267 It indices(const Node& node, It multiIndices, BasisFactory::\n-FlatLexicographic) const\n- 268 {\n- 269 using namespace Dune::Indices;\n- 270 size_type subTreeSize = node.child(_0).size();\n- 271 size_type firstIndexEntrySize = subPreBasis().size();\n- 272 // Fill indices for first child at the beginning.\n- 273 auto next = subPreBasis().indices(node.child(_0), multiIndices);\n- 274 for (std::size_t child = 1; child<children; ++child)\n- 275 {\n- 276 for (std::size_t i = 0; i<subTreeSize; ++i)\n- 277 {\n- 278 // Copy indices from first child for all other children\n- 279 // and shift them by suitable offset to get lexicographic indices.\n- 280 // multiIndices[child*subTreeSize+i] = multiIndices[i];\n- 281 // multiIndices[child*subTreeSize+i][0] += child*firstIndexEntrySize;\n- 282 (*next) = multiIndices[i];\n- 283 (*next)[0] += child*firstIndexEntrySize;\n- 284 ++next;\n- 285 }\n- 286 }\n- 287 return next;\n- 288 }\n- 289\n- 290 template<class MultiIndex>\n- 291 static void multiIndexPushFront(MultiIndex& M, size_type M0)\n- 292 {\n- 293 M.resize(M.size()+1);\n- 294 for(std::size_t i=M.size()-1; i>0; --i)\n- 295 M[i] = M[i-1];\n- 296 M[0] = M0;\n- 297 }\n- 298\n- 299 template<typename It>\n- 300 It indices(const Node& node, It multiIndices, BasisFactory::\n-BlockedLexicographic) const\n- 301 {\n- 302 using namespace Dune::Indices;\n- 303 size_type subTreeSize = node.child(_0).size();\n- 304 // Fill indices for first child at the beginning.\n- 305 auto next = subPreBasis().indices(node.child(_0), multiIndices);\n- 306 // Insert 0 before first component of all indices for first child.\n- 307 for (std::size_t i = 0; i<subTreeSize; ++i)\n- 308 multiIndexPushFront(multiIndices[i], 0);\n- 309 for (std::size_t child = 1; child<children; ++child)\n- 310 {\n- 311 for (std::size_t i = 0; i<subTreeSize; ++i)\n- 312 {\n- 313 // Copy indices from first child for all other children and overwrite\n- 314 // zero in first component as inserted above by child index.\n- 315 // multiIndices[child*subTreeSize+i] = multiIndices[i];\n- 316 // multiIndices[child*subTreeSize+i][0] = child;\n- 317 (*next) = multiIndices[i];\n- 318 (*next)[0] = child;\n- 319 ++next;\n- 320 }\n- 321 }\n- 322 return next;\n- 323 }\n- 324\n- 325 template<typename It>\n- 326 It indices(const Node& node, It multiIndices, BasisFactory::\n-BlockedInterleaved) const\n- 327 {\n- 328 using namespace Dune::Indices;\n- 329 size_type subTreeSize = node.child(_0).size();\n- 330 // Fill indices for first child at the beginning.\n- 331 auto next = subPreBasis().indices(node.child(_0), multiIndices);\n- 332 // Append 0 after last component of all indices for first child.\n- 333 for (std::size_t i = 0; i<subTreeSize; ++i)\n- 334 multiIndices[i].push_back(0);\n- 335 for (std::size_t child = 1; child<children; ++child)\n- 336 {\n- 337 for (std::size_t i = 0; i<subTreeSize; ++i)\n- 338 {\n- 339 // Copy indices from first child for all other children and overwrite\n- 340 // zero in last component as appended above by child index.\n- 341 (*next) = multiIndices[i];\n- 342 (*next).back() = child;\n- 343 ++next;\n- 344 }\n- 345 }\n- 346 return next;\n- 347 }\n- 348\n- 349 SubPreBasis subPreBasis_;\n- 350};\n- 351\n- 352\n- 353\n- 354namespace BasisFactory {\n- 355\n- 368template<std::size_t k, class ChildPreBasisFactory, class\n-IndexMergingStrategy>\n-369auto power(ChildPreBasisFactory&& childPreBasisFactory, const\n-IndexMergingStrategy&)\n- 370{\n- 371 return [childPreBasisFactory](const auto& gridView) {\n- 372 auto childPreBasis = childPreBasisFactory(gridView);\n- 373 return PowerPreBasis<IndexMergingStrategy,_decltype(childPreBasis),_k>\n-(std::move(childPreBasis));\n- 374 };\n- 375}\n- 376\n- 387template<std::size_t k, class ChildPreBasisFactory>\n-388auto power(ChildPreBasisFactory&& childPreBasisFactory)\n- 389{\n- 390 return [childPreBasisFactory](const auto& gridView) {\n- 391 auto childPreBasis = childPreBasisFactory(gridView);\n- 392 return PowerPreBasis<BlockedInterleaved,_decltype(childPreBasis),_k>(std::\n-move(childPreBasis));\n- 393 };\n- 394}\n- 395\n- 396} // end namespace BasisFactory\n- 397\n- 398// Backward compatibility\n- 399namespace BasisBuilder {\n- 400\n- 401 using namespace BasisFactory;\n- 402\n- 403}\n- 404\n- 405\n- 406} // end namespace Functions\n- 407} // end namespace Dune\n- 408\n- 409\n- 410#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH\n-utility.hh\n-type_traits.hh\n-defaultglobalbasis.hh\n-basistags.hh\n-nodes.hh\n-Dune::Functions::BasisFactory::power\n-auto power(ChildPreBasisFactory &&childPreBasisFactory)\n-Create a factory builder that can build a PowerPreBasis.\n-Definition: powerbasis.hh:388\n-Dune::Functions::enableIfConstructible\n-typename std::enable_if< std::is_constructible< T, Args... >::value, int >::\n-type enableIfConstructible\n-Helper to constrain forwarding constructors.\n-Definition: type_traits.hh:26\n+ 224\n+ 225\n+ 226} // namespace Functions\n+ 227} // namespace Dune\n+ 228\n+ 229#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH\n+Dune::Functions::subEntityDOFs\n+auto subEntityDOFs(const LocalView &localView, const Intersection\n+&intersection)\n+Create bound SubEntityDOFs object.\n+Definition: subentitydofs.hh:216\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::BasisFactory::IndexMergingStrategy\n-Base class for index merging strategies to simplify detection.\n-Definition: basistags.hh:44\n-Dune::Functions::BasisFactory::FlatInterleaved\n-Interleaved merging of direct children without blocking.\n-Definition: basistags.hh:114\n-Dune::Functions::PowerBasisNode\n-Definition: nodes.hh:193\n-Dune::Functions::PowerPreBasis\n-A pre-basis for power bases.\n-Definition: powerbasis.hh:45\n-Dune::Functions::PowerPreBasis::dimension\n-size_type dimension() const\n-Get the total dimension of the space spanned by this basis.\n-Definition: powerbasis.hh:207\n-Dune::Functions::PowerPreBasis::size_type\n-std::size_t size_type\n-Type used for indices and size information.\n-Definition: powerbasis.hh:58\n-Dune::Functions::PowerPreBasis::IndexMergingStrategy\n-IMS IndexMergingStrategy\n-Strategy used to merge the global indices of the child factories.\n-Definition: powerbasis.hh:61\n-Dune::Functions::PowerPreBasis::Node\n-PowerBasisNode< SubNode, children > Node\n-Template mapping root tree path to type of created tree node.\n-Definition: powerbasis.hh:66\n-Dune::Functions::PowerPreBasis::GridView\n-typename SPB::GridView GridView\n-The grid view that the FE basis is defined on.\n-Definition: powerbasis.hh:55\n-Dune::Functions::PowerPreBasis::multiIndexBufferSize\n-static constexpr size_type multiIndexBufferSize\n-Definition: powerbasis.hh:70\n-Dune::Functions::PowerPreBasis::SubPreBasis\n-SPB SubPreBasis\n-The child pre-basis.\n-Definition: powerbasis.hh:52\n-Dune::Functions::PowerPreBasis::SubNode\n-typename SubPreBasis::Node SubNode\n-Definition: powerbasis.hh:63\n-Dune::Functions::PowerPreBasis::initializeIndices\n-void initializeIndices()\n-Initialize the global indices.\n-Definition: powerbasis.hh:87\n-Dune::Functions::PowerPreBasis::update\n-void update(const GridView &gv)\n-Update the stored grid view, to be called if the grid has changed.\n-Definition: powerbasis.hh:99\n-Dune::Functions::PowerPreBasis::indices\n-It indices(const Node &node, It it) const\n-Maps from subtree index set [0..size-1] to a globally unique multi index in\n-global basis.\n-Definition: powerbasis.hh:232\n-Dune::Functions::PowerPreBasis::PowerPreBasis\n-PowerPreBasis(SFArgs &&... sfArgs)\n-Constructor for given child pre-basis objects.\n-Definition: powerbasis.hh:80\n-Dune::Functions::PowerPreBasis::size\n-size_type size() const\n-Same as size(prefix) with empty prefix.\n-Definition: powerbasis.hh:116\n-Dune::Functions::PowerPreBasis::subPreBasis\n-SubPreBasis & subPreBasis()\n-Mutable access to the stored prebasis of the factor in the power space.\n-Definition: powerbasis.hh:225\n-Dune::Functions::PowerPreBasis::makeNode\n-Node makeNode() const\n-Create tree node.\n-Definition: powerbasis.hh:107\n-Dune::Functions::PowerPreBasis::maxMultiIndexSize\n-static constexpr size_type maxMultiIndexSize\n-Definition: powerbasis.hh:68\n-Dune::Functions::PowerPreBasis::minMultiIndexSize\n-static constexpr size_type minMultiIndexSize\n-Definition: powerbasis.hh:69\n-Dune::Functions::PowerPreBasis::maxNodeSize\n-size_type maxNodeSize() const\n-Get the maximal number of DOFs associated to node for any element.\n-Definition: powerbasis.hh:213\n-Dune::Functions::PowerPreBasis::gridView\n-const GridView & gridView() const\n-Obtain the grid view that the basis is defined on.\n-Definition: powerbasis.hh:93\n-Dune::Functions::PowerPreBasis::size\n-size_type size(const SizePrefix &prefix) const\n-Return number of possible values for next position in multi index.\n-Definition: powerbasis.hh:124\n-Dune::Functions::PowerPreBasis::subPreBasis\n-const SubPreBasis & subPreBasis() const\n-Const access to the stored prebasis of the factor in the power space.\n-Definition: powerbasis.hh:219\n-concepts.hh\n+Dune::Functions::SubEntityDOFs\n+Range of DOFs associated to sub-entity.\n+Definition: subentitydofs.hh:42\n+Dune::Functions::SubEntityDOFs::begin\n+auto begin() const\n+Create begin iterator for access to range of contained local indices.\n+Definition: subentitydofs.hh:110\n+Dune::Functions::SubEntityDOFs::size\n+auto size() const\n+Return number of contained DOFs.\n+Definition: subentitydofs.hh:122\n+Dune::Functions::SubEntityDOFs::bind\n+SubEntityDOFs & bind(const LocalView &localView, const Intersection\n+&intersection)\n+Bind SubEntityDOFs object to LocalView and sub-entity.\n+Definition: subentitydofs.hh:104\n+Dune::Functions::SubEntityDOFs::contains\n+bool contains(std::size_t localIndex) const\n+Check if given local index is contained in this range of DOFs.\n+Definition: subentitydofs.hh:134\n+Dune::Functions::SubEntityDOFs::end\n+auto end() const\n+Create end iterator for access to range of contained local indices.\n+Definition: subentitydofs.hh:116\n+Dune::Functions::SubEntityDOFs::bind\n+SubEntityDOFs & bind(const LocalView &localView, std::size_t subEntityIndex,\n+std::size_t subEntityCodim)\n+Bind SubEntityDOFs object to LocalView and sub-entity.\n+Definition: subentitydofs.hh:64\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00119.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00119.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: defaultglobalbasis.hh File Reference</title>\n+<title>dune-functions: lagrangedgbasis.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -65,58 +65,58 @@\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> |\n+<a href=\"#typedef-members\">Typedefs</a> |\n <a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">defaultglobalbasis.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">lagrangedgbasis.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <cstddef></code><br />\n-<code>#include <type_traits></code><br />\n-<code>#include <utility></code><br />\n-<code>#include <dune/common/reservedvector.hh></code><br />\n-<code>#include <dune/common/typeutilities.hh></code><br />\n-<code>#include <dune/common/concept.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00092_source.html\">dune/functions/common/type_traits.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00140_source.html\">dune/functions/functionspacebases/defaultlocalview.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a02876_source.html\">dune/functions/functionspacebases/concepts.hh</a>></code><br />\n+<div class=\"textblock\"><code>#include <array></code><br />\n+<code>#include <dune/common/exceptions.hh></code><br />\n+<code>#include <dune/common/math.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00179_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00152_source.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00122_source.html\">dune/functions/functionspacebases/lagrangebasis.hh</a>></code><br />\n </div>\n <p><a href=\"a00119_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01555.html\">Dune::Functions::DefaultGlobalBasis< PB ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Global basis for given pre-basis. <a href=\"a01555.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01679.html\">Dune::Functions::LagrangeDGPreBasis< GV, k ></a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00224\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00224.html\">Dune::Functions::BasisFactory</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a00225\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00225.html\">Dune::Functions::BasisBuilder</a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+</table><table class=\"memberdecls\">\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"typedef-members\" name=\"typedef-members\"></a>\n+Typedefs</h2></td></tr>\n+<tr class=\"memitem:afa871daf79a93a0f0b19e6e480b41c95\"><td class=\"memTemplParams\" colspan=\"2\">template<typename GV , int k> </td></tr>\n+<tr class=\"memitem:afa871daf79a93a0f0b19e6e480b41c95\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#afa871daf79a93a0f0b19e6e480b41c95\">Dune::Functions::LagrangeDGNode</a> = LagrangeNode< GV, k ></td></tr>\n+<tr class=\"separator:afa871daf79a93a0f0b19e6e480b41c95\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga5de7b8547ff84158602bfb45a4358c67\"><td class=\"memTemplParams\" colspan=\"2\">template<typename GV , int k> </td></tr>\n+<tr class=\"memitem:ga5de7b8547ff84158602bfb45a4358c67\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#ga5de7b8547ff84158602bfb45a4358c67\">Dune::Functions::LagrangeDGBasis</a> = DefaultGlobalBasis< LagrangeDGPreBasis< GV, k > ></td></tr>\n+<tr class=\"memdesc:ga5de7b8547ff84158602bfb45a4358c67\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Basis of a scalar k-th-order Lagrangean-DG finite element space. <a href=\"a00213.html#ga5de7b8547ff84158602bfb45a4358c67\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga5de7b8547ff84158602bfb45a4358c67\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n Functions</h2></td></tr>\n-<tr class=\"memitem:a060058e4e3c070530978192cb7c99d39\"><td class=\"memTemplParams\" colspan=\"2\">template<class PreBasis > </td></tr>\n-<tr class=\"memitem:a060058e4e3c070530978192cb7c99d39\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\"> </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a060058e4e3c070530978192cb7c99d39\">Dune::Functions::DefaultGlobalBasis</a> (PreBasis &&) -> DefaultGlobalBasis< std::decay_t< PreBasis > ></td></tr>\n-<tr class=\"separator:a060058e4e3c070530978192cb7c99d39\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a57d2c8b66fd384768b94af95e4ce5d78\"><td class=\"memTemplParams\" colspan=\"2\">template<class GridView , class PreBasisFactory > </td></tr>\n-<tr class=\"memitem:a57d2c8b66fd384768b94af95e4ce5d78\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\"> </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a57d2c8b66fd384768b94af95e4ce5d78\">Dune::Functions::DefaultGlobalBasis</a> (const GridView &gv, PreBasisFactory &&f) -> DefaultGlobalBasis< std::decay_t< decltype(f(gv))> ></td></tr>\n-<tr class=\"separator:a57d2c8b66fd384768b94af95e4ce5d78\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a1f0dc55c03c3a9862c76456d5574abe2\"><td class=\"memTemplParams\" colspan=\"2\">template<class GridView , class PreBasisFactory > </td></tr>\n-<tr class=\"memitem:a1f0dc55c03c3a9862c76456d5574abe2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00224.html#a1f0dc55c03c3a9862c76456d5574abe2\">Dune::Functions::BasisFactory::makeBasis</a> (const GridView &gridView, PreBasisFactory &&preBasisFactory)</td></tr>\n-<tr class=\"separator:a1f0dc55c03c3a9862c76456d5574abe2\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:gae7dbc0c4e48b9cf3da63d6ef431b3481\"><td class=\"memTemplParams\" colspan=\"2\">template<std::size_t k> </td></tr>\n+<tr class=\"memitem:gae7dbc0c4e48b9cf3da63d6ef431b3481\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#gae7dbc0c4e48b9cf3da63d6ef431b3481\">Dune::Functions::BasisFactory::lagrangeDG</a> ()</td></tr>\n+<tr class=\"memdesc:gae7dbc0c4e48b9cf3da63d6ef431b3481\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a pre-basis factory that can create a LagrangeDG pre-basis. <a href=\"a00213.html#gae7dbc0c4e48b9cf3da63d6ef431b3481\">More...</a><br /></td></tr>\n+<tr class=\"separator:gae7dbc0c4e48b9cf3da63d6ef431b3481\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,48 +5,44 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-Classes | Namespaces | Functions\n-defaultglobalbasis.hh File Reference\n-#include <cstddef>\n-#include <type_traits>\n-#include <utility>\n-#include <dune/common/reservedvector.hh>\n-#include <dune/common/typeutilities.hh>\n-#include <dune/common/concept.hh>\n-#include <dune/functions/common/type_traits.hh>\n-#include <dune/functions/functionspacebases/defaultlocalview.hh>\n-#include <dune/functions/functionspacebases/concepts.hh>\n+Classes | Namespaces | Typedefs | Functions\n+lagrangedgbasis.hh File Reference\n+#include <array>\n+#include <dune/common/exceptions.hh>\n+#include <dune/common/math.hh>\n+#include <dune/functions/functionspacebases/nodes.hh>\n+#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n+#include <dune/functions/functionspacebases/lagrangebasis.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-class \u00a0Dune::Functions::DefaultGlobalBasis<_PB_>\n-\u00a0 Global basis for given pre-basis. More...\n+class \u00a0Dune::Functions::LagrangeDGPreBasis<_GV,_k_>\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n namespace \u00a0Dune::Functions::BasisFactory\n \u00a0\n-namespace \u00a0Dune::Functions::BasisBuilder\n+ Typedefs\n+template<typename GV , int k>\n+using\u00a0Dune::Functions::LagrangeDGNode = LagrangeNode< GV, k >\n+\u00a0\n+template<typename GV , int k>\n+using\u00a0Dune::Functions::LagrangeDGBasis = DefaultGlobalBasis<\n+ LagrangeDGPreBasis< GV, k > >\n+\u00a0 Basis of a scalar k-th-order Lagrangean-DG finite element space. More...\n \u00a0\n Functions\n-template<class PreBasis >\n- \u00a0Dune::Functions::DefaultGlobalBasis (PreBasis &&) -> DefaultGlobalBasis<\n- std::decay_t< PreBasis > >\n-\u00a0\n-template<class GridView , class PreBasisFactory >\n- \u00a0Dune::Functions::DefaultGlobalBasis (const GridView &gv, PreBasisFactory\n- &&f) -> DefaultGlobalBasis< std::decay_t< decltype(f(gv))> >\n-\u00a0\n-template<class GridView , class PreBasisFactory >\n-auto\u00a0Dune::Functions::BasisFactory::makeBasis (const GridView &gridView,\n- PreBasisFactory &&preBasisFactory)\n+template<std::size_t k>\n+auto\u00a0Dune::Functions::BasisFactory::lagrangeDG ()\n+\u00a0 Create a pre-basis factory that can create a LagrangeDG pre-basis.\n+ More...\n \u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00119_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00119_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: defaultglobalbasis.hh Source File</title>\n+<title>dune-functions: lagrangedgbasis.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,203 +62,283 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">defaultglobalbasis.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">lagrangedgbasis.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00119.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <cstddef></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <type_traits></span></div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <utility></span></div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <array></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <dune/common/exceptions.hh></span></div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <dune/common/math.hh></span></div>\n <div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/reservedvector.hh></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/common/typeutilities.hh></span></div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <dune/common/concept.hh></span></div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00179.html\">dune/functions/functionspacebases/nodes.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00152.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00122.html\">dune/functions/functionspacebases/lagrangebasis.hh</a>></span></div>\n <div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00092.html\">dune/functions/common/type_traits.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00140.html\">dune/functions/functionspacebases/defaultlocalview.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a02876.html\">dune/functions/functionspacebases/concepts.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"keyword\">namespace </span>Functions {</div>\n <div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> </div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span> </div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> </div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> PB></div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html\"> 45</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01555.html\">DefaultGlobalBasis</a></div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span>{</div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span> </div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> </div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"comment\">// This is the reusable part of the basis. It contains</span></div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"comment\">//</span></div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span><span class=\"comment\">// LagrangeDGPreBasis</span></div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"comment\">// LagrangeDGNode</span></div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span><span class=\"comment\">//</span></div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span><span class=\"comment\">// The pre-basis allows to create the others and is the owner of possible shared</span></div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span><span class=\"comment\">// state. These components do _not_ depend on the global basis and local view</span></div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span><span class=\"comment\">// and can be used without a global basis.</span></div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> </div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k></div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#afa871daf79a93a0f0b19e6e480b41c95\"> 34</a></span><span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01667.html\">LagrangeDGNode</a> = <a class=\"code hl_class\" href=\"a01667.html\">LagrangeNode<GV, k></a>;</div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> </div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k></div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html\"> 37</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01679.html\">LagrangeDGPreBasis</a></div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span>{</div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dim = GV::dimension;</div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> </div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> </div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a8af148321780535e5555938ac4590e3c\"> 44</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01679.html#a8af148321780535e5555938ac4590e3c\">GridView</a> = GV;</div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#aef9347d55bd08683c5da3937c9e347bc\"> 45</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01679.html#aef9347d55bd08683c5da3937c9e347bc\">size_type</a> = std::size_t;</div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> </div>\n <div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> </div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#a4d800349e8aa9ae148a178827d51ccda\"> 51</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01555.html#a4d800349e8aa9ae148a178827d51ccda\">PreBasis</a> = PB;</div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> </div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#aa33c9a46f1e7548b2a956c36f6554e89\"> 54</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01555.html#aa33c9a46f1e7548b2a956c36f6554e89\">PrefixPath</a> = TypeTree::HybridTreePath<>;</div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> </div>\n-<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#a2b9cab135f3764650ad063d49c4c2fcb\"> 57</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01555.html#a2b9cab135f3764650ad063d49c4c2fcb\">GridView</a> = <span class=\"keyword\">typename</span> PreBasis::GridView;</div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> </div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#a10db3413eda75531530d9b0bf82e8335\"> 60</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01555.html#a10db3413eda75531530d9b0bf82e8335\">size_type</a> = std::size_t;</div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> </div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#a6dd2621b698c77033f1b37443b7c7e65\"> 63</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01559.html\">LocalView</a> = <a class=\"code hl_class\" href=\"a01559.html\">DefaultLocalView<DefaultGlobalBasis<PreBasis></a>>;</div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> </div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#a71e8362c3966f9bc4ced844fb8474be7\"> 66</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01555.html#a71e8362c3966f9bc4ced844fb8474be7\">MultiIndex</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01559.html#acffe4cd37e8a7720e1a3eced31570c5a\">LocalView::MultiIndex</a>;</div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> </div>\n-<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#a00a78eb6f90d02a8c5dd3d4718b14e99\"> 69</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01555.html#a00a78eb6f90d02a8c5dd3d4718b14e99\">SizePrefix</a> = Dune::ReservedVector<std::size_t, PreBasis::multiIndexBufferSize>;</div>\n-<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> </div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>... T,</div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> disableCopyMove<<a class=\"code hl_function\" href=\"a01555.html#ac8c43e23bffc9116702a479f1c1d01f4\">DefaultGlobalBasis</a>, T...> = 0,</div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> <a class=\"code hl_typedef\" href=\"a00215.html#ga673247dd74bcdd9e5acfc7735faf8a5b\">enableIfConstructible</a><<a class=\"code hl_typedef\" href=\"a01555.html#a4d800349e8aa9ae148a178827d51ccda\">PreBasis</a>, T...> = 0></div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#ac8c43e23bffc9116702a479f1c1d01f4\"> 82</a></span> <a class=\"code hl_function\" href=\"a01555.html#ac8c43e23bffc9116702a479f1c1d01f4\">DefaultGlobalBasis</a>(T&&... t) :</div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> <a class=\"code hl_variable\" href=\"a01555.html#a7d0a58f78727ab3b0d9159a899031f07\">preBasis_</a>(std::forward<T>(t)...),</div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> <a class=\"code hl_variable\" href=\"a01555.html#aeed6ef808c134ff63cea8102b7a03c22\">prefixPath_</a>()</div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> {</div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> <span class=\"keyword\">static_assert</span>(models<Concept::PreBasis<GridView>, <a class=\"code hl_typedef\" href=\"a01555.html#a4d800349e8aa9ae148a178827d51ccda\">PreBasis</a>>(), <span class=\"stringliteral\">"Type passed to DefaultGlobalBasis does not model the PreBasis concept."</span>);</div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> <a class=\"code hl_variable\" href=\"a01555.html#a7d0a58f78727ab3b0d9159a899031f07\">preBasis_</a>.initializeIndices();</div>\n-<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> }</div>\n-<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> </div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>PreBasisFactory,</div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> std::enable_if_t<Dune::IsCallable<PreBasisFactory(<a class=\"code hl_typedef\" href=\"a01555.html#a2b9cab135f3764650ad063d49c4c2fcb\">GridView</a>), <a class=\"code hl_typedef\" href=\"a01555.html#a4d800349e8aa9ae148a178827d51ccda\">PreBasis</a>>::value, <span class=\"keywordtype\">int</span>> = 0></div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#aca0a06166bf28fbc1f22dbcb7ca98812\"> 98</a></span> <a class=\"code hl_function\" href=\"a01555.html#aca0a06166bf28fbc1f22dbcb7ca98812\">DefaultGlobalBasis</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01555.html#a2b9cab135f3764650ad063d49c4c2fcb\">GridView</a>& <a class=\"code hl_function\" href=\"a01555.html#a34897e5d2dd92bf5f34d61e47a9eff66\">gridView</a>, PreBasisFactory&& factory) :</div>\n-<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> <a class=\"code hl_variable\" href=\"a01555.html#a7d0a58f78727ab3b0d9159a899031f07\">preBasis_</a>(factory(<a class=\"code hl_function\" href=\"a01555.html#a34897e5d2dd92bf5f34d61e47a9eff66\">gridView</a>)),</div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> <a class=\"code hl_variable\" href=\"a01555.html#aeed6ef808c134ff63cea8102b7a03c22\">prefixPath_</a>()</div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> {</div>\n-<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> <span class=\"keyword\">static_assert</span>(models<Concept::PreBasis<GridView>, <a class=\"code hl_typedef\" href=\"a01555.html#a4d800349e8aa9ae148a178827d51ccda\">PreBasis</a>>(), <span class=\"stringliteral\">"Type passed to DefaultGlobalBasis does not model the PreBasis concept."</span>);</div>\n-<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> <a class=\"code hl_variable\" href=\"a01555.html#a7d0a58f78727ab3b0d9159a899031f07\">preBasis_</a>.initializeIndices();</div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> }</div>\n-<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> </div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#a34897e5d2dd92bf5f34d61e47a9eff66\"> 107</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01555.html#a2b9cab135f3764650ad063d49c4c2fcb\">GridView</a>& <a class=\"code hl_function\" href=\"a01555.html#a34897e5d2dd92bf5f34d61e47a9eff66\">gridView</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01555.html#a7d0a58f78727ab3b0d9159a899031f07\">preBasis_</a>.gridView();</div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> }</div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> </div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#ae9a040d36416bf5456a7d7cbca241f17\"> 113</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01555.html#a4d800349e8aa9ae148a178827d51ccda\">PreBasis</a>& <a class=\"code hl_function\" href=\"a01555.html#ae9a040d36416bf5456a7d7cbca241f17\">preBasis</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01555.html#a7d0a58f78727ab3b0d9159a899031f07\">preBasis_</a>;</div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> }</div>\n-<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> </div>\n-<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#a6683475941d1516b89a98d6ace4d5842\"> 119</a></span> <a class=\"code hl_typedef\" href=\"a01555.html#a4d800349e8aa9ae148a178827d51ccda\">PreBasis</a>& <a class=\"code hl_function\" href=\"a01555.html#a6683475941d1516b89a98d6ace4d5842\">preBasis</a>()</div>\n-<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> {</div>\n-<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01555.html#a7d0a58f78727ab3b0d9159a899031f07\">preBasis_</a>;</div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> }</div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> </div>\n-<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#a6b7b8b0a9c65da16b6fe1b7e6ef20e8c\"> 130</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01555.html#a6b7b8b0a9c65da16b6fe1b7e6ef20e8c\">update</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01555.html#a2b9cab135f3764650ad063d49c4c2fcb\">GridView</a> & gv)</div>\n-<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> {</div>\n-<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> <a class=\"code hl_variable\" href=\"a01555.html#a7d0a58f78727ab3b0d9159a899031f07\">preBasis_</a>.update(gv);</div>\n-<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> <a class=\"code hl_variable\" href=\"a01555.html#a7d0a58f78727ab3b0d9159a899031f07\">preBasis_</a>.initializeIndices();</div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> <span class=\"comment\">// Precompute the number of dofs per entity type</span></div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a99e23efcb7d3e14798f723ba9f033afe\"> 49</a></span> <span class=\"keyword\">const</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_variable\" href=\"a01679.html#a99e23efcb7d3e14798f723ba9f033afe\">dofsPerEdge</a> = k+1;</div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#ab9209fa402834b5c9a35d9e987122dce\"> 50</a></span> <span class=\"keyword\">const</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_variable\" href=\"a01679.html#ab9209fa402834b5c9a35d9e987122dce\">dofsPerTriangle</a> = (k+1)*(k+2)/2;</div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#aad680a5b4e4584e3f2d56396af361123\"> 51</a></span> <span class=\"keyword\">const</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_variable\" href=\"a01679.html#aad680a5b4e4584e3f2d56396af361123\">dofsPerQuad</a> = (k+1)*(k+1);</div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a755b7a249dd88abd62ce3be575320572\"> 52</a></span> <span class=\"keyword\">const</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_variable\" href=\"a01679.html#a755b7a249dd88abd62ce3be575320572\">dofsPerTetrahedron</a> = (k+1)*(k+2)*(k+3)/6;</div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#afb53eceb4802d0e888664e0cbe33f843\"> 53</a></span> <span class=\"keyword\">const</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_variable\" href=\"a01679.html#afb53eceb4802d0e888664e0cbe33f843\">dofsPerPrism</a> = (k+1)*(k+1)*(k+2)/2;</div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a64d5d4089862c52124131d75c156facf\"> 54</a></span> <span class=\"keyword\">const</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_variable\" href=\"a01679.html#a64d5d4089862c52124131d75c156facf\">dofsPerHexahedron</a> = (k+1)*(k+1)*(k+1);</div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#ac1406270c17daf802721fae3e90d350f\"> 55</a></span> <span class=\"keyword\">const</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_variable\" href=\"a01679.html#ac1406270c17daf802721fae3e90d350f\">dofsPerPyramid</a> = (k+1)*(k+2)*(2*k+3)/6;</div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> </div>\n+<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> </div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a1358396b2a7d352807195b7e2e855849\"> 58</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01667.html\">Node</a> = <a class=\"code hl_class\" href=\"a01667.html\">LagrangeDGNode<GV, k></a>;</div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> </div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a4ceb8a4c31a5cf55d03f715717c95910\"> 60</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01679.html#aef9347d55bd08683c5da3937c9e347bc\">size_type</a> <a class=\"code hl_variable\" href=\"a01679.html#a4ceb8a4c31a5cf55d03f715717c95910\">maxMultiIndexSize</a> = 1;</div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#ae9cd5968c89433b07b3de6c28e89a368\"> 61</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01679.html#aef9347d55bd08683c5da3937c9e347bc\">size_type</a> <a class=\"code hl_variable\" href=\"a01679.html#ae9cd5968c89433b07b3de6c28e89a368\">minMultiIndexSize</a> = 1;</div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a20f969e87311ae7db719d06e7737d70e\"> 62</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01679.html#aef9347d55bd08683c5da3937c9e347bc\">size_type</a> <a class=\"code hl_variable\" href=\"a01679.html#a20f969e87311ae7db719d06e7737d70e\">multiIndexBufferSize</a> = 1;</div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> </div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a6922ab8ade352184b13dca9d354b663e\"> 65</a></span> <a class=\"code hl_function\" href=\"a01679.html#a6922ab8ade352184b13dca9d354b663e\">LagrangeDGPreBasis</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01679.html#a8af148321780535e5555938ac4590e3c\">GridView</a>& gv) :</div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> <a class=\"code hl_variable\" href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\">gridView_</a>(gv)</div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> {}</div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> </div>\n+<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> </div>\n+<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a8b70bc6aa806e06c8062a69d4287af96\"> 70</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01679.html#a8b70bc6aa806e06c8062a69d4287af96\">initializeIndices</a>()</div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> {</div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> <span class=\"keywordflow\">switch</span> (dim)</div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> {</div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> <span class=\"keywordflow\">case</span> 1:</div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> {</div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> <span class=\"keywordflow\">break</span>;</div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> }</div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> <span class=\"keywordflow\">case</span> 2:</div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> {</div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> <a class=\"code hl_variable\" href=\"a01679.html#a8f9bb80599a31e77d8b96522467fa691\">quadrilateralOffset_</a> = <a class=\"code hl_variable\" href=\"a01679.html#ab9209fa402834b5c9a35d9e987122dce\">dofsPerTriangle</a> * <a class=\"code hl_variable\" href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\">gridView_</a>.size(Dune::GeometryTypes::triangle);</div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> <span class=\"keywordflow\">break</span>;</div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> }</div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> <span class=\"keywordflow\">case</span> 3:</div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> {</div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> <a class=\"code hl_variable\" href=\"a01679.html#afb36ed4d135e4755c90307f3a1678f55\">prismOffset_</a> = <a class=\"code hl_variable\" href=\"a01679.html#a755b7a249dd88abd62ce3be575320572\">dofsPerTetrahedron</a> * <a class=\"code hl_variable\" href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\">gridView_</a>.size(Dune::GeometryTypes::tetrahedron);</div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> </div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> <a class=\"code hl_variable\" href=\"a01679.html#a49fc97158b3e4b9851ed636300c718ce\">hexahedronOffset_</a> = <a class=\"code hl_variable\" href=\"a01679.html#afb36ed4d135e4755c90307f3a1678f55\">prismOffset_</a> + <a class=\"code hl_variable\" href=\"a01679.html#afb53eceb4802d0e888664e0cbe33f843\">dofsPerPrism</a> * <a class=\"code hl_variable\" href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\">gridView_</a>.size(Dune::GeometryTypes::prism);</div>\n+<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> </div>\n+<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> <a class=\"code hl_variable\" href=\"a01679.html#a6ad26ab973d39bc12e575d80cd1320d2\">pyramidOffset_</a> = <a class=\"code hl_variable\" href=\"a01679.html#a49fc97158b3e4b9851ed636300c718ce\">hexahedronOffset_</a> + <a class=\"code hl_variable\" href=\"a01679.html#a64d5d4089862c52124131d75c156facf\">dofsPerHexahedron</a> * <a class=\"code hl_variable\" href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\">gridView_</a>.size(Dune::GeometryTypes::hexahedron);</div>\n+<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> <span class=\"keywordflow\">break</span>;</div>\n+<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> }</div>\n+<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> }</div>\n+<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> }</div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> </div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#aa6c5ef18a6d21e99037521fd668711af\"> 97</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01679.html#a8af148321780535e5555938ac4590e3c\">GridView</a>& <a class=\"code hl_function\" href=\"a01679.html#aa6c5ef18a6d21e99037521fd668711af\">gridView</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\">gridView_</a>;</div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> }</div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> </div>\n+<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a4952fa7945357c969435f48c0a643dd7\"> 102</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01679.html#a4952fa7945357c969435f48c0a643dd7\">update</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01679.html#a8af148321780535e5555938ac4590e3c\">GridView</a>& gv)</div>\n+<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> {</div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> <a class=\"code hl_variable\" href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\">gridView_</a> = gv;</div>\n+<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> }</div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> </div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a4bf95ae4450021799f1d8b14fbb6c78b\"> 110</a></span> <a class=\"code hl_class\" href=\"a01667.html\">Node</a> <a class=\"code hl_function\" href=\"a01679.html#a4bf95ae4450021799f1d8b14fbb6c78b\">makeNode</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01667.html\">Node</a>{};</div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> }</div>\n+<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> </div>\n+<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a0d2c4b976257136afdf2b1ac4553a3e9\"> 115</a></span> <a class=\"code hl_typedef\" href=\"a01679.html#aef9347d55bd08683c5da3937c9e347bc\">size_type</a> <a class=\"code hl_function\" href=\"a01679.html#a0d2c4b976257136afdf2b1ac4553a3e9\">size</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> <span class=\"keywordflow\">switch</span> (dim)</div>\n+<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> {</div>\n+<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> <span class=\"keywordflow\">case</span> 1:</div>\n+<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01679.html#a99e23efcb7d3e14798f723ba9f033afe\">dofsPerEdge</a>*<a class=\"code hl_variable\" href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\">gridView_</a>.size(0);</div>\n+<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> <span class=\"keywordflow\">case</span> 2:</div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> {</div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01679.html#ab9209fa402834b5c9a35d9e987122dce\">dofsPerTriangle</a>*<a class=\"code hl_variable\" href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\">gridView_</a>.size(Dune::GeometryTypes::triangle) + <a class=\"code hl_variable\" href=\"a01679.html#aad680a5b4e4584e3f2d56396af361123\">dofsPerQuad</a>*<a class=\"code hl_variable\" href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\">gridView_</a>.size(Dune::GeometryTypes::quadrilateral);</div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> }</div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> <span class=\"keywordflow\">case</span> 3:</div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> {</div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01679.html#a755b7a249dd88abd62ce3be575320572\">dofsPerTetrahedron</a>*<a class=\"code hl_variable\" href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\">gridView_</a>.size(Dune::GeometryTypes::tetrahedron)</div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> + <a class=\"code hl_variable\" href=\"a01679.html#ac1406270c17daf802721fae3e90d350f\">dofsPerPyramid</a>*<a class=\"code hl_variable\" href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\">gridView_</a>.size(Dune::GeometryTypes::pyramid)</div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> + <a class=\"code hl_variable\" href=\"a01679.html#afb53eceb4802d0e888664e0cbe33f843\">dofsPerPrism</a>*<a class=\"code hl_variable\" href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\">gridView_</a>.size(Dune::GeometryTypes::prism)</div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> + <a class=\"code hl_variable\" href=\"a01679.html#a64d5d4089862c52124131d75c156facf\">dofsPerHexahedron</a>*<a class=\"code hl_variable\" href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\">gridView_</a>.size(Dune::GeometryTypes::hexahedron);</div>\n+<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> }</div>\n+<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> }</div>\n+<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"No size method for "</span> << dim << <span class=\"stringliteral\">"d grids available yet!"</span>);</div>\n <div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> }</div>\n <div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> </div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#a762dcee80e33652a80d5aca07244bbb5\"> 137</a></span> <a class=\"code hl_typedef\" href=\"a01555.html#a10db3413eda75531530d9b0bf82e8335\">size_type</a> <a class=\"code hl_function\" href=\"a01555.html#a762dcee80e33652a80d5aca07244bbb5\">dimension</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01555.html#a7d0a58f78727ab3b0d9159a899031f07\">preBasis_</a>.dimension();</div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> }</div>\n-<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> </div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#ad77464358ec140b149c1391d036eaed1\"> 143</a></span> <a class=\"code hl_typedef\" href=\"a01555.html#a10db3413eda75531530d9b0bf82e8335\">size_type</a> <a class=\"code hl_function\" href=\"a01555.html#ad77464358ec140b149c1391d036eaed1\">size</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01555.html#a7d0a58f78727ab3b0d9159a899031f07\">preBasis_</a>.size();</div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> }</div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> </div>\n-<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#a752ada691a91cb10c109e3a1093df507\"> 149</a></span> <a class=\"code hl_typedef\" href=\"a01555.html#a10db3413eda75531530d9b0bf82e8335\">size_type</a> <a class=\"code hl_function\" href=\"a01555.html#a752ada691a91cb10c109e3a1093df507\">size</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01555.html#a00a78eb6f90d02a8c5dd3d4718b14e99\">SizePrefix</a>& prefix)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01555.html#a7d0a58f78727ab3b0d9159a899031f07\">preBasis_</a>.size(prefix);</div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> }</div>\n-<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> </div>\n-<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#a836be8e833f7f5b1910bc247658df00a\"> 155</a></span> <a class=\"code hl_class\" href=\"a01559.html\">LocalView</a> <a class=\"code hl_function\" href=\"a01555.html#a836be8e833f7f5b1910bc247658df00a\">localView</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_typedef\" href=\"a01555.html#a6dd2621b698c77033f1b37443b7c7e65\">LocalView</a>(*<span class=\"keyword\">this</span>);</div>\n-<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> }</div>\n-<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> </div>\n-<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#aeff2d7cf6ef6c17e4c27f12d997701a3\"> 161</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01555.html\">DefaultGlobalBasis</a>& <a class=\"code hl_function\" href=\"a01555.html#aeff2d7cf6ef6c17e4c27f12d997701a3\">rootBasis</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>;</div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> }</div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> </div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#afa626db7f92e548a453532c0a600301f\"> 167</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01555.html#aa33c9a46f1e7548b2a956c36f6554e89\">PrefixPath</a>& <a class=\"code hl_function\" href=\"a01555.html#afa626db7f92e548a453532c0a600301f\">prefixPath</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01555.html#aeed6ef808c134ff63cea8102b7a03c22\">prefixPath_</a>;</div>\n-<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> }</div>\n-<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> </div>\n-<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span><span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#a7d0a58f78727ab3b0d9159a899031f07\"> 173</a></span> <a class=\"code hl_typedef\" href=\"a01555.html#a4d800349e8aa9ae148a178827d51ccda\">PreBasis</a> <a class=\"code hl_variable\" href=\"a01555.html#a7d0a58f78727ab3b0d9159a899031f07\">preBasis_</a>;</div>\n-<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#aeed6ef808c134ff63cea8102b7a03c22\"> 174</a></span> <a class=\"code hl_typedef\" href=\"a01555.html#aa33c9a46f1e7548b2a956c36f6554e89\">PrefixPath</a> <a class=\"code hl_variable\" href=\"a01555.html#aeed6ef808c134ff63cea8102b7a03c22\">prefixPath_</a>;</div>\n-<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span>};</div>\n-<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> </div>\n-<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> </div>\n-<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> </div>\n-<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> PreBasis></div>\n-<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a060058e4e3c070530978192cb7c99d39\"> 180</a></span><a class=\"code hl_function\" href=\"a00219.html#a060058e4e3c070530978192cb7c99d39\">DefaultGlobalBasis</a>(PreBasis&&) -> <a class=\"code hl_class\" href=\"a01555.html\">DefaultGlobalBasis<std::decay_t<PreBasis></a>>;</div>\n-<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> </div>\n-<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Gr<span class=\"keywordtype\">id</span>View, <span class=\"keyword\">class</span> PreBasisFactory></div>\n-<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a57d2c8b66fd384768b94af95e4ce5d78\"> 183</a></span><a class=\"code hl_function\" href=\"a00219.html#a060058e4e3c070530978192cb7c99d39\">DefaultGlobalBasis</a>(<span class=\"keyword\">const</span> GridView& gv, PreBasisFactory&& f) -> <a class=\"code hl_class\" href=\"a01555.html\">DefaultGlobalBasis</a><std::decay_t<<span class=\"keyword\">decltype</span>(f(gv))>>;</div>\n-<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span> </div>\n-<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> </div>\n-<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> </div>\n-<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span><span class=\"keyword\">namespace </span>BasisFactory {</div>\n-<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> </div>\n-<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Gr<span class=\"keywordtype\">id</span>View, <span class=\"keyword\">class</span> PreBasisFactory></div>\n-<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00224.html#a1f0dc55c03c3a9862c76456d5574abe2\"> 190</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00224.html#a1f0dc55c03c3a9862c76456d5574abe2\">makeBasis</a>(<span class=\"keyword\">const</span> GridView& gridView, PreBasisFactory&& preBasisFactory)</div>\n-<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span>{</div>\n-<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00219.html#a060058e4e3c070530978192cb7c99d39\">DefaultGlobalBasis</a>(preBasisFactory(gridView));</div>\n-<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span>}</div>\n-<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> </div>\n-<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span>} <span class=\"comment\">// end namespace BasisFactory</span></div>\n-<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> </div>\n-<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span><span class=\"comment\">// Backward compatibility</span></div>\n-<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span><span class=\"keyword\">namespace </span>BasisBuilder {</div>\n-<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> </div>\n-<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> <span class=\"keyword\">using namespace </span>BasisFactory;</div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a845490072407c1b9228ba479879e58eb\"> 138</a></span> <a class=\"code hl_typedef\" href=\"a01679.html#aef9347d55bd08683c5da3937c9e347bc\">size_type</a> <a class=\"code hl_function\" href=\"a01679.html#a845490072407c1b9228ba479879e58eb\">size</a>(<span class=\"keyword\">const</span> SizePrefix& prefix)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> assert(prefix.size() == 0 || prefix.size() == 1);</div>\n+<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> <span class=\"keywordflow\">return</span> (prefix.size() == 0) ? <a class=\"code hl_function\" href=\"a01679.html#a0d2c4b976257136afdf2b1ac4553a3e9\">size</a>() : 0;</div>\n+<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> }</div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> </div>\n+<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#af02b1117a420678629201602beea6cec\"> 145</a></span> <a class=\"code hl_typedef\" href=\"a01679.html#aef9347d55bd08683c5da3937c9e347bc\">size_type</a> <a class=\"code hl_function\" href=\"a01679.html#af02b1117a420678629201602beea6cec\">dimension</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01679.html#a0d2c4b976257136afdf2b1ac4553a3e9\">size</a>();</div>\n+<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> }</div>\n+<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> </div>\n+<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a1e75fb410ce720edf5415828059f52d0\"> 150</a></span> <a class=\"code hl_typedef\" href=\"a01679.html#aef9347d55bd08683c5da3937c9e347bc\">size_type</a> <a class=\"code hl_function\" href=\"a01679.html#a1e75fb410ce720edf5415828059f52d0\">maxNodeSize</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00213.html#ga0d8eb549af76bc2563ab189e63668ee5\">Dune::power</a>(k+1, <span class=\"keywordtype\">int</span>(GV::dimension));</div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> }</div>\n+<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> </div>\n+<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n+<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a1bf33483feb5a8f3482b2bcb2d591883\"> 156</a></span> It <a class=\"code hl_function\" href=\"a01679.html#a1bf33483feb5a8f3482b2bcb2d591883\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01667.html\">Node</a>& node, It it)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridIndexSet = <a class=\"code hl_function\" href=\"a01679.html#aa6c5ef18a6d21e99037521fd668711af\">gridView</a>().indexSet();</div>\n+<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& element = node.<a class=\"code hl_function\" href=\"a01667.html#a9d58cded4e8fb6665c22c758e55f4914\">element</a>();</div>\n+<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> </div>\n+<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> <a class=\"code hl_typedef\" href=\"a01679.html#aef9347d55bd08683c5da3937c9e347bc\">size_type</a> offset = 0;</div>\n+<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> (dim==1)</div>\n+<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> offset = <a class=\"code hl_variable\" href=\"a01679.html#a99e23efcb7d3e14798f723ba9f033afe\">dofsPerEdge</a>*gridIndexSet.subIndex(element,0,0);</div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> (dim==2)</div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> {</div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> <span class=\"keywordflow\">if</span> (element.type().isTriangle())</div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> offset = <a class=\"code hl_variable\" href=\"a01679.html#ab9209fa402834b5c9a35d9e987122dce\">dofsPerTriangle</a>*gridIndexSet.subIndex(element,0,0);</div>\n+<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (element.type().isQuadrilateral())</div>\n+<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> offset = <a class=\"code hl_variable\" href=\"a01679.html#a8f9bb80599a31e77d8b96522467fa691\">quadrilateralOffset_</a> + <a class=\"code hl_variable\" href=\"a01679.html#aad680a5b4e4584e3f2d56396af361123\">dofsPerQuad</a>*gridIndexSet.subIndex(element,0,0);</div>\n+<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> <span class=\"keywordflow\">else</span></div>\n+<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"2d elements have to be triangles or quadrilaterals"</span>);</div>\n+<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> }</div>\n+<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> (dim==3)</div>\n+<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> {</div>\n+<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> <span class=\"keywordflow\">if</span> (element.type().isTetrahedron())</div>\n+<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> offset = <a class=\"code hl_variable\" href=\"a01679.html#a755b7a249dd88abd62ce3be575320572\">dofsPerTetrahedron</a>*gridIndexSet.subIndex(element,0,0);</div>\n+<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (element.type().isPrism())</div>\n+<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> offset = <a class=\"code hl_variable\" href=\"a01679.html#afb36ed4d135e4755c90307f3a1678f55\">prismOffset_</a> + <a class=\"code hl_variable\" href=\"a01679.html#afb53eceb4802d0e888664e0cbe33f843\">dofsPerPrism</a>*gridIndexSet.subIndex(element,0,0);</div>\n+<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (element.type().isHexahedron())</div>\n+<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> offset = <a class=\"code hl_variable\" href=\"a01679.html#a49fc97158b3e4b9851ed636300c718ce\">hexahedronOffset_</a> + <a class=\"code hl_variable\" href=\"a01679.html#a64d5d4089862c52124131d75c156facf\">dofsPerHexahedron</a>*gridIndexSet.subIndex(element,0,0);</div>\n+<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (element.type().isPyramid())</div>\n+<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> offset = <a class=\"code hl_variable\" href=\"a01679.html#a6ad26ab973d39bc12e575d80cd1320d2\">pyramidOffset_</a> + <a class=\"code hl_variable\" href=\"a01679.html#ac1406270c17daf802721fae3e90d350f\">dofsPerPyramid</a>*gridIndexSet.subIndex(element,0,0);</div>\n+<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span> <span class=\"keywordflow\">else</span></div>\n+<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"3d elements have to be tetrahedrons, prisms, hexahedrons or pyramids"</span>);</div>\n+<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> }</div>\n+<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> <span class=\"keywordflow\">else</span></div>\n+<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"No index method for "</span> << dim << <span class=\"stringliteral\">"d grids available yet!"</span>);</div>\n+<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> <span class=\"keywordflow\">for</span> (<a class=\"code hl_typedef\" href=\"a01679.html#aef9347d55bd08683c5da3937c9e347bc\">size_type</a> i = 0, end = node.<a class=\"code hl_function\" href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">size</a>() ; i < end ; ++i, ++it)</div>\n+<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> *it = {offset + i};</div>\n+<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span> <span class=\"keywordflow\">return</span> it;</div>\n+<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> }</div>\n+<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> </div>\n+<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a3f7f366f6ddce30b39792634d5a057de\"> 194</a></span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_function\" href=\"a01679.html#a3f7f366f6ddce30b39792634d5a057de\">order</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> <span class=\"keywordflow\">return</span> k;</div>\n+<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> }</div>\n+<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> </div>\n+<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span><span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\"> 200</a></span> <a class=\"code hl_typedef\" href=\"a01679.html#a8af148321780535e5555938ac4590e3c\">GridView</a> <a class=\"code hl_variable\" href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\">gridView_</a>;</div>\n <div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> </div>\n-<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span>}</div>\n-<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> </div>\n-<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> </div>\n-<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span>} <span class=\"comment\">// end namespace Functions</span></div>\n-<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span>} <span class=\"comment\">// end namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a8f9bb80599a31e77d8b96522467fa691\"> 202</a></span> <span class=\"keywordtype\">size_t</span> <a class=\"code hl_variable\" href=\"a01679.html#a8f9bb80599a31e77d8b96522467fa691\">quadrilateralOffset_</a>;</div>\n+<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a6ad26ab973d39bc12e575d80cd1320d2\"> 203</a></span> <span class=\"keywordtype\">size_t</span> <a class=\"code hl_variable\" href=\"a01679.html#a6ad26ab973d39bc12e575d80cd1320d2\">pyramidOffset_</a>;</div>\n+<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#afb36ed4d135e4755c90307f3a1678f55\"> 204</a></span> <span class=\"keywordtype\">size_t</span> <a class=\"code hl_variable\" href=\"a01679.html#afb36ed4d135e4755c90307f3a1678f55\">prismOffset_</a>;</div>\n+<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a49fc97158b3e4b9851ed636300c718ce\"> 205</a></span> <span class=\"keywordtype\">size_t</span> <a class=\"code hl_variable\" href=\"a01679.html#a49fc97158b3e4b9851ed636300c718ce\">hexahedronOffset_</a>;</div>\n+<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span>};</div>\n <div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> </div>\n <div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span> </div>\n <div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> </div>\n-<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH</span></div>\n-<div class=\"ttc\" id=\"aa00092_html\"><div class=\"ttname\"><a href=\"a00092.html\">type_traits.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00140_html\"><div class=\"ttname\"><a href=\"a00140.html\">defaultlocalview.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00215_html_ga673247dd74bcdd9e5acfc7735faf8a5b\"><div class=\"ttname\"><a href=\"a00215.html#ga673247dd74bcdd9e5acfc7735faf8a5b\">Dune::Functions::enableIfConstructible</a></div><div class=\"ttdeci\">typename std::enable_if< std::is_constructible< T, Args... >::value, int >::type enableIfConstructible</div><div class=\"ttdoc\">Helper to constrain forwarding constructors.</div><div class=\"ttdef\"><b>Definition:</b> type_traits.hh:26</div></div>\n+<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span><span class=\"keyword\">namespace </span>BasisFactory {</div>\n+<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> </div>\n+<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span><span class=\"keyword\">template</span><std::<span class=\"keywordtype\">size_t</span> k></div>\n+<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#gae7dbc0c4e48b9cf3da63d6ef431b3481\"> 220</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00213.html#gae7dbc0c4e48b9cf3da63d6ef431b3481\">lagrangeDG</a>()</div>\n+<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span>{</div>\n+<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span> <span class=\"keywordflow\">return</span> [](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridView) {</div>\n+<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01679.html\">LagrangeDGPreBasis</a><std::decay_t<<span class=\"keyword\">decltype</span>(gridView)>, k>(gridView);</div>\n+<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> };</div>\n+<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span>}</div>\n+<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> </div>\n+<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span>} <span class=\"comment\">// end namespace BasisFactory</span></div>\n+<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> </div>\n+<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> </div>\n+<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span> </div>\n+<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span><span class=\"comment\">// This is the actual global basis implementation based on the reusable parts.</span></div>\n+<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> </div>\n+<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k></div>\n+<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#ga5de7b8547ff84158602bfb45a4358c67\"> 243</a></span><span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01555.html\">LagrangeDGBasis</a> = <a class=\"code hl_class\" href=\"a01555.html\">DefaultGlobalBasis<LagrangeDGPreBasis<GV, k></a> >;</div>\n+<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> </div>\n+<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> </div>\n+<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span> </div>\n+<div class=\"line\"><a id=\"l00247\" name=\"l00247\"></a><span class=\"lineno\"> 247</span>} <span class=\"comment\">// end namespace Functions</span></div>\n+<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"> 248</span>} <span class=\"comment\">// end namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span> </div>\n+<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span> </div>\n+<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH</span></div>\n+<div class=\"ttc\" id=\"aa00122_html\"><div class=\"ttname\"><a href=\"a00122.html\">lagrangebasis.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00152_html\"><div class=\"ttname\"><a href=\"a00152.html\">defaultglobalbasis.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00179_html\"><div class=\"ttname\"><a href=\"a00179.html\">nodes.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00213_html_ga0d8eb549af76bc2563ab189e63668ee5\"><div class=\"ttname\"><a href=\"a00213.html#ga0d8eb549af76bc2563ab189e63668ee5\">Dune::Functions::BasisFactory::power</a></div><div class=\"ttdeci\">auto power(ChildPreBasisFactory &&childPreBasisFactory, const IndexMergingStrategy &)</div><div class=\"ttdoc\">Create a pre-basis factory that can build a PowerPreBasis.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:369</div></div>\n+<div class=\"ttc\" id=\"aa00213_html_gae7dbc0c4e48b9cf3da63d6ef431b3481\"><div class=\"ttname\"><a href=\"a00213.html#gae7dbc0c4e48b9cf3da63d6ef431b3481\">Dune::Functions::BasisFactory::lagrangeDG</a></div><div class=\"ttdeci\">auto lagrangeDG()</div><div class=\"ttdoc\">Create a pre-basis factory that can create a LagrangeDG pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:220</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa00219_html_a060058e4e3c070530978192cb7c99d39\"><div class=\"ttname\"><a href=\"a00219.html#a060058e4e3c070530978192cb7c99d39\">Dune::Functions::DefaultGlobalBasis</a></div><div class=\"ttdeci\">DefaultGlobalBasis(PreBasis &&) -> DefaultGlobalBasis< std::decay_t< PreBasis > ></div></div>\n-<div class=\"ttc\" id=\"aa00224_html_a1f0dc55c03c3a9862c76456d5574abe2\"><div class=\"ttname\"><a href=\"a00224.html#a1f0dc55c03c3a9862c76456d5574abe2\">Dune::Functions::BasisFactory::makeBasis</a></div><div class=\"ttdeci\">auto makeBasis(const GridView &gridView, PreBasisFactory &&preBasisFactory)</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:190</div></div>\n <div class=\"ttc\" id=\"aa01555_html\"><div class=\"ttname\"><a href=\"a01555.html\">Dune::Functions::DefaultGlobalBasis</a></div><div class=\"ttdoc\">Global basis for given pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:46</div></div>\n-<div class=\"ttc\" id=\"aa01555_html_a00a78eb6f90d02a8c5dd3d4718b14e99\"><div class=\"ttname\"><a href=\"a01555.html#a00a78eb6f90d02a8c5dd3d4718b14e99\">Dune::Functions::DefaultGlobalBasis::SizePrefix</a></div><div class=\"ttdeci\">Dune::ReservedVector< std::size_t, PreBasis::multiIndexBufferSize > SizePrefix</div><div class=\"ttdoc\">Type used for prefixes handed to the size() method.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:69</div></div>\n-<div class=\"ttc\" id=\"aa01555_html_a10db3413eda75531530d9b0bf82e8335\"><div class=\"ttname\"><a href=\"a01555.html#a10db3413eda75531530d9b0bf82e8335\">Dune::Functions::DefaultGlobalBasis::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdoc\">Type used for indices and size information.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:60</div></div>\n-<div class=\"ttc\" id=\"aa01555_html_a2b9cab135f3764650ad063d49c4c2fcb\"><div class=\"ttname\"><a href=\"a01555.html#a2b9cab135f3764650ad063d49c4c2fcb\">Dune::Functions::DefaultGlobalBasis::GridView</a></div><div class=\"ttdeci\">typename PreBasis::GridView GridView</div><div class=\"ttdoc\">The grid view that the FE space is defined on.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:57</div></div>\n-<div class=\"ttc\" id=\"aa01555_html_a34897e5d2dd92bf5f34d61e47a9eff66\"><div class=\"ttname\"><a href=\"a01555.html#a34897e5d2dd92bf5f34d61e47a9eff66\">Dune::Functions::DefaultGlobalBasis::gridView</a></div><div class=\"ttdeci\">const GridView & gridView() const</div><div class=\"ttdoc\">Obtain the grid view that the basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:107</div></div>\n-<div class=\"ttc\" id=\"aa01555_html_a4d800349e8aa9ae148a178827d51ccda\"><div class=\"ttname\"><a href=\"a01555.html#a4d800349e8aa9ae148a178827d51ccda\">Dune::Functions::DefaultGlobalBasis::PreBasis</a></div><div class=\"ttdeci\">PB PreBasis</div><div class=\"ttdoc\">Pre-basis providing the implementation details.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:51</div></div>\n-<div class=\"ttc\" id=\"aa01555_html_a6683475941d1516b89a98d6ace4d5842\"><div class=\"ttname\"><a href=\"a01555.html#a6683475941d1516b89a98d6ace4d5842\">Dune::Functions::DefaultGlobalBasis::preBasis</a></div><div class=\"ttdeci\">PreBasis & preBasis()</div><div class=\"ttdoc\">Obtain the pre-basis providing the implementation details.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:119</div></div>\n-<div class=\"ttc\" id=\"aa01555_html_a6b7b8b0a9c65da16b6fe1b7e6ef20e8c\"><div class=\"ttname\"><a href=\"a01555.html#a6b7b8b0a9c65da16b6fe1b7e6ef20e8c\">Dune::Functions::DefaultGlobalBasis::update</a></div><div class=\"ttdeci\">void update(const GridView &gv)</div><div class=\"ttdoc\">Update the stored grid view.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:130</div></div>\n-<div class=\"ttc\" id=\"aa01555_html_a6dd2621b698c77033f1b37443b7c7e65\"><div class=\"ttname\"><a href=\"a01555.html#a6dd2621b698c77033f1b37443b7c7e65\">Dune::Functions::DefaultGlobalBasis::LocalView</a></div><div class=\"ttdeci\">DefaultLocalView< DefaultGlobalBasis< PreBasis > > LocalView</div><div class=\"ttdoc\">Type of the local view on the restriction of the basis to a single element.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:63</div></div>\n-<div class=\"ttc\" id=\"aa01555_html_a71e8362c3966f9bc4ced844fb8474be7\"><div class=\"ttname\"><a href=\"a01555.html#a71e8362c3966f9bc4ced844fb8474be7\">Dune::Functions::DefaultGlobalBasis::MultiIndex</a></div><div class=\"ttdeci\">typename LocalView::MultiIndex MultiIndex</div><div class=\"ttdoc\">Type used for global numbering of the basis vectors.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:66</div></div>\n-<div class=\"ttc\" id=\"aa01555_html_a752ada691a91cb10c109e3a1093df507\"><div class=\"ttname\"><a href=\"a01555.html#a752ada691a91cb10c109e3a1093df507\">Dune::Functions::DefaultGlobalBasis::size</a></div><div class=\"ttdeci\">size_type size(const SizePrefix &prefix) const</div><div class=\"ttdoc\">Return number of possible values for next position in multi index.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:149</div></div>\n-<div class=\"ttc\" id=\"aa01555_html_a762dcee80e33652a80d5aca07244bbb5\"><div class=\"ttname\"><a href=\"a01555.html#a762dcee80e33652a80d5aca07244bbb5\">Dune::Functions::DefaultGlobalBasis::dimension</a></div><div class=\"ttdeci\">size_type dimension() const</div><div class=\"ttdoc\">Get the total dimension of the space spanned by this basis.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:137</div></div>\n-<div class=\"ttc\" id=\"aa01555_html_a7d0a58f78727ab3b0d9159a899031f07\"><div class=\"ttname\"><a href=\"a01555.html#a7d0a58f78727ab3b0d9159a899031f07\">Dune::Functions::DefaultGlobalBasis::preBasis_</a></div><div class=\"ttdeci\">PreBasis preBasis_</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:173</div></div>\n-<div class=\"ttc\" id=\"aa01555_html_a836be8e833f7f5b1910bc247658df00a\"><div class=\"ttname\"><a href=\"a01555.html#a836be8e833f7f5b1910bc247658df00a\">Dune::Functions::DefaultGlobalBasis::localView</a></div><div class=\"ttdeci\">LocalView localView() const</div><div class=\"ttdoc\">Return local view for basis.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:155</div></div>\n-<div class=\"ttc\" id=\"aa01555_html_aa33c9a46f1e7548b2a956c36f6554e89\"><div class=\"ttname\"><a href=\"a01555.html#aa33c9a46f1e7548b2a956c36f6554e89\">Dune::Functions::DefaultGlobalBasis::PrefixPath</a></div><div class=\"ttdeci\">TypeTree::HybridTreePath<> PrefixPath</div><div class=\"ttdoc\">The empty prefix path that identifies the root in the local ansatz tree.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:54</div></div>\n-<div class=\"ttc\" id=\"aa01555_html_ac8c43e23bffc9116702a479f1c1d01f4\"><div class=\"ttname\"><a href=\"a01555.html#ac8c43e23bffc9116702a479f1c1d01f4\">Dune::Functions::DefaultGlobalBasis::DefaultGlobalBasis</a></div><div class=\"ttdeci\">DefaultGlobalBasis(T &&... t)</div><div class=\"ttdoc\">Constructor.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:82</div></div>\n-<div class=\"ttc\" id=\"aa01555_html_aca0a06166bf28fbc1f22dbcb7ca98812\"><div class=\"ttname\"><a href=\"a01555.html#aca0a06166bf28fbc1f22dbcb7ca98812\">Dune::Functions::DefaultGlobalBasis::DefaultGlobalBasis</a></div><div class=\"ttdeci\">DefaultGlobalBasis(const GridView &gridView, PreBasisFactory &&factory)</div><div class=\"ttdoc\">Constructor from a PreBasis factory.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:98</div></div>\n-<div class=\"ttc\" id=\"aa01555_html_ad77464358ec140b149c1391d036eaed1\"><div class=\"ttname\"><a href=\"a01555.html#ad77464358ec140b149c1391d036eaed1\">Dune::Functions::DefaultGlobalBasis::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdoc\">Return number of possible values for next position in empty multi index.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:143</div></div>\n-<div class=\"ttc\" id=\"aa01555_html_ae9a040d36416bf5456a7d7cbca241f17\"><div class=\"ttname\"><a href=\"a01555.html#ae9a040d36416bf5456a7d7cbca241f17\">Dune::Functions::DefaultGlobalBasis::preBasis</a></div><div class=\"ttdeci\">const PreBasis & preBasis() const</div><div class=\"ttdoc\">Obtain the pre-basis providing the implementation details.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:113</div></div>\n-<div class=\"ttc\" id=\"aa01555_html_aeed6ef808c134ff63cea8102b7a03c22\"><div class=\"ttname\"><a href=\"a01555.html#aeed6ef808c134ff63cea8102b7a03c22\">Dune::Functions::DefaultGlobalBasis::prefixPath_</a></div><div class=\"ttdeci\">PrefixPath prefixPath_</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:174</div></div>\n-<div class=\"ttc\" id=\"aa01555_html_aeff2d7cf6ef6c17e4c27f12d997701a3\"><div class=\"ttname\"><a href=\"a01555.html#aeff2d7cf6ef6c17e4c27f12d997701a3\">Dune::Functions::DefaultGlobalBasis::rootBasis</a></div><div class=\"ttdeci\">const DefaultGlobalBasis & rootBasis() const</div><div class=\"ttdoc\">Return *this because we are not embedded in a larger basis.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:161</div></div>\n-<div class=\"ttc\" id=\"aa01555_html_afa626db7f92e548a453532c0a600301f\"><div class=\"ttname\"><a href=\"a01555.html#afa626db7f92e548a453532c0a600301f\">Dune::Functions::DefaultGlobalBasis::prefixPath</a></div><div class=\"ttdeci\">const PrefixPath & prefixPath() const</div><div class=\"ttdoc\">Return empty path, because this is the root in the local ansatz tree.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:167</div></div>\n-<div class=\"ttc\" id=\"aa01559_html\"><div class=\"ttname\"><a href=\"a01559.html\">Dune::Functions::DefaultLocalView</a></div><div class=\"ttdoc\">The restriction of a finite element basis to a single element.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:28</div></div>\n-<div class=\"ttc\" id=\"aa01559_html_acffe4cd37e8a7720e1a3eced31570c5a\"><div class=\"ttname\"><a href=\"a01559.html#acffe4cd37e8a7720e1a3eced31570c5a\">Dune::Functions::DefaultLocalView::MultiIndex</a></div><div class=\"ttdeci\">std::conditional_t<(PreBasis::minMultiIndexSize==PreBasis::maxMultiIndexSize), StaticMultiIndex< size_type, PreBasis::maxMultiIndexSize >, Dune::ReservedVector< size_type, PreBasis::multiIndexBufferSize > > MultiIndex</div><div class=\"ttdoc\">Type used for global numbering of the basis vectors.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:64</div></div>\n-<div class=\"ttc\" id=\"aa02876_html\"><div class=\"ttname\"><a href=\"a02876.html\">concepts.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa01667_html\"><div class=\"ttname\"><a href=\"a01667.html\">Dune::Functions::LagrangeNode</a></div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:387</div></div>\n+<div class=\"ttc\" id=\"aa01667_html_a9d58cded4e8fb6665c22c758e55f4914\"><div class=\"ttname\"><a href=\"a01667.html#a9d58cded4e8fb6665c22c758e55f4914\">Dune::Functions::LagrangeNode::element</a></div><div class=\"ttdeci\">const Element & element() const</div><div class=\"ttdoc\">Return current element, throw if unbound.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:439</div></div>\n+<div class=\"ttc\" id=\"aa01679_html\"><div class=\"ttname\"><a href=\"a01679.html\">Dune::Functions::LagrangeDGPreBasis</a></div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:38</div></div>\n+<div class=\"ttc\" id=\"aa01679_html_a0d2c4b976257136afdf2b1ac4553a3e9\"><div class=\"ttname\"><a href=\"a01679.html#a0d2c4b976257136afdf2b1ac4553a3e9\">Dune::Functions::LagrangeDGPreBasis::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:115</div></div>\n+<div class=\"ttc\" id=\"aa01679_html_a1bf33483feb5a8f3482b2bcb2d591883\"><div class=\"ttname\"><a href=\"a01679.html#a1bf33483feb5a8f3482b2bcb2d591883\">Dune::Functions::LagrangeDGPreBasis::indices</a></div><div class=\"ttdeci\">It indices(const Node &node, It it) const</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:156</div></div>\n+<div class=\"ttc\" id=\"aa01679_html_a1e75fb410ce720edf5415828059f52d0\"><div class=\"ttname\"><a href=\"a01679.html#a1e75fb410ce720edf5415828059f52d0\">Dune::Functions::LagrangeDGPreBasis::maxNodeSize</a></div><div class=\"ttdeci\">size_type maxNodeSize() const</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:150</div></div>\n+<div class=\"ttc\" id=\"aa01679_html_a20f969e87311ae7db719d06e7737d70e\"><div class=\"ttname\"><a href=\"a01679.html#a20f969e87311ae7db719d06e7737d70e\">Dune::Functions::LagrangeDGPreBasis::multiIndexBufferSize</a></div><div class=\"ttdeci\">static constexpr size_type multiIndexBufferSize</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:62</div></div>\n+<div class=\"ttc\" id=\"aa01679_html_a3f7f366f6ddce30b39792634d5a057de\"><div class=\"ttname\"><a href=\"a01679.html#a3f7f366f6ddce30b39792634d5a057de\">Dune::Functions::LagrangeDGPreBasis::order</a></div><div class=\"ttdeci\">unsigned int order() const</div><div class=\"ttdoc\">Polynomial order used in the local Lagrange finite-elements.</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:194</div></div>\n+<div class=\"ttc\" id=\"aa01679_html_a4952fa7945357c969435f48c0a643dd7\"><div class=\"ttname\"><a href=\"a01679.html#a4952fa7945357c969435f48c0a643dd7\">Dune::Functions::LagrangeDGPreBasis::update</a></div><div class=\"ttdeci\">void update(const GridView &gv)</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:102</div></div>\n+<div class=\"ttc\" id=\"aa01679_html_a49fc97158b3e4b9851ed636300c718ce\"><div class=\"ttname\"><a href=\"a01679.html#a49fc97158b3e4b9851ed636300c718ce\">Dune::Functions::LagrangeDGPreBasis::hexahedronOffset_</a></div><div class=\"ttdeci\">size_t hexahedronOffset_</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:205</div></div>\n+<div class=\"ttc\" id=\"aa01679_html_a4bf95ae4450021799f1d8b14fbb6c78b\"><div class=\"ttname\"><a href=\"a01679.html#a4bf95ae4450021799f1d8b14fbb6c78b\">Dune::Functions::LagrangeDGPreBasis::makeNode</a></div><div class=\"ttdeci\">Node makeNode() const</div><div class=\"ttdoc\">Create tree node.</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:110</div></div>\n+<div class=\"ttc\" id=\"aa01679_html_a4ceb8a4c31a5cf55d03f715717c95910\"><div class=\"ttname\"><a href=\"a01679.html#a4ceb8a4c31a5cf55d03f715717c95910\">Dune::Functions::LagrangeDGPreBasis::maxMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type maxMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:60</div></div>\n+<div class=\"ttc\" id=\"aa01679_html_a64d5d4089862c52124131d75c156facf\"><div class=\"ttname\"><a href=\"a01679.html#a64d5d4089862c52124131d75c156facf\">Dune::Functions::LagrangeDGPreBasis::dofsPerHexahedron</a></div><div class=\"ttdeci\">static const int dofsPerHexahedron</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:54</div></div>\n+<div class=\"ttc\" id=\"aa01679_html_a6922ab8ade352184b13dca9d354b663e\"><div class=\"ttname\"><a href=\"a01679.html#a6922ab8ade352184b13dca9d354b663e\">Dune::Functions::LagrangeDGPreBasis::LagrangeDGPreBasis</a></div><div class=\"ttdeci\">LagrangeDGPreBasis(const GridView &gv)</div><div class=\"ttdoc\">Constructor for a given grid view object.</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:65</div></div>\n+<div class=\"ttc\" id=\"aa01679_html_a6ad26ab973d39bc12e575d80cd1320d2\"><div class=\"ttname\"><a href=\"a01679.html#a6ad26ab973d39bc12e575d80cd1320d2\">Dune::Functions::LagrangeDGPreBasis::pyramidOffset_</a></div><div class=\"ttdeci\">size_t pyramidOffset_</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:203</div></div>\n+<div class=\"ttc\" id=\"aa01679_html_a755b7a249dd88abd62ce3be575320572\"><div class=\"ttname\"><a href=\"a01679.html#a755b7a249dd88abd62ce3be575320572\">Dune::Functions::LagrangeDGPreBasis::dofsPerTetrahedron</a></div><div class=\"ttdeci\">static const int dofsPerTetrahedron</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:52</div></div>\n+<div class=\"ttc\" id=\"aa01679_html_a845490072407c1b9228ba479879e58eb\"><div class=\"ttname\"><a href=\"a01679.html#a845490072407c1b9228ba479879e58eb\">Dune::Functions::LagrangeDGPreBasis::size</a></div><div class=\"ttdeci\">size_type size(const SizePrefix &prefix) const</div><div class=\"ttdoc\">Return number possible values for next position in multi index.</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:138</div></div>\n+<div class=\"ttc\" id=\"aa01679_html_a8af148321780535e5555938ac4590e3c\"><div class=\"ttname\"><a href=\"a01679.html#a8af148321780535e5555938ac4590e3c\">Dune::Functions::LagrangeDGPreBasis::GridView</a></div><div class=\"ttdeci\">GV GridView</div><div class=\"ttdoc\">The grid view that the FE space is defined on.</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:44</div></div>\n+<div class=\"ttc\" id=\"aa01679_html_a8b70bc6aa806e06c8062a69d4287af96\"><div class=\"ttname\"><a href=\"a01679.html#a8b70bc6aa806e06c8062a69d4287af96\">Dune::Functions::LagrangeDGPreBasis::initializeIndices</a></div><div class=\"ttdeci\">void initializeIndices()</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:70</div></div>\n+<div class=\"ttc\" id=\"aa01679_html_a8f9bb80599a31e77d8b96522467fa691\"><div class=\"ttname\"><a href=\"a01679.html#a8f9bb80599a31e77d8b96522467fa691\">Dune::Functions::LagrangeDGPreBasis::quadrilateralOffset_</a></div><div class=\"ttdeci\">size_t quadrilateralOffset_</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:202</div></div>\n+<div class=\"ttc\" id=\"aa01679_html_a99e23efcb7d3e14798f723ba9f033afe\"><div class=\"ttname\"><a href=\"a01679.html#a99e23efcb7d3e14798f723ba9f033afe\">Dune::Functions::LagrangeDGPreBasis::dofsPerEdge</a></div><div class=\"ttdeci\">static const int dofsPerEdge</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:49</div></div>\n+<div class=\"ttc\" id=\"aa01679_html_aa6c5ef18a6d21e99037521fd668711af\"><div class=\"ttname\"><a href=\"a01679.html#aa6c5ef18a6d21e99037521fd668711af\">Dune::Functions::LagrangeDGPreBasis::gridView</a></div><div class=\"ttdeci\">const GridView & gridView() const</div><div class=\"ttdoc\">Obtain the grid view that the basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:97</div></div>\n+<div class=\"ttc\" id=\"aa01679_html_aad680a5b4e4584e3f2d56396af361123\"><div class=\"ttname\"><a href=\"a01679.html#aad680a5b4e4584e3f2d56396af361123\">Dune::Functions::LagrangeDGPreBasis::dofsPerQuad</a></div><div class=\"ttdeci\">static const int dofsPerQuad</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:51</div></div>\n+<div class=\"ttc\" id=\"aa01679_html_ab9209fa402834b5c9a35d9e987122dce\"><div class=\"ttname\"><a href=\"a01679.html#ab9209fa402834b5c9a35d9e987122dce\">Dune::Functions::LagrangeDGPreBasis::dofsPerTriangle</a></div><div class=\"ttdeci\">static const int dofsPerTriangle</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:50</div></div>\n+<div class=\"ttc\" id=\"aa01679_html_ac1406270c17daf802721fae3e90d350f\"><div class=\"ttname\"><a href=\"a01679.html#ac1406270c17daf802721fae3e90d350f\">Dune::Functions::LagrangeDGPreBasis::dofsPerPyramid</a></div><div class=\"ttdeci\">static const int dofsPerPyramid</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:55</div></div>\n+<div class=\"ttc\" id=\"aa01679_html_ae96405a175e0d71369d209ba64c548e7\"><div class=\"ttname\"><a href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\">Dune::Functions::LagrangeDGPreBasis::gridView_</a></div><div class=\"ttdeci\">GridView gridView_</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:200</div></div>\n+<div class=\"ttc\" id=\"aa01679_html_ae9cd5968c89433b07b3de6c28e89a368\"><div class=\"ttname\"><a href=\"a01679.html#ae9cd5968c89433b07b3de6c28e89a368\">Dune::Functions::LagrangeDGPreBasis::minMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type minMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:61</div></div>\n+<div class=\"ttc\" id=\"aa01679_html_aef9347d55bd08683c5da3937c9e347bc\"><div class=\"ttname\"><a href=\"a01679.html#aef9347d55bd08683c5da3937c9e347bc\">Dune::Functions::LagrangeDGPreBasis::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:45</div></div>\n+<div class=\"ttc\" id=\"aa01679_html_af02b1117a420678629201602beea6cec\"><div class=\"ttname\"><a href=\"a01679.html#af02b1117a420678629201602beea6cec\">Dune::Functions::LagrangeDGPreBasis::dimension</a></div><div class=\"ttdeci\">size_type dimension() const</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:145</div></div>\n+<div class=\"ttc\" id=\"aa01679_html_afb36ed4d135e4755c90307f3a1678f55\"><div class=\"ttname\"><a href=\"a01679.html#afb36ed4d135e4755c90307f3a1678f55\">Dune::Functions::LagrangeDGPreBasis::prismOffset_</a></div><div class=\"ttdeci\">size_t prismOffset_</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:204</div></div>\n+<div class=\"ttc\" id=\"aa01679_html_afb53eceb4802d0e888664e0cbe33f843\"><div class=\"ttname\"><a href=\"a01679.html#afb53eceb4802d0e888664e0cbe33f843\">Dune::Functions::LagrangeDGPreBasis::dofsPerPrism</a></div><div class=\"ttdeci\">static const int dofsPerPrism</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:53</div></div>\n+<div class=\"ttc\" id=\"aa01707_html_a859d50513645ef2ea0188d0779c1df30\"><div class=\"ttname\"><a href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">Dune::Functions::BasisNodeMixin::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:142</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,283 +5,376 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-defaultglobalbasis.hh\n+lagrangedgbasis.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH\n- 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH\n+ 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH\n+ 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH\n 5\n- 6#include <cstddef>\n- 7#include <type_traits>\n- 8#include <utility>\n+ 6#include <array>\n+ 7#include <dune/common/exceptions.hh>\n+ 8#include <dune/common/math.hh>\n 9\n- 10#include <dune/common/reservedvector.hh>\n- 11#include <dune/common/typeutilities.hh>\n- 12#include <dune/common/concept.hh>\n+ 10#include <dune/functions/functionspacebases/nodes.hh>\n+ 11#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n+ 12#include <dune/functions/functionspacebases/lagrangebasis.hh>\n 13\n- 14#include <dune/functions/common/type_traits.hh>\n- 15#include <dune/functions/functionspacebases/defaultlocalview.hh>\n- 16#include <dune/functions/functionspacebases/concepts.hh>\n- 17\n- 18\n+ 14\n+ 15\n+ 16\n+ 17namespace Dune {\n+ 18namespace Functions {\n 19\n- 20namespace Dune {\n- 21namespace Functions {\n- 22\n- 23\n- 24\n- 44template<class PB>\n-45class DefaultGlobalBasis\n- 46{\n+ 20\n+ 21\n+ 22/\n+/ *****************************************************************************\n+ 23// This is the reusable part of the basis. It contains\n+ 24//\n+ 25// LagrangeDGPreBasis\n+ 26// LagrangeDGNode\n+ 27//\n+ 28// The pre-basis allows to create the others and is the owner of possible\n+shared\n+ 29// state. These components do _not_ depend on the global basis and local\n+view\n+ 30// and can be used without a global basis.\n+ 31/\n+/ *****************************************************************************\n+ 32\n+ 33template<typename GV, int k>\n+34using LagrangeDGNode = LagrangeNode<GV,_k>;\n+ 35\n+ 36template<typename GV, int k>\n+37class LagrangeDGPreBasis\n+ 38{\n+ 39 static const int dim = GV::dimension;\n+ 40\n+ 41public:\n+ 42\n+44 using GridView = GV;\n+45 using size_type = std::size_t;\n+ 46\n 47\n- 48public:\n- 49\n-51 using PreBasis = PB;\n- 52\n-54 using PrefixPath = TypeTree::HybridTreePath<>;\n- 55\n-57 using GridView = typename PreBasis::GridView;\n- 58\n-60 using size_type = std::size_t;\n- 61\n-63 using LocalView = DefaultLocalView<DefaultGlobalBasis<PreBasis>>;\n- 64\n-66 using MultiIndex = typename LocalView::MultiIndex;\n- 67\n-69 using SizePrefix = Dune::ReservedVector<std::size_t, PreBasis::\n-multiIndexBufferSize>;\n- 70\n- 79 template<class... T,\n- 80 disableCopyMove<DefaultGlobalBasis, T...> = 0,\n- 81 enableIfConstructible<PreBasis, T...> = 0>\n-82 DefaultGlobalBasis(T&&... t) :\n- 83 preBasis_(std::forward<T>(t)...),\n- 84 prefixPath_()\n- 85 {\n- 86 static_assert(models<Concept::PreBasis<GridView>, PreBasis>(), \"Type passed\n-to DefaultGlobalBasis does not model the PreBasis concept.\");\n- 87 preBasis_.initializeIndices();\n- 88 }\n- 89\n- 96 template<class PreBasisFactory,\n- 97 std::enable_if_t<Dune::IsCallable<PreBasisFactory(GridView), PreBasis>::\n-value, int> = 0>\n-98 DefaultGlobalBasis(const GridView& gridView, PreBasisFactory&& factory) :\n- 99 preBasis_(factory(gridView)),\n- 100 prefixPath_()\n- 101 {\n- 102 static_assert(models<Concept::PreBasis<GridView>, PreBasis>(), \"Type\n-passed to DefaultGlobalBasis does not model the PreBasis concept.\");\n- 103 preBasis_.initializeIndices();\n- 104 }\n- 105\n-107 const GridView& gridView() const\n- 108 {\n- 109 return preBasis_.gridView();\n- 110 }\n- 111\n-113 const PreBasis& preBasis() const\n- 114 {\n- 115 return preBasis_;\n- 116 }\n- 117\n-119 PreBasis& preBasis()\n- 120 {\n- 121 return preBasis_;\n- 122 }\n- 123\n-130 void update(const GridView & gv)\n- 131 {\n- 132 preBasis_.update(gv);\n- 133 preBasis_.initializeIndices();\n+ 48 // Precompute the number of dofs per entity type\n+49 const static int dofsPerEdge = k+1;\n+50 const static int dofsPerTriangle = (k+1)*(k+2)/2;\n+51 const static int dofsPerQuad = (k+1)*(k+1);\n+52 const static int dofsPerTetrahedron = (k+1)*(k+2)*(k+3)/6;\n+53 const static int dofsPerPrism = (k+1)*(k+1)*(k+2)/2;\n+54 const static int dofsPerHexahedron = (k+1)*(k+1)*(k+1);\n+55 const static int dofsPerPyramid = (k+1)*(k+2)*(2*k+3)/6;\n+ 56\n+ 57\n+58 using Node = LagrangeDGNode<GV,_k>;\n+ 59\n+60 static constexpr size_type maxMultiIndexSize = 1;\n+61 static constexpr size_type minMultiIndexSize = 1;\n+62 static constexpr size_type multiIndexBufferSize = 1;\n+ 63\n+65 LagrangeDGPreBasis(const GridView& gv) :\n+ 66 gridView_(gv)\n+ 67 {}\n+ 68\n+ 69\n+70 void initializeIndices()\n+ 71 {\n+ 72 switch (dim)\n+ 73 {\n+ 74 case 1:\n+ 75 {\n+ 76 break;\n+ 77 }\n+ 78 case 2:\n+ 79 {\n+ 80 quadrilateralOffset_ = dofsPerTriangle * gridView_.size(Dune::\n+GeometryTypes::triangle);\n+ 81 break;\n+ 82 }\n+ 83 case 3:\n+ 84 {\n+ 85 prismOffset_ = dofsPerTetrahedron * gridView_.size(Dune::GeometryTypes::\n+tetrahedron);\n+ 86\n+ 87 hexahedronOffset_ = prismOffset_ + dofsPerPrism * gridView_.size(Dune::\n+GeometryTypes::prism);\n+ 88\n+ 89 pyramidOffset_ = hexahedronOffset_ + dofsPerHexahedron * gridView_.size\n+(Dune::GeometryTypes::hexahedron);\n+ 90 break;\n+ 91 }\n+ 92 }\n+ 93 }\n+ 94\n+97 const GridView& gridView() const\n+ 98 {\n+ 99 return gridView_;\n+ 100 }\n+ 101\n+102 void update(const GridView& gv)\n+ 103 {\n+ 104 gridView_ = gv;\n+ 105 }\n+ 106\n+110 Node makeNode() const\n+ 111 {\n+ 112 return Node{};\n+ 113 }\n+ 114\n+115 size_type size() const\n+ 116 {\n+ 117 switch (dim)\n+ 118 {\n+ 119 case 1:\n+ 120 return dofsPerEdge*gridView_.size(0);\n+ 121 case 2:\n+ 122 {\n+ 123 return dofsPerTriangle*gridView_.size(Dune::GeometryTypes::triangle) +\n+dofsPerQuad*gridView_.size(Dune::GeometryTypes::quadrilateral);\n+ 124 }\n+ 125 case 3:\n+ 126 {\n+ 127 return dofsPerTetrahedron*gridView_.size(Dune::GeometryTypes::tetrahedron)\n+ 128 + dofsPerPyramid*gridView_.size(Dune::GeometryTypes::pyramid)\n+ 129 + dofsPerPrism*gridView_.size(Dune::GeometryTypes::prism)\n+ 130 + dofsPerHexahedron*gridView_.size(Dune::GeometryTypes::hexahedron);\n+ 131 }\n+ 132 }\n+ 133 DUNE_THROW(Dune::NotImplemented, \"No size method for \" << dim << \"d grids\n+available yet!\");\n 134 }\n 135\n-137 size_type dimension() const\n- 138 {\n- 139 return preBasis_.dimension();\n- 140 }\n- 141\n-143 size_type size() const\n- 144 {\n- 145 return preBasis_.size();\n- 146 }\n- 147\n-149 size_type size(const SizePrefix& prefix) const\n- 150 {\n- 151 return preBasis_.size(prefix);\n- 152 }\n- 153\n-155 LocalView localView() const\n- 156 {\n- 157 return LocalView(*this);\n- 158 }\n- 159\n-161 const DefaultGlobalBasis& rootBasis() const\n- 162 {\n- 163 return *this;\n- 164 }\n- 165\n-167 const PrefixPath& prefixPath() const\n- 168 {\n- 169 return prefixPath_;\n- 170 }\n- 171\n- 172protected:\n-173 PreBasis preBasis_;\n-174 PrefixPath prefixPath_;\n- 175};\n- 176\n- 177\n- 178\n- 179template<class PreBasis>\n-180DefaultGlobalBasis(PreBasis&&) -> DefaultGlobalBasis<std::\n-decay_t<PreBasis>>;\n- 181\n- 182template<class GridView, class PreBasisFactory>\n-183DefaultGlobalBasis(const GridView& gv, PreBasisFactory&& f) -\n-> DefaultGlobalBasis<std::decay_t<decltype(f(gv))>>;\n- 184\n- 185\n- 186\n- 187namespace BasisFactory {\n- 188\n- 189template<class GridView, class PreBasisFactory>\n-190auto makeBasis(const GridView& gridView, PreBasisFactory&& preBasisFactory)\n- 191{\n- 192 return DefaultGlobalBasis(preBasisFactory(gridView));\n- 193}\n- 194\n- 195} // end namespace BasisFactory\n- 196\n- 197// Backward compatibility\n- 198namespace BasisBuilder {\n- 199\n- 200 using namespace BasisFactory;\n+ 137 template<class SizePrefix>\n+138 size_type size(const SizePrefix& prefix) const\n+ 139 {\n+ 140 assert(prefix.size() == 0 || prefix.size() == 1);\n+ 141 return (prefix.size() == 0) ? size() : 0;\n+ 142 }\n+ 143\n+145 size_type dimension() const\n+ 146 {\n+ 147 return size();\n+ 148 }\n+ 149\n+150 size_type maxNodeSize() const\n+ 151 {\n+ 152 return Dune::power(k+1, int(GV::dimension));\n+ 153 }\n+ 154\n+ 155 template<typename It>\n+156 It indices(const Node& node, It it) const\n+ 157 {\n+ 158 const auto& gridIndexSet = gridView().indexSet();\n+ 159 const auto& element = node.element();\n+ 160\n+ 161 size_type offset = 0;\n+ 162 if constexpr (dim==1)\n+ 163 offset = dofsPerEdge*gridIndexSet.subIndex(element,0,0);\n+ 164 else if constexpr (dim==2)\n+ 165 {\n+ 166 if (element.type().isTriangle())\n+ 167 offset = dofsPerTriangle*gridIndexSet.subIndex(element,0,0);\n+ 168 else if (element.type().isQuadrilateral())\n+ 169 offset = quadrilateralOffset_ + dofsPerQuad*gridIndexSet.subIndex\n+(element,0,0);\n+ 170 else\n+ 171 DUNE_THROW(Dune::NotImplemented, \"2d elements have to be triangles or\n+quadrilaterals\");\n+ 172 }\n+ 173 else if constexpr (dim==3)\n+ 174 {\n+ 175 if (element.type().isTetrahedron())\n+ 176 offset = dofsPerTetrahedron*gridIndexSet.subIndex(element,0,0);\n+ 177 else if (element.type().isPrism())\n+ 178 offset = prismOffset_ + dofsPerPrism*gridIndexSet.subIndex(element,0,0);\n+ 179 else if (element.type().isHexahedron())\n+ 180 offset = hexahedronOffset_ + dofsPerHexahedron*gridIndexSet.subIndex\n+(element,0,0);\n+ 181 else if (element.type().isPyramid())\n+ 182 offset = pyramidOffset_ + dofsPerPyramid*gridIndexSet.subIndex\n+(element,0,0);\n+ 183 else\n+ 184 DUNE_THROW(Dune::NotImplemented, \"3d elements have to be tetrahedrons,\n+prisms, hexahedrons or pyramids\");\n+ 185 }\n+ 186 else\n+ 187 DUNE_THROW(Dune::NotImplemented, \"No index method for \" << dim << \"d grids\n+available yet!\");\n+ 188 for (size_type i = 0, end = node.size() ; i < end ; ++i, ++it)\n+ 189 *it = {offset + i};\n+ 190 return it;\n+ 191 }\n+ 192\n+194 unsigned int order() const\n+ 195 {\n+ 196 return k;\n+ 197 }\n+ 198\n+ 199protected:\n+200 GridView gridView_;\n 201\n- 202}\n- 203\n- 204\n- 205} // end namespace Functions\n- 206} // end namespace Dune\n+202 size_t quadrilateralOffset_;\n+203 size_t pyramidOffset_;\n+204 size_t prismOffset_;\n+205 size_t hexahedronOffset_;\n+ 206};\n 207\n 208\n 209\n- 210#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH\n-type_traits.hh\n-defaultlocalview.hh\n-Dune::Functions::enableIfConstructible\n-typename std::enable_if< std::is_constructible< T, Args... >::value, int >::\n-type enableIfConstructible\n-Helper to constrain forwarding constructors.\n-Definition: type_traits.hh:26\n+ 210namespace BasisFactory {\n+ 211\n+ 219template<std::size_t k>\n+220auto lagrangeDG()\n+ 221{\n+ 222 return [](const auto& gridView) {\n+ 223 return LagrangeDGPreBasis<std::decay_t<decltype(gridView)>, k>(gridView);\n+ 224 };\n+ 225}\n+ 226\n+ 227} // end namespace BasisFactory\n+ 228\n+ 229\n+ 230\n+ 231/\n+/ *****************************************************************************\n+ 232// This is the actual global basis implementation based on the reusable\n+parts.\n+ 233/\n+/ *****************************************************************************\n+ 234\n+ 242template<typename GV, int k>\n+243using LagrangeDGBasis = DefaultGlobalBasis<LagrangeDGPreBasis<GV,_k> >;\n+ 244\n+ 245\n+ 246\n+ 247} // end namespace Functions\n+ 248} // end namespace Dune\n+ 249\n+ 250\n+ 251#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH\n+lagrangebasis.hh\n+defaultglobalbasis.hh\n+nodes.hh\n+Dune::Functions::BasisFactory::power\n+auto power(ChildPreBasisFactory &&childPreBasisFactory, const\n+IndexMergingStrategy &)\n+Create a pre-basis factory that can build a PowerPreBasis.\n+Definition: powerbasis.hh:369\n+Dune::Functions::BasisFactory::lagrangeDG\n+auto lagrangeDG()\n+Create a pre-basis factory that can create a LagrangeDG pre-basis.\n+Definition: lagrangedgbasis.hh:220\n Dune\n Definition: polynomial.hh:10\n Dune::Functions::DefaultGlobalBasis\n-DefaultGlobalBasis(PreBasis &&) -> DefaultGlobalBasis< std::decay_t< PreBasis >\n->\n-Dune::Functions::BasisFactory::makeBasis\n-auto makeBasis(const GridView &gridView, PreBasisFactory &&preBasisFactory)\n-Definition: defaultglobalbasis.hh:190\n-Dune::Functions::DefaultGlobalBasis\n Global basis for given pre-basis.\n Definition: defaultglobalbasis.hh:46\n-Dune::Functions::DefaultGlobalBasis::SizePrefix\n-Dune::ReservedVector< std::size_t, PreBasis::multiIndexBufferSize > SizePrefix\n-Type used for prefixes handed to the size() method.\n-Definition: defaultglobalbasis.hh:69\n-Dune::Functions::DefaultGlobalBasis::size_type\n-std::size_t size_type\n-Type used for indices and size information.\n-Definition: defaultglobalbasis.hh:60\n-Dune::Functions::DefaultGlobalBasis::GridView\n-typename PreBasis::GridView GridView\n+Dune::Functions::LagrangeNode\n+Definition: lagrangebasis.hh:387\n+Dune::Functions::LagrangeNode::element\n+const Element & element() const\n+Return current element, throw if unbound.\n+Definition: lagrangebasis.hh:439\n+Dune::Functions::LagrangeDGPreBasis\n+Definition: lagrangedgbasis.hh:38\n+Dune::Functions::LagrangeDGPreBasis::size\n+size_type size() const\n+Definition: lagrangedgbasis.hh:115\n+Dune::Functions::LagrangeDGPreBasis::indices\n+It indices(const Node &node, It it) const\n+Definition: lagrangedgbasis.hh:156\n+Dune::Functions::LagrangeDGPreBasis::maxNodeSize\n+size_type maxNodeSize() const\n+Definition: lagrangedgbasis.hh:150\n+Dune::Functions::LagrangeDGPreBasis::multiIndexBufferSize\n+static constexpr size_type multiIndexBufferSize\n+Definition: lagrangedgbasis.hh:62\n+Dune::Functions::LagrangeDGPreBasis::order\n+unsigned int order() const\n+Polynomial order used in the local Lagrange finite-elements.\n+Definition: lagrangedgbasis.hh:194\n+Dune::Functions::LagrangeDGPreBasis::update\n+void update(const GridView &gv)\n+Definition: lagrangedgbasis.hh:102\n+Dune::Functions::LagrangeDGPreBasis::hexahedronOffset_\n+size_t hexahedronOffset_\n+Definition: lagrangedgbasis.hh:205\n+Dune::Functions::LagrangeDGPreBasis::makeNode\n+Node makeNode() const\n+Create tree node.\n+Definition: lagrangedgbasis.hh:110\n+Dune::Functions::LagrangeDGPreBasis::maxMultiIndexSize\n+static constexpr size_type maxMultiIndexSize\n+Definition: lagrangedgbasis.hh:60\n+Dune::Functions::LagrangeDGPreBasis::dofsPerHexahedron\n+static const int dofsPerHexahedron\n+Definition: lagrangedgbasis.hh:54\n+Dune::Functions::LagrangeDGPreBasis::LagrangeDGPreBasis\n+LagrangeDGPreBasis(const GridView &gv)\n+Constructor for a given grid view object.\n+Definition: lagrangedgbasis.hh:65\n+Dune::Functions::LagrangeDGPreBasis::pyramidOffset_\n+size_t pyramidOffset_\n+Definition: lagrangedgbasis.hh:203\n+Dune::Functions::LagrangeDGPreBasis::dofsPerTetrahedron\n+static const int dofsPerTetrahedron\n+Definition: lagrangedgbasis.hh:52\n+Dune::Functions::LagrangeDGPreBasis::size\n+size_type size(const SizePrefix &prefix) const\n+Return number possible values for next position in multi index.\n+Definition: lagrangedgbasis.hh:138\n+Dune::Functions::LagrangeDGPreBasis::GridView\n+GV GridView\n The grid view that the FE space is defined on.\n-Definition: defaultglobalbasis.hh:57\n-Dune::Functions::DefaultGlobalBasis::gridView\n+Definition: lagrangedgbasis.hh:44\n+Dune::Functions::LagrangeDGPreBasis::initializeIndices\n+void initializeIndices()\n+Definition: lagrangedgbasis.hh:70\n+Dune::Functions::LagrangeDGPreBasis::quadrilateralOffset_\n+size_t quadrilateralOffset_\n+Definition: lagrangedgbasis.hh:202\n+Dune::Functions::LagrangeDGPreBasis::dofsPerEdge\n+static const int dofsPerEdge\n+Definition: lagrangedgbasis.hh:49\n+Dune::Functions::LagrangeDGPreBasis::gridView\n const GridView & gridView() const\n Obtain the grid view that the basis is defined on.\n-Definition: defaultglobalbasis.hh:107\n-Dune::Functions::DefaultGlobalBasis::PreBasis\n-PB PreBasis\n-Pre-basis providing the implementation details.\n-Definition: defaultglobalbasis.hh:51\n-Dune::Functions::DefaultGlobalBasis::preBasis\n-PreBasis & preBasis()\n-Obtain the pre-basis providing the implementation details.\n-Definition: defaultglobalbasis.hh:119\n-Dune::Functions::DefaultGlobalBasis::update\n-void update(const GridView &gv)\n-Update the stored grid view.\n-Definition: defaultglobalbasis.hh:130\n-Dune::Functions::DefaultGlobalBasis::LocalView\n-DefaultLocalView< DefaultGlobalBasis< PreBasis > > LocalView\n-Type of the local view on the restriction of the basis to a single element.\n-Definition: defaultglobalbasis.hh:63\n-Dune::Functions::DefaultGlobalBasis::MultiIndex\n-typename LocalView::MultiIndex MultiIndex\n-Type used for global numbering of the basis vectors.\n-Definition: defaultglobalbasis.hh:66\n-Dune::Functions::DefaultGlobalBasis::size\n-size_type size(const SizePrefix &prefix) const\n-Return number of possible values for next position in multi index.\n-Definition: defaultglobalbasis.hh:149\n-Dune::Functions::DefaultGlobalBasis::dimension\n+Definition: lagrangedgbasis.hh:97\n+Dune::Functions::LagrangeDGPreBasis::dofsPerQuad\n+static const int dofsPerQuad\n+Definition: lagrangedgbasis.hh:51\n+Dune::Functions::LagrangeDGPreBasis::dofsPerTriangle\n+static const int dofsPerTriangle\n+Definition: lagrangedgbasis.hh:50\n+Dune::Functions::LagrangeDGPreBasis::dofsPerPyramid\n+static const int dofsPerPyramid\n+Definition: lagrangedgbasis.hh:55\n+Dune::Functions::LagrangeDGPreBasis::gridView_\n+GridView gridView_\n+Definition: lagrangedgbasis.hh:200\n+Dune::Functions::LagrangeDGPreBasis::minMultiIndexSize\n+static constexpr size_type minMultiIndexSize\n+Definition: lagrangedgbasis.hh:61\n+Dune::Functions::LagrangeDGPreBasis::size_type\n+std::size_t size_type\n+Definition: lagrangedgbasis.hh:45\n+Dune::Functions::LagrangeDGPreBasis::dimension\n size_type dimension() const\n-Get the total dimension of the space spanned by this basis.\n-Definition: defaultglobalbasis.hh:137\n-Dune::Functions::DefaultGlobalBasis::preBasis_\n-PreBasis preBasis_\n-Definition: defaultglobalbasis.hh:173\n-Dune::Functions::DefaultGlobalBasis::localView\n-LocalView localView() const\n-Return local view for basis.\n-Definition: defaultglobalbasis.hh:155\n-Dune::Functions::DefaultGlobalBasis::PrefixPath\n-TypeTree::HybridTreePath<> PrefixPath\n-The empty prefix path that identifies the root in the local ansatz tree.\n-Definition: defaultglobalbasis.hh:54\n-Dune::Functions::DefaultGlobalBasis::DefaultGlobalBasis\n-DefaultGlobalBasis(T &&... t)\n-Constructor.\n-Definition: defaultglobalbasis.hh:82\n-Dune::Functions::DefaultGlobalBasis::DefaultGlobalBasis\n-DefaultGlobalBasis(const GridView &gridView, PreBasisFactory &&factory)\n-Constructor from a PreBasis factory.\n-Definition: defaultglobalbasis.hh:98\n-Dune::Functions::DefaultGlobalBasis::size\n+Definition: lagrangedgbasis.hh:145\n+Dune::Functions::LagrangeDGPreBasis::prismOffset_\n+size_t prismOffset_\n+Definition: lagrangedgbasis.hh:204\n+Dune::Functions::LagrangeDGPreBasis::dofsPerPrism\n+static const int dofsPerPrism\n+Definition: lagrangedgbasis.hh:53\n+Dune::Functions::BasisNodeMixin::size\n size_type size() const\n-Return number of possible values for next position in empty multi index.\n-Definition: defaultglobalbasis.hh:143\n-Dune::Functions::DefaultGlobalBasis::preBasis\n-const PreBasis & preBasis() const\n-Obtain the pre-basis providing the implementation details.\n-Definition: defaultglobalbasis.hh:113\n-Dune::Functions::DefaultGlobalBasis::prefixPath_\n-PrefixPath prefixPath_\n-Definition: defaultglobalbasis.hh:174\n-Dune::Functions::DefaultGlobalBasis::rootBasis\n-const DefaultGlobalBasis & rootBasis() const\n-Return *this because we are not embedded in a larger basis.\n-Definition: defaultglobalbasis.hh:161\n-Dune::Functions::DefaultGlobalBasis::prefixPath\n-const PrefixPath & prefixPath() const\n-Return empty path, because this is the root in the local ansatz tree.\n-Definition: defaultglobalbasis.hh:167\n-Dune::Functions::DefaultLocalView\n-The restriction of a finite element basis to a single element.\n-Definition: defaultlocalview.hh:28\n-Dune::Functions::DefaultLocalView::MultiIndex\n-std::conditional_t<(PreBasis::minMultiIndexSize==PreBasis::maxMultiIndexSize),\n-StaticMultiIndex< size_type, PreBasis::maxMultiIndexSize >, Dune::\n-ReservedVector< size_type, PreBasis::multiIndexBufferSize > > MultiIndex\n-Type used for global numbering of the basis vectors.\n-Definition: defaultlocalview.hh:64\n-concepts.hh\n+Definition: nodes.hh:142\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00122.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00122.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: flatmultiindex.hh File Reference</title>\n+<title>dune-functions: lagrangebasis.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -63,37 +63,65 @@\n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n+<a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> |\n-<a href=\"#typedef-members\">Typedefs</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">flatmultiindex.hh File Reference</div></div>\n+<a href=\"#typedef-members\">Typedefs</a> |\n+<a href=\"#func-members\">Functions</a> </div>\n+ <div class=\"headertitle\"><div class=\"title\">lagrangebasis.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <array></code><br />\n-<code>#include <<a class=\"el\" href=\"a00101_source.html\">dune/functions/common/multiindex.hh</a>></code><br />\n+<div class=\"textblock\"><code>#include <type_traits></code><br />\n+<code>#include <dune/common/exceptions.hh></code><br />\n+<code>#include <dune/localfunctions/lagrange.hh></code><br />\n+<code>#include <dune/localfunctions/lagrange/equidistantpoints.hh></code><br />\n+<code>#include <dune/localfunctions/lagrange/pqkfactory.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00179_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00152_source.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></code><br />\n </div>\n <p><a href=\"a00122_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n+Classes</h2></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01671.html\">Dune::Functions::LagrangePreBasis< GV, k, R ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A pre-basis for a PQ-lagrange bases with given order. <a href=\"a01671.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01667.html\">Dune::Functions::LagrangeNode< GV, k, R ></a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+</table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a00224\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00224.html\">Dune::Functions::BasisFactory</a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"typedef-members\" name=\"typedef-members\"></a>\n Typedefs</h2></td></tr>\n-<tr class=\"memitem:ga6b523ca86bfec2581ea9c173a722f8f3\"><td class=\"memTemplParams\" colspan=\"2\">template<class size_type > </td></tr>\n-<tr class=\"memitem:ga6b523ca86bfec2581ea9c173a722f8f3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00214.html#ga6b523ca86bfec2581ea9c173a722f8f3\">Dune::Functions::FlatMultiIndex</a> = StaticMultiIndex< size_type, 1 ></td></tr>\n-<tr class=\"memdesc:ga6b523ca86bfec2581ea9c173a722f8f3\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A multi-index class with only one level. <a href=\"a00214.html#ga6b523ca86bfec2581ea9c173a722f8f3\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga6b523ca86bfec2581ea9c173a722f8f3\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga566d155fed1f25513c4d927769722fcc\"><td class=\"memTemplParams\" colspan=\"2\">template<typename GV , int k = -1, typename R = double> </td></tr>\n+<tr class=\"memitem:ga566d155fed1f25513c4d927769722fcc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#ga566d155fed1f25513c4d927769722fcc\">Dune::Functions::LagrangeBasis</a> = DefaultGlobalBasis< LagrangePreBasis< GV, k, R > ></td></tr>\n+<tr class=\"memdesc:ga566d155fed1f25513c4d927769722fcc\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Nodal basis of a scalar k-th-order Lagrangean finite element space. <a href=\"a00213.html#ga566d155fed1f25513c4d927769722fcc\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga566d155fed1f25513c4d927769722fcc\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+</table><table class=\"memberdecls\">\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n+Functions</h2></td></tr>\n+<tr class=\"memitem:ga5106c08bf6dd8eaca7d06075d581d760\"><td class=\"memTemplParams\" colspan=\"2\">template<std::size_t k, typename R = double> </td></tr>\n+<tr class=\"memitem:ga5106c08bf6dd8eaca7d06075d581d760\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#ga5106c08bf6dd8eaca7d06075d581d760\">Dune::Functions::BasisFactory::lagrange</a> ()</td></tr>\n+<tr class=\"memdesc:ga5106c08bf6dd8eaca7d06075d581d760\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a pre-basis factory that can create a Lagrange pre-basis. <a href=\"a00213.html#ga5106c08bf6dd8eaca7d06075d581d760\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga5106c08bf6dd8eaca7d06075d581d760\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga177b4e1b21990d7fc9350ac0caeb3c6c\"><td class=\"memTemplParams\" colspan=\"2\">template<typename R = double> </td></tr>\n+<tr class=\"memitem:ga177b4e1b21990d7fc9350ac0caeb3c6c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#ga177b4e1b21990d7fc9350ac0caeb3c6c\">Dune::Functions::BasisFactory::lagrange</a> (int order)</td></tr>\n+<tr class=\"memdesc:ga177b4e1b21990d7fc9350ac0caeb3c6c\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a pre-basis factory that can create a Lagrange pre-basis with a run-time order. <a href=\"a00213.html#ga177b4e1b21990d7fc9350ac0caeb3c6c\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga177b4e1b21990d7fc9350ac0caeb3c6c\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,25 +5,50 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-Namespaces | Typedefs\n-flatmultiindex.hh File Reference\n-#include <array>\n-#include <dune/functions/common/multiindex.hh>\n+Classes | Namespaces | Typedefs | Functions\n+lagrangebasis.hh File Reference\n+#include <type_traits>\n+#include <dune/common/exceptions.hh>\n+#include <dune/localfunctions/lagrange.hh>\n+#include <dune/localfunctions/lagrange/equidistantpoints.hh>\n+#include <dune/localfunctions/lagrange/pqkfactory.hh>\n+#include <dune/functions/functionspacebases/nodes.hh>\n+#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n Go_to_the_source_code_of_this_file.\n+ Classes\n+class \u00a0Dune::Functions::LagrangePreBasis<_GV,_k,_R_>\n+\u00a0 A pre-basis for a PQ-lagrange bases with given order. More...\n+\u00a0\n+class \u00a0Dune::Functions::LagrangeNode<_GV,_k,_R_>\n+\u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n+namespace \u00a0Dune::Functions::BasisFactory\n+\u00a0\n Typedefs\n-template<class size_type >\n-using\u00a0Dune::Functions::FlatMultiIndex = StaticMultiIndex< size_type, 1 >\n-\u00a0 A multi-index class with only one level. More...\n+template<typename GV , int k = -1, typename R = double>\n+using\u00a0Dune::Functions::LagrangeBasis = DefaultGlobalBasis< LagrangePreBasis<\n+ GV, k, R > >\n+\u00a0 Nodal basis of a scalar k-th-order Lagrangean finite element space.\n+ More...\n+\u00a0\n+ Functions\n+template<std::size_t k, typename R = double>\n+auto\u00a0Dune::Functions::BasisFactory::lagrange ()\n+\u00a0 Create a pre-basis factory that can create a Lagrange pre-basis. More...\n+\u00a0\n+template<typename R = double>\n+auto\u00a0Dune::Functions::BasisFactory::lagrange (int order)\n+\u00a0 Create a pre-basis factory that can create a Lagrange pre-basis with a\n+ run-time order. More...\n \u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00122_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00122_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: flatmultiindex.hh Source File</title>\n+<title>dune-functions: lagrangebasis.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,43 +62,548 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">flatmultiindex.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">lagrangebasis.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00122.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <array></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span> </div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00101.html\">dune/functions/common/multiindex.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <type_traits></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <dune/common/exceptions.hh></span></div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/localfunctions/lagrange.hh></span></div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/localfunctions/lagrange/equidistantpoints.hh></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/localfunctions/lagrange/pqkfactory.hh></span></div>\n <div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> <span class=\"keywordtype\">size_t</span>ype></div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00214.html#ga6b523ca86bfec2581ea9c173a722f8f3\"> 31</a></span><span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01267.html\">FlatMultiIndex</a> = <a class=\"code hl_class\" href=\"a01267.html\">StaticMultiIndex<size_type, 1></a>;</div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> </div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00179.html\">dune/functions/functionspacebases/nodes.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00152.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"comment\">// This is the reusable part of the LagrangeBasis. It contains</span></div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"comment\">//</span></div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"comment\">// LagrangePreBasis</span></div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"comment\">// LagrangeNode</span></div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span><span class=\"comment\">//</span></div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"comment\">// The pre-basis allows to create the others and is the owner of possible shared</span></div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span><span class=\"comment\">// state. These components do _not_ depend on the global basis and local view</span></div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span><span class=\"comment\">// and can be used without a global basis.</span></div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> </div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k, <span class=\"keyword\">typename</span> R=<span class=\"keywordtype\">double</span>></div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span><span class=\"keyword\">class </span>LagrangeNode;</div>\n <div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> </div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> </div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span>} <span class=\"comment\">// end namespace Functions</span></div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span>} <span class=\"comment\">// end namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k, <span class=\"keyword\">typename</span> R=<span class=\"keywordtype\">double</span>></div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span><span class=\"keyword\">class </span>LagrangePreBasis;</div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> </div>\n <div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> </div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH</span></div>\n-<div class=\"ttc\" id=\"aa00101_html\"><div class=\"ttname\"><a href=\"a00101.html\">multiindex.hh</a></div></div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> </div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k, <span class=\"keyword\">typename</span> R></div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html\"> 54</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01671.html\">LagrangePreBasis</a></div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span>{</div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dim = GV::dimension;</div>\n+<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">bool</span> useDynamicOrder = (k<0);</div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> </div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> </div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#aaa2add570edd22047fd5cfba570dd982\"> 62</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01671.html#aaa2add570edd22047fd5cfba570dd982\">GridView</a> = GV;</div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> </div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\"> 65</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> = std::size_t;</div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> </div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a2762f1eade252d79b05070788f18012d\"> 68</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01667.html\">Node</a> = <a class=\"code hl_class\" href=\"a01667.html\">LagrangeNode<GV, k, R></a>;</div>\n+<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> </div>\n+<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a04abff1d4b5ac732d83019938a019d2a\"> 70</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_variable\" href=\"a01671.html#a04abff1d4b5ac732d83019938a019d2a\">maxMultiIndexSize</a> = 1;</div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#af4e167602b8bc1cdccf0baea69572f60\"> 71</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_variable\" href=\"a01671.html#af4e167602b8bc1cdccf0baea69572f60\">minMultiIndexSize</a> = 1;</div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#aa07a2111fb2151f10c128f6ebf746d81\"> 72</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_variable\" href=\"a01671.html#aa07a2111fb2151f10c128f6ebf746d81\">multiIndexBufferSize</a> = 1;</div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> </div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a982937b8e5348046761303330fc35d18\"> 75</a></span> <a class=\"code hl_function\" href=\"a01671.html#a982937b8e5348046761303330fc35d18\">LagrangePreBasis</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01671.html#aaa2add570edd22047fd5cfba570dd982\">GridView</a>& gv)</div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> : <a class=\"code hl_class\" href=\"a01671.html\">LagrangePreBasis</a>(gv, std::numeric_limits<unsigned int>::max())</div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> {}</div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> </div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a791cbc108e89b7effc1c668b800667bb\"> 80</a></span> <a class=\"code hl_function\" href=\"a01671.html#a791cbc108e89b7effc1c668b800667bb\">LagrangePreBasis</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01671.html#aaa2add570edd22047fd5cfba570dd982\">GridView</a>& gv, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>) :</div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> <a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>(gv), <a class=\"code hl_variable\" href=\"a01671.html#abefe712249711f9caee5f9b4ace8fb2a\">order_</a>(<a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>)</div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> {</div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> <span class=\"keywordflow\">if</span> (!useDynamicOrder && <a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>!=std::numeric_limits<unsigned int>::max())</div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> DUNE_THROW(RangeError, <span class=\"stringliteral\">"Template argument k has to be -1 when supplying a run-time order!"</span>);</div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> </div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<=dim; i++)</div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> {</div>\n+<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> <a class=\"code hl_variable\" href=\"a01671.html#abfa5632c391ed7160d081c63ab154377\">dofsPerCube_</a>[i] = <a class=\"code hl_function\" href=\"a01671.html#a015986cee132f7ebd91ad8f3845a84be\">computeDofsPerCube</a>(i);</div>\n+<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> <a class=\"code hl_variable\" href=\"a01671.html#a39dcb5d78ac1216c75a75660e2d61849\">dofsPerSimplex_</a>[i] = <a class=\"code hl_function\" href=\"a01671.html#a01edf36372c30d045823bb5a330526e6\">computeDofsPerSimplex</a>(i);</div>\n+<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> }</div>\n+<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> <a class=\"code hl_variable\" href=\"a01671.html#ade4d334b8ac70f9c18fc15a9eba04815\">dofsPerPrism_</a> = <a class=\"code hl_function\" href=\"a01671.html#a0c0e8ce0766d2a59986cb5daebe86132\">computeDofsPerPrism</a>();</div>\n+<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> <a class=\"code hl_variable\" href=\"a01671.html#a9212ce0f83e8642244e10d3cd3d596c6\">dofsPerPyramid_</a> = <a class=\"code hl_function\" href=\"a01671.html#a76f8c4b5aa9e574556edd79f0b2812f1\">computeDofsPerPyramid</a>();</div>\n+<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> }</div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> </div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a7318cbabd5f57d0b6cbab1b2dc41fff8\"> 96</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01671.html#a7318cbabd5f57d0b6cbab1b2dc41fff8\">initializeIndices</a>()</div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> {</div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> <a class=\"code hl_variable\" href=\"a01671.html#a5664ce9110b445d622298dc5263f33b2\">vertexOffset_</a> = 0;</div>\n+<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> <a class=\"code hl_variable\" href=\"a01671.html#a24780ed75bb6c40381f730e267f133f8\">edgeOffset_</a> = <a class=\"code hl_variable\" href=\"a01671.html#a5664ce9110b445d622298dc5263f33b2\">vertexOffset_</a> + <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(0) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(dim));</div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> </div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> <span class=\"keywordflow\">if</span> (dim>=2)</div>\n+<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> {</div>\n+<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> <a class=\"code hl_variable\" href=\"a01671.html#ae6c85768fc1d8aa23f94a2708d8d3ee6\">triangleOffset_</a> = <a class=\"code hl_variable\" href=\"a01671.html#a24780ed75bb6c40381f730e267f133f8\">edgeOffset_</a> + <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(1) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>) <a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(dim-1));</div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> </div>\n+<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> <a class=\"code hl_variable\" href=\"a01671.html#aaa4552a25872774f6f07f4dd8336be69\">quadrilateralOffset_</a> = <a class=\"code hl_variable\" href=\"a01671.html#ae6c85768fc1d8aa23f94a2708d8d3ee6\">triangleOffset_</a> + <a class=\"code hl_function\" href=\"a01671.html#a5a34336b9868148ddade4d6b5fd044cf\">dofsPerSimplex</a>(2) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(Dune::GeometryTypes::triangle));</div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> }</div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> </div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> <span class=\"keywordflow\">if</span> (dim==3) {</div>\n+<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> <a class=\"code hl_variable\" href=\"a01671.html#a6c7ee6cdf1c33779542802c064878f9d\">tetrahedronOffset_</a> = <a class=\"code hl_variable\" href=\"a01671.html#aaa4552a25872774f6f07f4dd8336be69\">quadrilateralOffset_</a> + <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(2) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(Dune::GeometryTypes::quadrilateral));</div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> </div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> <a class=\"code hl_variable\" href=\"a01671.html#a649ad327ee6564de6263f497962d344e\">prismOffset_</a> = <a class=\"code hl_variable\" href=\"a01671.html#a6c7ee6cdf1c33779542802c064878f9d\">tetrahedronOffset_</a> + <a class=\"code hl_function\" href=\"a01671.html#a5a34336b9868148ddade4d6b5fd044cf\">dofsPerSimplex</a>(3) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(Dune::GeometryTypes::tetrahedron));</div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> </div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> <a class=\"code hl_variable\" href=\"a01671.html#aea5db4f517eaead23b62142891c0484a\">hexahedronOffset_</a> = <a class=\"code hl_variable\" href=\"a01671.html#a649ad327ee6564de6263f497962d344e\">prismOffset_</a> + <a class=\"code hl_function\" href=\"a01671.html#a005c07b60bc225e41f6fbeee53ab20c2\">dofsPerPrism</a>() * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(Dune::GeometryTypes::prism));</div>\n+<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> </div>\n+<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> <a class=\"code hl_variable\" href=\"a01671.html#a639dc115510426bbaf3f0431fc8f1748\">pyramidOffset_</a> = <a class=\"code hl_variable\" href=\"a01671.html#aea5db4f517eaead23b62142891c0484a\">hexahedronOffset_</a> + <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(3) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(Dune::GeometryTypes::hexahedron));</div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> }</div>\n+<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> }</div>\n+<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> </div>\n+<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#ab21cdfcd52867003b7f3095f366109e7\"> 120</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01671.html#aaa2add570edd22047fd5cfba570dd982\">GridView</a>& <a class=\"code hl_function\" href=\"a01671.html#ab21cdfcd52867003b7f3095f366109e7\">gridView</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>;</div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> }</div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> </div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a9a9c2b3c8b2b46160d68d46cd2ed2c00\"> 126</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01671.html#a9a9c2b3c8b2b46160d68d46cd2ed2c00\">update</a> (<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01671.html#aaa2add570edd22047fd5cfba570dd982\">GridView</a>& gv)</div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> {</div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> <a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a> = gv;</div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> }</div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> </div>\n+<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#abb2dc6ee4702bc2145a05b20be7f665d\"> 134</a></span> <a class=\"code hl_class\" href=\"a01667.html\">Node</a> <a class=\"code hl_function\" href=\"a01671.html#abb2dc6ee4702bc2145a05b20be7f665d\">makeNode</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01667.html\">Node</a>{<a class=\"code hl_variable\" href=\"a01671.html#abefe712249711f9caee5f9b4ace8fb2a\">order_</a>};</div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> }</div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> </div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#adabf2688eef2d33a180ae9cfbde492b1\"> 140</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_function\" href=\"a01671.html#adabf2688eef2d33a180ae9cfbde492b1\">size</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> <span class=\"keywordflow\">switch</span> (dim)</div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> {</div>\n+<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> <span class=\"keywordflow\">case</span> 1:</div>\n+<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(0) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(dim))</div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> + <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(1) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(dim-1));</div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> <span class=\"keywordflow\">case</span> 2:</div>\n+<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> {</div>\n+<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(0) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(dim))</div>\n+<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> + <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(1) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(dim-1))</div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> + <a class=\"code hl_function\" href=\"a01671.html#a5a34336b9868148ddade4d6b5fd044cf\">dofsPerSimplex</a>(2) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(Dune::GeometryTypes::triangle))</div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> + <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(2) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(Dune::GeometryTypes::quadrilateral));</div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> }</div>\n+<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> <span class=\"keywordflow\">case</span> 3:</div>\n+<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> {</div>\n+<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(0) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(dim))</div>\n+<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> + <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(1) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(dim-1))</div>\n+<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> + <a class=\"code hl_function\" href=\"a01671.html#a5a34336b9868148ddade4d6b5fd044cf\">dofsPerSimplex</a>(2) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(Dune::GeometryTypes::triangle))</div>\n+<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> + <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(2) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(Dune::GeometryTypes::quadrilateral))</div>\n+<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> + <a class=\"code hl_function\" href=\"a01671.html#a5a34336b9868148ddade4d6b5fd044cf\">dofsPerSimplex</a>(3) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(Dune::GeometryTypes::tetrahedron))</div>\n+<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> + <a class=\"code hl_function\" href=\"a01671.html#afd0d5e9191756b1d6e6f7c2f77647739\">dofsPerPyramid</a>() * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(Dune::GeometryTypes::pyramid))</div>\n+<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> + <a class=\"code hl_function\" href=\"a01671.html#a005c07b60bc225e41f6fbeee53ab20c2\">dofsPerPrism</a>() * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(Dune::GeometryTypes::prism))</div>\n+<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> + <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(3) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(Dune::GeometryTypes::hexahedron));</div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> }</div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> }</div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"No size method for "</span> << dim << <span class=\"stringliteral\">"d grids available yet!"</span>);</div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> }</div>\n+<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> </div>\n+<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n+<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a9bf76c4a686bf3a6bfe4f7385aab619a\"> 171</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_function\" href=\"a01671.html#a9bf76c4a686bf3a6bfe4f7385aab619a\">size</a>(<span class=\"keyword\">const</span> SizePrefix& prefix)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> assert(prefix.size() == 0 || prefix.size() == 1);</div>\n+<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> <span class=\"keywordflow\">return</span> (prefix.size() == 0) ? <a class=\"code hl_function\" href=\"a01671.html#adabf2688eef2d33a180ae9cfbde492b1\">size</a>() : 0;</div>\n+<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> }</div>\n+<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> </div>\n+<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a960a5535205e3449a3f0aa21f640e7c3\"> 178</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_function\" href=\"a01671.html#a960a5535205e3449a3f0aa21f640e7c3\">dimension</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01671.html#adabf2688eef2d33a180ae9cfbde492b1\">size</a>();</div>\n+<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> }</div>\n+<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> </div>\n+<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#ac91dcb0f3589b23598df3ced95d50d0c\"> 184</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_function\" href=\"a01671.html#ac91dcb0f3589b23598df3ced95d50d0c\">maxNodeSize</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> <span class=\"comment\">// That cast to unsigned int is necessary because GV::dimension is an enum,</span></div>\n+<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> <span class=\"comment\">// which is not recognized by the power method as an integer type...</span></div>\n+<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00213.html#ga0d8eb549af76bc2563ab189e63668ee5\">power</a>(<a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>()+1, (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>)GV::dimension);</div>\n+<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> }</div>\n+<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span> </div>\n+<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n+<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a45c031d3793e53e9413b86d49bffa5b0\"> 192</a></span> It <a class=\"code hl_function\" href=\"a01671.html#a45c031d3793e53e9413b86d49bffa5b0\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01667.html\">Node</a>& node, It it)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> <span class=\"keywordflow\">for</span> (<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> i = 0, end = node.<a class=\"code hl_function\" href=\"a01667.html#a8d23b1a79271358fc3326ee11df5ec4b\">finiteElement</a>().size() ; i < end ; ++it, ++i)</div>\n+<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> {</div>\n+<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> Dune::LocalKey localKey = node.<a class=\"code hl_function\" href=\"a01667.html#a8d23b1a79271358fc3326ee11df5ec4b\">finiteElement</a>().localCoefficients().localKey(i);</div>\n+<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridIndexSet = <a class=\"code hl_function\" href=\"a01671.html#ab21cdfcd52867003b7f3095f366109e7\">gridView</a>().indexSet();</div>\n+<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& element = node.<a class=\"code hl_function\" href=\"a01667.html#a9d58cded4e8fb6665c22c758e55f4914\">element</a>();</div>\n+<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> </div>\n+<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> <span class=\"comment\">// The dimension of the entity that the current dof is related to</span></div>\n+<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> <span class=\"keyword\">auto</span> dofDim = dim - localKey.codim();</div>\n+<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> </div>\n+<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> <span class=\"comment\">// Test for a vertex dof</span></div>\n+<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> <span class=\"comment\">// The test for k==1 is redundant, but having it here allows the compiler to conclude</span></div>\n+<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span> <span class=\"comment\">// at compile-time that the dofDim==0 case is the only one that will ever happen.</span></div>\n+<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> <span class=\"comment\">// This leads to measurable speed-up: see</span></div>\n+<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> <span class=\"comment\">// https://gitlab.dune-project.org/staging/dune-functions/issues/30</span></div>\n+<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span> <span class=\"keywordflow\">if</span> (k==1 || dofDim==0) {</div>\n+<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> *it = {{ (<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)(gridIndexSet.subIndex(element,localKey.subEntity(),dim)) }};</div>\n+<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> <span class=\"keywordflow\">continue</span>;</div>\n+<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> }</div>\n+<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"> 212</span> </div>\n+<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span> <span class=\"keywordflow\">if</span> (dofDim==1)</div>\n+<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> { <span class=\"comment\">// edge dof</span></div>\n+<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> <span class=\"keywordflow\">if</span> (dim==1) <span class=\"comment\">// element dof -- any local numbering is fine</span></div>\n+<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span> {</div>\n+<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> *it = {{ <a class=\"code hl_variable\" href=\"a01671.html#a24780ed75bb6c40381f730e267f133f8\">edgeOffset_</a></div>\n+<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> + <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(1) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)gridIndexSet.subIndex(element,0,0))</div>\n+<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> + localKey.index() }};</div>\n+<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span> <span class=\"keywordflow\">continue</span>;</div>\n+<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> }</div>\n+<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span> <span class=\"keywordflow\">else</span></div>\n+<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> {</div>\n+<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span> refElement</div>\n+<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span> = Dune::referenceElement<double,dim>(element.type());</div>\n+<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> </div>\n+<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> <span class=\"comment\">// We have to reverse the numbering if the local element edge is</span></div>\n+<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> <span class=\"comment\">// not aligned with the global edge.</span></div>\n+<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> <span class=\"keyword\">auto</span> v0 = (<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)gridIndexSet.subIndex(element,refElement.subEntity(localKey.subEntity(),localKey.codim(),0,dim),dim);</div>\n+<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span> <span class=\"keyword\">auto</span> v1 = (<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)gridIndexSet.subIndex(element,refElement.subEntity(localKey.subEntity(),localKey.codim(),1,dim),dim);</div>\n+<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span> <span class=\"keywordtype\">bool</span> flip = (v0 > v1);</div>\n+<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> *it = {{ (flip)</div>\n+<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> ? <a class=\"code hl_variable\" href=\"a01671.html#a24780ed75bb6c40381f730e267f133f8\">edgeOffset_</a></div>\n+<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> + <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(1)*((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)gridIndexSet.subIndex(element,localKey.subEntity(),localKey.codim()))</div>\n+<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> + (<a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(1)-1)-localKey.index()</div>\n+<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span> : <a class=\"code hl_variable\" href=\"a01671.html#a24780ed75bb6c40381f730e267f133f8\">edgeOffset_</a></div>\n+<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span> + <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(1)*((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)gridIndexSet.subIndex(element,localKey.subEntity(),localKey.codim()))</div>\n+<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span> + localKey.index() }};</div>\n+<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span> <span class=\"keywordflow\">continue</span>;</div>\n+<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"> 240</span> }</div>\n+<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span> }</div>\n+<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span> </div>\n+<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> <span class=\"keywordflow\">if</span> (dofDim==2)</div>\n+<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> {</div>\n+<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> <span class=\"keywordflow\">if</span> (dim==2) <span class=\"comment\">// element dof -- any local numbering is fine</span></div>\n+<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span> {</div>\n+<div class=\"line\"><a id=\"l00247\" name=\"l00247\"></a><span class=\"lineno\"> 247</span> <span class=\"keywordflow\">if</span> (element.type().isTriangle())</div>\n+<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"> 248</span> {</div>\n+<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span> *it = {{ <a class=\"code hl_variable\" href=\"a01671.html#ae6c85768fc1d8aa23f94a2708d8d3ee6\">triangleOffset_</a> + <a class=\"code hl_function\" href=\"a01671.html#a5a34336b9868148ddade4d6b5fd044cf\">dofsPerSimplex</a>(2)*((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};</div>\n+<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span> <span class=\"keywordflow\">continue</span>;</div>\n+<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span> }</div>\n+<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span> <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (element.type().isQuadrilateral())</div>\n+<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"> 253</span> {</div>\n+<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"> 254</span> *it = {{ <a class=\"code hl_variable\" href=\"a01671.html#aaa4552a25872774f6f07f4dd8336be69\">quadrilateralOffset_</a> + <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(2)*((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};</div>\n+<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span> <span class=\"keywordflow\">continue</span>;</div>\n+<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"> 256</span> }</div>\n+<div class=\"line\"><a id=\"l00257\" name=\"l00257\"></a><span class=\"lineno\"> 257</span> <span class=\"keywordflow\">else</span></div>\n+<div class=\"line\"><a id=\"l00258\" name=\"l00258\"></a><span class=\"lineno\"> 258</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"2d elements have to be triangles or quadrilaterals"</span>);</div>\n+<div class=\"line\"><a id=\"l00259\" name=\"l00259\"></a><span class=\"lineno\"> 259</span> } <span class=\"keywordflow\">else</span></div>\n+<div class=\"line\"><a id=\"l00260\" name=\"l00260\"></a><span class=\"lineno\"> 260</span> {</div>\n+<div class=\"line\"><a id=\"l00261\" name=\"l00261\"></a><span class=\"lineno\"> 261</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span> refElement</div>\n+<div class=\"line\"><a id=\"l00262\" name=\"l00262\"></a><span class=\"lineno\"> 262</span> = Dune::referenceElement<double,dim>(element.type());</div>\n+<div class=\"line\"><a id=\"l00263\" name=\"l00263\"></a><span class=\"lineno\"> 263</span> </div>\n+<div class=\"line\"><a id=\"l00264\" name=\"l00264\"></a><span class=\"lineno\"> 264</span> <span class=\"keywordflow\">if</span> (<a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>()>3)</div>\n+<div class=\"line\"><a id=\"l00265\" name=\"l00265\"></a><span class=\"lineno\"> 265</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"LagrangeBasis for 3D grids is only implemented if k<=3"</span>);</div>\n+<div class=\"line\"><a id=\"l00266\" name=\"l00266\"></a><span class=\"lineno\"> 266</span> </div>\n+<div class=\"line\"><a id=\"l00267\" name=\"l00267\"></a><span class=\"lineno\"> 267</span> <span class=\"keywordflow\">if</span> (<a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>()==3 and !refElement.type(localKey.subEntity(), localKey.codim()).isTriangle())</div>\n+<div class=\"line\"><a id=\"l00268\" name=\"l00268\"></a><span class=\"lineno\"> 268</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"LagrangeBasis for 3D grids with k==3 is only implemented if the grid is a simplex grid"</span>);</div>\n+<div class=\"line\"><a id=\"l00269\" name=\"l00269\"></a><span class=\"lineno\"> 269</span> </div>\n+<div class=\"line\"><a id=\"l00270\" name=\"l00270\"></a><span class=\"lineno\"> 270</span> *it = {{ <a class=\"code hl_variable\" href=\"a01671.html#ae6c85768fc1d8aa23f94a2708d8d3ee6\">triangleOffset_</a> + ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)gridIndexSet.subIndex(element,localKey.subEntity(),localKey.codim())) }};</div>\n+<div class=\"line\"><a id=\"l00271\" name=\"l00271\"></a><span class=\"lineno\"> 271</span> <span class=\"keywordflow\">continue</span>;</div>\n+<div class=\"line\"><a id=\"l00272\" name=\"l00272\"></a><span class=\"lineno\"> 272</span> }</div>\n+<div class=\"line\"><a id=\"l00273\" name=\"l00273\"></a><span class=\"lineno\"> 273</span> }</div>\n+<div class=\"line\"><a id=\"l00274\" name=\"l00274\"></a><span class=\"lineno\"> 274</span> </div>\n+<div class=\"line\"><a id=\"l00275\" name=\"l00275\"></a><span class=\"lineno\"> 275</span> <span class=\"keywordflow\">if</span> (dofDim==3)</div>\n+<div class=\"line\"><a id=\"l00276\" name=\"l00276\"></a><span class=\"lineno\"> 276</span> {</div>\n+<div class=\"line\"><a id=\"l00277\" name=\"l00277\"></a><span class=\"lineno\"> 277</span> <span class=\"keywordflow\">if</span> (dim==3) <span class=\"comment\">// element dof -- any local numbering is fine</span></div>\n+<div class=\"line\"><a id=\"l00278\" name=\"l00278\"></a><span class=\"lineno\"> 278</span> {</div>\n+<div class=\"line\"><a id=\"l00279\" name=\"l00279\"></a><span class=\"lineno\"> 279</span> <span class=\"keywordflow\">if</span> (element.type().isTetrahedron())</div>\n+<div class=\"line\"><a id=\"l00280\" name=\"l00280\"></a><span class=\"lineno\"> 280</span> {</div>\n+<div class=\"line\"><a id=\"l00281\" name=\"l00281\"></a><span class=\"lineno\"> 281</span> *it = {{ <a class=\"code hl_variable\" href=\"a01671.html#a6c7ee6cdf1c33779542802c064878f9d\">tetrahedronOffset_</a> + <a class=\"code hl_function\" href=\"a01671.html#a5a34336b9868148ddade4d6b5fd044cf\">dofsPerSimplex</a>(3)*((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};</div>\n+<div class=\"line\"><a id=\"l00282\" name=\"l00282\"></a><span class=\"lineno\"> 282</span> <span class=\"keywordflow\">continue</span>;</div>\n+<div class=\"line\"><a id=\"l00283\" name=\"l00283\"></a><span class=\"lineno\"> 283</span> }</div>\n+<div class=\"line\"><a id=\"l00284\" name=\"l00284\"></a><span class=\"lineno\"> 284</span> <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (element.type().isHexahedron())</div>\n+<div class=\"line\"><a id=\"l00285\" name=\"l00285\"></a><span class=\"lineno\"> 285</span> {</div>\n+<div class=\"line\"><a id=\"l00286\" name=\"l00286\"></a><span class=\"lineno\"> 286</span> *it = {{ <a class=\"code hl_variable\" href=\"a01671.html#aea5db4f517eaead23b62142891c0484a\">hexahedronOffset_</a> + <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(3)*((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};</div>\n+<div class=\"line\"><a id=\"l00287\" name=\"l00287\"></a><span class=\"lineno\"> 287</span> <span class=\"keywordflow\">continue</span>;</div>\n+<div class=\"line\"><a id=\"l00288\" name=\"l00288\"></a><span class=\"lineno\"> 288</span> }</div>\n+<div class=\"line\"><a id=\"l00289\" name=\"l00289\"></a><span class=\"lineno\"> 289</span> <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (element.type().isPrism())</div>\n+<div class=\"line\"><a id=\"l00290\" name=\"l00290\"></a><span class=\"lineno\"> 290</span> {</div>\n+<div class=\"line\"><a id=\"l00291\" name=\"l00291\"></a><span class=\"lineno\"> 291</span> *it = {{ <a class=\"code hl_variable\" href=\"a01671.html#a649ad327ee6564de6263f497962d344e\">prismOffset_</a> + <a class=\"code hl_function\" href=\"a01671.html#a005c07b60bc225e41f6fbeee53ab20c2\">dofsPerPrism</a>()*((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};</div>\n+<div class=\"line\"><a id=\"l00292\" name=\"l00292\"></a><span class=\"lineno\"> 292</span> <span class=\"keywordflow\">continue</span>;</div>\n+<div class=\"line\"><a id=\"l00293\" name=\"l00293\"></a><span class=\"lineno\"> 293</span> }</div>\n+<div class=\"line\"><a id=\"l00294\" name=\"l00294\"></a><span class=\"lineno\"> 294</span> <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (element.type().isPyramid())</div>\n+<div class=\"line\"><a id=\"l00295\" name=\"l00295\"></a><span class=\"lineno\"> 295</span> {</div>\n+<div class=\"line\"><a id=\"l00296\" name=\"l00296\"></a><span class=\"lineno\"> 296</span> *it = {{ <a class=\"code hl_variable\" href=\"a01671.html#a639dc115510426bbaf3f0431fc8f1748\">pyramidOffset_</a> + <a class=\"code hl_function\" href=\"a01671.html#afd0d5e9191756b1d6e6f7c2f77647739\">dofsPerPyramid</a>()*((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};</div>\n+<div class=\"line\"><a id=\"l00297\" name=\"l00297\"></a><span class=\"lineno\"> 297</span> <span class=\"keywordflow\">continue</span>;</div>\n+<div class=\"line\"><a id=\"l00298\" name=\"l00298\"></a><span class=\"lineno\"> 298</span> }</div>\n+<div class=\"line\"><a id=\"l00299\" name=\"l00299\"></a><span class=\"lineno\"> 299</span> <span class=\"keywordflow\">else</span></div>\n+<div class=\"line\"><a id=\"l00300\" name=\"l00300\"></a><span class=\"lineno\"> 300</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"3d elements have to be tetrahedra, hexahedra, prisms, or pyramids"</span>);</div>\n+<div class=\"line\"><a id=\"l00301\" name=\"l00301\"></a><span class=\"lineno\"> 301</span> } <span class=\"keywordflow\">else</span></div>\n+<div class=\"line\"><a id=\"l00302\" name=\"l00302\"></a><span class=\"lineno\"> 302</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"Grids of dimension larger than 3 are no supported"</span>);</div>\n+<div class=\"line\"><a id=\"l00303\" name=\"l00303\"></a><span class=\"lineno\"> 303</span> }</div>\n+<div class=\"line\"><a id=\"l00304\" name=\"l00304\"></a><span class=\"lineno\"> 304</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"Grid contains elements not supported for the LagrangeBasis"</span>);</div>\n+<div class=\"line\"><a id=\"l00305\" name=\"l00305\"></a><span class=\"lineno\"> 305</span> }</div>\n+<div class=\"line\"><a id=\"l00306\" name=\"l00306\"></a><span class=\"lineno\"> 306</span> <span class=\"keywordflow\">return</span> it;</div>\n+<div class=\"line\"><a id=\"l00307\" name=\"l00307\"></a><span class=\"lineno\"> 307</span> }</div>\n+<div class=\"line\"><a id=\"l00308\" name=\"l00308\"></a><span class=\"lineno\"> 308</span> </div>\n+<div class=\"line\"><a id=\"l00310\" name=\"l00310\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\"> 310</a></span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00311\" name=\"l00311\"></a><span class=\"lineno\"> 311</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00312\" name=\"l00312\"></a><span class=\"lineno\"> 312</span> <span class=\"keywordflow\">return</span> (useDynamicOrder) ? <a class=\"code hl_variable\" href=\"a01671.html#abefe712249711f9caee5f9b4ace8fb2a\">order_</a> : k;</div>\n+<div class=\"line\"><a id=\"l00313\" name=\"l00313\"></a><span class=\"lineno\"> 313</span> }</div>\n+<div class=\"line\"><a id=\"l00314\" name=\"l00314\"></a><span class=\"lineno\"> 314</span> </div>\n+<div class=\"line\"><a id=\"l00315\" name=\"l00315\"></a><span class=\"lineno\"> 315</span><span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00316\" name=\"l00316\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\"> 316</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#aaa2add570edd22047fd5cfba570dd982\">GridView</a> <a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>;</div>\n+<div class=\"line\"><a id=\"l00317\" name=\"l00317\"></a><span class=\"lineno\"> 317</span> </div>\n+<div class=\"line\"><a id=\"l00318\" name=\"l00318\"></a><span class=\"lineno\"> 318</span> <span class=\"comment\">// Run-time order, only valid if k<0</span></div>\n+<div class=\"line\"><a id=\"l00319\" name=\"l00319\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#abefe712249711f9caee5f9b4ace8fb2a\"> 319</a></span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_variable\" href=\"a01671.html#abefe712249711f9caee5f9b4ace8fb2a\">order_</a>;</div>\n+<div class=\"line\"><a id=\"l00320\" name=\"l00320\"></a><span class=\"lineno\"> 320</span> </div>\n+<div class=\"line\"><a id=\"l00322\" name=\"l00322\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a5a34336b9868148ddade4d6b5fd044cf\"> 322</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_function\" href=\"a01671.html#a5a34336b9868148ddade4d6b5fd044cf\">dofsPerSimplex</a>(std::size_t simplexDim)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00323\" name=\"l00323\"></a><span class=\"lineno\"> 323</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00324\" name=\"l00324\"></a><span class=\"lineno\"> 324</span> <span class=\"keywordflow\">return</span> useDynamicOrder ? <a class=\"code hl_variable\" href=\"a01671.html#a39dcb5d78ac1216c75a75660e2d61849\">dofsPerSimplex_</a>[simplexDim] : <a class=\"code hl_function\" href=\"a01671.html#a01edf36372c30d045823bb5a330526e6\">computeDofsPerSimplex</a>(simplexDim);</div>\n+<div class=\"line\"><a id=\"l00325\" name=\"l00325\"></a><span class=\"lineno\"> 325</span> }</div>\n+<div class=\"line\"><a id=\"l00326\" name=\"l00326\"></a><span class=\"lineno\"> 326</span> </div>\n+<div class=\"line\"><a id=\"l00328\" name=\"l00328\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\"> 328</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(std::size_t cubeDim)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00329\" name=\"l00329\"></a><span class=\"lineno\"> 329</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00330\" name=\"l00330\"></a><span class=\"lineno\"> 330</span> <span class=\"keywordflow\">return</span> useDynamicOrder ? <a class=\"code hl_variable\" href=\"a01671.html#abfa5632c391ed7160d081c63ab154377\">dofsPerCube_</a>[cubeDim] : <a class=\"code hl_function\" href=\"a01671.html#a015986cee132f7ebd91ad8f3845a84be\">computeDofsPerCube</a>(cubeDim);</div>\n+<div class=\"line\"><a id=\"l00331\" name=\"l00331\"></a><span class=\"lineno\"> 331</span> }</div>\n+<div class=\"line\"><a id=\"l00332\" name=\"l00332\"></a><span class=\"lineno\"> 332</span> </div>\n+<div class=\"line\"><a id=\"l00333\" name=\"l00333\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a005c07b60bc225e41f6fbeee53ab20c2\"> 333</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_function\" href=\"a01671.html#a005c07b60bc225e41f6fbeee53ab20c2\">dofsPerPrism</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00334\" name=\"l00334\"></a><span class=\"lineno\"> 334</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00335\" name=\"l00335\"></a><span class=\"lineno\"> 335</span> <span class=\"keywordflow\">return</span> useDynamicOrder ? <a class=\"code hl_variable\" href=\"a01671.html#ade4d334b8ac70f9c18fc15a9eba04815\">dofsPerPrism_</a> : <a class=\"code hl_function\" href=\"a01671.html#a0c0e8ce0766d2a59986cb5daebe86132\">computeDofsPerPrism</a>();</div>\n+<div class=\"line\"><a id=\"l00336\" name=\"l00336\"></a><span class=\"lineno\"> 336</span> }</div>\n+<div class=\"line\"><a id=\"l00337\" name=\"l00337\"></a><span class=\"lineno\"> 337</span> </div>\n+<div class=\"line\"><a id=\"l00338\" name=\"l00338\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#afd0d5e9191756b1d6e6f7c2f77647739\"> 338</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_function\" href=\"a01671.html#afd0d5e9191756b1d6e6f7c2f77647739\">dofsPerPyramid</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00339\" name=\"l00339\"></a><span class=\"lineno\"> 339</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00340\" name=\"l00340\"></a><span class=\"lineno\"> 340</span> <span class=\"keywordflow\">return</span> useDynamicOrder ? <a class=\"code hl_variable\" href=\"a01671.html#a9212ce0f83e8642244e10d3cd3d596c6\">dofsPerPyramid_</a> : <a class=\"code hl_function\" href=\"a01671.html#a76f8c4b5aa9e574556edd79f0b2812f1\">computeDofsPerPyramid</a>();</div>\n+<div class=\"line\"><a id=\"l00341\" name=\"l00341\"></a><span class=\"lineno\"> 341</span> }</div>\n+<div class=\"line\"><a id=\"l00342\" name=\"l00342\"></a><span class=\"lineno\"> 342</span> </div>\n+<div class=\"line\"><a id=\"l00344\" name=\"l00344\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a01edf36372c30d045823bb5a330526e6\"> 344</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_function\" href=\"a01671.html#a01edf36372c30d045823bb5a330526e6\">computeDofsPerSimplex</a>(std::size_t simplexDim)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00345\" name=\"l00345\"></a><span class=\"lineno\"> 345</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00346\" name=\"l00346\"></a><span class=\"lineno\"> 346</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>() == 0 ? (dim == simplexDim ? 1 : 0) : Dune::binomial(std::size_t(<a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>()-1),simplexDim);</div>\n+<div class=\"line\"><a id=\"l00347\" name=\"l00347\"></a><span class=\"lineno\"> 347</span> }</div>\n+<div class=\"line\"><a id=\"l00348\" name=\"l00348\"></a><span class=\"lineno\"> 348</span> </div>\n+<div class=\"line\"><a id=\"l00350\" name=\"l00350\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a015986cee132f7ebd91ad8f3845a84be\"> 350</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_function\" href=\"a01671.html#a015986cee132f7ebd91ad8f3845a84be\">computeDofsPerCube</a>(std::size_t cubeDim)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00351\" name=\"l00351\"></a><span class=\"lineno\"> 351</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00352\" name=\"l00352\"></a><span class=\"lineno\"> 352</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>() == 0 ? (dim == cubeDim ? 1 : 0) : <a class=\"code hl_function\" href=\"a00213.html#ga0d8eb549af76bc2563ab189e63668ee5\">Dune::power</a>(<a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>()-1, cubeDim);</div>\n+<div class=\"line\"><a id=\"l00353\" name=\"l00353\"></a><span class=\"lineno\"> 353</span> }</div>\n+<div class=\"line\"><a id=\"l00354\" name=\"l00354\"></a><span class=\"lineno\"> 354</span> </div>\n+<div class=\"line\"><a id=\"l00355\" name=\"l00355\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a0c0e8ce0766d2a59986cb5daebe86132\"> 355</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_function\" href=\"a01671.html#a0c0e8ce0766d2a59986cb5daebe86132\">computeDofsPerPrism</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00356\" name=\"l00356\"></a><span class=\"lineno\"> 356</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00357\" name=\"l00357\"></a><span class=\"lineno\"> 357</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>() == 0 ? (dim == 3 ? 1 : 0) : (<a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>()-1)*(<a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>()-1)*(<a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>()-2)/2;</div>\n+<div class=\"line\"><a id=\"l00358\" name=\"l00358\"></a><span class=\"lineno\"> 358</span> }</div>\n+<div class=\"line\"><a id=\"l00359\" name=\"l00359\"></a><span class=\"lineno\"> 359</span> </div>\n+<div class=\"line\"><a id=\"l00360\" name=\"l00360\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a76f8c4b5aa9e574556edd79f0b2812f1\"> 360</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_function\" href=\"a01671.html#a76f8c4b5aa9e574556edd79f0b2812f1\">computeDofsPerPyramid</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00361\" name=\"l00361\"></a><span class=\"lineno\"> 361</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00362\" name=\"l00362\"></a><span class=\"lineno\"> 362</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>() == 0 ? (dim == 3 ? 1 : 0) : (<a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>()-2)*(<a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>()-1)*(2*<a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>()-3)/6;</div>\n+<div class=\"line\"><a id=\"l00363\" name=\"l00363\"></a><span class=\"lineno\"> 363</span> }</div>\n+<div class=\"line\"><a id=\"l00364\" name=\"l00364\"></a><span class=\"lineno\"> 364</span> </div>\n+<div class=\"line\"><a id=\"l00365\" name=\"l00365\"></a><span class=\"lineno\"> 365</span> <span class=\"comment\">// When the order is given at run-time, the following numbers are pre-computed:</span></div>\n+<div class=\"line\"><a id=\"l00366\" name=\"l00366\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a39dcb5d78ac1216c75a75660e2d61849\"> 366</a></span> std::array<size_type,dim+1> <a class=\"code hl_variable\" href=\"a01671.html#a39dcb5d78ac1216c75a75660e2d61849\">dofsPerSimplex_</a>;</div>\n+<div class=\"line\"><a id=\"l00367\" name=\"l00367\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#abfa5632c391ed7160d081c63ab154377\"> 367</a></span> std::array<size_type,dim+1> <a class=\"code hl_variable\" href=\"a01671.html#abfa5632c391ed7160d081c63ab154377\">dofsPerCube_</a>;</div>\n+<div class=\"line\"><a id=\"l00368\" name=\"l00368\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#ade4d334b8ac70f9c18fc15a9eba04815\"> 368</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_variable\" href=\"a01671.html#ade4d334b8ac70f9c18fc15a9eba04815\">dofsPerPrism_</a>;</div>\n+<div class=\"line\"><a id=\"l00369\" name=\"l00369\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a9212ce0f83e8642244e10d3cd3d596c6\"> 369</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_variable\" href=\"a01671.html#a9212ce0f83e8642244e10d3cd3d596c6\">dofsPerPyramid_</a>;</div>\n+<div class=\"line\"><a id=\"l00370\" name=\"l00370\"></a><span class=\"lineno\"> 370</span> </div>\n+<div class=\"line\"><a id=\"l00371\" name=\"l00371\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a5664ce9110b445d622298dc5263f33b2\"> 371</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_variable\" href=\"a01671.html#a5664ce9110b445d622298dc5263f33b2\">vertexOffset_</a>;</div>\n+<div class=\"line\"><a id=\"l00372\" name=\"l00372\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a24780ed75bb6c40381f730e267f133f8\"> 372</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_variable\" href=\"a01671.html#a24780ed75bb6c40381f730e267f133f8\">edgeOffset_</a>;</div>\n+<div class=\"line\"><a id=\"l00373\" name=\"l00373\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#ae6c85768fc1d8aa23f94a2708d8d3ee6\"> 373</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_variable\" href=\"a01671.html#ae6c85768fc1d8aa23f94a2708d8d3ee6\">triangleOffset_</a>;</div>\n+<div class=\"line\"><a id=\"l00374\" name=\"l00374\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#aaa4552a25872774f6f07f4dd8336be69\"> 374</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_variable\" href=\"a01671.html#aaa4552a25872774f6f07f4dd8336be69\">quadrilateralOffset_</a>;</div>\n+<div class=\"line\"><a id=\"l00375\" name=\"l00375\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a6c7ee6cdf1c33779542802c064878f9d\"> 375</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_variable\" href=\"a01671.html#a6c7ee6cdf1c33779542802c064878f9d\">tetrahedronOffset_</a>;</div>\n+<div class=\"line\"><a id=\"l00376\" name=\"l00376\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a639dc115510426bbaf3f0431fc8f1748\"> 376</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_variable\" href=\"a01671.html#a639dc115510426bbaf3f0431fc8f1748\">pyramidOffset_</a>;</div>\n+<div class=\"line\"><a id=\"l00377\" name=\"l00377\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a649ad327ee6564de6263f497962d344e\"> 377</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_variable\" href=\"a01671.html#a649ad327ee6564de6263f497962d344e\">prismOffset_</a>;</div>\n+<div class=\"line\"><a id=\"l00378\" name=\"l00378\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#aea5db4f517eaead23b62142891c0484a\"> 378</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_variable\" href=\"a01671.html#aea5db4f517eaead23b62142891c0484a\">hexahedronOffset_</a>;</div>\n+<div class=\"line\"><a id=\"l00379\" name=\"l00379\"></a><span class=\"lineno\"> 379</span> </div>\n+<div class=\"line\"><a id=\"l00380\" name=\"l00380\"></a><span class=\"lineno\"> 380</span>};</div>\n+<div class=\"line\"><a id=\"l00381\" name=\"l00381\"></a><span class=\"lineno\"> 381</span> </div>\n+<div class=\"line\"><a id=\"l00382\" name=\"l00382\"></a><span class=\"lineno\"> 382</span> </div>\n+<div class=\"line\"><a id=\"l00383\" name=\"l00383\"></a><span class=\"lineno\"> 383</span> </div>\n+<div class=\"line\"><a id=\"l00384\" name=\"l00384\"></a><span class=\"lineno\"> 384</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k, <span class=\"keyword\">typename</span> R></div>\n+<div class=\"line\"><a id=\"l00385\" name=\"l00385\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01667.html\"> 385</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01667.html\">LagrangeNode</a> :</div>\n+<div class=\"line\"><a id=\"l00386\" name=\"l00386\"></a><span class=\"lineno\"> 386</span> <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01711.html\">LeafBasisNode</a></div>\n+<div class=\"line\"><a id=\"l00387\" name=\"l00387\"></a><span class=\"lineno\"> 387</span>{</div>\n+<div class=\"line\"><a id=\"l00388\" name=\"l00388\"></a><span class=\"lineno\"> 388</span> <span class=\"comment\">// Stores LocalFiniteElement implementations with run-time order as a function of GeometryType</span></div>\n+<div class=\"line\"><a id=\"l00389\" name=\"l00389\"></a><span class=\"lineno\"> 389</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Domain, <span class=\"keyword\">typename</span> Range, <span class=\"keywordtype\">int</span> dim></div>\n+<div class=\"line\"><a id=\"l00390\" name=\"l00390\"></a><span class=\"lineno\"> 390</span> <span class=\"keyword\">class </span>LagrangeRunTimeLFECache</div>\n+<div class=\"line\"><a id=\"l00391\" name=\"l00391\"></a><span class=\"lineno\"> 391</span> {</div>\n+<div class=\"line\"><a id=\"l00392\" name=\"l00392\"></a><span class=\"lineno\"> 392</span> <span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00393\" name=\"l00393\"></a><span class=\"lineno\"> 393</span> <span class=\"keyword\">using </span>FiniteElementType = LagrangeLocalFiniteElement<EquidistantPointSet,dim,Domain,Range>;</div>\n+<div class=\"line\"><a id=\"l00394\" name=\"l00394\"></a><span class=\"lineno\"> 394</span> </div>\n+<div class=\"line\"><a id=\"l00395\" name=\"l00395\"></a><span class=\"lineno\"> 395</span> <span class=\"keyword\">const</span> FiniteElementType& get(GeometryType type)</div>\n+<div class=\"line\"><a id=\"l00396\" name=\"l00396\"></a><span class=\"lineno\"> 396</span> {</div>\n+<div class=\"line\"><a id=\"l00397\" name=\"l00397\"></a><span class=\"lineno\"> 397</span> <span class=\"keyword\">auto</span> i = data_.find(type);</div>\n+<div class=\"line\"><a id=\"l00398\" name=\"l00398\"></a><span class=\"lineno\"> 398</span> <span class=\"keywordflow\">if</span> (i==data_.end())</div>\n+<div class=\"line\"><a id=\"l00399\" name=\"l00399\"></a><span class=\"lineno\"> 399</span> i = data_.emplace(type,FiniteElementType(type,<a class=\"code hl_variable\" href=\"a01667.html#adad41ff7dc381b7c749945a992ea3dc8\">order_</a>)).first;</div>\n+<div class=\"line\"><a id=\"l00400\" name=\"l00400\"></a><span class=\"lineno\"> 400</span> <span class=\"keywordflow\">return</span> (*i).second;</div>\n+<div class=\"line\"><a id=\"l00401\" name=\"l00401\"></a><span class=\"lineno\"> 401</span> }</div>\n+<div class=\"line\"><a id=\"l00402\" name=\"l00402\"></a><span class=\"lineno\"> 402</span> </div>\n+<div class=\"line\"><a id=\"l00403\" name=\"l00403\"></a><span class=\"lineno\"> 403</span> std::map<GeometryType, FiniteElementType> data_;</div>\n+<div class=\"line\"><a id=\"l00404\" name=\"l00404\"></a><span class=\"lineno\"> 404</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_variable\" href=\"a01667.html#adad41ff7dc381b7c749945a992ea3dc8\">order_</a>;</div>\n+<div class=\"line\"><a id=\"l00405\" name=\"l00405\"></a><span class=\"lineno\"> 405</span> };</div>\n+<div class=\"line\"><a id=\"l00406\" name=\"l00406\"></a><span class=\"lineno\"> 406</span> </div>\n+<div class=\"line\"><a id=\"l00407\" name=\"l00407\"></a><span class=\"lineno\"> 407</span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">int</span> dim = GV::dimension;</div>\n+<div class=\"line\"><a id=\"l00408\" name=\"l00408\"></a><span class=\"lineno\"> 408</span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span> useDynamicOrder = (k<0);</div>\n+<div class=\"line\"><a id=\"l00409\" name=\"l00409\"></a><span class=\"lineno\"> 409</span> </div>\n+<div class=\"line\"><a id=\"l00410\" name=\"l00410\"></a><span class=\"lineno\"> 410</span> <span class=\"keyword\">using </span>FiniteElementCache = <span class=\"keyword\">typename</span> std::conditional<(useDynamicOrder),</div>\n+<div class=\"line\"><a id=\"l00411\" name=\"l00411\"></a><span class=\"lineno\"> 411</span> LagrangeRunTimeLFECache<typename GV::ctype, R, dim>,</div>\n+<div class=\"line\"><a id=\"l00412\" name=\"l00412\"></a><span class=\"lineno\"> 412</span> PQkLocalFiniteElementCache<typename GV::ctype, R, dim, k></div>\n+<div class=\"line\"><a id=\"l00413\" name=\"l00413\"></a><span class=\"lineno\"> 413</span> >::type;</div>\n+<div class=\"line\"><a id=\"l00414\" name=\"l00414\"></a><span class=\"lineno\"> 414</span> </div>\n+<div class=\"line\"><a id=\"l00415\" name=\"l00415\"></a><span class=\"lineno\"> 415</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00416\" name=\"l00416\"></a><span class=\"lineno\"> 416</span> </div>\n+<div class=\"line\"><a id=\"l00417\" name=\"l00417\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01667.html#aebfb5ce0d89579136563b0bc00fd8cad\"> 417</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01667.html#aebfb5ce0d89579136563b0bc00fd8cad\">size_type</a> = std::size_t;</div>\n+<div class=\"line\"><a id=\"l00418\" name=\"l00418\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01667.html#acfd5593b366b82297333354ce3bfc963\"> 418</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01667.html#acfd5593b366b82297333354ce3bfc963\">Element</a> = <span class=\"keyword\">typename</span> GV::template Codim<0>::Entity;</div>\n+<div class=\"line\"><a id=\"l00419\" name=\"l00419\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01667.html#a9fa83934c852af0f2377de6c23d0a82d\"> 419</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01667.html#a9fa83934c852af0f2377de6c23d0a82d\">FiniteElement</a> = <span class=\"keyword\">typename</span> FiniteElementCache::FiniteElementType;</div>\n+<div class=\"line\"><a id=\"l00420\" name=\"l00420\"></a><span class=\"lineno\"> 420</span> </div>\n+<div class=\"line\"><a id=\"l00422\" name=\"l00422\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01667.html#aee40cc92b0346bf21a597e75463112a8\"> 422</a></span> <a class=\"code hl_function\" href=\"a01667.html#aee40cc92b0346bf21a597e75463112a8\">LagrangeNode</a>() :</div>\n+<div class=\"line\"><a id=\"l00423\" name=\"l00423\"></a><span class=\"lineno\"> 423</span> <a class=\"code hl_variable\" href=\"a01667.html#ad4bf919a73a49e15162fb528d5572e2b\">finiteElement_</a>(nullptr),</div>\n+<div class=\"line\"><a id=\"l00424\" name=\"l00424\"></a><span class=\"lineno\"> 424</span> <a class=\"code hl_variable\" href=\"a01667.html#a909fcfefa3945c7677f0be670e5f7aaf\">element_</a>(nullptr)</div>\n+<div class=\"line\"><a id=\"l00425\" name=\"l00425\"></a><span class=\"lineno\"> 425</span> {}</div>\n+<div class=\"line\"><a id=\"l00426\" name=\"l00426\"></a><span class=\"lineno\"> 426</span> </div>\n+<div class=\"line\"><a id=\"l00428\" name=\"l00428\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01667.html#a006942ce9632177e69663989b739b1d2\"> 428</a></span> <a class=\"code hl_function\" href=\"a01667.html#a006942ce9632177e69663989b739b1d2\">LagrangeNode</a>(<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_function\" href=\"a01667.html#a875dbcd906a847c0fd2c52da6f8de795\">order</a>) :</div>\n+<div class=\"line\"><a id=\"l00429\" name=\"l00429\"></a><span class=\"lineno\"> 429</span> <a class=\"code hl_variable\" href=\"a01667.html#adad41ff7dc381b7c749945a992ea3dc8\">order_</a>(<a class=\"code hl_function\" href=\"a01667.html#a875dbcd906a847c0fd2c52da6f8de795\">order</a>),</div>\n+<div class=\"line\"><a id=\"l00430\" name=\"l00430\"></a><span class=\"lineno\"> 430</span> <a class=\"code hl_variable\" href=\"a01667.html#ad4bf919a73a49e15162fb528d5572e2b\">finiteElement_</a>(nullptr),</div>\n+<div class=\"line\"><a id=\"l00431\" name=\"l00431\"></a><span class=\"lineno\"> 431</span> <a class=\"code hl_variable\" href=\"a01667.html#a909fcfefa3945c7677f0be670e5f7aaf\">element_</a>(nullptr)</div>\n+<div class=\"line\"><a id=\"l00432\" name=\"l00432\"></a><span class=\"lineno\"> 432</span> {</div>\n+<div class=\"line\"><a id=\"l00433\" name=\"l00433\"></a><span class=\"lineno\"> 433</span> <span class=\"comment\">// Only the cache for the run-time-order case (i.e., k<0), has the 'order_' member</span></div>\n+<div class=\"line\"><a id=\"l00434\" name=\"l00434\"></a><span class=\"lineno\"> 434</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> (useDynamicOrder)</div>\n+<div class=\"line\"><a id=\"l00435\" name=\"l00435\"></a><span class=\"lineno\"> 435</span> <a class=\"code hl_variable\" href=\"a01667.html#a9d77e8510356a9c3a37c2ed83548b68f\">cache_</a>.order_ = <a class=\"code hl_function\" href=\"a01667.html#a875dbcd906a847c0fd2c52da6f8de795\">order</a>;</div>\n+<div class=\"line\"><a id=\"l00436\" name=\"l00436\"></a><span class=\"lineno\"> 436</span> }</div>\n+<div class=\"line\"><a id=\"l00437\" name=\"l00437\"></a><span class=\"lineno\"> 437</span> </div>\n+<div class=\"line\"><a id=\"l00439\" name=\"l00439\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01667.html#a9d58cded4e8fb6665c22c758e55f4914\"> 439</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01667.html#acfd5593b366b82297333354ce3bfc963\">Element</a>& <a class=\"code hl_function\" href=\"a01667.html#a9d58cded4e8fb6665c22c758e55f4914\">element</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00440\" name=\"l00440\"></a><span class=\"lineno\"> 440</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00441\" name=\"l00441\"></a><span class=\"lineno\"> 441</span> <span class=\"keywordflow\">return</span> *<a class=\"code hl_variable\" href=\"a01667.html#a909fcfefa3945c7677f0be670e5f7aaf\">element_</a>;</div>\n+<div class=\"line\"><a id=\"l00442\" name=\"l00442\"></a><span class=\"lineno\"> 442</span> }</div>\n+<div class=\"line\"><a id=\"l00443\" name=\"l00443\"></a><span class=\"lineno\"> 443</span> </div>\n+<div class=\"line\"><a id=\"l00448\" name=\"l00448\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01667.html#a8d23b1a79271358fc3326ee11df5ec4b\"> 448</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01667.html#a9fa83934c852af0f2377de6c23d0a82d\">FiniteElement</a>& <a class=\"code hl_function\" href=\"a01667.html#a8d23b1a79271358fc3326ee11df5ec4b\">finiteElement</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00449\" name=\"l00449\"></a><span class=\"lineno\"> 449</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00450\" name=\"l00450\"></a><span class=\"lineno\"> 450</span> <span class=\"keywordflow\">return</span> *<a class=\"code hl_variable\" href=\"a01667.html#ad4bf919a73a49e15162fb528d5572e2b\">finiteElement_</a>;</div>\n+<div class=\"line\"><a id=\"l00451\" name=\"l00451\"></a><span class=\"lineno\"> 451</span> }</div>\n+<div class=\"line\"><a id=\"l00452\" name=\"l00452\"></a><span class=\"lineno\"> 452</span> </div>\n+<div class=\"line\"><a id=\"l00454\" name=\"l00454\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01667.html#aaeeb88d381c09b9df01e8c5db0c2ee4a\"> 454</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01667.html#aaeeb88d381c09b9df01e8c5db0c2ee4a\">bind</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01667.html#acfd5593b366b82297333354ce3bfc963\">Element</a>& e)</div>\n+<div class=\"line\"><a id=\"l00455\" name=\"l00455\"></a><span class=\"lineno\"> 455</span> {</div>\n+<div class=\"line\"><a id=\"l00456\" name=\"l00456\"></a><span class=\"lineno\"> 456</span> <a class=\"code hl_variable\" href=\"a01667.html#a909fcfefa3945c7677f0be670e5f7aaf\">element_</a> = &e;</div>\n+<div class=\"line\"><a id=\"l00457\" name=\"l00457\"></a><span class=\"lineno\"> 457</span> <a class=\"code hl_variable\" href=\"a01667.html#ad4bf919a73a49e15162fb528d5572e2b\">finiteElement_</a> = &(<a class=\"code hl_variable\" href=\"a01667.html#a9d77e8510356a9c3a37c2ed83548b68f\">cache_</a>.get(<a class=\"code hl_variable\" href=\"a01667.html#a909fcfefa3945c7677f0be670e5f7aaf\">element_</a>->type()));</div>\n+<div class=\"line\"><a id=\"l00458\" name=\"l00458\"></a><span class=\"lineno\"> 458</span> this-><a class=\"code hl_function\" href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\">setSize</a>(<a class=\"code hl_variable\" href=\"a01667.html#ad4bf919a73a49e15162fb528d5572e2b\">finiteElement_</a>->size());</div>\n+<div class=\"line\"><a id=\"l00459\" name=\"l00459\"></a><span class=\"lineno\"> 459</span> }</div>\n+<div class=\"line\"><a id=\"l00460\" name=\"l00460\"></a><span class=\"lineno\"> 460</span> </div>\n+<div class=\"line\"><a id=\"l00461\" name=\"l00461\"></a><span class=\"lineno\"> 461</span><span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00462\" name=\"l00462\"></a><span class=\"lineno\"> 462</span> </div>\n+<div class=\"line\"><a id=\"l00463\" name=\"l00463\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01667.html#a875dbcd906a847c0fd2c52da6f8de795\"> 463</a></span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_function\" href=\"a01667.html#a875dbcd906a847c0fd2c52da6f8de795\">order</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00464\" name=\"l00464\"></a><span class=\"lineno\"> 464</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00465\" name=\"l00465\"></a><span class=\"lineno\"> 465</span> <span class=\"keywordflow\">return</span> (useDynamicOrder) ? <a class=\"code hl_variable\" href=\"a01667.html#adad41ff7dc381b7c749945a992ea3dc8\">order_</a> : k;</div>\n+<div class=\"line\"><a id=\"l00466\" name=\"l00466\"></a><span class=\"lineno\"> 466</span> }</div>\n+<div class=\"line\"><a id=\"l00467\" name=\"l00467\"></a><span class=\"lineno\"> 467</span> </div>\n+<div class=\"line\"><a id=\"l00468\" name=\"l00468\"></a><span class=\"lineno\"> 468</span> <span class=\"comment\">// Run-time order, only valid if k<0</span></div>\n+<div class=\"line\"><a id=\"l00469\" name=\"l00469\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01667.html#adad41ff7dc381b7c749945a992ea3dc8\"> 469</a></span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_variable\" href=\"a01667.html#adad41ff7dc381b7c749945a992ea3dc8\">order_</a>;</div>\n+<div class=\"line\"><a id=\"l00470\" name=\"l00470\"></a><span class=\"lineno\"> 470</span> </div>\n+<div class=\"line\"><a id=\"l00471\" name=\"l00471\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01667.html#a9d77e8510356a9c3a37c2ed83548b68f\"> 471</a></span> FiniteElementCache <a class=\"code hl_variable\" href=\"a01667.html#a9d77e8510356a9c3a37c2ed83548b68f\">cache_</a>;</div>\n+<div class=\"line\"><a id=\"l00472\" name=\"l00472\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01667.html#ad4bf919a73a49e15162fb528d5572e2b\"> 472</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01667.html#a9fa83934c852af0f2377de6c23d0a82d\">FiniteElement</a>* <a class=\"code hl_variable\" href=\"a01667.html#ad4bf919a73a49e15162fb528d5572e2b\">finiteElement_</a>;</div>\n+<div class=\"line\"><a id=\"l00473\" name=\"l00473\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01667.html#a909fcfefa3945c7677f0be670e5f7aaf\"> 473</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01667.html#acfd5593b366b82297333354ce3bfc963\">Element</a>* <a class=\"code hl_variable\" href=\"a01667.html#a909fcfefa3945c7677f0be670e5f7aaf\">element_</a>;</div>\n+<div class=\"line\"><a id=\"l00474\" name=\"l00474\"></a><span class=\"lineno\"> 474</span>};</div>\n+<div class=\"line\"><a id=\"l00475\" name=\"l00475\"></a><span class=\"lineno\"> 475</span> </div>\n+<div class=\"line\"><a id=\"l00476\" name=\"l00476\"></a><span class=\"lineno\"> 476</span> </div>\n+<div class=\"line\"><a id=\"l00477\" name=\"l00477\"></a><span class=\"lineno\"> 477</span> </div>\n+<div class=\"line\"><a id=\"l00478\" name=\"l00478\"></a><span class=\"lineno\"> 478</span><span class=\"keyword\">namespace </span>BasisFactory {</div>\n+<div class=\"line\"><a id=\"l00479\" name=\"l00479\"></a><span class=\"lineno\"> 479</span> </div>\n+<div class=\"line\"><a id=\"l00488\" name=\"l00488\"></a><span class=\"lineno\"> 488</span><span class=\"keyword\">template</span><std::<span class=\"keywordtype\">size_t</span> k, <span class=\"keyword\">typename</span> R=<span class=\"keywordtype\">double</span>></div>\n+<div class=\"line\"><a id=\"l00489\" name=\"l00489\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#ga5106c08bf6dd8eaca7d06075d581d760\"> 489</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00213.html#ga5106c08bf6dd8eaca7d06075d581d760\">lagrange</a>()</div>\n+<div class=\"line\"><a id=\"l00490\" name=\"l00490\"></a><span class=\"lineno\"> 490</span>{</div>\n+<div class=\"line\"><a id=\"l00491\" name=\"l00491\"></a><span class=\"lineno\"> 491</span> <span class=\"keywordflow\">return</span> [](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridView) {</div>\n+<div class=\"line\"><a id=\"l00492\" name=\"l00492\"></a><span class=\"lineno\"> 492</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01671.html\">LagrangePreBasis</a><std::decay_t<<span class=\"keyword\">decltype</span>(gridView)>, k, R>(gridView);</div>\n+<div class=\"line\"><a id=\"l00493\" name=\"l00493\"></a><span class=\"lineno\"> 493</span> };</div>\n+<div class=\"line\"><a id=\"l00494\" name=\"l00494\"></a><span class=\"lineno\"> 494</span>}</div>\n+<div class=\"line\"><a id=\"l00495\" name=\"l00495\"></a><span class=\"lineno\"> 495</span> </div>\n+<div class=\"line\"><a id=\"l00503\" name=\"l00503\"></a><span class=\"lineno\"> 503</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> R=<span class=\"keywordtype\">double</span>></div>\n+<div class=\"line\"><a id=\"l00504\" name=\"l00504\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#ga177b4e1b21990d7fc9350ac0caeb3c6c\"> 504</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00213.html#ga5106c08bf6dd8eaca7d06075d581d760\">lagrange</a>(<span class=\"keywordtype\">int</span> order)</div>\n+<div class=\"line\"><a id=\"l00505\" name=\"l00505\"></a><span class=\"lineno\"> 505</span>{</div>\n+<div class=\"line\"><a id=\"l00506\" name=\"l00506\"></a><span class=\"lineno\"> 506</span> <span class=\"keywordflow\">return</span> [=](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridView) {</div>\n+<div class=\"line\"><a id=\"l00507\" name=\"l00507\"></a><span class=\"lineno\"> 507</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01671.html\">LagrangePreBasis</a><std::decay_t<<span class=\"keyword\">decltype</span>(gridView)>, -1, R>(gridView, order);</div>\n+<div class=\"line\"><a id=\"l00508\" name=\"l00508\"></a><span class=\"lineno\"> 508</span> };</div>\n+<div class=\"line\"><a id=\"l00509\" name=\"l00509\"></a><span class=\"lineno\"> 509</span>}</div>\n+<div class=\"line\"><a id=\"l00510\" name=\"l00510\"></a><span class=\"lineno\"> 510</span> </div>\n+<div class=\"line\"><a id=\"l00511\" name=\"l00511\"></a><span class=\"lineno\"> 511</span>} <span class=\"comment\">// end namespace BasisFactory</span></div>\n+<div class=\"line\"><a id=\"l00512\" name=\"l00512\"></a><span class=\"lineno\"> 512</span> </div>\n+<div class=\"line\"><a id=\"l00513\" name=\"l00513\"></a><span class=\"lineno\"> 513</span> </div>\n+<div class=\"line\"><a id=\"l00514\" name=\"l00514\"></a><span class=\"lineno\"> 514</span> </div>\n+<div class=\"line\"><a id=\"l00538\" name=\"l00538\"></a><span class=\"lineno\"> 538</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k=-1, <span class=\"keyword\">typename</span> R=<span class=\"keywordtype\">double</span>></div>\n+<div class=\"line\"><a id=\"l00539\" name=\"l00539\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#ga566d155fed1f25513c4d927769722fcc\"> 539</a></span><span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01555.html\">LagrangeBasis</a> = <a class=\"code hl_class\" href=\"a01555.html\">DefaultGlobalBasis<LagrangePreBasis<GV, k, R></a> >;</div>\n+<div class=\"line\"><a id=\"l00540\" name=\"l00540\"></a><span class=\"lineno\"> 540</span> </div>\n+<div class=\"line\"><a id=\"l00541\" name=\"l00541\"></a><span class=\"lineno\"> 541</span> </div>\n+<div class=\"line\"><a id=\"l00542\" name=\"l00542\"></a><span class=\"lineno\"> 542</span> </div>\n+<div class=\"line\"><a id=\"l00543\" name=\"l00543\"></a><span class=\"lineno\"> 543</span> </div>\n+<div class=\"line\"><a id=\"l00544\" name=\"l00544\"></a><span class=\"lineno\"> 544</span> </div>\n+<div class=\"line\"><a id=\"l00545\" name=\"l00545\"></a><span class=\"lineno\"> 545</span>} <span class=\"comment\">// end namespace Functions</span></div>\n+<div class=\"line\"><a id=\"l00546\" name=\"l00546\"></a><span class=\"lineno\"> 546</span>} <span class=\"comment\">// end namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00547\" name=\"l00547\"></a><span class=\"lineno\"> 547</span> </div>\n+<div class=\"line\"><a id=\"l00548\" name=\"l00548\"></a><span class=\"lineno\"> 548</span> </div>\n+<div class=\"line\"><a id=\"l00549\" name=\"l00549\"></a><span class=\"lineno\"> 549</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH</span></div>\n+<div class=\"ttc\" id=\"aa00152_html\"><div class=\"ttname\"><a href=\"a00152.html\">defaultglobalbasis.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00179_html\"><div class=\"ttname\"><a href=\"a00179.html\">nodes.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00213_html_ga0d8eb549af76bc2563ab189e63668ee5\"><div class=\"ttname\"><a href=\"a00213.html#ga0d8eb549af76bc2563ab189e63668ee5\">Dune::Functions::BasisFactory::power</a></div><div class=\"ttdeci\">auto power(ChildPreBasisFactory &&childPreBasisFactory, const IndexMergingStrategy &)</div><div class=\"ttdoc\">Create a pre-basis factory that can build a PowerPreBasis.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:369</div></div>\n+<div class=\"ttc\" id=\"aa00213_html_ga5106c08bf6dd8eaca7d06075d581d760\"><div class=\"ttname\"><a href=\"a00213.html#ga5106c08bf6dd8eaca7d06075d581d760\">Dune::Functions::BasisFactory::lagrange</a></div><div class=\"ttdeci\">auto lagrange()</div><div class=\"ttdoc\">Create a pre-basis factory that can create a Lagrange pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:489</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa01267_html\"><div class=\"ttname\"><a href=\"a01267.html\">Dune::Functions::StaticMultiIndex< size_type, 1 ></a></div><div class=\"ttdoc\">A statically sized MultiIndex type.</div><div class=\"ttdef\"><b>Definition:</b> multiindex.hh:49</div></div>\n+<div class=\"ttc\" id=\"aa01555_html\"><div class=\"ttname\"><a href=\"a01555.html\">Dune::Functions::DefaultGlobalBasis</a></div><div class=\"ttdoc\">Global basis for given pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:46</div></div>\n+<div class=\"ttc\" id=\"aa01667_html\"><div class=\"ttname\"><a href=\"a01667.html\">Dune::Functions::LagrangeNode</a></div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:387</div></div>\n+<div class=\"ttc\" id=\"aa01667_html_a006942ce9632177e69663989b739b1d2\"><div class=\"ttname\"><a href=\"a01667.html#a006942ce9632177e69663989b739b1d2\">Dune::Functions::LagrangeNode::LagrangeNode</a></div><div class=\"ttdeci\">LagrangeNode(unsigned int order)</div><div class=\"ttdoc\">Constructor with a run-time order.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:428</div></div>\n+<div class=\"ttc\" id=\"aa01667_html_a875dbcd906a847c0fd2c52da6f8de795\"><div class=\"ttname\"><a href=\"a01667.html#a875dbcd906a847c0fd2c52da6f8de795\">Dune::Functions::LagrangeNode::order</a></div><div class=\"ttdeci\">unsigned int order() const</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:463</div></div>\n+<div class=\"ttc\" id=\"aa01667_html_a8d23b1a79271358fc3326ee11df5ec4b\"><div class=\"ttname\"><a href=\"a01667.html#a8d23b1a79271358fc3326ee11df5ec4b\">Dune::Functions::LagrangeNode::finiteElement</a></div><div class=\"ttdeci\">const FiniteElement & finiteElement() const</div><div class=\"ttdoc\">Return the LocalFiniteElement for the element we are bound to.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:448</div></div>\n+<div class=\"ttc\" id=\"aa01667_html_a909fcfefa3945c7677f0be670e5f7aaf\"><div class=\"ttname\"><a href=\"a01667.html#a909fcfefa3945c7677f0be670e5f7aaf\">Dune::Functions::LagrangeNode::element_</a></div><div class=\"ttdeci\">const Element * element_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:473</div></div>\n+<div class=\"ttc\" id=\"aa01667_html_a9d58cded4e8fb6665c22c758e55f4914\"><div class=\"ttname\"><a href=\"a01667.html#a9d58cded4e8fb6665c22c758e55f4914\">Dune::Functions::LagrangeNode::element</a></div><div class=\"ttdeci\">const Element & element() const</div><div class=\"ttdoc\">Return current element, throw if unbound.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:439</div></div>\n+<div class=\"ttc\" id=\"aa01667_html_a9d77e8510356a9c3a37c2ed83548b68f\"><div class=\"ttname\"><a href=\"a01667.html#a9d77e8510356a9c3a37c2ed83548b68f\">Dune::Functions::LagrangeNode::cache_</a></div><div class=\"ttdeci\">FiniteElementCache cache_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:471</div></div>\n+<div class=\"ttc\" id=\"aa01667_html_a9fa83934c852af0f2377de6c23d0a82d\"><div class=\"ttname\"><a href=\"a01667.html#a9fa83934c852af0f2377de6c23d0a82d\">Dune::Functions::LagrangeNode::FiniteElement</a></div><div class=\"ttdeci\">typename FiniteElementCache::FiniteElementType FiniteElement</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:419</div></div>\n+<div class=\"ttc\" id=\"aa01667_html_aaeeb88d381c09b9df01e8c5db0c2ee4a\"><div class=\"ttname\"><a href=\"a01667.html#aaeeb88d381c09b9df01e8c5db0c2ee4a\">Dune::Functions::LagrangeNode::bind</a></div><div class=\"ttdeci\">void bind(const Element &e)</div><div class=\"ttdoc\">Bind to element.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:454</div></div>\n+<div class=\"ttc\" id=\"aa01667_html_acfd5593b366b82297333354ce3bfc963\"><div class=\"ttname\"><a href=\"a01667.html#acfd5593b366b82297333354ce3bfc963\">Dune::Functions::LagrangeNode::Element</a></div><div class=\"ttdeci\">typename GV::template Codim< 0 >::Entity Element</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:418</div></div>\n+<div class=\"ttc\" id=\"aa01667_html_ad4bf919a73a49e15162fb528d5572e2b\"><div class=\"ttname\"><a href=\"a01667.html#ad4bf919a73a49e15162fb528d5572e2b\">Dune::Functions::LagrangeNode::finiteElement_</a></div><div class=\"ttdeci\">const FiniteElement * finiteElement_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:472</div></div>\n+<div class=\"ttc\" id=\"aa01667_html_adad41ff7dc381b7c749945a992ea3dc8\"><div class=\"ttname\"><a href=\"a01667.html#adad41ff7dc381b7c749945a992ea3dc8\">Dune::Functions::LagrangeNode::order_</a></div><div class=\"ttdeci\">unsigned int order_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:469</div></div>\n+<div class=\"ttc\" id=\"aa01667_html_aebfb5ce0d89579136563b0bc00fd8cad\"><div class=\"ttname\"><a href=\"a01667.html#aebfb5ce0d89579136563b0bc00fd8cad\">Dune::Functions::LagrangeNode::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:417</div></div>\n+<div class=\"ttc\" id=\"aa01667_html_aee40cc92b0346bf21a597e75463112a8\"><div class=\"ttname\"><a href=\"a01667.html#aee40cc92b0346bf21a597e75463112a8\">Dune::Functions::LagrangeNode::LagrangeNode</a></div><div class=\"ttdeci\">LagrangeNode()</div><div class=\"ttdoc\">Constructor without order (uses the compile-time value)</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:422</div></div>\n+<div class=\"ttc\" id=\"aa01671_html\"><div class=\"ttname\"><a href=\"a01671.html\">Dune::Functions::LagrangePreBasis</a></div><div class=\"ttdoc\">A pre-basis for a PQ-lagrange bases with given order.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:55</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_a005c07b60bc225e41f6fbeee53ab20c2\"><div class=\"ttname\"><a href=\"a01671.html#a005c07b60bc225e41f6fbeee53ab20c2\">Dune::Functions::LagrangePreBasis::dofsPerPrism</a></div><div class=\"ttdeci\">size_type dofsPerPrism() const</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:333</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_a015986cee132f7ebd91ad8f3845a84be\"><div class=\"ttname\"><a href=\"a01671.html#a015986cee132f7ebd91ad8f3845a84be\">Dune::Functions::LagrangePreBasis::computeDofsPerCube</a></div><div class=\"ttdeci\">size_type computeDofsPerCube(std::size_t cubeDim) const</div><div class=\"ttdoc\">Number of degrees of freedom assigned to a cube (without the ones assigned to its faces!...</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:350</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_a01edf36372c30d045823bb5a330526e6\"><div class=\"ttname\"><a href=\"a01671.html#a01edf36372c30d045823bb5a330526e6\">Dune::Functions::LagrangePreBasis::computeDofsPerSimplex</a></div><div class=\"ttdeci\">size_type computeDofsPerSimplex(std::size_t simplexDim) const</div><div class=\"ttdoc\">Number of degrees of freedom assigned to a simplex (without the ones assigned to its faces!...</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:344</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_a04abff1d4b5ac732d83019938a019d2a\"><div class=\"ttname\"><a href=\"a01671.html#a04abff1d4b5ac732d83019938a019d2a\">Dune::Functions::LagrangePreBasis::maxMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type maxMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:70</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_a0c0e8ce0766d2a59986cb5daebe86132\"><div class=\"ttname\"><a href=\"a01671.html#a0c0e8ce0766d2a59986cb5daebe86132\">Dune::Functions::LagrangePreBasis::computeDofsPerPrism</a></div><div class=\"ttdeci\">size_type computeDofsPerPrism() const</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:355</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_a24780ed75bb6c40381f730e267f133f8\"><div class=\"ttname\"><a href=\"a01671.html#a24780ed75bb6c40381f730e267f133f8\">Dune::Functions::LagrangePreBasis::edgeOffset_</a></div><div class=\"ttdeci\">size_type edgeOffset_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:372</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_a39dcb5d78ac1216c75a75660e2d61849\"><div class=\"ttname\"><a href=\"a01671.html#a39dcb5d78ac1216c75a75660e2d61849\">Dune::Functions::LagrangePreBasis::dofsPerSimplex_</a></div><div class=\"ttdeci\">std::array< size_type, dim+1 > dofsPerSimplex_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:366</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_a45c031d3793e53e9413b86d49bffa5b0\"><div class=\"ttname\"><a href=\"a01671.html#a45c031d3793e53e9413b86d49bffa5b0\">Dune::Functions::LagrangePreBasis::indices</a></div><div class=\"ttdeci\">It indices(const Node &node, It it) const</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:192</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_a5664ce9110b445d622298dc5263f33b2\"><div class=\"ttname\"><a href=\"a01671.html#a5664ce9110b445d622298dc5263f33b2\">Dune::Functions::LagrangePreBasis::vertexOffset_</a></div><div class=\"ttdeci\">size_type vertexOffset_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:371</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_a5a34336b9868148ddade4d6b5fd044cf\"><div class=\"ttname\"><a href=\"a01671.html#a5a34336b9868148ddade4d6b5fd044cf\">Dune::Functions::LagrangePreBasis::dofsPerSimplex</a></div><div class=\"ttdeci\">size_type dofsPerSimplex(std::size_t simplexDim) const</div><div class=\"ttdoc\">Number of degrees of freedom assigned to a simplex (without the ones assigned to its faces!...</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:322</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_a62ff21d04ec74a6f369d6ba2cab1155a\"><div class=\"ttname\"><a href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">Dune::Functions::LagrangePreBasis::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdoc\">Type used for indices and size information.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:65</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_a639dc115510426bbaf3f0431fc8f1748\"><div class=\"ttname\"><a href=\"a01671.html#a639dc115510426bbaf3f0431fc8f1748\">Dune::Functions::LagrangePreBasis::pyramidOffset_</a></div><div class=\"ttdeci\">size_type pyramidOffset_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:376</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_a649ad327ee6564de6263f497962d344e\"><div class=\"ttname\"><a href=\"a01671.html#a649ad327ee6564de6263f497962d344e\">Dune::Functions::LagrangePreBasis::prismOffset_</a></div><div class=\"ttdeci\">size_type prismOffset_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:377</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_a6c7ee6cdf1c33779542802c064878f9d\"><div class=\"ttname\"><a href=\"a01671.html#a6c7ee6cdf1c33779542802c064878f9d\">Dune::Functions::LagrangePreBasis::tetrahedronOffset_</a></div><div class=\"ttdeci\">size_type tetrahedronOffset_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:375</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_a7318cbabd5f57d0b6cbab1b2dc41fff8\"><div class=\"ttname\"><a href=\"a01671.html#a7318cbabd5f57d0b6cbab1b2dc41fff8\">Dune::Functions::LagrangePreBasis::initializeIndices</a></div><div class=\"ttdeci\">void initializeIndices()</div><div class=\"ttdoc\">Initialize the global indices.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:96</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_a76f8c4b5aa9e574556edd79f0b2812f1\"><div class=\"ttname\"><a href=\"a01671.html#a76f8c4b5aa9e574556edd79f0b2812f1\">Dune::Functions::LagrangePreBasis::computeDofsPerPyramid</a></div><div class=\"ttdeci\">size_type computeDofsPerPyramid() const</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:360</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_a791cbc108e89b7effc1c668b800667bb\"><div class=\"ttname\"><a href=\"a01671.html#a791cbc108e89b7effc1c668b800667bb\">Dune::Functions::LagrangePreBasis::LagrangePreBasis</a></div><div class=\"ttdeci\">LagrangePreBasis(const GridView &gv, unsigned int order)</div><div class=\"ttdoc\">Constructor for a given grid view object and run-time order.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:80</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_a9212ce0f83e8642244e10d3cd3d596c6\"><div class=\"ttname\"><a href=\"a01671.html#a9212ce0f83e8642244e10d3cd3d596c6\">Dune::Functions::LagrangePreBasis::dofsPerPyramid_</a></div><div class=\"ttdeci\">size_type dofsPerPyramid_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:369</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_a960a5535205e3449a3f0aa21f640e7c3\"><div class=\"ttname\"><a href=\"a01671.html#a960a5535205e3449a3f0aa21f640e7c3\">Dune::Functions::LagrangePreBasis::dimension</a></div><div class=\"ttdeci\">size_type dimension() const</div><div class=\"ttdoc\">Get the total dimension of the space spanned by this basis.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:178</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_a982937b8e5348046761303330fc35d18\"><div class=\"ttname\"><a href=\"a01671.html#a982937b8e5348046761303330fc35d18\">Dune::Functions::LagrangePreBasis::LagrangePreBasis</a></div><div class=\"ttdeci\">LagrangePreBasis(const GridView &gv)</div><div class=\"ttdoc\">Constructor for a given grid view object with compile-time order.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:75</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_a9a9c2b3c8b2b46160d68d46cd2ed2c00\"><div class=\"ttname\"><a href=\"a01671.html#a9a9c2b3c8b2b46160d68d46cd2ed2c00\">Dune::Functions::LagrangePreBasis::update</a></div><div class=\"ttdeci\">void update(const GridView &gv)</div><div class=\"ttdoc\">Update the stored grid view, to be called if the grid has changed.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:126</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_a9bf76c4a686bf3a6bfe4f7385aab619a\"><div class=\"ttname\"><a href=\"a01671.html#a9bf76c4a686bf3a6bfe4f7385aab619a\">Dune::Functions::LagrangePreBasis::size</a></div><div class=\"ttdeci\">size_type size(const SizePrefix &prefix) const</div><div class=\"ttdoc\">Return number of possible values for next position in multi index.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:171</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_aa07a2111fb2151f10c128f6ebf746d81\"><div class=\"ttname\"><a href=\"a01671.html#aa07a2111fb2151f10c128f6ebf746d81\">Dune::Functions::LagrangePreBasis::multiIndexBufferSize</a></div><div class=\"ttdeci\">static constexpr size_type multiIndexBufferSize</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:72</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_aaa2add570edd22047fd5cfba570dd982\"><div class=\"ttname\"><a href=\"a01671.html#aaa2add570edd22047fd5cfba570dd982\">Dune::Functions::LagrangePreBasis::GridView</a></div><div class=\"ttdeci\">GV GridView</div><div class=\"ttdoc\">The grid view that the FE basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:62</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_aaa4552a25872774f6f07f4dd8336be69\"><div class=\"ttname\"><a href=\"a01671.html#aaa4552a25872774f6f07f4dd8336be69\">Dune::Functions::LagrangePreBasis::quadrilateralOffset_</a></div><div class=\"ttdeci\">size_type quadrilateralOffset_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:374</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_ab21cdfcd52867003b7f3095f366109e7\"><div class=\"ttname\"><a href=\"a01671.html#ab21cdfcd52867003b7f3095f366109e7\">Dune::Functions::LagrangePreBasis::gridView</a></div><div class=\"ttdeci\">const GridView & gridView() const</div><div class=\"ttdoc\">Obtain the grid view that the basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:120</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_ab8b9e944762fe3f68430e41d24fb540b\"><div class=\"ttname\"><a href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">Dune::Functions::LagrangePreBasis::gridView_</a></div><div class=\"ttdeci\">GridView gridView_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:316</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_abb2dc6ee4702bc2145a05b20be7f665d\"><div class=\"ttname\"><a href=\"a01671.html#abb2dc6ee4702bc2145a05b20be7f665d\">Dune::Functions::LagrangePreBasis::makeNode</a></div><div class=\"ttdeci\">Node makeNode() const</div><div class=\"ttdoc\">Create tree node.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:134</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_abbd87ea8be342b39e287babfec846db4\"><div class=\"ttname\"><a href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">Dune::Functions::LagrangePreBasis::order</a></div><div class=\"ttdeci\">unsigned int order() const</div><div class=\"ttdoc\">Polynomial order used in the local Lagrange finite-elements.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:310</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_abefe712249711f9caee5f9b4ace8fb2a\"><div class=\"ttname\"><a href=\"a01671.html#abefe712249711f9caee5f9b4ace8fb2a\">Dune::Functions::LagrangePreBasis::order_</a></div><div class=\"ttdeci\">const unsigned int order_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:319</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_abfa5632c391ed7160d081c63ab154377\"><div class=\"ttname\"><a href=\"a01671.html#abfa5632c391ed7160d081c63ab154377\">Dune::Functions::LagrangePreBasis::dofsPerCube_</a></div><div class=\"ttdeci\">std::array< size_type, dim+1 > dofsPerCube_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:367</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_ac91dcb0f3589b23598df3ced95d50d0c\"><div class=\"ttname\"><a href=\"a01671.html#ac91dcb0f3589b23598df3ced95d50d0c\">Dune::Functions::LagrangePreBasis::maxNodeSize</a></div><div class=\"ttdeci\">size_type maxNodeSize() const</div><div class=\"ttdoc\">Get the maximal number of DOFs associated to node for any element.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:184</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_adabf2688eef2d33a180ae9cfbde492b1\"><div class=\"ttname\"><a href=\"a01671.html#adabf2688eef2d33a180ae9cfbde492b1\">Dune::Functions::LagrangePreBasis::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdoc\">Same as size(prefix) with empty prefix.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:140</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_ade4d334b8ac70f9c18fc15a9eba04815\"><div class=\"ttname\"><a href=\"a01671.html#ade4d334b8ac70f9c18fc15a9eba04815\">Dune::Functions::LagrangePreBasis::dofsPerPrism_</a></div><div class=\"ttdeci\">size_type dofsPerPrism_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:368</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_ae51ebb4186d0677f3599176d23a42172\"><div class=\"ttname\"><a href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">Dune::Functions::LagrangePreBasis::dofsPerCube</a></div><div class=\"ttdeci\">size_type dofsPerCube(std::size_t cubeDim) const</div><div class=\"ttdoc\">Number of degrees of freedom assigned to a cube (without the ones assigned to its faces!...</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:328</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_ae6c85768fc1d8aa23f94a2708d8d3ee6\"><div class=\"ttname\"><a href=\"a01671.html#ae6c85768fc1d8aa23f94a2708d8d3ee6\">Dune::Functions::LagrangePreBasis::triangleOffset_</a></div><div class=\"ttdeci\">size_type triangleOffset_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:373</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_aea5db4f517eaead23b62142891c0484a\"><div class=\"ttname\"><a href=\"a01671.html#aea5db4f517eaead23b62142891c0484a\">Dune::Functions::LagrangePreBasis::hexahedronOffset_</a></div><div class=\"ttdeci\">size_type hexahedronOffset_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:378</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_af4e167602b8bc1cdccf0baea69572f60\"><div class=\"ttname\"><a href=\"a01671.html#af4e167602b8bc1cdccf0baea69572f60\">Dune::Functions::LagrangePreBasis::minMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type minMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:71</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_afd0d5e9191756b1d6e6f7c2f77647739\"><div class=\"ttname\"><a href=\"a01671.html#afd0d5e9191756b1d6e6f7c2f77647739\">Dune::Functions::LagrangePreBasis::dofsPerPyramid</a></div><div class=\"ttdeci\">size_type dofsPerPyramid() const</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:338</div></div>\n+<div class=\"ttc\" id=\"aa01707_html_ae93815e5c4012f7be5d11786f40d267a\"><div class=\"ttname\"><a href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\">Dune::Functions::BasisNodeMixin::setSize</a></div><div class=\"ttdeci\">void setSize(const size_type size)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:164</div></div>\n+<div class=\"ttc\" id=\"aa01711_html\"><div class=\"ttname\"><a href=\"a01711.html\">Dune::Functions::LeafBasisNode</a></div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:186</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,41 +5,744 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-flatmultiindex.hh\n+lagrangebasis.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH\n- 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH\n+ 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH\n+ 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH\n 5\n- 6#include <array>\n- 7\n- 8#include <dune/functions/common/multiindex.hh>\n- 9\n- 10namespace Dune {\n- 11namespace Functions {\n+ 6#include <type_traits>\n+ 7#include <dune/common/exceptions.hh>\n+ 8\n+ 9#include <dune/localfunctions/lagrange.hh>\n+ 10#include <dune/localfunctions/lagrange/equidistantpoints.hh>\n+ 11#include <dune/localfunctions/lagrange/pqkfactory.hh>\n 12\n- 13\n- 14\n- 30template<class size_type>\n-31using FlatMultiIndex = StaticMultiIndex<size_type,_1>;\n- 32\n+ 13#include <dune/functions/functionspacebases/nodes.hh>\n+ 14#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n+ 15\n+ 16\n+ 17namespace Dune {\n+ 18namespace Functions {\n+ 19\n+ 20/\n+/ *****************************************************************************\n+ 21// This is the reusable part of the LagrangeBasis. It contains\n+ 22//\n+ 23// LagrangePreBasis\n+ 24// LagrangeNode\n+ 25//\n+ 26// The pre-basis allows to create the others and is the owner of possible\n+shared\n+ 27// state. These components do _not_ depend on the global basis and local\n+view\n+ 28// and can be used without a global basis.\n+ 29/\n+/ *****************************************************************************\n+ 30\n+ 31template<typename GV, int k, typename R=double>\n+ 32class LagrangeNode;\n 33\n- 34\n- 35} // end namespace Functions\n- 36} // end namespace Dune\n+ 34template<typename GV, int k, typename R=double>\n+ 35class LagrangePreBasis;\n+ 36\n 37\n- 38#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH\n-multiindex.hh\n+ 38\n+ 53template<typename GV, int k, typename R>\n+54class LagrangePreBasis\n+ 55{\n+ 56 static const int dim = GV::dimension;\n+ 57 static const bool useDynamicOrder = (k<0);\n+ 58\n+ 59public:\n+ 60\n+62 using GridView = GV;\n+ 63\n+65 using size_type = std::size_t;\n+ 66\n+68 using Node = LagrangeNode<GV,_k,_R>;\n+ 69\n+70 static constexpr size_type maxMultiIndexSize = 1;\n+71 static constexpr size_type minMultiIndexSize = 1;\n+72 static constexpr size_type multiIndexBufferSize = 1;\n+ 73\n+75 LagrangePreBasis(const GridView& gv)\n+ 76 : LagrangePreBasis(gv, std::numeric_limits<unsigned int>::max())\n+ 77 {}\n+ 78\n+80 LagrangePreBasis(const GridView& gv, unsigned int order) :\n+ 81 gridView_(gv), order_(order)\n+ 82 {\n+ 83 if (!useDynamicOrder && order!=std::numeric_limits<unsigned int>::max())\n+ 84 DUNE_THROW(RangeError, \"Template argument k has to be -1 when supplying a\n+run-time order!\");\n+ 85\n+ 86 for (int i=0; i<=dim; i++)\n+ 87 {\n+ 88 dofsPerCube_[i] = computeDofsPerCube(i);\n+ 89 dofsPerSimplex_[i] = computeDofsPerSimplex(i);\n+ 90 }\n+ 91 dofsPerPrism_ = computeDofsPerPrism();\n+ 92 dofsPerPyramid_ = computeDofsPerPyramid();\n+ 93 }\n+ 94\n+96 void initializeIndices()\n+ 97 {\n+ 98 vertexOffset_ = 0;\n+ 99 edgeOffset_ = vertexOffset_ + dofsPerCube(0) * ((size_type)gridView_.size\n+(dim));\n+ 100\n+ 101 if (dim>=2)\n+ 102 {\n+ 103 triangleOffset_ = edgeOffset_ + dofsPerCube(1) * ((size_type)\n+gridView_.size(dim-1));\n+ 104\n+ 105 quadrilateralOffset_ = triangleOffset_ + dofsPerSimplex(2) * (\n+(size_type)gridView_.size(Dune::GeometryTypes::triangle));\n+ 106 }\n+ 107\n+ 108 if (dim==3) {\n+ 109 tetrahedronOffset_ = quadrilateralOffset_ + dofsPerCube(2) * (\n+(size_type)gridView_.size(Dune::GeometryTypes::quadrilateral));\n+ 110\n+ 111 prismOffset_ = tetrahedronOffset_ + dofsPerSimplex(3) * (\n+(size_type)gridView_.size(Dune::GeometryTypes::tetrahedron));\n+ 112\n+ 113 hexahedronOffset_ = prismOffset_ + dofsPerPrism() * (\n+(size_type)gridView_.size(Dune::GeometryTypes::prism));\n+ 114\n+ 115 pyramidOffset_ = hexahedronOffset_ + dofsPerCube(3) * (\n+(size_type)gridView_.size(Dune::GeometryTypes::hexahedron));\n+ 116 }\n+ 117 }\n+ 118\n+120 const GridView& gridView() const\n+ 121 {\n+ 122 return gridView_;\n+ 123 }\n+ 124\n+126 void update (const GridView& gv)\n+ 127 {\n+ 128 gridView_ = gv;\n+ 129 }\n+ 130\n+134 Node makeNode() const\n+ 135 {\n+ 136 return Node{order_};\n+ 137 }\n+ 138\n+140 size_type size() const\n+ 141 {\n+ 142 switch (dim)\n+ 143 {\n+ 144 case 1:\n+ 145 return dofsPerCube(0) * ((size_type)gridView_.size(dim))\n+ 146 + dofsPerCube(1) * ((size_type)gridView_.size(dim-1));\n+ 147 case 2:\n+ 148 {\n+ 149 return dofsPerCube(0) * ((size_type)gridView_.size(dim))\n+ 150 + dofsPerCube(1) * ((size_type)gridView_.size(dim-1))\n+ 151 + dofsPerSimplex(2) * ((size_type)gridView_.size(Dune::GeometryTypes::\n+triangle))\n+ 152 + dofsPerCube(2) * ((size_type)gridView_.size(Dune::GeometryTypes::\n+quadrilateral));\n+ 153 }\n+ 154 case 3:\n+ 155 {\n+ 156 return dofsPerCube(0) * ((size_type)gridView_.size(dim))\n+ 157 + dofsPerCube(1) * ((size_type)gridView_.size(dim-1))\n+ 158 + dofsPerSimplex(2) * ((size_type)gridView_.size(Dune::GeometryTypes::\n+triangle))\n+ 159 + dofsPerCube(2) * ((size_type)gridView_.size(Dune::GeometryTypes::\n+quadrilateral))\n+ 160 + dofsPerSimplex(3) * ((size_type)gridView_.size(Dune::GeometryTypes::\n+tetrahedron))\n+ 161 + dofsPerPyramid() * ((size_type)gridView_.size(Dune::GeometryTypes::\n+pyramid))\n+ 162 + dofsPerPrism() * ((size_type)gridView_.size(Dune::GeometryTypes::prism))\n+ 163 + dofsPerCube(3) * ((size_type)gridView_.size(Dune::GeometryTypes::\n+hexahedron));\n+ 164 }\n+ 165 }\n+ 166 DUNE_THROW(Dune::NotImplemented, \"No size method for \" << dim << \"d grids\n+available yet!\");\n+ 167 }\n+ 168\n+ 170 template<class SizePrefix>\n+171 size_type size(const SizePrefix& prefix) const\n+ 172 {\n+ 173 assert(prefix.size() == 0 || prefix.size() == 1);\n+ 174 return (prefix.size() == 0) ? size() : 0;\n+ 175 }\n+ 176\n+178 size_type dimension() const\n+ 179 {\n+ 180 return size();\n+ 181 }\n+ 182\n+184 size_type maxNodeSize() const\n+ 185 {\n+ 186 // That cast to unsigned int is necessary because GV::dimension is an\n+enum,\n+ 187 // which is not recognized by the power method as an integer type...\n+ 188 return power(order()+1, (unsigned int)GV::dimension);\n+ 189 }\n+ 190\n+ 191 template<typename It>\n+192 It indices(const Node& node, It it) const\n+ 193 {\n+ 194 for (size_type i = 0, end = node.finiteElement().size() ; i < end ; ++it,\n+++i)\n+ 195 {\n+ 196 Dune::LocalKey localKey = node.finiteElement().localCoefficients\n+().localKey(i);\n+ 197 const auto& gridIndexSet = gridView().indexSet();\n+ 198 const auto& element = node.element();\n+ 199\n+ 200 // The dimension of the entity that the current dof is related to\n+ 201 auto dofDim = dim - localKey.codim();\n+ 202\n+ 203 // Test for a vertex dof\n+ 204 // The test for k==1 is redundant, but having it here allows the compiler\n+to conclude\n+ 205 // at compile-time that the dofDim==0 case is the only one that will ever\n+happen.\n+ 206 // This leads to measurable speed-up: see\n+ 207 // https://gitlab.dune-project.org/staging/dune-functions/issues/30\n+ 208 if (k==1 || dofDim==0) {\n+ 209 *it = {{ (size_type)(gridIndexSet.subIndex(element,localKey.subEntity\n+(),dim)) }};\n+ 210 continue;\n+ 211 }\n+ 212\n+ 213 if (dofDim==1)\n+ 214 { // edge dof\n+ 215 if (dim==1) // element dof -- any local numbering is fine\n+ 216 {\n+ 217 *it = {{ edgeOffset_\n+ 218 + dofsPerCube(1) * ((size_type)gridIndexSet.subIndex(element,0,0))\n+ 219 + localKey.index() }};\n+ 220 continue;\n+ 221 }\n+ 222 else\n+ 223 {\n+ 224 const auto refElement\n+ 225 = Dune::referenceElement<double,dim>(element.type());\n+ 226\n+ 227 // We have to reverse the numbering if the local element edge is\n+ 228 // not aligned with the global edge.\n+ 229 auto v0 = (size_type)gridIndexSet.subIndex(element,refElement.subEntity\n+(localKey.subEntity(),localKey.codim(),0,dim),dim);\n+ 230 auto v1 = (size_type)gridIndexSet.subIndex(element,refElement.subEntity\n+(localKey.subEntity(),localKey.codim(),1,dim),dim);\n+ 231 bool flip = (v0 > v1);\n+ 232 *it = {{ (flip)\n+ 233 ? edgeOffset_\n+ 234 + dofsPerCube(1)*((size_type)gridIndexSet.subIndex\n+(element,localKey.subEntity(),localKey.codim()))\n+ 235 + (dofsPerCube(1)-1)-localKey.index()\n+ 236 : edgeOffset_\n+ 237 + dofsPerCube(1)*((size_type)gridIndexSet.subIndex\n+(element,localKey.subEntity(),localKey.codim()))\n+ 238 + localKey.index() }};\n+ 239 continue;\n+ 240 }\n+ 241 }\n+ 242\n+ 243 if (dofDim==2)\n+ 244 {\n+ 245 if (dim==2) // element dof -- any local numbering is fine\n+ 246 {\n+ 247 if (element.type().isTriangle())\n+ 248 {\n+ 249 *it = {{ triangleOffset_ + dofsPerSimplex(2)*(\n+(size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};\n+ 250 continue;\n+ 251 }\n+ 252 else if (element.type().isQuadrilateral())\n+ 253 {\n+ 254 *it = {{ quadrilateralOffset_ + dofsPerCube(2)*(\n+(size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};\n+ 255 continue;\n+ 256 }\n+ 257 else\n+ 258 DUNE_THROW(Dune::NotImplemented, \"2d elements have to be triangles or\n+quadrilaterals\");\n+ 259 } else\n+ 260 {\n+ 261 const auto refElement\n+ 262 = Dune::referenceElement<double,dim>(element.type());\n+ 263\n+ 264 if (order()>3)\n+ 265 DUNE_THROW(Dune::NotImplemented, \"LagrangeBasis for 3D grids is only\n+implemented if k<=3\");\n+ 266\n+ 267 if (order()==3 and !refElement.type(localKey.subEntity(), localKey.codim\n+()).isTriangle())\n+ 268 DUNE_THROW(Dune::NotImplemented, \"LagrangeBasis for 3D grids with k==3 is\n+only implemented if the grid is a simplex grid\");\n+ 269\n+ 270 *it = {{ triangleOffset_ + ((size_type)gridIndexSet.subIndex\n+(element,localKey.subEntity(),localKey.codim())) }};\n+ 271 continue;\n+ 272 }\n+ 273 }\n+ 274\n+ 275 if (dofDim==3)\n+ 276 {\n+ 277 if (dim==3) // element dof -- any local numbering is fine\n+ 278 {\n+ 279 if (element.type().isTetrahedron())\n+ 280 {\n+ 281 *it = {{ tetrahedronOffset_ + dofsPerSimplex(3)*(\n+(size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};\n+ 282 continue;\n+ 283 }\n+ 284 else if (element.type().isHexahedron())\n+ 285 {\n+ 286 *it = {{ hexahedronOffset_ + dofsPerCube(3)*(\n+(size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};\n+ 287 continue;\n+ 288 }\n+ 289 else if (element.type().isPrism())\n+ 290 {\n+ 291 *it = {{ prismOffset_ + dofsPerPrism()*((size_type)gridIndexSet.subIndex\n+(element,0,0)) + localKey.index() }};\n+ 292 continue;\n+ 293 }\n+ 294 else if (element.type().isPyramid())\n+ 295 {\n+ 296 *it = {{ pyramidOffset_ + dofsPerPyramid()*(\n+(size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};\n+ 297 continue;\n+ 298 }\n+ 299 else\n+ 300 DUNE_THROW(Dune::NotImplemented, \"3d elements have to be tetrahedra,\n+hexahedra, prisms, or pyramids\");\n+ 301 } else\n+ 302 DUNE_THROW(Dune::NotImplemented, \"Grids of dimension larger than 3 are no\n+supported\");\n+ 303 }\n+ 304 DUNE_THROW(Dune::NotImplemented, \"Grid contains elements not supported for\n+the LagrangeBasis\");\n+ 305 }\n+ 306 return it;\n+ 307 }\n+ 308\n+310 unsigned int order() const\n+ 311 {\n+ 312 return (useDynamicOrder) ? order_ : k;\n+ 313 }\n+ 314\n+ 315protected:\n+316 GridView gridView_;\n+ 317\n+ 318 // Run-time order, only valid if k<0\n+319 const unsigned int order_;\n+ 320\n+322 size_type dofsPerSimplex(std::size_t simplexDim) const\n+ 323 {\n+ 324 return useDynamicOrder ? dofsPerSimplex_[simplexDim] :\n+computeDofsPerSimplex(simplexDim);\n+ 325 }\n+ 326\n+328 size_type dofsPerCube(std::size_t cubeDim) const\n+ 329 {\n+ 330 return useDynamicOrder ? dofsPerCube_[cubeDim] : computeDofsPerCube\n+(cubeDim);\n+ 331 }\n+ 332\n+333 size_type dofsPerPrism() const\n+ 334 {\n+ 335 return useDynamicOrder ? dofsPerPrism_ : computeDofsPerPrism();\n+ 336 }\n+ 337\n+338 size_type dofsPerPyramid() const\n+ 339 {\n+ 340 return useDynamicOrder ? dofsPerPyramid_ : computeDofsPerPyramid();\n+ 341 }\n+ 342\n+344 size_type computeDofsPerSimplex(std::size_t simplexDim) const\n+ 345 {\n+ 346 return order() == 0 ? (dim == simplexDim ? 1 : 0) : Dune::binomial(std::\n+size_t(order()-1),simplexDim);\n+ 347 }\n+ 348\n+350 size_type computeDofsPerCube(std::size_t cubeDim) const\n+ 351 {\n+ 352 return order() == 0 ? (dim == cubeDim ? 1 : 0) : Dune::power(order()-1,\n+cubeDim);\n+ 353 }\n+ 354\n+355 size_type computeDofsPerPrism() const\n+ 356 {\n+ 357 return order() == 0 ? (dim == 3 ? 1 : 0) : (order()-1)*(order()-1)*(order\n+()-2)/2;\n+ 358 }\n+ 359\n+360 size_type computeDofsPerPyramid() const\n+ 361 {\n+ 362 return order() == 0 ? (dim == 3 ? 1 : 0) : (order()-2)*(order()-1)*\n+(2*order()-3)/6;\n+ 363 }\n+ 364\n+ 365 // When the order is given at run-time, the following numbers are pre-\n+computed:\n+366 std::array<size_type,dim+1> dofsPerSimplex_;\n+367 std::array<size_type,dim+1> dofsPerCube_;\n+368 size_type dofsPerPrism_;\n+369 size_type dofsPerPyramid_;\n+ 370\n+371 size_type vertexOffset_;\n+372 size_type edgeOffset_;\n+373 size_type triangleOffset_;\n+374 size_type quadrilateralOffset_;\n+375 size_type tetrahedronOffset_;\n+376 size_type pyramidOffset_;\n+377 size_type prismOffset_;\n+378 size_type hexahedronOffset_;\n+ 379\n+ 380};\n+ 381\n+ 382\n+ 383\n+ 384template<typename GV, int k, typename R>\n+385class LagrangeNode :\n+ 386 public LeafBasisNode\n+ 387{\n+ 388 // Stores LocalFiniteElement implementations with run-time order as a\n+function of GeometryType\n+ 389 template<typename Domain, typename Range, int dim>\n+ 390 class LagrangeRunTimeLFECache\n+ 391 {\n+ 392 public:\n+ 393 using FiniteElementType =\n+LagrangeLocalFiniteElement<EquidistantPointSet,dim,Domain,Range>;\n+ 394\n+ 395 const FiniteElementType& get(GeometryType type)\n+ 396 {\n+ 397 auto i = data_.find(type);\n+ 398 if (i==data_.end())\n+ 399 i = data_.emplace(type,FiniteElementType(type,order_)).first;\n+ 400 return (*i).second;\n+ 401 }\n+ 402\n+ 403 std::map<GeometryType, FiniteElementType> data_;\n+ 404 unsigned int order_;\n+ 405 };\n+ 406\n+ 407 static constexpr int dim = GV::dimension;\n+ 408 static constexpr bool useDynamicOrder = (k<0);\n+ 409\n+ 410 using FiniteElementCache = typename std::conditional<(useDynamicOrder),\n+ 411 LagrangeRunTimeLFECache<typename GV::ctype, R, dim>,\n+ 412 PQkLocalFiniteElementCache<typename GV::ctype, R, dim, k>\n+ 413 >::type;\n+ 414\n+ 415public:\n+ 416\n+417 using size_type = std::size_t;\n+418 using Element = typename GV::template Codim<0>::Entity;\n+419 using FiniteElement = typename FiniteElementCache::FiniteElementType;\n+ 420\n+422 LagrangeNode() :\n+ 423 finiteElement_(nullptr),\n+ 424 element_(nullptr)\n+ 425 {}\n+ 426\n+428 LagrangeNode(unsigned int order) :\n+ 429 order_(order),\n+ 430 finiteElement_(nullptr),\n+ 431 element_(nullptr)\n+ 432 {\n+ 433 // Only the cache for the run-time-order case (i.e., k<0), has the\n+'order_' member\n+ 434 if constexpr (useDynamicOrder)\n+ 435 cache_.order_ = order;\n+ 436 }\n+ 437\n+439 const Element& element() const\n+ 440 {\n+ 441 return *element_;\n+ 442 }\n+ 443\n+448 const FiniteElement& finiteElement() const\n+ 449 {\n+ 450 return *finiteElement_;\n+ 451 }\n+ 452\n+454 void bind(const Element& e)\n+ 455 {\n+ 456 element_ = &e;\n+ 457 finiteElement_ = &(cache_.get(element_->type()));\n+ 458 this->setSize(finiteElement_->size());\n+ 459 }\n+ 460\n+ 461protected:\n+ 462\n+463 unsigned int order() const\n+ 464 {\n+ 465 return (useDynamicOrder) ? order_ : k;\n+ 466 }\n+ 467\n+ 468 // Run-time order, only valid if k<0\n+469 unsigned int order_;\n+ 470\n+471 FiniteElementCache cache_;\n+472 const FiniteElement* finiteElement_;\n+473 const Element* element_;\n+ 474};\n+ 475\n+ 476\n+ 477\n+ 478namespace BasisFactory {\n+ 479\n+ 488template<std::size_t k, typename R=double>\n+489auto lagrange()\n+ 490{\n+ 491 return [](const auto& gridView) {\n+ 492 return LagrangePreBasis<std::decay_t<decltype(gridView)>, k, R>(gridView);\n+ 493 };\n+ 494}\n+ 495\n+ 503template<typename R=double>\n+504auto lagrange(int order)\n+ 505{\n+ 506 return [=](const auto& gridView) {\n+ 507 return LagrangePreBasis<std::decay_t<decltype(gridView)>, -1, R>(gridView,\n+order);\n+ 508 };\n+ 509}\n+ 510\n+ 511} // end namespace BasisFactory\n+ 512\n+ 513\n+ 514\n+ 538template<typename GV, int k=-1, typename R=double>\n+539using LagrangeBasis = DefaultGlobalBasis<LagrangePreBasis<GV,_k,_R> >;\n+ 540\n+ 541\n+ 542\n+ 543\n+ 544\n+ 545} // end namespace Functions\n+ 546} // end namespace Dune\n+ 547\n+ 548\n+ 549#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH\n+defaultglobalbasis.hh\n+nodes.hh\n+Dune::Functions::BasisFactory::power\n+auto power(ChildPreBasisFactory &&childPreBasisFactory, const\n+IndexMergingStrategy &)\n+Create a pre-basis factory that can build a PowerPreBasis.\n+Definition: powerbasis.hh:369\n+Dune::Functions::BasisFactory::lagrange\n+auto lagrange()\n+Create a pre-basis factory that can create a Lagrange pre-basis.\n+Definition: lagrangebasis.hh:489\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::StaticMultiIndex<_size_type,_1_>\n-A statically sized MultiIndex type.\n-Definition: multiindex.hh:49\n+Dune::Functions::DefaultGlobalBasis\n+Global basis for given pre-basis.\n+Definition: defaultglobalbasis.hh:46\n+Dune::Functions::LagrangeNode\n+Definition: lagrangebasis.hh:387\n+Dune::Functions::LagrangeNode::LagrangeNode\n+LagrangeNode(unsigned int order)\n+Constructor with a run-time order.\n+Definition: lagrangebasis.hh:428\n+Dune::Functions::LagrangeNode::order\n+unsigned int order() const\n+Definition: lagrangebasis.hh:463\n+Dune::Functions::LagrangeNode::finiteElement\n+const FiniteElement & finiteElement() const\n+Return the LocalFiniteElement for the element we are bound to.\n+Definition: lagrangebasis.hh:448\n+Dune::Functions::LagrangeNode::element_\n+const Element * element_\n+Definition: lagrangebasis.hh:473\n+Dune::Functions::LagrangeNode::element\n+const Element & element() const\n+Return current element, throw if unbound.\n+Definition: lagrangebasis.hh:439\n+Dune::Functions::LagrangeNode::cache_\n+FiniteElementCache cache_\n+Definition: lagrangebasis.hh:471\n+Dune::Functions::LagrangeNode::FiniteElement\n+typename FiniteElementCache::FiniteElementType FiniteElement\n+Definition: lagrangebasis.hh:419\n+Dune::Functions::LagrangeNode::bind\n+void bind(const Element &e)\n+Bind to element.\n+Definition: lagrangebasis.hh:454\n+Dune::Functions::LagrangeNode::Element\n+typename GV::template Codim< 0 >::Entity Element\n+Definition: lagrangebasis.hh:418\n+Dune::Functions::LagrangeNode::finiteElement_\n+const FiniteElement * finiteElement_\n+Definition: lagrangebasis.hh:472\n+Dune::Functions::LagrangeNode::order_\n+unsigned int order_\n+Definition: lagrangebasis.hh:469\n+Dune::Functions::LagrangeNode::size_type\n+std::size_t size_type\n+Definition: lagrangebasis.hh:417\n+Dune::Functions::LagrangeNode::LagrangeNode\n+LagrangeNode()\n+Constructor without order (uses the compile-time value)\n+Definition: lagrangebasis.hh:422\n+Dune::Functions::LagrangePreBasis\n+A pre-basis for a PQ-lagrange bases with given order.\n+Definition: lagrangebasis.hh:55\n+Dune::Functions::LagrangePreBasis::dofsPerPrism\n+size_type dofsPerPrism() const\n+Definition: lagrangebasis.hh:333\n+Dune::Functions::LagrangePreBasis::computeDofsPerCube\n+size_type computeDofsPerCube(std::size_t cubeDim) const\n+Number of degrees of freedom assigned to a cube (without the ones assigned to\n+its faces!...\n+Definition: lagrangebasis.hh:350\n+Dune::Functions::LagrangePreBasis::computeDofsPerSimplex\n+size_type computeDofsPerSimplex(std::size_t simplexDim) const\n+Number of degrees of freedom assigned to a simplex (without the ones assigned\n+to its faces!...\n+Definition: lagrangebasis.hh:344\n+Dune::Functions::LagrangePreBasis::maxMultiIndexSize\n+static constexpr size_type maxMultiIndexSize\n+Definition: lagrangebasis.hh:70\n+Dune::Functions::LagrangePreBasis::computeDofsPerPrism\n+size_type computeDofsPerPrism() const\n+Definition: lagrangebasis.hh:355\n+Dune::Functions::LagrangePreBasis::edgeOffset_\n+size_type edgeOffset_\n+Definition: lagrangebasis.hh:372\n+Dune::Functions::LagrangePreBasis::dofsPerSimplex_\n+std::array< size_type, dim+1 > dofsPerSimplex_\n+Definition: lagrangebasis.hh:366\n+Dune::Functions::LagrangePreBasis::indices\n+It indices(const Node &node, It it) const\n+Definition: lagrangebasis.hh:192\n+Dune::Functions::LagrangePreBasis::vertexOffset_\n+size_type vertexOffset_\n+Definition: lagrangebasis.hh:371\n+Dune::Functions::LagrangePreBasis::dofsPerSimplex\n+size_type dofsPerSimplex(std::size_t simplexDim) const\n+Number of degrees of freedom assigned to a simplex (without the ones assigned\n+to its faces!...\n+Definition: lagrangebasis.hh:322\n+Dune::Functions::LagrangePreBasis::size_type\n+std::size_t size_type\n+Type used for indices and size information.\n+Definition: lagrangebasis.hh:65\n+Dune::Functions::LagrangePreBasis::pyramidOffset_\n+size_type pyramidOffset_\n+Definition: lagrangebasis.hh:376\n+Dune::Functions::LagrangePreBasis::prismOffset_\n+size_type prismOffset_\n+Definition: lagrangebasis.hh:377\n+Dune::Functions::LagrangePreBasis::tetrahedronOffset_\n+size_type tetrahedronOffset_\n+Definition: lagrangebasis.hh:375\n+Dune::Functions::LagrangePreBasis::initializeIndices\n+void initializeIndices()\n+Initialize the global indices.\n+Definition: lagrangebasis.hh:96\n+Dune::Functions::LagrangePreBasis::computeDofsPerPyramid\n+size_type computeDofsPerPyramid() const\n+Definition: lagrangebasis.hh:360\n+Dune::Functions::LagrangePreBasis::LagrangePreBasis\n+LagrangePreBasis(const GridView &gv, unsigned int order)\n+Constructor for a given grid view object and run-time order.\n+Definition: lagrangebasis.hh:80\n+Dune::Functions::LagrangePreBasis::dofsPerPyramid_\n+size_type dofsPerPyramid_\n+Definition: lagrangebasis.hh:369\n+Dune::Functions::LagrangePreBasis::dimension\n+size_type dimension() const\n+Get the total dimension of the space spanned by this basis.\n+Definition: lagrangebasis.hh:178\n+Dune::Functions::LagrangePreBasis::LagrangePreBasis\n+LagrangePreBasis(const GridView &gv)\n+Constructor for a given grid view object with compile-time order.\n+Definition: lagrangebasis.hh:75\n+Dune::Functions::LagrangePreBasis::update\n+void update(const GridView &gv)\n+Update the stored grid view, to be called if the grid has changed.\n+Definition: lagrangebasis.hh:126\n+Dune::Functions::LagrangePreBasis::size\n+size_type size(const SizePrefix &prefix) const\n+Return number of possible values for next position in multi index.\n+Definition: lagrangebasis.hh:171\n+Dune::Functions::LagrangePreBasis::multiIndexBufferSize\n+static constexpr size_type multiIndexBufferSize\n+Definition: lagrangebasis.hh:72\n+Dune::Functions::LagrangePreBasis::GridView\n+GV GridView\n+The grid view that the FE basis is defined on.\n+Definition: lagrangebasis.hh:62\n+Dune::Functions::LagrangePreBasis::quadrilateralOffset_\n+size_type quadrilateralOffset_\n+Definition: lagrangebasis.hh:374\n+Dune::Functions::LagrangePreBasis::gridView\n+const GridView & gridView() const\n+Obtain the grid view that the basis is defined on.\n+Definition: lagrangebasis.hh:120\n+Dune::Functions::LagrangePreBasis::gridView_\n+GridView gridView_\n+Definition: lagrangebasis.hh:316\n+Dune::Functions::LagrangePreBasis::makeNode\n+Node makeNode() const\n+Create tree node.\n+Definition: lagrangebasis.hh:134\n+Dune::Functions::LagrangePreBasis::order\n+unsigned int order() const\n+Polynomial order used in the local Lagrange finite-elements.\n+Definition: lagrangebasis.hh:310\n+Dune::Functions::LagrangePreBasis::order_\n+const unsigned int order_\n+Definition: lagrangebasis.hh:319\n+Dune::Functions::LagrangePreBasis::dofsPerCube_\n+std::array< size_type, dim+1 > dofsPerCube_\n+Definition: lagrangebasis.hh:367\n+Dune::Functions::LagrangePreBasis::maxNodeSize\n+size_type maxNodeSize() const\n+Get the maximal number of DOFs associated to node for any element.\n+Definition: lagrangebasis.hh:184\n+Dune::Functions::LagrangePreBasis::size\n+size_type size() const\n+Same as size(prefix) with empty prefix.\n+Definition: lagrangebasis.hh:140\n+Dune::Functions::LagrangePreBasis::dofsPerPrism_\n+size_type dofsPerPrism_\n+Definition: lagrangebasis.hh:368\n+Dune::Functions::LagrangePreBasis::dofsPerCube\n+size_type dofsPerCube(std::size_t cubeDim) const\n+Number of degrees of freedom assigned to a cube (without the ones assigned to\n+its faces!...\n+Definition: lagrangebasis.hh:328\n+Dune::Functions::LagrangePreBasis::triangleOffset_\n+size_type triangleOffset_\n+Definition: lagrangebasis.hh:373\n+Dune::Functions::LagrangePreBasis::hexahedronOffset_\n+size_type hexahedronOffset_\n+Definition: lagrangebasis.hh:378\n+Dune::Functions::LagrangePreBasis::minMultiIndexSize\n+static constexpr size_type minMultiIndexSize\n+Definition: lagrangebasis.hh:71\n+Dune::Functions::LagrangePreBasis::dofsPerPyramid\n+size_type dofsPerPyramid() const\n+Definition: lagrangebasis.hh:338\n+Dune::Functions::BasisNodeMixin::setSize\n+void setSize(const size_type size)\n+Definition: nodes.hh:164\n+Dune::Functions::LeafBasisNode\n+Definition: nodes.hh:186\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00125.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00125.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: lagrangebasis.hh File Reference</title>\n+<title>dune-functions: powerbasis.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -65,63 +65,57 @@\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> |\n-<a href=\"#typedef-members\">Typedefs</a> |\n <a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">lagrangebasis.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">powerbasis.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <type_traits></code><br />\n-<code>#include <dune/common/exceptions.hh></code><br />\n-<code>#include <dune/localfunctions/lagrange.hh></code><br />\n-<code>#include <dune/localfunctions/lagrange/equidistantpoints.hh></code><br />\n-<code>#include <dune/localfunctions/lagrange/pqkfactory.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00191_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00119_source.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></code><br />\n+<div class=\"textblock\"><code>#include <dune/common/reservedvector.hh></code><br />\n+<code>#include <dune/common/typeutilities.hh></code><br />\n+<code>#include <dune/common/indices.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00041_source.html\">dune/functions/common/utility.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00029_source.html\">dune/functions/common/type_traits.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00158_source.html\">dune/functions/functionspacebases/basistags.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00179_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a02876_source.html\">dune/functions/functionspacebases/concepts.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00152_source.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></code><br />\n </div>\n <p><a href=\"a00125_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01671.html\">Dune::Functions::LagrangePreBasis< GV, k, R ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A pre-basis for a PQ-lagrange bases with given order. <a href=\"a01671.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01667.html\">Dune::Functions::LagrangeNode< GV, k, R ></a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01735.html\">Dune::Functions::PowerPreBasis< IMS, SPB, C ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A pre-basis for power bases. <a href=\"a01735.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00224\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00224.html\">Dune::Functions::BasisFactory</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-</table><table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"typedef-members\" name=\"typedef-members\"></a>\n-Typedefs</h2></td></tr>\n-<tr class=\"memitem:ga566d155fed1f25513c4d927769722fcc\"><td class=\"memTemplParams\" colspan=\"2\">template<typename GV , int k = -1, typename R = double> </td></tr>\n-<tr class=\"memitem:ga566d155fed1f25513c4d927769722fcc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#ga566d155fed1f25513c4d927769722fcc\">Dune::Functions::LagrangeBasis</a> = DefaultGlobalBasis< LagrangePreBasis< GV, k, R > ></td></tr>\n-<tr class=\"memdesc:ga566d155fed1f25513c4d927769722fcc\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Nodal basis of a scalar k-th-order Lagrangean finite element space. <a href=\"a00213.html#ga566d155fed1f25513c4d927769722fcc\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga566d155fed1f25513c4d927769722fcc\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a00225\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00225.html\">Dune::Functions::BasisBuilder</a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n Functions</h2></td></tr>\n-<tr class=\"memitem:ga5106c08bf6dd8eaca7d06075d581d760\"><td class=\"memTemplParams\" colspan=\"2\">template<std::size_t k, typename R = double> </td></tr>\n-<tr class=\"memitem:ga5106c08bf6dd8eaca7d06075d581d760\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#ga5106c08bf6dd8eaca7d06075d581d760\">Dune::Functions::BasisFactory::lagrange</a> ()</td></tr>\n-<tr class=\"memdesc:ga5106c08bf6dd8eaca7d06075d581d760\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a pre-basis factory that can create a Lagrange pre-basis. <a href=\"a00213.html#ga5106c08bf6dd8eaca7d06075d581d760\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga5106c08bf6dd8eaca7d06075d581d760\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:ga177b4e1b21990d7fc9350ac0caeb3c6c\"><td class=\"memTemplParams\" colspan=\"2\">template<typename R = double> </td></tr>\n-<tr class=\"memitem:ga177b4e1b21990d7fc9350ac0caeb3c6c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#ga177b4e1b21990d7fc9350ac0caeb3c6c\">Dune::Functions::BasisFactory::lagrange</a> (int order)</td></tr>\n-<tr class=\"memdesc:ga177b4e1b21990d7fc9350ac0caeb3c6c\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a pre-basis factory that can create a Lagrange pre-basis with a run-time order. <a href=\"a00213.html#ga177b4e1b21990d7fc9350ac0caeb3c6c\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga177b4e1b21990d7fc9350ac0caeb3c6c\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga0d8eb549af76bc2563ab189e63668ee5\"><td class=\"memTemplParams\" colspan=\"2\">template<std::size_t k, class ChildPreBasisFactory , class IndexMergingStrategy > </td></tr>\n+<tr class=\"memitem:ga0d8eb549af76bc2563ab189e63668ee5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#ga0d8eb549af76bc2563ab189e63668ee5\">Dune::Functions::BasisFactory::power</a> (ChildPreBasisFactory &&childPreBasisFactory, const IndexMergingStrategy &)</td></tr>\n+<tr class=\"memdesc:ga0d8eb549af76bc2563ab189e63668ee5\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a pre-basis factory that can build a <a class=\"el\" href=\"a01735.html\" title=\"A pre-basis for power bases.\">PowerPreBasis</a>. <a href=\"a00213.html#ga0d8eb549af76bc2563ab189e63668ee5\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga0d8eb549af76bc2563ab189e63668ee5\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:gab84b622cf7be16d0373640b6f0478eb0\"><td class=\"memTemplParams\" colspan=\"2\">template<std::size_t k, class ChildPreBasisFactory > </td></tr>\n+<tr class=\"memitem:gab84b622cf7be16d0373640b6f0478eb0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#gab84b622cf7be16d0373640b6f0478eb0\">Dune::Functions::BasisFactory::power</a> (ChildPreBasisFactory &&childPreBasisFactory)</td></tr>\n+<tr class=\"memdesc:gab84b622cf7be16d0373640b6f0478eb0\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a factory builder that can build a <a class=\"el\" href=\"a01735.html\" title=\"A pre-basis for power bases.\">PowerPreBasis</a>. <a href=\"a00213.html#gab84b622cf7be16d0373640b6f0478eb0\">More...</a><br /></td></tr>\n+<tr class=\"separator:gab84b622cf7be16d0373640b6f0478eb0\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,50 +5,47 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-Classes | Namespaces | Typedefs | Functions\n-lagrangebasis.hh File Reference\n-#include <type_traits>\n-#include <dune/common/exceptions.hh>\n-#include <dune/localfunctions/lagrange.hh>\n-#include <dune/localfunctions/lagrange/equidistantpoints.hh>\n-#include <dune/localfunctions/lagrange/pqkfactory.hh>\n+Classes | Namespaces | Functions\n+powerbasis.hh File Reference\n+#include <dune/common/reservedvector.hh>\n+#include <dune/common/typeutilities.hh>\n+#include <dune/common/indices.hh>\n+#include <dune/functions/common/utility.hh>\n+#include <dune/functions/common/type_traits.hh>\n+#include <dune/functions/functionspacebases/basistags.hh>\n #include <dune/functions/functionspacebases/nodes.hh>\n+#include <dune/functions/functionspacebases/concepts.hh>\n #include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-class \u00a0Dune::Functions::LagrangePreBasis<_GV,_k,_R_>\n-\u00a0 A pre-basis for a PQ-lagrange bases with given order. More...\n-\u00a0\n-class \u00a0Dune::Functions::LagrangeNode<_GV,_k,_R_>\n+class \u00a0Dune::Functions::PowerPreBasis<_IMS,_SPB,_C_>\n+\u00a0 A pre-basis for power bases. More...\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n namespace \u00a0Dune::Functions::BasisFactory\n \u00a0\n- Typedefs\n-template<typename GV , int k = -1, typename R = double>\n-using\u00a0Dune::Functions::LagrangeBasis = DefaultGlobalBasis< LagrangePreBasis<\n- GV, k, R > >\n-\u00a0 Nodal basis of a scalar k-th-order Lagrangean finite element space.\n- More...\n+namespace \u00a0Dune::Functions::BasisBuilder\n \u00a0\n Functions\n-template<std::size_t k, typename R = double>\n-auto\u00a0Dune::Functions::BasisFactory::lagrange ()\n-\u00a0 Create a pre-basis factory that can create a Lagrange pre-basis. More...\n-\u00a0\n-template<typename R = double>\n-auto\u00a0Dune::Functions::BasisFactory::lagrange (int order)\n-\u00a0 Create a pre-basis factory that can create a Lagrange pre-basis with a\n- run-time order. More...\n+template<std::size_t k, class ChildPreBasisFactory , class\n+IndexMergingStrategy >\n+auto\u00a0Dune::Functions::BasisFactory::power (ChildPreBasisFactory\n+ &&childPreBasisFactory, const IndexMergingStrategy &)\n+\u00a0 Create a pre-basis factory that can build a PowerPreBasis. More...\n+\u00a0\n+template<std::size_t k, class ChildPreBasisFactory >\n+auto\u00a0Dune::Functions::BasisFactory::power (ChildPreBasisFactory\n+ &&childPreBasisFactory)\n+\u00a0 Create a factory builder that can build a PowerPreBasis. More...\n \u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00125_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00125_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: lagrangebasis.hh Source File</title>\n+<title>dune-functions: powerbasis.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,548 +62,406 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">lagrangebasis.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">powerbasis.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00125.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <type_traits></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <dune/common/exceptions.hh></span></div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/localfunctions/lagrange.hh></span></div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/localfunctions/lagrange/equidistantpoints.hh></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/localfunctions/lagrange/pqkfactory.hh></span></div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00191.html\">dune/functions/functionspacebases/nodes.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00119.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <dune/common/reservedvector.hh></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <dune/common/typeutilities.hh></span></div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <dune/common/indices.hh></span></div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00041.html\">dune/functions/common/utility.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00029.html\">dune/functions/common/type_traits.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00158.html\">dune/functions/functionspacebases/basistags.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00179.html\">dune/functions/functionspacebases/nodes.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a02876.html\">dune/functions/functionspacebases/concepts.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00152.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></span></div>\n <div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"comment\">// *****************************************************************************</span></div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"comment\">// This is the reusable part of the LagrangeBasis. It contains</span></div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"comment\">// LagrangePreBasis</span></div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"comment\">// LagrangeNode</span></div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> </div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> </div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"comment\">// This is the reusable part of the power bases. It contains</span></div>\n <div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span><span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"comment\">// The pre-basis allows to create the others and is the owner of possible shared</span></div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span><span class=\"comment\">// state. These components do _not_ depend on the global basis and local view</span></div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span><span class=\"comment\">// and can be used without a global basis.</span></div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span><span class=\"comment\">// *****************************************************************************</span></div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> </div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k, <span class=\"keyword\">typename</span> R=<span class=\"keywordtype\">double</span>></div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span><span class=\"keyword\">class </span>LagrangeNode;</div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> </div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k, <span class=\"keyword\">typename</span> R=<span class=\"keywordtype\">double</span>></div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span><span class=\"keyword\">class </span>LagrangePreBasis;</div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> </div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> </div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> </div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k, <span class=\"keyword\">typename</span> R></div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html\"> 54</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01671.html\">LagrangePreBasis</a></div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span>{</div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dim = GV::dimension;</div>\n-<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">bool</span> useDynamicOrder = (k<0);</div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> </div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> </div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#aaa2add570edd22047fd5cfba570dd982\"> 62</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01671.html#aaa2add570edd22047fd5cfba570dd982\">GridView</a> = GV;</div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> </div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\"> 65</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> = std::size_t;</div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> </div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a2762f1eade252d79b05070788f18012d\"> 68</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01667.html\">Node</a> = <a class=\"code hl_class\" href=\"a01667.html\">LagrangeNode<GV, k, R></a>;</div>\n-<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> </div>\n-<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a04abff1d4b5ac732d83019938a019d2a\"> 70</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_variable\" href=\"a01671.html#a04abff1d4b5ac732d83019938a019d2a\">maxMultiIndexSize</a> = 1;</div>\n-<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#af4e167602b8bc1cdccf0baea69572f60\"> 71</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_variable\" href=\"a01671.html#af4e167602b8bc1cdccf0baea69572f60\">minMultiIndexSize</a> = 1;</div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#aa07a2111fb2151f10c128f6ebf746d81\"> 72</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_variable\" href=\"a01671.html#aa07a2111fb2151f10c128f6ebf746d81\">multiIndexBufferSize</a> = 1;</div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> </div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a982937b8e5348046761303330fc35d18\"> 75</a></span> <a class=\"code hl_function\" href=\"a01671.html#a982937b8e5348046761303330fc35d18\">LagrangePreBasis</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01671.html#aaa2add570edd22047fd5cfba570dd982\">GridView</a>& gv)</div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> : <a class=\"code hl_class\" href=\"a01671.html\">LagrangePreBasis</a>(gv, std::numeric_limits<unsigned int>::max())</div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> {}</div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> </div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a791cbc108e89b7effc1c668b800667bb\"> 80</a></span> <a class=\"code hl_function\" href=\"a01671.html#a791cbc108e89b7effc1c668b800667bb\">LagrangePreBasis</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01671.html#aaa2add570edd22047fd5cfba570dd982\">GridView</a>& gv, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>) :</div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> <a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>(gv), <a class=\"code hl_variable\" href=\"a01671.html#abefe712249711f9caee5f9b4ace8fb2a\">order_</a>(<a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>)</div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"comment\">// PowerPreBasis</span></div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span><span class=\"comment\">//</span></div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span><span class=\"comment\">// The pre-basis allows to create the others and is the owner of possible shared</span></div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span><span class=\"comment\">// state. These components do _not_ depend on the global basis and local view</span></div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span><span class=\"comment\">// and can be used without a global basis.</span></div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> </div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> IMS, <span class=\"keyword\">class</span> SPB, std::<span class=\"keywordtype\">size_t</span> C></div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html\"> 44</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01735.html\">PowerPreBasis</a></div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span>{</div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> std::size_t children = C;</div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">bool</span> isBlocked = std::is_same_v<IMS,BasisFactory::BlockedLexicographic> or std::is_same_v<IMS,BasisFactory::BlockedInterleaved>;</div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> </div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> </div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#a419106855686e36864eea0100d8e618e\"> 52</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01735.html#a419106855686e36864eea0100d8e618e\">SubPreBasis</a> = SPB;</div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> </div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#a37d97aeb515a5abfd55259f1fb320d12\"> 55</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01735.html#a37d97aeb515a5abfd55259f1fb320d12\">GridView</a> = <span class=\"keyword\">typename</span> SPB::GridView;</div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> </div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\"> 58</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> = std::size_t;</div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> </div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#a1c74f8319f302dc61ba704be6489cf37\"> 61</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01735.html#a1c74f8319f302dc61ba704be6489cf37\">IndexMergingStrategy</a> = IMS;</div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> </div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#a7b5f1965bab95ba5c42821645f548c38\"> 63</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01735.html#a7b5f1965bab95ba5c42821645f548c38\">SubNode</a> = <span class=\"keyword\">typename</span> SubPreBasis::Node;</div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> </div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#a32df93d56f2f547813944cb7bcd04ffa\"> 66</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01715.html\">Node</a> = <a class=\"code hl_class\" href=\"a01715.html\">PowerBasisNode<SubNode, children></a>;</div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> </div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#adc20cd44a238188f2f0117d30cfb3ea6\"> 68</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> <a class=\"code hl_variable\" href=\"a01735.html#adc20cd44a238188f2f0117d30cfb3ea6\">maxMultiIndexSize</a> = SubPreBasis::maxMultiIndexSize + isBlocked;</div>\n+<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#aea6df17c50528be1cecdbd8f40264063\"> 69</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> <a class=\"code hl_variable\" href=\"a01735.html#aea6df17c50528be1cecdbd8f40264063\">minMultiIndexSize</a> = SubPreBasis::minMultiIndexSize + isBlocked;</div>\n+<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#a3a52441f0c9a8d94a76b6e0a87cdd6fc\"> 70</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> <a class=\"code hl_variable\" href=\"a01735.html#a3a52441f0c9a8d94a76b6e0a87cdd6fc\">multiIndexBufferSize</a> = SubPreBasis::multiIndexBufferSize + isBlocked;</div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> </div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>... SFArgs,</div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> disableCopyMove<<a class=\"code hl_function\" href=\"a01735.html#ab0335222dc72364fe128e8459751377b\">PowerPreBasis</a>, SFArgs...> = 0,</div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> <a class=\"code hl_typedef\" href=\"a00215.html#ga673247dd74bcdd9e5acfc7735faf8a5b\">enableIfConstructible</a><<a class=\"code hl_typedef\" href=\"a01735.html#a419106855686e36864eea0100d8e618e\">SubPreBasis</a>, SFArgs...> = 0></div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#ab0335222dc72364fe128e8459751377b\"> 80</a></span> <a class=\"code hl_function\" href=\"a01735.html#ab0335222dc72364fe128e8459751377b\">PowerPreBasis</a>(SFArgs&&... sfArgs) :</div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> subPreBasis_(std::forward<SFArgs>(sfArgs)...)</div>\n <div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> {</div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> <span class=\"keywordflow\">if</span> (!useDynamicOrder && <a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>!=std::numeric_limits<unsigned int>::max())</div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> DUNE_THROW(RangeError, <span class=\"stringliteral\">"Template argument k has to be -1 when supplying a run-time order!"</span>);</div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> <span class=\"keyword\">static_assert</span>(models<Concept::PreBasis<GridView>, <a class=\"code hl_typedef\" href=\"a01735.html#a419106855686e36864eea0100d8e618e\">SubPreBasis</a>>(), <span class=\"stringliteral\">"Subprebasis passed to PowerPreBasis does not model the PreBasis concept."</span>);</div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> }</div>\n <div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> </div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<=dim; i++)</div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> {</div>\n-<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> <a class=\"code hl_variable\" href=\"a01671.html#abfa5632c391ed7160d081c63ab154377\">dofsPerCube_</a>[i] = <a class=\"code hl_function\" href=\"a01671.html#a015986cee132f7ebd91ad8f3845a84be\">computeDofsPerCube</a>(i);</div>\n-<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> <a class=\"code hl_variable\" href=\"a01671.html#a39dcb5d78ac1216c75a75660e2d61849\">dofsPerSimplex_</a>[i] = <a class=\"code hl_function\" href=\"a01671.html#a01edf36372c30d045823bb5a330526e6\">computeDofsPerSimplex</a>(i);</div>\n-<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> }</div>\n-<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> <a class=\"code hl_variable\" href=\"a01671.html#ade4d334b8ac70f9c18fc15a9eba04815\">dofsPerPrism_</a> = <a class=\"code hl_function\" href=\"a01671.html#a0c0e8ce0766d2a59986cb5daebe86132\">computeDofsPerPrism</a>();</div>\n-<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> <a class=\"code hl_variable\" href=\"a01671.html#a9212ce0f83e8642244e10d3cd3d596c6\">dofsPerPyramid_</a> = <a class=\"code hl_function\" href=\"a01671.html#a76f8c4b5aa9e574556edd79f0b2812f1\">computeDofsPerPyramid</a>();</div>\n-<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> }</div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> </div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a7318cbabd5f57d0b6cbab1b2dc41fff8\"> 96</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01671.html#a7318cbabd5f57d0b6cbab1b2dc41fff8\">initializeIndices</a>()</div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> {</div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> <a class=\"code hl_variable\" href=\"a01671.html#a5664ce9110b445d622298dc5263f33b2\">vertexOffset_</a> = 0;</div>\n-<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> <a class=\"code hl_variable\" href=\"a01671.html#a24780ed75bb6c40381f730e267f133f8\">edgeOffset_</a> = <a class=\"code hl_variable\" href=\"a01671.html#a5664ce9110b445d622298dc5263f33b2\">vertexOffset_</a> + <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(0) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(dim));</div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> </div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> <span class=\"keywordflow\">if</span> (dim>=2)</div>\n-<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> {</div>\n-<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> <a class=\"code hl_variable\" href=\"a01671.html#ae6c85768fc1d8aa23f94a2708d8d3ee6\">triangleOffset_</a> = <a class=\"code hl_variable\" href=\"a01671.html#a24780ed75bb6c40381f730e267f133f8\">edgeOffset_</a> + <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(1) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>) <a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(dim-1));</div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> </div>\n-<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> <a class=\"code hl_variable\" href=\"a01671.html#aaa4552a25872774f6f07f4dd8336be69\">quadrilateralOffset_</a> = <a class=\"code hl_variable\" href=\"a01671.html#ae6c85768fc1d8aa23f94a2708d8d3ee6\">triangleOffset_</a> + <a class=\"code hl_function\" href=\"a01671.html#a5a34336b9868148ddade4d6b5fd044cf\">dofsPerSimplex</a>(2) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(Dune::GeometryTypes::triangle));</div>\n-<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> }</div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> </div>\n-<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> <span class=\"keywordflow\">if</span> (dim==3) {</div>\n-<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> <a class=\"code hl_variable\" href=\"a01671.html#a6c7ee6cdf1c33779542802c064878f9d\">tetrahedronOffset_</a> = <a class=\"code hl_variable\" href=\"a01671.html#aaa4552a25872774f6f07f4dd8336be69\">quadrilateralOffset_</a> + <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(2) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(Dune::GeometryTypes::quadrilateral));</div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> </div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> <a class=\"code hl_variable\" href=\"a01671.html#a649ad327ee6564de6263f497962d344e\">prismOffset_</a> = <a class=\"code hl_variable\" href=\"a01671.html#a6c7ee6cdf1c33779542802c064878f9d\">tetrahedronOffset_</a> + <a class=\"code hl_function\" href=\"a01671.html#a5a34336b9868148ddade4d6b5fd044cf\">dofsPerSimplex</a>(3) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(Dune::GeometryTypes::tetrahedron));</div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> </div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> <a class=\"code hl_variable\" href=\"a01671.html#aea5db4f517eaead23b62142891c0484a\">hexahedronOffset_</a> = <a class=\"code hl_variable\" href=\"a01671.html#a649ad327ee6564de6263f497962d344e\">prismOffset_</a> + <a class=\"code hl_function\" href=\"a01671.html#a005c07b60bc225e41f6fbeee53ab20c2\">dofsPerPrism</a>() * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(Dune::GeometryTypes::prism));</div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#a813f4c07a10db215c7a19c9552993baa\"> 87</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01735.html#a813f4c07a10db215c7a19c9552993baa\">initializeIndices</a>()</div>\n+<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> {</div>\n+<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> subPreBasis_.initializeIndices();</div>\n+<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> }</div>\n+<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> </div>\n+<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#aee8905e7295cf03b6b7d9888d8594666\"> 93</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01735.html#a37d97aeb515a5abfd55259f1fb320d12\">GridView</a>& <a class=\"code hl_function\" href=\"a01735.html#aee8905e7295cf03b6b7d9888d8594666\">gridView</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> <span class=\"keywordflow\">return</span> subPreBasis_.gridView();</div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> }</div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> </div>\n+<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#a982ebd97f308612c4dca7d980cf16070\"> 99</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01735.html#a982ebd97f308612c4dca7d980cf16070\">update</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01735.html#a37d97aeb515a5abfd55259f1fb320d12\">GridView</a>& gv)</div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> {</div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> subPreBasis_.update(gv);</div>\n+<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> }</div>\n+<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> </div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#ad5fae28034251ff8e4429288f951f3af\"> 107</a></span> <a class=\"code hl_class\" href=\"a01715.html\">Node</a> <a class=\"code hl_function\" href=\"a01735.html#ad5fae28034251ff8e4429288f951f3af\">makeNode</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> <span class=\"keyword\">auto</span> node = <a class=\"code hl_class\" href=\"a01715.html\">Node</a>{};</div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> <span class=\"keywordflow\">for</span> (std::size_t i=0; i<children; ++i)</div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> node.setChild(i, subPreBasis_.makeNode());</div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> <span class=\"keywordflow\">return</span> node;</div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> }</div>\n <div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> </div>\n-<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> <a class=\"code hl_variable\" href=\"a01671.html#a639dc115510426bbaf3f0431fc8f1748\">pyramidOffset_</a> = <a class=\"code hl_variable\" href=\"a01671.html#aea5db4f517eaead23b62142891c0484a\">hexahedronOffset_</a> + <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(3) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(Dune::GeometryTypes::hexahedron));</div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> }</div>\n-<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> }</div>\n-<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> </div>\n-<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#ab21cdfcd52867003b7f3095f366109e7\"> 120</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01671.html#aaa2add570edd22047fd5cfba570dd982\">GridView</a>& <a class=\"code hl_function\" href=\"a01671.html#ab21cdfcd52867003b7f3095f366109e7\">gridView</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>;</div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> }</div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> </div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a9a9c2b3c8b2b46160d68d46cd2ed2c00\"> 126</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01671.html#a9a9c2b3c8b2b46160d68d46cd2ed2c00\">update</a> (<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01671.html#aaa2add570edd22047fd5cfba570dd982\">GridView</a>& gv)</div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> {</div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> <a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a> = gv;</div>\n-<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> }</div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#ac9e9c317b759d7dbb3ae74ee66595d5a\"> 116</a></span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> <a class=\"code hl_function\" href=\"a01735.html#ac9e9c317b759d7dbb3ae74ee66595d5a\">size</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01735.html#ac9e9c317b759d7dbb3ae74ee66595d5a\">size</a>(Dune::ReservedVector<size_type, multiIndexBufferSize>{});</div>\n+<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> }</div>\n+<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> </div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> </div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#aef3ffd96fc0d2a2926295da866014bef\"> 124</a></span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> <a class=\"code hl_function\" href=\"a01735.html#aef3ffd96fc0d2a2926295da866014bef\">size</a>(<span class=\"keyword\">const</span> SizePrefix& prefix)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01735.html#ac9e9c317b759d7dbb3ae74ee66595d5a\">size</a>(prefix, <a class=\"code hl_typedef\" href=\"a01735.html#a1c74f8319f302dc61ba704be6489cf37\">IndexMergingStrategy</a>{});</div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> }</div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> </div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span><span class=\"keyword\">private</span>:</div>\n <div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> </div>\n-<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#abb2dc6ee4702bc2145a05b20be7f665d\"> 134</a></span> <a class=\"code hl_class\" href=\"a01667.html\">Node</a> <a class=\"code hl_function\" href=\"a01671.html#abb2dc6ee4702bc2145a05b20be7f665d\">makeNode</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01667.html\">Node</a>{<a class=\"code hl_variable\" href=\"a01671.html#abefe712249711f9caee5f9b4ace8fb2a\">order_</a>};</div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> }</div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> </div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#adabf2688eef2d33a180ae9cfbde492b1\"> 140</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_function\" href=\"a01671.html#adabf2688eef2d33a180ae9cfbde492b1\">size</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> <span class=\"keywordflow\">switch</span> (dim)</div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> {</div>\n-<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> <span class=\"keywordflow\">case</span> 1:</div>\n-<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(0) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(dim))</div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> + <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(1) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(dim-1));</div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> <span class=\"keywordflow\">case</span> 2:</div>\n-<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> {</div>\n-<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(0) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(dim))</div>\n-<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> + <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(1) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(dim-1))</div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> + <a class=\"code hl_function\" href=\"a01671.html#a5a34336b9868148ddade4d6b5fd044cf\">dofsPerSimplex</a>(2) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(Dune::GeometryTypes::triangle))</div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> + <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(2) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(Dune::GeometryTypes::quadrilateral));</div>\n-<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> }</div>\n-<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> <span class=\"keywordflow\">case</span> 3:</div>\n-<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> {</div>\n-<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(0) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(dim))</div>\n-<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> + <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(1) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(dim-1))</div>\n-<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> + <a class=\"code hl_function\" href=\"a01671.html#a5a34336b9868148ddade4d6b5fd044cf\">dofsPerSimplex</a>(2) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(Dune::GeometryTypes::triangle))</div>\n-<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> + <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(2) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(Dune::GeometryTypes::quadrilateral))</div>\n-<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> + <a class=\"code hl_function\" href=\"a01671.html#a5a34336b9868148ddade4d6b5fd044cf\">dofsPerSimplex</a>(3) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(Dune::GeometryTypes::tetrahedron))</div>\n-<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> + <a class=\"code hl_function\" href=\"a01671.html#afd0d5e9191756b1d6e6f7c2f77647739\">dofsPerPyramid</a>() * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(Dune::GeometryTypes::pyramid))</div>\n-<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> + <a class=\"code hl_function\" href=\"a01671.html#a005c07b60bc225e41f6fbeee53ab20c2\">dofsPerPrism</a>() * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(Dune::GeometryTypes::prism))</div>\n-<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> + <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(3) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)<a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>.size(Dune::GeometryTypes::hexahedron));</div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> }</div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> }</div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"No size method for "</span> << dim << <span class=\"stringliteral\">"d grids available yet!"</span>);</div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> }</div>\n-<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> </div>\n-<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n-<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a9bf76c4a686bf3a6bfe4f7385aab619a\"> 171</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_function\" href=\"a01671.html#a9bf76c4a686bf3a6bfe4f7385aab619a\">size</a>(<span class=\"keyword\">const</span> SizePrefix& prefix)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> assert(prefix.size() == 0 || prefix.size() == 1);</div>\n-<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> <span class=\"keywordflow\">return</span> (prefix.size() == 0) ? <a class=\"code hl_function\" href=\"a01671.html#adabf2688eef2d33a180ae9cfbde492b1\">size</a>() : 0;</div>\n-<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> }</div>\n-<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> </div>\n-<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a960a5535205e3449a3f0aa21f640e7c3\"> 178</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_function\" href=\"a01671.html#a960a5535205e3449a3f0aa21f640e7c3\">dimension</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01671.html#adabf2688eef2d33a180ae9cfbde492b1\">size</a>();</div>\n-<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> }</div>\n-<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> </div>\n-<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#ac91dcb0f3589b23598df3ced95d50d0c\"> 184</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_function\" href=\"a01671.html#ac91dcb0f3589b23598df3ced95d50d0c\">maxNodeSize</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> <span class=\"comment\">// That cast to unsigned int is necessary because GV::dimension is an enum,</span></div>\n-<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> <span class=\"comment\">// which is not recognized by the power method as an integer type...</span></div>\n-<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00213.html#ga0d8eb549af76bc2563ab189e63668ee5\">power</a>(<a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>()+1, (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>)GV::dimension);</div>\n-<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> }</div>\n-<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span> </div>\n-<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n-<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a45c031d3793e53e9413b86d49bffa5b0\"> 192</a></span> It <a class=\"code hl_function\" href=\"a01671.html#a45c031d3793e53e9413b86d49bffa5b0\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01667.html\">Node</a>& node, It it)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> <span class=\"keywordflow\">for</span> (<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> i = 0, end = node.<a class=\"code hl_function\" href=\"a01667.html#a8d23b1a79271358fc3326ee11df5ec4b\">finiteElement</a>().size() ; i < end ; ++it, ++i)</div>\n-<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> {</div>\n-<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> Dune::LocalKey localKey = node.<a class=\"code hl_function\" href=\"a01667.html#a8d23b1a79271358fc3326ee11df5ec4b\">finiteElement</a>().localCoefficients().localKey(i);</div>\n-<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridIndexSet = <a class=\"code hl_function\" href=\"a01671.html#ab21cdfcd52867003b7f3095f366109e7\">gridView</a>().indexSet();</div>\n-<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& element = node.<a class=\"code hl_function\" href=\"a01667.html#a9d58cded4e8fb6665c22c758e55f4914\">element</a>();</div>\n-<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> </div>\n-<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> <span class=\"comment\">// The dimension of the entity that the current dof is related to</span></div>\n-<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> <span class=\"keyword\">auto</span> dofDim = dim - localKey.codim();</div>\n-<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> </div>\n-<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> <span class=\"comment\">// Test for a vertex dof</span></div>\n-<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> <span class=\"comment\">// The test for k==1 is redundant, but having it here allows the compiler to conclude</span></div>\n-<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span> <span class=\"comment\">// at compile-time that the dofDim==0 case is the only one that will ever happen.</span></div>\n-<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> <span class=\"comment\">// This leads to measurable speed-up: see</span></div>\n-<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> <span class=\"comment\">// https://gitlab.dune-project.org/staging/dune-functions/issues/30</span></div>\n-<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span> <span class=\"keywordflow\">if</span> (k==1 || dofDim==0) {</div>\n-<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> *it = {{ (<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)(gridIndexSet.subIndex(element,localKey.subEntity(),dim)) }};</div>\n-<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> <span class=\"keywordflow\">continue</span>;</div>\n-<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> }</div>\n-<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"> 212</span> </div>\n-<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span> <span class=\"keywordflow\">if</span> (dofDim==1)</div>\n-<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> { <span class=\"comment\">// edge dof</span></div>\n-<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> <span class=\"keywordflow\">if</span> (dim==1) <span class=\"comment\">// element dof -- any local numbering is fine</span></div>\n-<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span> {</div>\n-<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> *it = {{ <a class=\"code hl_variable\" href=\"a01671.html#a24780ed75bb6c40381f730e267f133f8\">edgeOffset_</a></div>\n-<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> + <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(1) * ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)gridIndexSet.subIndex(element,0,0))</div>\n-<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> + localKey.index() }};</div>\n-<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span> <span class=\"keywordflow\">continue</span>;</div>\n-<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> }</div>\n-<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span> <span class=\"keywordflow\">else</span></div>\n-<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> {</div>\n-<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span> refElement</div>\n-<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span> = Dune::referenceElement<double,dim>(element.type());</div>\n-<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> </div>\n-<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> <span class=\"comment\">// We have to reverse the numbering if the local element edge is</span></div>\n-<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> <span class=\"comment\">// not aligned with the global edge.</span></div>\n-<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> <span class=\"keyword\">auto</span> v0 = (<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)gridIndexSet.subIndex(element,refElement.subEntity(localKey.subEntity(),localKey.codim(),0,dim),dim);</div>\n-<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span> <span class=\"keyword\">auto</span> v1 = (<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)gridIndexSet.subIndex(element,refElement.subEntity(localKey.subEntity(),localKey.codim(),1,dim),dim);</div>\n-<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span> <span class=\"keywordtype\">bool</span> flip = (v0 > v1);</div>\n-<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> *it = {{ (flip)</div>\n-<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> ? <a class=\"code hl_variable\" href=\"a01671.html#a24780ed75bb6c40381f730e267f133f8\">edgeOffset_</a></div>\n-<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> + <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(1)*((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)gridIndexSet.subIndex(element,localKey.subEntity(),localKey.codim()))</div>\n-<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> + (<a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(1)-1)-localKey.index()</div>\n-<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span> : <a class=\"code hl_variable\" href=\"a01671.html#a24780ed75bb6c40381f730e267f133f8\">edgeOffset_</a></div>\n-<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span> + <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(1)*((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)gridIndexSet.subIndex(element,localKey.subEntity(),localKey.codim()))</div>\n-<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span> + localKey.index() }};</div>\n-<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span> <span class=\"keywordflow\">continue</span>;</div>\n-<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"> 240</span> }</div>\n-<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span> }</div>\n-<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span> </div>\n-<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> <span class=\"keywordflow\">if</span> (dofDim==2)</div>\n-<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> {</div>\n-<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> <span class=\"keywordflow\">if</span> (dim==2) <span class=\"comment\">// element dof -- any local numbering is fine</span></div>\n-<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span> {</div>\n-<div class=\"line\"><a id=\"l00247\" name=\"l00247\"></a><span class=\"lineno\"> 247</span> <span class=\"keywordflow\">if</span> (element.type().isTriangle())</div>\n-<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"> 248</span> {</div>\n-<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span> *it = {{ <a class=\"code hl_variable\" href=\"a01671.html#ae6c85768fc1d8aa23f94a2708d8d3ee6\">triangleOffset_</a> + <a class=\"code hl_function\" href=\"a01671.html#a5a34336b9868148ddade4d6b5fd044cf\">dofsPerSimplex</a>(2)*((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};</div>\n-<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span> <span class=\"keywordflow\">continue</span>;</div>\n-<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span> }</div>\n-<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span> <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (element.type().isQuadrilateral())</div>\n-<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"> 253</span> {</div>\n-<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"> 254</span> *it = {{ <a class=\"code hl_variable\" href=\"a01671.html#aaa4552a25872774f6f07f4dd8336be69\">quadrilateralOffset_</a> + <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(2)*((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};</div>\n-<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span> <span class=\"keywordflow\">continue</span>;</div>\n-<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"> 256</span> }</div>\n-<div class=\"line\"><a id=\"l00257\" name=\"l00257\"></a><span class=\"lineno\"> 257</span> <span class=\"keywordflow\">else</span></div>\n-<div class=\"line\"><a id=\"l00258\" name=\"l00258\"></a><span class=\"lineno\"> 258</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"2d elements have to be triangles or quadrilaterals"</span>);</div>\n-<div class=\"line\"><a id=\"l00259\" name=\"l00259\"></a><span class=\"lineno\"> 259</span> } <span class=\"keywordflow\">else</span></div>\n-<div class=\"line\"><a id=\"l00260\" name=\"l00260\"></a><span class=\"lineno\"> 260</span> {</div>\n-<div class=\"line\"><a id=\"l00261\" name=\"l00261\"></a><span class=\"lineno\"> 261</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span> refElement</div>\n-<div class=\"line\"><a id=\"l00262\" name=\"l00262\"></a><span class=\"lineno\"> 262</span> = Dune::referenceElement<double,dim>(element.type());</div>\n-<div class=\"line\"><a id=\"l00263\" name=\"l00263\"></a><span class=\"lineno\"> 263</span> </div>\n-<div class=\"line\"><a id=\"l00264\" name=\"l00264\"></a><span class=\"lineno\"> 264</span> <span class=\"keywordflow\">if</span> (<a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>()>3)</div>\n-<div class=\"line\"><a id=\"l00265\" name=\"l00265\"></a><span class=\"lineno\"> 265</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"LagrangeBasis for 3D grids is only implemented if k<=3"</span>);</div>\n-<div class=\"line\"><a id=\"l00266\" name=\"l00266\"></a><span class=\"lineno\"> 266</span> </div>\n-<div class=\"line\"><a id=\"l00267\" name=\"l00267\"></a><span class=\"lineno\"> 267</span> <span class=\"keywordflow\">if</span> (<a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>()==3 and !refElement.type(localKey.subEntity(), localKey.codim()).isTriangle())</div>\n-<div class=\"line\"><a id=\"l00268\" name=\"l00268\"></a><span class=\"lineno\"> 268</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"LagrangeBasis for 3D grids with k==3 is only implemented if the grid is a simplex grid"</span>);</div>\n-<div class=\"line\"><a id=\"l00269\" name=\"l00269\"></a><span class=\"lineno\"> 269</span> </div>\n-<div class=\"line\"><a id=\"l00270\" name=\"l00270\"></a><span class=\"lineno\"> 270</span> *it = {{ <a class=\"code hl_variable\" href=\"a01671.html#ae6c85768fc1d8aa23f94a2708d8d3ee6\">triangleOffset_</a> + ((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)gridIndexSet.subIndex(element,localKey.subEntity(),localKey.codim())) }};</div>\n-<div class=\"line\"><a id=\"l00271\" name=\"l00271\"></a><span class=\"lineno\"> 271</span> <span class=\"keywordflow\">continue</span>;</div>\n-<div class=\"line\"><a id=\"l00272\" name=\"l00272\"></a><span class=\"lineno\"> 272</span> }</div>\n-<div class=\"line\"><a id=\"l00273\" name=\"l00273\"></a><span class=\"lineno\"> 273</span> }</div>\n-<div class=\"line\"><a id=\"l00274\" name=\"l00274\"></a><span class=\"lineno\"> 274</span> </div>\n-<div class=\"line\"><a id=\"l00275\" name=\"l00275\"></a><span class=\"lineno\"> 275</span> <span class=\"keywordflow\">if</span> (dofDim==3)</div>\n-<div class=\"line\"><a id=\"l00276\" name=\"l00276\"></a><span class=\"lineno\"> 276</span> {</div>\n-<div class=\"line\"><a id=\"l00277\" name=\"l00277\"></a><span class=\"lineno\"> 277</span> <span class=\"keywordflow\">if</span> (dim==3) <span class=\"comment\">// element dof -- any local numbering is fine</span></div>\n-<div class=\"line\"><a id=\"l00278\" name=\"l00278\"></a><span class=\"lineno\"> 278</span> {</div>\n-<div class=\"line\"><a id=\"l00279\" name=\"l00279\"></a><span class=\"lineno\"> 279</span> <span class=\"keywordflow\">if</span> (element.type().isTetrahedron())</div>\n-<div class=\"line\"><a id=\"l00280\" name=\"l00280\"></a><span class=\"lineno\"> 280</span> {</div>\n-<div class=\"line\"><a id=\"l00281\" name=\"l00281\"></a><span class=\"lineno\"> 281</span> *it = {{ <a class=\"code hl_variable\" href=\"a01671.html#a6c7ee6cdf1c33779542802c064878f9d\">tetrahedronOffset_</a> + <a class=\"code hl_function\" href=\"a01671.html#a5a34336b9868148ddade4d6b5fd044cf\">dofsPerSimplex</a>(3)*((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};</div>\n-<div class=\"line\"><a id=\"l00282\" name=\"l00282\"></a><span class=\"lineno\"> 282</span> <span class=\"keywordflow\">continue</span>;</div>\n-<div class=\"line\"><a id=\"l00283\" name=\"l00283\"></a><span class=\"lineno\"> 283</span> }</div>\n-<div class=\"line\"><a id=\"l00284\" name=\"l00284\"></a><span class=\"lineno\"> 284</span> <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (element.type().isHexahedron())</div>\n-<div class=\"line\"><a id=\"l00285\" name=\"l00285\"></a><span class=\"lineno\"> 285</span> {</div>\n-<div class=\"line\"><a id=\"l00286\" name=\"l00286\"></a><span class=\"lineno\"> 286</span> *it = {{ <a class=\"code hl_variable\" href=\"a01671.html#aea5db4f517eaead23b62142891c0484a\">hexahedronOffset_</a> + <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(3)*((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};</div>\n-<div class=\"line\"><a id=\"l00287\" name=\"l00287\"></a><span class=\"lineno\"> 287</span> <span class=\"keywordflow\">continue</span>;</div>\n-<div class=\"line\"><a id=\"l00288\" name=\"l00288\"></a><span class=\"lineno\"> 288</span> }</div>\n-<div class=\"line\"><a id=\"l00289\" name=\"l00289\"></a><span class=\"lineno\"> 289</span> <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (element.type().isPrism())</div>\n-<div class=\"line\"><a id=\"l00290\" name=\"l00290\"></a><span class=\"lineno\"> 290</span> {</div>\n-<div class=\"line\"><a id=\"l00291\" name=\"l00291\"></a><span class=\"lineno\"> 291</span> *it = {{ <a class=\"code hl_variable\" href=\"a01671.html#a649ad327ee6564de6263f497962d344e\">prismOffset_</a> + <a class=\"code hl_function\" href=\"a01671.html#a005c07b60bc225e41f6fbeee53ab20c2\">dofsPerPrism</a>()*((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};</div>\n-<div class=\"line\"><a id=\"l00292\" name=\"l00292\"></a><span class=\"lineno\"> 292</span> <span class=\"keywordflow\">continue</span>;</div>\n-<div class=\"line\"><a id=\"l00293\" name=\"l00293\"></a><span class=\"lineno\"> 293</span> }</div>\n-<div class=\"line\"><a id=\"l00294\" name=\"l00294\"></a><span class=\"lineno\"> 294</span> <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (element.type().isPyramid())</div>\n-<div class=\"line\"><a id=\"l00295\" name=\"l00295\"></a><span class=\"lineno\"> 295</span> {</div>\n-<div class=\"line\"><a id=\"l00296\" name=\"l00296\"></a><span class=\"lineno\"> 296</span> *it = {{ <a class=\"code hl_variable\" href=\"a01671.html#a639dc115510426bbaf3f0431fc8f1748\">pyramidOffset_</a> + <a class=\"code hl_function\" href=\"a01671.html#afd0d5e9191756b1d6e6f7c2f77647739\">dofsPerPyramid</a>()*((<a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a>)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};</div>\n-<div class=\"line\"><a id=\"l00297\" name=\"l00297\"></a><span class=\"lineno\"> 297</span> <span class=\"keywordflow\">continue</span>;</div>\n-<div class=\"line\"><a id=\"l00298\" name=\"l00298\"></a><span class=\"lineno\"> 298</span> }</div>\n-<div class=\"line\"><a id=\"l00299\" name=\"l00299\"></a><span class=\"lineno\"> 299</span> <span class=\"keywordflow\">else</span></div>\n-<div class=\"line\"><a id=\"l00300\" name=\"l00300\"></a><span class=\"lineno\"> 300</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"3d elements have to be tetrahedra, hexahedra, prisms, or pyramids"</span>);</div>\n-<div class=\"line\"><a id=\"l00301\" name=\"l00301\"></a><span class=\"lineno\"> 301</span> } <span class=\"keywordflow\">else</span></div>\n-<div class=\"line\"><a id=\"l00302\" name=\"l00302\"></a><span class=\"lineno\"> 302</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"Grids of dimension larger than 3 are no supported"</span>);</div>\n-<div class=\"line\"><a id=\"l00303\" name=\"l00303\"></a><span class=\"lineno\"> 303</span> }</div>\n-<div class=\"line\"><a id=\"l00304\" name=\"l00304\"></a><span class=\"lineno\"> 304</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"Grid contains elements not supported for the LagrangeBasis"</span>);</div>\n-<div class=\"line\"><a id=\"l00305\" name=\"l00305\"></a><span class=\"lineno\"> 305</span> }</div>\n-<div class=\"line\"><a id=\"l00306\" name=\"l00306\"></a><span class=\"lineno\"> 306</span> <span class=\"keywordflow\">return</span> it;</div>\n-<div class=\"line\"><a id=\"l00307\" name=\"l00307\"></a><span class=\"lineno\"> 307</span> }</div>\n-<div class=\"line\"><a id=\"l00308\" name=\"l00308\"></a><span class=\"lineno\"> 308</span> </div>\n-<div class=\"line\"><a id=\"l00310\" name=\"l00310\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\"> 310</a></span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00311\" name=\"l00311\"></a><span class=\"lineno\"> 311</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00312\" name=\"l00312\"></a><span class=\"lineno\"> 312</span> <span class=\"keywordflow\">return</span> (useDynamicOrder) ? <a class=\"code hl_variable\" href=\"a01671.html#abefe712249711f9caee5f9b4ace8fb2a\">order_</a> : k;</div>\n-<div class=\"line\"><a id=\"l00313\" name=\"l00313\"></a><span class=\"lineno\"> 313</span> }</div>\n-<div class=\"line\"><a id=\"l00314\" name=\"l00314\"></a><span class=\"lineno\"> 314</span> </div>\n-<div class=\"line\"><a id=\"l00315\" name=\"l00315\"></a><span class=\"lineno\"> 315</span><span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00316\" name=\"l00316\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\"> 316</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#aaa2add570edd22047fd5cfba570dd982\">GridView</a> <a class=\"code hl_variable\" href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">gridView_</a>;</div>\n-<div class=\"line\"><a id=\"l00317\" name=\"l00317\"></a><span class=\"lineno\"> 317</span> </div>\n-<div class=\"line\"><a id=\"l00318\" name=\"l00318\"></a><span class=\"lineno\"> 318</span> <span class=\"comment\">// Run-time order, only valid if k<0</span></div>\n-<div class=\"line\"><a id=\"l00319\" name=\"l00319\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#abefe712249711f9caee5f9b4ace8fb2a\"> 319</a></span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_variable\" href=\"a01671.html#abefe712249711f9caee5f9b4ace8fb2a\">order_</a>;</div>\n-<div class=\"line\"><a id=\"l00320\" name=\"l00320\"></a><span class=\"lineno\"> 320</span> </div>\n-<div class=\"line\"><a id=\"l00322\" name=\"l00322\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a5a34336b9868148ddade4d6b5fd044cf\"> 322</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_function\" href=\"a01671.html#a5a34336b9868148ddade4d6b5fd044cf\">dofsPerSimplex</a>(std::size_t simplexDim)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00323\" name=\"l00323\"></a><span class=\"lineno\"> 323</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00324\" name=\"l00324\"></a><span class=\"lineno\"> 324</span> <span class=\"keywordflow\">return</span> useDynamicOrder ? <a class=\"code hl_variable\" href=\"a01671.html#a39dcb5d78ac1216c75a75660e2d61849\">dofsPerSimplex_</a>[simplexDim] : <a class=\"code hl_function\" href=\"a01671.html#a01edf36372c30d045823bb5a330526e6\">computeDofsPerSimplex</a>(simplexDim);</div>\n-<div class=\"line\"><a id=\"l00325\" name=\"l00325\"></a><span class=\"lineno\"> 325</span> }</div>\n-<div class=\"line\"><a id=\"l00326\" name=\"l00326\"></a><span class=\"lineno\"> 326</span> </div>\n-<div class=\"line\"><a id=\"l00328\" name=\"l00328\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\"> 328</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_function\" href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">dofsPerCube</a>(std::size_t cubeDim)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00329\" name=\"l00329\"></a><span class=\"lineno\"> 329</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00330\" name=\"l00330\"></a><span class=\"lineno\"> 330</span> <span class=\"keywordflow\">return</span> useDynamicOrder ? <a class=\"code hl_variable\" href=\"a01671.html#abfa5632c391ed7160d081c63ab154377\">dofsPerCube_</a>[cubeDim] : <a class=\"code hl_function\" href=\"a01671.html#a015986cee132f7ebd91ad8f3845a84be\">computeDofsPerCube</a>(cubeDim);</div>\n-<div class=\"line\"><a id=\"l00331\" name=\"l00331\"></a><span class=\"lineno\"> 331</span> }</div>\n-<div class=\"line\"><a id=\"l00332\" name=\"l00332\"></a><span class=\"lineno\"> 332</span> </div>\n-<div class=\"line\"><a id=\"l00333\" name=\"l00333\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a005c07b60bc225e41f6fbeee53ab20c2\"> 333</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_function\" href=\"a01671.html#a005c07b60bc225e41f6fbeee53ab20c2\">dofsPerPrism</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00334\" name=\"l00334\"></a><span class=\"lineno\"> 334</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00335\" name=\"l00335\"></a><span class=\"lineno\"> 335</span> <span class=\"keywordflow\">return</span> useDynamicOrder ? <a class=\"code hl_variable\" href=\"a01671.html#ade4d334b8ac70f9c18fc15a9eba04815\">dofsPerPrism_</a> : <a class=\"code hl_function\" href=\"a01671.html#a0c0e8ce0766d2a59986cb5daebe86132\">computeDofsPerPrism</a>();</div>\n-<div class=\"line\"><a id=\"l00336\" name=\"l00336\"></a><span class=\"lineno\"> 336</span> }</div>\n-<div class=\"line\"><a id=\"l00337\" name=\"l00337\"></a><span class=\"lineno\"> 337</span> </div>\n-<div class=\"line\"><a id=\"l00338\" name=\"l00338\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#afd0d5e9191756b1d6e6f7c2f77647739\"> 338</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_function\" href=\"a01671.html#afd0d5e9191756b1d6e6f7c2f77647739\">dofsPerPyramid</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00339\" name=\"l00339\"></a><span class=\"lineno\"> 339</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00340\" name=\"l00340\"></a><span class=\"lineno\"> 340</span> <span class=\"keywordflow\">return</span> useDynamicOrder ? <a class=\"code hl_variable\" href=\"a01671.html#a9212ce0f83e8642244e10d3cd3d596c6\">dofsPerPyramid_</a> : <a class=\"code hl_function\" href=\"a01671.html#a76f8c4b5aa9e574556edd79f0b2812f1\">computeDofsPerPyramid</a>();</div>\n-<div class=\"line\"><a id=\"l00341\" name=\"l00341\"></a><span class=\"lineno\"> 341</span> }</div>\n-<div class=\"line\"><a id=\"l00342\" name=\"l00342\"></a><span class=\"lineno\"> 342</span> </div>\n-<div class=\"line\"><a id=\"l00344\" name=\"l00344\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a01edf36372c30d045823bb5a330526e6\"> 344</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_function\" href=\"a01671.html#a01edf36372c30d045823bb5a330526e6\">computeDofsPerSimplex</a>(std::size_t simplexDim)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00345\" name=\"l00345\"></a><span class=\"lineno\"> 345</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00346\" name=\"l00346\"></a><span class=\"lineno\"> 346</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>() == 0 ? (dim == simplexDim ? 1 : 0) : Dune::binomial(std::size_t(<a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>()-1),simplexDim);</div>\n+<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n+<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> <a class=\"code hl_function\" href=\"a01735.html#ac9e9c317b759d7dbb3ae74ee66595d5a\">size</a>(<span class=\"keyword\">const</span> SizePrefix& prefix, <a class=\"code hl_struct\" href=\"a01423.html\">BasisFactory::FlatInterleaved</a>)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> <span class=\"comment\">// The root index size is the root index size of a single subnode</span></div>\n+<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> <span class=\"comment\">// multiplied by the number of subnodes because we enumerate all</span></div>\n+<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> <span class=\"comment\">// child indices in a row.</span></div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> <span class=\"keywordflow\">if</span> (prefix.size() == 0)</div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> <span class=\"keywordflow\">return</span> children*subPreBasis_.size();</div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> </div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> <span class=\"comment\">// The first prefix entry refers to one of the (root index size)</span></div>\n+<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> <span class=\"comment\">// subindex trees. Hence we have to first compute the corresponding</span></div>\n+<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> <span class=\"comment\">// prefix entry for a single subnode subnode. The we can append</span></div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> <span class=\"comment\">// the other prefix entries unmodified, because the index tree</span></div>\n+<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> <span class=\"comment\">// looks the same after the first level.</span></div>\n+<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> SizePrefix subPrefix;</div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> subPrefix.push_back(prefix[0] / children);</div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> <span class=\"keywordflow\">for</span>(std::size_t i=1; i<prefix.size(); ++i)</div>\n+<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> subPrefix.push_back(prefix[i]);</div>\n+<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> <span class=\"keywordflow\">return</span> subPreBasis_.size(subPrefix);</div>\n+<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> }</div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> </div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> <a class=\"code hl_function\" href=\"a01735.html#ac9e9c317b759d7dbb3ae74ee66595d5a\">size</a>(<span class=\"keyword\">const</span> SizePrefix& prefix, BasisFactory::FlatLexicographic)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> <span class=\"comment\">// The size at the index tree root is the size of at the index tree</span></div>\n+<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> <span class=\"comment\">// root of a single subnode multiplied by the number of subnodes</span></div>\n+<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> <span class=\"comment\">// because we enumerate all child indices in a row.</span></div>\n+<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> <span class=\"keywordflow\">if</span> (prefix.size() == 0)</div>\n+<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> <span class=\"keywordflow\">return</span> children*subPreBasis_.size();</div>\n+<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> </div>\n+<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> <span class=\"comment\">// The first prefix entry refers to one of the (root index size)</span></div>\n+<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> <span class=\"comment\">// subindex trees. Hence we have to first compute the corresponding</span></div>\n+<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> <span class=\"comment\">// prefix entry for a single subnode subnode. The we can append</span></div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> <span class=\"comment\">// the other prefix entries unmodified, because the index tree</span></div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> <span class=\"comment\">// looks the same after the first level.</span></div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> SizePrefix subPrefix;</div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> subPrefix.push_back(prefix[0] % children);</div>\n+<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> <span class=\"keywordflow\">for</span>(std::size_t i=1; i<prefix.size(); ++i)</div>\n+<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> subPrefix.push_back(prefix[i]);</div>\n+<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> <span class=\"keywordflow\">return</span> subPreBasis_.size(subPrefix);</div>\n+<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> }</div>\n+<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> </div>\n+<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n+<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> <a class=\"code hl_function\" href=\"a01735.html#ac9e9c317b759d7dbb3ae74ee66595d5a\">size</a>(<span class=\"keyword\">const</span> SizePrefix& prefix, BasisFactory::BlockedLexicographic)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> <span class=\"keywordflow\">if</span> (prefix.size() == 0)</div>\n+<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> <span class=\"keywordflow\">return</span> children;</div>\n+<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> SizePrefix subPrefix;</div>\n+<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> <span class=\"keywordflow\">for</span>(std::size_t i=1; i<prefix.size(); ++i)</div>\n+<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> subPrefix.push_back(prefix[i]);</div>\n+<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> <span class=\"keywordflow\">return</span> subPreBasis_.size(subPrefix);</div>\n+<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> }</div>\n+<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span> </div>\n+<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n+<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> <a class=\"code hl_function\" href=\"a01735.html#ac9e9c317b759d7dbb3ae74ee66595d5a\">size</a>(<span class=\"keyword\">const</span> SizePrefix& prefix, BasisFactory::BlockedInterleaved)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> <span class=\"keywordflow\">if</span> (prefix.size() == 0)</div>\n+<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> <span class=\"keywordflow\">return</span> subPreBasis_.size();</div>\n+<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> </div>\n+<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span> SizePrefix subPrefix;</div>\n+<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> <span class=\"keywordflow\">for</span>(std::size_t i=0; i<prefix.size()-1; ++i)</div>\n+<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> subPrefix.push_back(prefix[i]);</div>\n+<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> </div>\n+<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> r = subPreBasis_.size(subPrefix);</div>\n+<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> <span class=\"keywordflow\">if</span> (r==0)</div>\n+<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> <span class=\"keywordflow\">return</span> 0;</div>\n+<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> subPrefix.push_back(prefix.back());</div>\n+<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> r = subPreBasis_.size(subPrefix);</div>\n+<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> <span class=\"keywordflow\">if</span> (r==0)</div>\n+<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> <span class=\"keywordflow\">return</span> children;</div>\n+<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> <span class=\"keywordflow\">return</span> r;</div>\n+<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> }</div>\n+<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> </div>\n+<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span> </div>\n+<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#a092a9a0c5fa8feb7cde428eb9d37d8e3\"> 207</a></span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> <a class=\"code hl_function\" href=\"a01735.html#a092a9a0c5fa8feb7cde428eb9d37d8e3\">dimension</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> <span class=\"keywordflow\">return</span> subPreBasis_.dimension() * children;</div>\n+<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> }</div>\n+<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> </div>\n+<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#aeb555ecc3254d9be197f8d5157b3668c\"> 213</a></span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> <a class=\"code hl_function\" href=\"a01735.html#aeb555ecc3254d9be197f8d5157b3668c\">maxNodeSize</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> <span class=\"keywordflow\">return</span> subPreBasis_.maxNodeSize() * children;</div>\n+<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span> }</div>\n+<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> </div>\n+<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#af2b075686a4ae66836d8ec0db85ae251\"> 219</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01735.html#a419106855686e36864eea0100d8e618e\">SubPreBasis</a>& <a class=\"code hl_function\" href=\"a01735.html#af2b075686a4ae66836d8ec0db85ae251\">subPreBasis</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> <span class=\"keywordflow\">return</span> subPreBasis_;</div>\n+<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span> }</div>\n+<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> </div>\n+<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#ad3551fe05e2d4e6e9631a78e3f2f150a\"> 225</a></span> <a class=\"code hl_typedef\" href=\"a01735.html#a419106855686e36864eea0100d8e618e\">SubPreBasis</a>& <a class=\"code hl_function\" href=\"a01735.html#ad3551fe05e2d4e6e9631a78e3f2f150a\">subPreBasis</a>()</div>\n+<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> {</div>\n+<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> <span class=\"keywordflow\">return</span> subPreBasis_;</div>\n+<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> }</div>\n+<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> </div>\n+<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n+<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01735.html#aaf0cd03264066ab6e7ed385e6e74c578\"> 232</a></span> It <a class=\"code hl_function\" href=\"a01735.html#aaf0cd03264066ab6e7ed385e6e74c578\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01715.html\">Node</a>& node, It it)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01735.html#aaf0cd03264066ab6e7ed385e6e74c578\">indices</a>(node, it, <a class=\"code hl_typedef\" href=\"a01735.html#a1c74f8319f302dc61ba704be6489cf37\">IndexMergingStrategy</a>{});</div>\n+<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> }</div>\n+<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span> </div>\n+<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span> </div>\n+<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n+<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"> 240</span> It <a class=\"code hl_function\" href=\"a01735.html#aaf0cd03264066ab6e7ed385e6e74c578\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01735.html#a32df93d56f2f547813944cb7bcd04ffa\">Node</a>& node, It multiIndices, <a class=\"code hl_struct\" href=\"a01423.html\">BasisFactory::FlatInterleaved</a>)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span> <span class=\"keyword\">using namespace </span>Dune::Indices;</div>\n+<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> subTreeSize = node.child(_0).size();</div>\n+<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> <span class=\"comment\">// Fill indices for first child at the beginning.</span></div>\n+<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> <span class=\"keyword\">auto</span> next = <a class=\"code hl_function\" href=\"a01735.html#af2b075686a4ae66836d8ec0db85ae251\">subPreBasis</a>().indices(node.child(_0), multiIndices);</div>\n+<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span> <span class=\"comment\">// Multiply first component of all indices for first child by</span></div>\n+<div class=\"line\"><a id=\"l00247\" name=\"l00247\"></a><span class=\"lineno\"> 247</span> <span class=\"comment\">// number of children to stretch the index range for interleaving.</span></div>\n+<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"> 248</span> <span class=\"keywordflow\">for</span> (std::size_t i = 0; i<subTreeSize; ++i)</div>\n+<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span> multiIndices[i][0] *= children;</div>\n+<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span> <span class=\"keywordflow\">for</span> (std::size_t child = 1; child<children; ++child)</div>\n+<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span> {</div>\n+<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span> <span class=\"keywordflow\">for</span> (std::size_t i = 0; i<subTreeSize; ++i)</div>\n+<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"> 253</span> {</div>\n+<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"> 254</span> <span class=\"comment\">// Copy indices from first child for all other children</span></div>\n+<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span> <span class=\"comment\">// and shift them by child index to interleave indices.</span></div>\n+<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"> 256</span> <span class=\"comment\">// multiIndices[child*subTreeSize+i] = multiIndices[i];</span></div>\n+<div class=\"line\"><a id=\"l00257\" name=\"l00257\"></a><span class=\"lineno\"> 257</span> <span class=\"comment\">// multiIndices[child*subTreeSize+i][0] = multiIndices[i][0]+child;</span></div>\n+<div class=\"line\"><a id=\"l00258\" name=\"l00258\"></a><span class=\"lineno\"> 258</span> (*next) = multiIndices[i];</div>\n+<div class=\"line\"><a id=\"l00259\" name=\"l00259\"></a><span class=\"lineno\"> 259</span> (*next)[0] = multiIndices[i][0]+child;</div>\n+<div class=\"line\"><a id=\"l00260\" name=\"l00260\"></a><span class=\"lineno\"> 260</span> ++next;</div>\n+<div class=\"line\"><a id=\"l00261\" name=\"l00261\"></a><span class=\"lineno\"> 261</span> }</div>\n+<div class=\"line\"><a id=\"l00262\" name=\"l00262\"></a><span class=\"lineno\"> 262</span> }</div>\n+<div class=\"line\"><a id=\"l00263\" name=\"l00263\"></a><span class=\"lineno\"> 263</span> <span class=\"keywordflow\">return</span> next;</div>\n+<div class=\"line\"><a id=\"l00264\" name=\"l00264\"></a><span class=\"lineno\"> 264</span> }</div>\n+<div class=\"line\"><a id=\"l00265\" name=\"l00265\"></a><span class=\"lineno\"> 265</span> </div>\n+<div class=\"line\"><a id=\"l00266\" name=\"l00266\"></a><span class=\"lineno\"> 266</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n+<div class=\"line\"><a id=\"l00267\" name=\"l00267\"></a><span class=\"lineno\"> 267</span> It <a class=\"code hl_function\" href=\"a01735.html#aaf0cd03264066ab6e7ed385e6e74c578\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01735.html#a32df93d56f2f547813944cb7bcd04ffa\">Node</a>& node, It multiIndices, BasisFactory::FlatLexicographic)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00268\" name=\"l00268\"></a><span class=\"lineno\"> 268</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00269\" name=\"l00269\"></a><span class=\"lineno\"> 269</span> <span class=\"keyword\">using namespace </span>Dune::Indices;</div>\n+<div class=\"line\"><a id=\"l00270\" name=\"l00270\"></a><span class=\"lineno\"> 270</span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> subTreeSize = node.child(_0).size();</div>\n+<div class=\"line\"><a id=\"l00271\" name=\"l00271\"></a><span class=\"lineno\"> 271</span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> firstIndexEntrySize = <a class=\"code hl_function\" href=\"a01735.html#af2b075686a4ae66836d8ec0db85ae251\">subPreBasis</a>().size();</div>\n+<div class=\"line\"><a id=\"l00272\" name=\"l00272\"></a><span class=\"lineno\"> 272</span> <span class=\"comment\">// Fill indices for first child at the beginning.</span></div>\n+<div class=\"line\"><a id=\"l00273\" name=\"l00273\"></a><span class=\"lineno\"> 273</span> <span class=\"keyword\">auto</span> next = <a class=\"code hl_function\" href=\"a01735.html#af2b075686a4ae66836d8ec0db85ae251\">subPreBasis</a>().indices(node.child(_0), multiIndices);</div>\n+<div class=\"line\"><a id=\"l00274\" name=\"l00274\"></a><span class=\"lineno\"> 274</span> <span class=\"keywordflow\">for</span> (std::size_t child = 1; child<children; ++child)</div>\n+<div class=\"line\"><a id=\"l00275\" name=\"l00275\"></a><span class=\"lineno\"> 275</span> {</div>\n+<div class=\"line\"><a id=\"l00276\" name=\"l00276\"></a><span class=\"lineno\"> 276</span> <span class=\"keywordflow\">for</span> (std::size_t i = 0; i<subTreeSize; ++i)</div>\n+<div class=\"line\"><a id=\"l00277\" name=\"l00277\"></a><span class=\"lineno\"> 277</span> {</div>\n+<div class=\"line\"><a id=\"l00278\" name=\"l00278\"></a><span class=\"lineno\"> 278</span> <span class=\"comment\">// Copy indices from first child for all other children</span></div>\n+<div class=\"line\"><a id=\"l00279\" name=\"l00279\"></a><span class=\"lineno\"> 279</span> <span class=\"comment\">// and shift them by suitable offset to get lexicographic indices.</span></div>\n+<div class=\"line\"><a id=\"l00280\" name=\"l00280\"></a><span class=\"lineno\"> 280</span> <span class=\"comment\">// multiIndices[child*subTreeSize+i] = multiIndices[i];</span></div>\n+<div class=\"line\"><a id=\"l00281\" name=\"l00281\"></a><span class=\"lineno\"> 281</span> <span class=\"comment\">// multiIndices[child*subTreeSize+i][0] += child*firstIndexEntrySize;</span></div>\n+<div class=\"line\"><a id=\"l00282\" name=\"l00282\"></a><span class=\"lineno\"> 282</span> (*next) = multiIndices[i];</div>\n+<div class=\"line\"><a id=\"l00283\" name=\"l00283\"></a><span class=\"lineno\"> 283</span> (*next)[0] += child*firstIndexEntrySize;</div>\n+<div class=\"line\"><a id=\"l00284\" name=\"l00284\"></a><span class=\"lineno\"> 284</span> ++next;</div>\n+<div class=\"line\"><a id=\"l00285\" name=\"l00285\"></a><span class=\"lineno\"> 285</span> }</div>\n+<div class=\"line\"><a id=\"l00286\" name=\"l00286\"></a><span class=\"lineno\"> 286</span> }</div>\n+<div class=\"line\"><a id=\"l00287\" name=\"l00287\"></a><span class=\"lineno\"> 287</span> <span class=\"keywordflow\">return</span> next;</div>\n+<div class=\"line\"><a id=\"l00288\" name=\"l00288\"></a><span class=\"lineno\"> 288</span> }</div>\n+<div class=\"line\"><a id=\"l00289\" name=\"l00289\"></a><span class=\"lineno\"> 289</span> </div>\n+<div class=\"line\"><a id=\"l00290\" name=\"l00290\"></a><span class=\"lineno\"> 290</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> MultiIndex></div>\n+<div class=\"line\"><a id=\"l00291\" name=\"l00291\"></a><span class=\"lineno\"> 291</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> multiIndexPushFront(MultiIndex& M, <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> M0)</div>\n+<div class=\"line\"><a id=\"l00292\" name=\"l00292\"></a><span class=\"lineno\"> 292</span> {</div>\n+<div class=\"line\"><a id=\"l00293\" name=\"l00293\"></a><span class=\"lineno\"> 293</span> M.resize(M.size()+1);</div>\n+<div class=\"line\"><a id=\"l00294\" name=\"l00294\"></a><span class=\"lineno\"> 294</span> <span class=\"keywordflow\">for</span>(std::size_t i=M.size()-1; i>0; --i)</div>\n+<div class=\"line\"><a id=\"l00295\" name=\"l00295\"></a><span class=\"lineno\"> 295</span> M[i] = M[i-1];</div>\n+<div class=\"line\"><a id=\"l00296\" name=\"l00296\"></a><span class=\"lineno\"> 296</span> M[0] = M0;</div>\n+<div class=\"line\"><a id=\"l00297\" name=\"l00297\"></a><span class=\"lineno\"> 297</span> }</div>\n+<div class=\"line\"><a id=\"l00298\" name=\"l00298\"></a><span class=\"lineno\"> 298</span> </div>\n+<div class=\"line\"><a id=\"l00299\" name=\"l00299\"></a><span class=\"lineno\"> 299</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n+<div class=\"line\"><a id=\"l00300\" name=\"l00300\"></a><span class=\"lineno\"> 300</span> It <a class=\"code hl_function\" href=\"a01735.html#aaf0cd03264066ab6e7ed385e6e74c578\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01735.html#a32df93d56f2f547813944cb7bcd04ffa\">Node</a>& node, It multiIndices, BasisFactory::BlockedLexicographic)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00301\" name=\"l00301\"></a><span class=\"lineno\"> 301</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00302\" name=\"l00302\"></a><span class=\"lineno\"> 302</span> <span class=\"keyword\">using namespace </span>Dune::Indices;</div>\n+<div class=\"line\"><a id=\"l00303\" name=\"l00303\"></a><span class=\"lineno\"> 303</span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> subTreeSize = node.child(_0).size();</div>\n+<div class=\"line\"><a id=\"l00304\" name=\"l00304\"></a><span class=\"lineno\"> 304</span> <span class=\"comment\">// Fill indices for first child at the beginning.</span></div>\n+<div class=\"line\"><a id=\"l00305\" name=\"l00305\"></a><span class=\"lineno\"> 305</span> <span class=\"keyword\">auto</span> next = <a class=\"code hl_function\" href=\"a01735.html#af2b075686a4ae66836d8ec0db85ae251\">subPreBasis</a>().indices(node.child(_0), multiIndices);</div>\n+<div class=\"line\"><a id=\"l00306\" name=\"l00306\"></a><span class=\"lineno\"> 306</span> <span class=\"comment\">// Insert 0 before first component of all indices for first child.</span></div>\n+<div class=\"line\"><a id=\"l00307\" name=\"l00307\"></a><span class=\"lineno\"> 307</span> <span class=\"keywordflow\">for</span> (std::size_t i = 0; i<subTreeSize; ++i)</div>\n+<div class=\"line\"><a id=\"l00308\" name=\"l00308\"></a><span class=\"lineno\"> 308</span> multiIndexPushFront(multiIndices[i], 0);</div>\n+<div class=\"line\"><a id=\"l00309\" name=\"l00309\"></a><span class=\"lineno\"> 309</span> <span class=\"keywordflow\">for</span> (std::size_t child = 1; child<children; ++child)</div>\n+<div class=\"line\"><a id=\"l00310\" name=\"l00310\"></a><span class=\"lineno\"> 310</span> {</div>\n+<div class=\"line\"><a id=\"l00311\" name=\"l00311\"></a><span class=\"lineno\"> 311</span> <span class=\"keywordflow\">for</span> (std::size_t i = 0; i<subTreeSize; ++i)</div>\n+<div class=\"line\"><a id=\"l00312\" name=\"l00312\"></a><span class=\"lineno\"> 312</span> {</div>\n+<div class=\"line\"><a id=\"l00313\" name=\"l00313\"></a><span class=\"lineno\"> 313</span> <span class=\"comment\">// Copy indices from first child for all other children and overwrite</span></div>\n+<div class=\"line\"><a id=\"l00314\" name=\"l00314\"></a><span class=\"lineno\"> 314</span> <span class=\"comment\">// zero in first component as inserted above by child index.</span></div>\n+<div class=\"line\"><a id=\"l00315\" name=\"l00315\"></a><span class=\"lineno\"> 315</span> <span class=\"comment\">// multiIndices[child*subTreeSize+i] = multiIndices[i];</span></div>\n+<div class=\"line\"><a id=\"l00316\" name=\"l00316\"></a><span class=\"lineno\"> 316</span> <span class=\"comment\">// multiIndices[child*subTreeSize+i][0] = child;</span></div>\n+<div class=\"line\"><a id=\"l00317\" name=\"l00317\"></a><span class=\"lineno\"> 317</span> (*next) = multiIndices[i];</div>\n+<div class=\"line\"><a id=\"l00318\" name=\"l00318\"></a><span class=\"lineno\"> 318</span> (*next)[0] = child;</div>\n+<div class=\"line\"><a id=\"l00319\" name=\"l00319\"></a><span class=\"lineno\"> 319</span> ++next;</div>\n+<div class=\"line\"><a id=\"l00320\" name=\"l00320\"></a><span class=\"lineno\"> 320</span> }</div>\n+<div class=\"line\"><a id=\"l00321\" name=\"l00321\"></a><span class=\"lineno\"> 321</span> }</div>\n+<div class=\"line\"><a id=\"l00322\" name=\"l00322\"></a><span class=\"lineno\"> 322</span> <span class=\"keywordflow\">return</span> next;</div>\n+<div class=\"line\"><a id=\"l00323\" name=\"l00323\"></a><span class=\"lineno\"> 323</span> }</div>\n+<div class=\"line\"><a id=\"l00324\" name=\"l00324\"></a><span class=\"lineno\"> 324</span> </div>\n+<div class=\"line\"><a id=\"l00325\" name=\"l00325\"></a><span class=\"lineno\"> 325</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n+<div class=\"line\"><a id=\"l00326\" name=\"l00326\"></a><span class=\"lineno\"> 326</span> It <a class=\"code hl_function\" href=\"a01735.html#aaf0cd03264066ab6e7ed385e6e74c578\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01735.html#a32df93d56f2f547813944cb7bcd04ffa\">Node</a>& node, It multiIndices, BasisFactory::BlockedInterleaved)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00327\" name=\"l00327\"></a><span class=\"lineno\"> 327</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00328\" name=\"l00328\"></a><span class=\"lineno\"> 328</span> <span class=\"keyword\">using namespace </span>Dune::Indices;</div>\n+<div class=\"line\"><a id=\"l00329\" name=\"l00329\"></a><span class=\"lineno\"> 329</span> <a class=\"code hl_typedef\" href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">size_type</a> subTreeSize = node.child(_0).size();</div>\n+<div class=\"line\"><a id=\"l00330\" name=\"l00330\"></a><span class=\"lineno\"> 330</span> <span class=\"comment\">// Fill indices for first child at the beginning.</span></div>\n+<div class=\"line\"><a id=\"l00331\" name=\"l00331\"></a><span class=\"lineno\"> 331</span> <span class=\"keyword\">auto</span> next = <a class=\"code hl_function\" href=\"a01735.html#af2b075686a4ae66836d8ec0db85ae251\">subPreBasis</a>().indices(node.child(_0), multiIndices);</div>\n+<div class=\"line\"><a id=\"l00332\" name=\"l00332\"></a><span class=\"lineno\"> 332</span> <span class=\"comment\">// Append 0 after last component of all indices for first child.</span></div>\n+<div class=\"line\"><a id=\"l00333\" name=\"l00333\"></a><span class=\"lineno\"> 333</span> <span class=\"keywordflow\">for</span> (std::size_t i = 0; i<subTreeSize; ++i)</div>\n+<div class=\"line\"><a id=\"l00334\" name=\"l00334\"></a><span class=\"lineno\"> 334</span> multiIndices[i].push_back(0);</div>\n+<div class=\"line\"><a id=\"l00335\" name=\"l00335\"></a><span class=\"lineno\"> 335</span> <span class=\"keywordflow\">for</span> (std::size_t child = 1; child<children; ++child)</div>\n+<div class=\"line\"><a id=\"l00336\" name=\"l00336\"></a><span class=\"lineno\"> 336</span> {</div>\n+<div class=\"line\"><a id=\"l00337\" name=\"l00337\"></a><span class=\"lineno\"> 337</span> <span class=\"keywordflow\">for</span> (std::size_t i = 0; i<subTreeSize; ++i)</div>\n+<div class=\"line\"><a id=\"l00338\" name=\"l00338\"></a><span class=\"lineno\"> 338</span> {</div>\n+<div class=\"line\"><a id=\"l00339\" name=\"l00339\"></a><span class=\"lineno\"> 339</span> <span class=\"comment\">// Copy indices from first child for all other children and overwrite</span></div>\n+<div class=\"line\"><a id=\"l00340\" name=\"l00340\"></a><span class=\"lineno\"> 340</span> <span class=\"comment\">// zero in last component as appended above by child index.</span></div>\n+<div class=\"line\"><a id=\"l00341\" name=\"l00341\"></a><span class=\"lineno\"> 341</span> (*next) = multiIndices[i];</div>\n+<div class=\"line\"><a id=\"l00342\" name=\"l00342\"></a><span class=\"lineno\"> 342</span> (*next).back() = child;</div>\n+<div class=\"line\"><a id=\"l00343\" name=\"l00343\"></a><span class=\"lineno\"> 343</span> ++next;</div>\n+<div class=\"line\"><a id=\"l00344\" name=\"l00344\"></a><span class=\"lineno\"> 344</span> }</div>\n+<div class=\"line\"><a id=\"l00345\" name=\"l00345\"></a><span class=\"lineno\"> 345</span> }</div>\n+<div class=\"line\"><a id=\"l00346\" name=\"l00346\"></a><span class=\"lineno\"> 346</span> <span class=\"keywordflow\">return</span> next;</div>\n <div class=\"line\"><a id=\"l00347\" name=\"l00347\"></a><span class=\"lineno\"> 347</span> }</div>\n <div class=\"line\"><a id=\"l00348\" name=\"l00348\"></a><span class=\"lineno\"> 348</span> </div>\n-<div class=\"line\"><a id=\"l00350\" name=\"l00350\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a015986cee132f7ebd91ad8f3845a84be\"> 350</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_function\" href=\"a01671.html#a015986cee132f7ebd91ad8f3845a84be\">computeDofsPerCube</a>(std::size_t cubeDim)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00351\" name=\"l00351\"></a><span class=\"lineno\"> 351</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00352\" name=\"l00352\"></a><span class=\"lineno\"> 352</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>() == 0 ? (dim == cubeDim ? 1 : 0) : <a class=\"code hl_function\" href=\"a00213.html#ga0d8eb549af76bc2563ab189e63668ee5\">Dune::power</a>(<a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>()-1, cubeDim);</div>\n-<div class=\"line\"><a id=\"l00353\" name=\"l00353\"></a><span class=\"lineno\"> 353</span> }</div>\n-<div class=\"line\"><a id=\"l00354\" name=\"l00354\"></a><span class=\"lineno\"> 354</span> </div>\n-<div class=\"line\"><a id=\"l00355\" name=\"l00355\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a0c0e8ce0766d2a59986cb5daebe86132\"> 355</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_function\" href=\"a01671.html#a0c0e8ce0766d2a59986cb5daebe86132\">computeDofsPerPrism</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00356\" name=\"l00356\"></a><span class=\"lineno\"> 356</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00357\" name=\"l00357\"></a><span class=\"lineno\"> 357</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>() == 0 ? (dim == 3 ? 1 : 0) : (<a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>()-1)*(<a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>()-1)*(<a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>()-2)/2;</div>\n-<div class=\"line\"><a id=\"l00358\" name=\"l00358\"></a><span class=\"lineno\"> 358</span> }</div>\n-<div class=\"line\"><a id=\"l00359\" name=\"l00359\"></a><span class=\"lineno\"> 359</span> </div>\n-<div class=\"line\"><a id=\"l00360\" name=\"l00360\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a76f8c4b5aa9e574556edd79f0b2812f1\"> 360</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_function\" href=\"a01671.html#a76f8c4b5aa9e574556edd79f0b2812f1\">computeDofsPerPyramid</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00361\" name=\"l00361\"></a><span class=\"lineno\"> 361</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00362\" name=\"l00362\"></a><span class=\"lineno\"> 362</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>() == 0 ? (dim == 3 ? 1 : 0) : (<a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>()-2)*(<a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>()-1)*(2*<a class=\"code hl_function\" href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">order</a>()-3)/6;</div>\n-<div class=\"line\"><a id=\"l00363\" name=\"l00363\"></a><span class=\"lineno\"> 363</span> }</div>\n-<div class=\"line\"><a id=\"l00364\" name=\"l00364\"></a><span class=\"lineno\"> 364</span> </div>\n-<div class=\"line\"><a id=\"l00365\" name=\"l00365\"></a><span class=\"lineno\"> 365</span> <span class=\"comment\">// When the order is given at run-time, the following numbers are pre-computed:</span></div>\n-<div class=\"line\"><a id=\"l00366\" name=\"l00366\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a39dcb5d78ac1216c75a75660e2d61849\"> 366</a></span> std::array<size_type,dim+1> <a class=\"code hl_variable\" href=\"a01671.html#a39dcb5d78ac1216c75a75660e2d61849\">dofsPerSimplex_</a>;</div>\n-<div class=\"line\"><a id=\"l00367\" name=\"l00367\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#abfa5632c391ed7160d081c63ab154377\"> 367</a></span> std::array<size_type,dim+1> <a class=\"code hl_variable\" href=\"a01671.html#abfa5632c391ed7160d081c63ab154377\">dofsPerCube_</a>;</div>\n-<div class=\"line\"><a id=\"l00368\" name=\"l00368\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#ade4d334b8ac70f9c18fc15a9eba04815\"> 368</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_variable\" href=\"a01671.html#ade4d334b8ac70f9c18fc15a9eba04815\">dofsPerPrism_</a>;</div>\n-<div class=\"line\"><a id=\"l00369\" name=\"l00369\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a9212ce0f83e8642244e10d3cd3d596c6\"> 369</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_variable\" href=\"a01671.html#a9212ce0f83e8642244e10d3cd3d596c6\">dofsPerPyramid_</a>;</div>\n-<div class=\"line\"><a id=\"l00370\" name=\"l00370\"></a><span class=\"lineno\"> 370</span> </div>\n-<div class=\"line\"><a id=\"l00371\" name=\"l00371\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a5664ce9110b445d622298dc5263f33b2\"> 371</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_variable\" href=\"a01671.html#a5664ce9110b445d622298dc5263f33b2\">vertexOffset_</a>;</div>\n-<div class=\"line\"><a id=\"l00372\" name=\"l00372\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a24780ed75bb6c40381f730e267f133f8\"> 372</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_variable\" href=\"a01671.html#a24780ed75bb6c40381f730e267f133f8\">edgeOffset_</a>;</div>\n-<div class=\"line\"><a id=\"l00373\" name=\"l00373\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#ae6c85768fc1d8aa23f94a2708d8d3ee6\"> 373</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_variable\" href=\"a01671.html#ae6c85768fc1d8aa23f94a2708d8d3ee6\">triangleOffset_</a>;</div>\n-<div class=\"line\"><a id=\"l00374\" name=\"l00374\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#aaa4552a25872774f6f07f4dd8336be69\"> 374</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_variable\" href=\"a01671.html#aaa4552a25872774f6f07f4dd8336be69\">quadrilateralOffset_</a>;</div>\n-<div class=\"line\"><a id=\"l00375\" name=\"l00375\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a6c7ee6cdf1c33779542802c064878f9d\"> 375</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_variable\" href=\"a01671.html#a6c7ee6cdf1c33779542802c064878f9d\">tetrahedronOffset_</a>;</div>\n-<div class=\"line\"><a id=\"l00376\" name=\"l00376\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a639dc115510426bbaf3f0431fc8f1748\"> 376</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_variable\" href=\"a01671.html#a639dc115510426bbaf3f0431fc8f1748\">pyramidOffset_</a>;</div>\n-<div class=\"line\"><a id=\"l00377\" name=\"l00377\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#a649ad327ee6564de6263f497962d344e\"> 377</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_variable\" href=\"a01671.html#a649ad327ee6564de6263f497962d344e\">prismOffset_</a>;</div>\n-<div class=\"line\"><a id=\"l00378\" name=\"l00378\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01671.html#aea5db4f517eaead23b62142891c0484a\"> 378</a></span> <a class=\"code hl_typedef\" href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">size_type</a> <a class=\"code hl_variable\" href=\"a01671.html#aea5db4f517eaead23b62142891c0484a\">hexahedronOffset_</a>;</div>\n-<div class=\"line\"><a id=\"l00379\" name=\"l00379\"></a><span class=\"lineno\"> 379</span> </div>\n-<div class=\"line\"><a id=\"l00380\" name=\"l00380\"></a><span class=\"lineno\"> 380</span>};</div>\n-<div class=\"line\"><a id=\"l00381\" name=\"l00381\"></a><span class=\"lineno\"> 381</span> </div>\n-<div class=\"line\"><a id=\"l00382\" name=\"l00382\"></a><span class=\"lineno\"> 382</span> </div>\n-<div class=\"line\"><a id=\"l00383\" name=\"l00383\"></a><span class=\"lineno\"> 383</span> </div>\n-<div class=\"line\"><a id=\"l00384\" name=\"l00384\"></a><span class=\"lineno\"> 384</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k, <span class=\"keyword\">typename</span> R></div>\n-<div class=\"line\"><a id=\"l00385\" name=\"l00385\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01667.html\"> 385</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01667.html\">LagrangeNode</a> :</div>\n-<div class=\"line\"><a id=\"l00386\" name=\"l00386\"></a><span class=\"lineno\"> 386</span> <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01711.html\">LeafBasisNode</a></div>\n-<div class=\"line\"><a id=\"l00387\" name=\"l00387\"></a><span class=\"lineno\"> 387</span>{</div>\n-<div class=\"line\"><a id=\"l00388\" name=\"l00388\"></a><span class=\"lineno\"> 388</span> <span class=\"comment\">// Stores LocalFiniteElement implementations with run-time order as a function of GeometryType</span></div>\n-<div class=\"line\"><a id=\"l00389\" name=\"l00389\"></a><span class=\"lineno\"> 389</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Domain, <span class=\"keyword\">typename</span> Range, <span class=\"keywordtype\">int</span> dim></div>\n-<div class=\"line\"><a id=\"l00390\" name=\"l00390\"></a><span class=\"lineno\"> 390</span> <span class=\"keyword\">class </span>LagrangeRunTimeLFECache</div>\n-<div class=\"line\"><a id=\"l00391\" name=\"l00391\"></a><span class=\"lineno\"> 391</span> {</div>\n-<div class=\"line\"><a id=\"l00392\" name=\"l00392\"></a><span class=\"lineno\"> 392</span> <span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00393\" name=\"l00393\"></a><span class=\"lineno\"> 393</span> <span class=\"keyword\">using </span>FiniteElementType = LagrangeLocalFiniteElement<EquidistantPointSet,dim,Domain,Range>;</div>\n-<div class=\"line\"><a id=\"l00394\" name=\"l00394\"></a><span class=\"lineno\"> 394</span> </div>\n-<div class=\"line\"><a id=\"l00395\" name=\"l00395\"></a><span class=\"lineno\"> 395</span> <span class=\"keyword\">const</span> FiniteElementType& get(GeometryType type)</div>\n-<div class=\"line\"><a id=\"l00396\" name=\"l00396\"></a><span class=\"lineno\"> 396</span> {</div>\n-<div class=\"line\"><a id=\"l00397\" name=\"l00397\"></a><span class=\"lineno\"> 397</span> <span class=\"keyword\">auto</span> i = data_.find(type);</div>\n-<div class=\"line\"><a id=\"l00398\" name=\"l00398\"></a><span class=\"lineno\"> 398</span> <span class=\"keywordflow\">if</span> (i==data_.end())</div>\n-<div class=\"line\"><a id=\"l00399\" name=\"l00399\"></a><span class=\"lineno\"> 399</span> i = data_.emplace(type,FiniteElementType(type,<a class=\"code hl_variable\" href=\"a01667.html#adad41ff7dc381b7c749945a992ea3dc8\">order_</a>)).first;</div>\n-<div class=\"line\"><a id=\"l00400\" name=\"l00400\"></a><span class=\"lineno\"> 400</span> <span class=\"keywordflow\">return</span> (*i).second;</div>\n-<div class=\"line\"><a id=\"l00401\" name=\"l00401\"></a><span class=\"lineno\"> 401</span> }</div>\n+<div class=\"line\"><a id=\"l00349\" name=\"l00349\"></a><span class=\"lineno\"> 349</span> <a class=\"code hl_typedef\" href=\"a01735.html#a419106855686e36864eea0100d8e618e\">SubPreBasis</a> subPreBasis_;</div>\n+<div class=\"line\"><a id=\"l00350\" name=\"l00350\"></a><span class=\"lineno\"> 350</span>};</div>\n+<div class=\"line\"><a id=\"l00351\" name=\"l00351\"></a><span class=\"lineno\"> 351</span> </div>\n+<div class=\"line\"><a id=\"l00352\" name=\"l00352\"></a><span class=\"lineno\"> 352</span> </div>\n+<div class=\"line\"><a id=\"l00353\" name=\"l00353\"></a><span class=\"lineno\"> 353</span> </div>\n+<div class=\"line\"><a id=\"l00354\" name=\"l00354\"></a><span class=\"lineno\"> 354</span><span class=\"keyword\">namespace </span>BasisFactory {</div>\n+<div class=\"line\"><a id=\"l00355\" name=\"l00355\"></a><span class=\"lineno\"> 355</span> </div>\n+<div class=\"line\"><a id=\"l00368\" name=\"l00368\"></a><span class=\"lineno\"> 368</span><span class=\"keyword\">template</span><std::<span class=\"keywordtype\">size_t</span> k, <span class=\"keyword\">class</span> ChildPreBasisFactory, <span class=\"keyword\">class</span> IndexMergingStrategy></div>\n+<div class=\"line\"><a id=\"l00369\" name=\"l00369\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#ga0d8eb549af76bc2563ab189e63668ee5\"> 369</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00213.html#gab84b622cf7be16d0373640b6f0478eb0\">power</a>(ChildPreBasisFactory&& childPreBasisFactory, <span class=\"keyword\">const</span> <a class=\"code hl_struct\" href=\"a01415.html\">IndexMergingStrategy</a>&)</div>\n+<div class=\"line\"><a id=\"l00370\" name=\"l00370\"></a><span class=\"lineno\"> 370</span>{</div>\n+<div class=\"line\"><a id=\"l00371\" name=\"l00371\"></a><span class=\"lineno\"> 371</span> <span class=\"keywordflow\">return</span> [childPreBasisFactory](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridView) {</div>\n+<div class=\"line\"><a id=\"l00372\" name=\"l00372\"></a><span class=\"lineno\"> 372</span> <span class=\"keyword\">auto</span> childPreBasis = childPreBasisFactory(gridView);</div>\n+<div class=\"line\"><a id=\"l00373\" name=\"l00373\"></a><span class=\"lineno\"> 373</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01735.html\">PowerPreBasis<IndexMergingStrategy, decltype(childPreBasis), k></a>(std::move(childPreBasis));</div>\n+<div class=\"line\"><a id=\"l00374\" name=\"l00374\"></a><span class=\"lineno\"> 374</span> };</div>\n+<div class=\"line\"><a id=\"l00375\" name=\"l00375\"></a><span class=\"lineno\"> 375</span>}</div>\n+<div class=\"line\"><a id=\"l00376\" name=\"l00376\"></a><span class=\"lineno\"> 376</span> </div>\n+<div class=\"line\"><a id=\"l00387\" name=\"l00387\"></a><span class=\"lineno\"> 387</span><span class=\"keyword\">template</span><std::<span class=\"keywordtype\">size_t</span> k, <span class=\"keyword\">class</span> ChildPreBasisFactory></div>\n+<div class=\"line\"><a id=\"l00388\" name=\"l00388\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#gab84b622cf7be16d0373640b6f0478eb0\"> 388</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00213.html#gab84b622cf7be16d0373640b6f0478eb0\">power</a>(ChildPreBasisFactory&& childPreBasisFactory)</div>\n+<div class=\"line\"><a id=\"l00389\" name=\"l00389\"></a><span class=\"lineno\"> 389</span>{</div>\n+<div class=\"line\"><a id=\"l00390\" name=\"l00390\"></a><span class=\"lineno\"> 390</span> <span class=\"keywordflow\">return</span> [childPreBasisFactory](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridView) {</div>\n+<div class=\"line\"><a id=\"l00391\" name=\"l00391\"></a><span class=\"lineno\"> 391</span> <span class=\"keyword\">auto</span> childPreBasis = childPreBasisFactory(gridView);</div>\n+<div class=\"line\"><a id=\"l00392\" name=\"l00392\"></a><span class=\"lineno\"> 392</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01735.html\">PowerPreBasis<BlockedInterleaved, decltype(childPreBasis), k></a>(std::move(childPreBasis));</div>\n+<div class=\"line\"><a id=\"l00393\" name=\"l00393\"></a><span class=\"lineno\"> 393</span> };</div>\n+<div class=\"line\"><a id=\"l00394\" name=\"l00394\"></a><span class=\"lineno\"> 394</span>}</div>\n+<div class=\"line\"><a id=\"l00395\" name=\"l00395\"></a><span class=\"lineno\"> 395</span> </div>\n+<div class=\"line\"><a id=\"l00396\" name=\"l00396\"></a><span class=\"lineno\"> 396</span>} <span class=\"comment\">// end namespace BasisFactory</span></div>\n+<div class=\"line\"><a id=\"l00397\" name=\"l00397\"></a><span class=\"lineno\"> 397</span> </div>\n+<div class=\"line\"><a id=\"l00398\" name=\"l00398\"></a><span class=\"lineno\"> 398</span><span class=\"comment\">// Backward compatibility</span></div>\n+<div class=\"line\"><a id=\"l00399\" name=\"l00399\"></a><span class=\"lineno\"> 399</span><span class=\"keyword\">namespace </span>BasisBuilder {</div>\n+<div class=\"line\"><a id=\"l00400\" name=\"l00400\"></a><span class=\"lineno\"> 400</span> </div>\n+<div class=\"line\"><a id=\"l00401\" name=\"l00401\"></a><span class=\"lineno\"> 401</span> <span class=\"keyword\">using namespace </span>BasisFactory;</div>\n <div class=\"line\"><a id=\"l00402\" name=\"l00402\"></a><span class=\"lineno\"> 402</span> </div>\n-<div class=\"line\"><a id=\"l00403\" name=\"l00403\"></a><span class=\"lineno\"> 403</span> std::map<GeometryType, FiniteElementType> data_;</div>\n-<div class=\"line\"><a id=\"l00404\" name=\"l00404\"></a><span class=\"lineno\"> 404</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_variable\" href=\"a01667.html#adad41ff7dc381b7c749945a992ea3dc8\">order_</a>;</div>\n-<div class=\"line\"><a id=\"l00405\" name=\"l00405\"></a><span class=\"lineno\"> 405</span> };</div>\n-<div class=\"line\"><a id=\"l00406\" name=\"l00406\"></a><span class=\"lineno\"> 406</span> </div>\n-<div class=\"line\"><a id=\"l00407\" name=\"l00407\"></a><span class=\"lineno\"> 407</span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">int</span> dim = GV::dimension;</div>\n-<div class=\"line\"><a id=\"l00408\" name=\"l00408\"></a><span class=\"lineno\"> 408</span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span> useDynamicOrder = (k<0);</div>\n+<div class=\"line\"><a id=\"l00403\" name=\"l00403\"></a><span class=\"lineno\"> 403</span>}</div>\n+<div class=\"line\"><a id=\"l00404\" name=\"l00404\"></a><span class=\"lineno\"> 404</span> </div>\n+<div class=\"line\"><a id=\"l00405\" name=\"l00405\"></a><span class=\"lineno\"> 405</span> </div>\n+<div class=\"line\"><a id=\"l00406\" name=\"l00406\"></a><span class=\"lineno\"> 406</span>} <span class=\"comment\">// end namespace Functions</span></div>\n+<div class=\"line\"><a id=\"l00407\" name=\"l00407\"></a><span class=\"lineno\"> 407</span>} <span class=\"comment\">// end namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00408\" name=\"l00408\"></a><span class=\"lineno\"> 408</span> </div>\n <div class=\"line\"><a id=\"l00409\" name=\"l00409\"></a><span class=\"lineno\"> 409</span> </div>\n-<div class=\"line\"><a id=\"l00410\" name=\"l00410\"></a><span class=\"lineno\"> 410</span> <span class=\"keyword\">using </span>FiniteElementCache = <span class=\"keyword\">typename</span> std::conditional<(useDynamicOrder),</div>\n-<div class=\"line\"><a id=\"l00411\" name=\"l00411\"></a><span class=\"lineno\"> 411</span> LagrangeRunTimeLFECache<typename GV::ctype, R, dim>,</div>\n-<div class=\"line\"><a id=\"l00412\" name=\"l00412\"></a><span class=\"lineno\"> 412</span> PQkLocalFiniteElementCache<typename GV::ctype, R, dim, k></div>\n-<div class=\"line\"><a id=\"l00413\" name=\"l00413\"></a><span class=\"lineno\"> 413</span> >::type;</div>\n-<div class=\"line\"><a id=\"l00414\" name=\"l00414\"></a><span class=\"lineno\"> 414</span> </div>\n-<div class=\"line\"><a id=\"l00415\" name=\"l00415\"></a><span class=\"lineno\"> 415</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00416\" name=\"l00416\"></a><span class=\"lineno\"> 416</span> </div>\n-<div class=\"line\"><a id=\"l00417\" name=\"l00417\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01667.html#aebfb5ce0d89579136563b0bc00fd8cad\"> 417</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01667.html#aebfb5ce0d89579136563b0bc00fd8cad\">size_type</a> = std::size_t;</div>\n-<div class=\"line\"><a id=\"l00418\" name=\"l00418\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01667.html#acfd5593b366b82297333354ce3bfc963\"> 418</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01667.html#acfd5593b366b82297333354ce3bfc963\">Element</a> = <span class=\"keyword\">typename</span> GV::template Codim<0>::Entity;</div>\n-<div class=\"line\"><a id=\"l00419\" name=\"l00419\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01667.html#a9fa83934c852af0f2377de6c23d0a82d\"> 419</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01667.html#a9fa83934c852af0f2377de6c23d0a82d\">FiniteElement</a> = <span class=\"keyword\">typename</span> FiniteElementCache::FiniteElementType;</div>\n-<div class=\"line\"><a id=\"l00420\" name=\"l00420\"></a><span class=\"lineno\"> 420</span> </div>\n-<div class=\"line\"><a id=\"l00422\" name=\"l00422\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01667.html#aee40cc92b0346bf21a597e75463112a8\"> 422</a></span> <a class=\"code hl_function\" href=\"a01667.html#aee40cc92b0346bf21a597e75463112a8\">LagrangeNode</a>() :</div>\n-<div class=\"line\"><a id=\"l00423\" name=\"l00423\"></a><span class=\"lineno\"> 423</span> <a class=\"code hl_variable\" href=\"a01667.html#ad4bf919a73a49e15162fb528d5572e2b\">finiteElement_</a>(nullptr),</div>\n-<div class=\"line\"><a id=\"l00424\" name=\"l00424\"></a><span class=\"lineno\"> 424</span> <a class=\"code hl_variable\" href=\"a01667.html#a909fcfefa3945c7677f0be670e5f7aaf\">element_</a>(nullptr)</div>\n-<div class=\"line\"><a id=\"l00425\" name=\"l00425\"></a><span class=\"lineno\"> 425</span> {}</div>\n-<div class=\"line\"><a id=\"l00426\" name=\"l00426\"></a><span class=\"lineno\"> 426</span> </div>\n-<div class=\"line\"><a id=\"l00428\" name=\"l00428\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01667.html#a006942ce9632177e69663989b739b1d2\"> 428</a></span> <a class=\"code hl_function\" href=\"a01667.html#a006942ce9632177e69663989b739b1d2\">LagrangeNode</a>(<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_function\" href=\"a01667.html#a875dbcd906a847c0fd2c52da6f8de795\">order</a>) :</div>\n-<div class=\"line\"><a id=\"l00429\" name=\"l00429\"></a><span class=\"lineno\"> 429</span> <a class=\"code hl_variable\" href=\"a01667.html#adad41ff7dc381b7c749945a992ea3dc8\">order_</a>(<a class=\"code hl_function\" href=\"a01667.html#a875dbcd906a847c0fd2c52da6f8de795\">order</a>),</div>\n-<div class=\"line\"><a id=\"l00430\" name=\"l00430\"></a><span class=\"lineno\"> 430</span> <a class=\"code hl_variable\" href=\"a01667.html#ad4bf919a73a49e15162fb528d5572e2b\">finiteElement_</a>(nullptr),</div>\n-<div class=\"line\"><a id=\"l00431\" name=\"l00431\"></a><span class=\"lineno\"> 431</span> <a class=\"code hl_variable\" href=\"a01667.html#a909fcfefa3945c7677f0be670e5f7aaf\">element_</a>(nullptr)</div>\n-<div class=\"line\"><a id=\"l00432\" name=\"l00432\"></a><span class=\"lineno\"> 432</span> {</div>\n-<div class=\"line\"><a id=\"l00433\" name=\"l00433\"></a><span class=\"lineno\"> 433</span> <span class=\"comment\">// Only the cache for the run-time-order case (i.e., k<0), has the 'order_' member</span></div>\n-<div class=\"line\"><a id=\"l00434\" name=\"l00434\"></a><span class=\"lineno\"> 434</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> (useDynamicOrder)</div>\n-<div class=\"line\"><a id=\"l00435\" name=\"l00435\"></a><span class=\"lineno\"> 435</span> <a class=\"code hl_variable\" href=\"a01667.html#a9d77e8510356a9c3a37c2ed83548b68f\">cache_</a>.order_ = <a class=\"code hl_function\" href=\"a01667.html#a875dbcd906a847c0fd2c52da6f8de795\">order</a>;</div>\n-<div class=\"line\"><a id=\"l00436\" name=\"l00436\"></a><span class=\"lineno\"> 436</span> }</div>\n-<div class=\"line\"><a id=\"l00437\" name=\"l00437\"></a><span class=\"lineno\"> 437</span> </div>\n-<div class=\"line\"><a id=\"l00439\" name=\"l00439\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01667.html#a9d58cded4e8fb6665c22c758e55f4914\"> 439</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01667.html#acfd5593b366b82297333354ce3bfc963\">Element</a>& <a class=\"code hl_function\" href=\"a01667.html#a9d58cded4e8fb6665c22c758e55f4914\">element</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00440\" name=\"l00440\"></a><span class=\"lineno\"> 440</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00441\" name=\"l00441\"></a><span class=\"lineno\"> 441</span> <span class=\"keywordflow\">return</span> *<a class=\"code hl_variable\" href=\"a01667.html#a909fcfefa3945c7677f0be670e5f7aaf\">element_</a>;</div>\n-<div class=\"line\"><a id=\"l00442\" name=\"l00442\"></a><span class=\"lineno\"> 442</span> }</div>\n-<div class=\"line\"><a id=\"l00443\" name=\"l00443\"></a><span class=\"lineno\"> 443</span> </div>\n-<div class=\"line\"><a id=\"l00448\" name=\"l00448\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01667.html#a8d23b1a79271358fc3326ee11df5ec4b\"> 448</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01667.html#a9fa83934c852af0f2377de6c23d0a82d\">FiniteElement</a>& <a class=\"code hl_function\" href=\"a01667.html#a8d23b1a79271358fc3326ee11df5ec4b\">finiteElement</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00449\" name=\"l00449\"></a><span class=\"lineno\"> 449</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00450\" name=\"l00450\"></a><span class=\"lineno\"> 450</span> <span class=\"keywordflow\">return</span> *<a class=\"code hl_variable\" href=\"a01667.html#ad4bf919a73a49e15162fb528d5572e2b\">finiteElement_</a>;</div>\n-<div class=\"line\"><a id=\"l00451\" name=\"l00451\"></a><span class=\"lineno\"> 451</span> }</div>\n-<div class=\"line\"><a id=\"l00452\" name=\"l00452\"></a><span class=\"lineno\"> 452</span> </div>\n-<div class=\"line\"><a id=\"l00454\" name=\"l00454\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01667.html#aaeeb88d381c09b9df01e8c5db0c2ee4a\"> 454</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01667.html#aaeeb88d381c09b9df01e8c5db0c2ee4a\">bind</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01667.html#acfd5593b366b82297333354ce3bfc963\">Element</a>& e)</div>\n-<div class=\"line\"><a id=\"l00455\" name=\"l00455\"></a><span class=\"lineno\"> 455</span> {</div>\n-<div class=\"line\"><a id=\"l00456\" name=\"l00456\"></a><span class=\"lineno\"> 456</span> <a class=\"code hl_variable\" href=\"a01667.html#a909fcfefa3945c7677f0be670e5f7aaf\">element_</a> = &e;</div>\n-<div class=\"line\"><a id=\"l00457\" name=\"l00457\"></a><span class=\"lineno\"> 457</span> <a class=\"code hl_variable\" href=\"a01667.html#ad4bf919a73a49e15162fb528d5572e2b\">finiteElement_</a> = &(<a class=\"code hl_variable\" href=\"a01667.html#a9d77e8510356a9c3a37c2ed83548b68f\">cache_</a>.get(<a class=\"code hl_variable\" href=\"a01667.html#a909fcfefa3945c7677f0be670e5f7aaf\">element_</a>->type()));</div>\n-<div class=\"line\"><a id=\"l00458\" name=\"l00458\"></a><span class=\"lineno\"> 458</span> this-><a class=\"code hl_function\" href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\">setSize</a>(<a class=\"code hl_variable\" href=\"a01667.html#ad4bf919a73a49e15162fb528d5572e2b\">finiteElement_</a>->size());</div>\n-<div class=\"line\"><a id=\"l00459\" name=\"l00459\"></a><span class=\"lineno\"> 459</span> }</div>\n-<div class=\"line\"><a id=\"l00460\" name=\"l00460\"></a><span class=\"lineno\"> 460</span> </div>\n-<div class=\"line\"><a id=\"l00461\" name=\"l00461\"></a><span class=\"lineno\"> 461</span><span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00462\" name=\"l00462\"></a><span class=\"lineno\"> 462</span> </div>\n-<div class=\"line\"><a id=\"l00463\" name=\"l00463\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01667.html#a875dbcd906a847c0fd2c52da6f8de795\"> 463</a></span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_function\" href=\"a01667.html#a875dbcd906a847c0fd2c52da6f8de795\">order</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00464\" name=\"l00464\"></a><span class=\"lineno\"> 464</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00465\" name=\"l00465\"></a><span class=\"lineno\"> 465</span> <span class=\"keywordflow\">return</span> (useDynamicOrder) ? <a class=\"code hl_variable\" href=\"a01667.html#adad41ff7dc381b7c749945a992ea3dc8\">order_</a> : k;</div>\n-<div class=\"line\"><a id=\"l00466\" name=\"l00466\"></a><span class=\"lineno\"> 466</span> }</div>\n-<div class=\"line\"><a id=\"l00467\" name=\"l00467\"></a><span class=\"lineno\"> 467</span> </div>\n-<div class=\"line\"><a id=\"l00468\" name=\"l00468\"></a><span class=\"lineno\"> 468</span> <span class=\"comment\">// Run-time order, only valid if k<0</span></div>\n-<div class=\"line\"><a id=\"l00469\" name=\"l00469\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01667.html#adad41ff7dc381b7c749945a992ea3dc8\"> 469</a></span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_variable\" href=\"a01667.html#adad41ff7dc381b7c749945a992ea3dc8\">order_</a>;</div>\n-<div class=\"line\"><a id=\"l00470\" name=\"l00470\"></a><span class=\"lineno\"> 470</span> </div>\n-<div class=\"line\"><a id=\"l00471\" name=\"l00471\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01667.html#a9d77e8510356a9c3a37c2ed83548b68f\"> 471</a></span> FiniteElementCache <a class=\"code hl_variable\" href=\"a01667.html#a9d77e8510356a9c3a37c2ed83548b68f\">cache_</a>;</div>\n-<div class=\"line\"><a id=\"l00472\" name=\"l00472\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01667.html#ad4bf919a73a49e15162fb528d5572e2b\"> 472</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01667.html#a9fa83934c852af0f2377de6c23d0a82d\">FiniteElement</a>* <a class=\"code hl_variable\" href=\"a01667.html#ad4bf919a73a49e15162fb528d5572e2b\">finiteElement_</a>;</div>\n-<div class=\"line\"><a id=\"l00473\" name=\"l00473\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01667.html#a909fcfefa3945c7677f0be670e5f7aaf\"> 473</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01667.html#acfd5593b366b82297333354ce3bfc963\">Element</a>* <a class=\"code hl_variable\" href=\"a01667.html#a909fcfefa3945c7677f0be670e5f7aaf\">element_</a>;</div>\n-<div class=\"line\"><a id=\"l00474\" name=\"l00474\"></a><span class=\"lineno\"> 474</span>};</div>\n-<div class=\"line\"><a id=\"l00475\" name=\"l00475\"></a><span class=\"lineno\"> 475</span> </div>\n-<div class=\"line\"><a id=\"l00476\" name=\"l00476\"></a><span class=\"lineno\"> 476</span> </div>\n-<div class=\"line\"><a id=\"l00477\" name=\"l00477\"></a><span class=\"lineno\"> 477</span> </div>\n-<div class=\"line\"><a id=\"l00478\" name=\"l00478\"></a><span class=\"lineno\"> 478</span><span class=\"keyword\">namespace </span>BasisFactory {</div>\n-<div class=\"line\"><a id=\"l00479\" name=\"l00479\"></a><span class=\"lineno\"> 479</span> </div>\n-<div class=\"line\"><a id=\"l00488\" name=\"l00488\"></a><span class=\"lineno\"> 488</span><span class=\"keyword\">template</span><std::<span class=\"keywordtype\">size_t</span> k, <span class=\"keyword\">typename</span> R=<span class=\"keywordtype\">double</span>></div>\n-<div class=\"line\"><a id=\"l00489\" name=\"l00489\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#ga5106c08bf6dd8eaca7d06075d581d760\"> 489</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00213.html#ga5106c08bf6dd8eaca7d06075d581d760\">lagrange</a>()</div>\n-<div class=\"line\"><a id=\"l00490\" name=\"l00490\"></a><span class=\"lineno\"> 490</span>{</div>\n-<div class=\"line\"><a id=\"l00491\" name=\"l00491\"></a><span class=\"lineno\"> 491</span> <span class=\"keywordflow\">return</span> [](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridView) {</div>\n-<div class=\"line\"><a id=\"l00492\" name=\"l00492\"></a><span class=\"lineno\"> 492</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01671.html\">LagrangePreBasis</a><std::decay_t<<span class=\"keyword\">decltype</span>(gridView)>, k, R>(gridView);</div>\n-<div class=\"line\"><a id=\"l00493\" name=\"l00493\"></a><span class=\"lineno\"> 493</span> };</div>\n-<div class=\"line\"><a id=\"l00494\" name=\"l00494\"></a><span class=\"lineno\"> 494</span>}</div>\n-<div class=\"line\"><a id=\"l00495\" name=\"l00495\"></a><span class=\"lineno\"> 495</span> </div>\n-<div class=\"line\"><a id=\"l00503\" name=\"l00503\"></a><span class=\"lineno\"> 503</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> R=<span class=\"keywordtype\">double</span>></div>\n-<div class=\"line\"><a id=\"l00504\" name=\"l00504\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#ga177b4e1b21990d7fc9350ac0caeb3c6c\"> 504</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00213.html#ga5106c08bf6dd8eaca7d06075d581d760\">lagrange</a>(<span class=\"keywordtype\">int</span> order)</div>\n-<div class=\"line\"><a id=\"l00505\" name=\"l00505\"></a><span class=\"lineno\"> 505</span>{</div>\n-<div class=\"line\"><a id=\"l00506\" name=\"l00506\"></a><span class=\"lineno\"> 506</span> <span class=\"keywordflow\">return</span> [=](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridView) {</div>\n-<div class=\"line\"><a id=\"l00507\" name=\"l00507\"></a><span class=\"lineno\"> 507</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01671.html\">LagrangePreBasis</a><std::decay_t<<span class=\"keyword\">decltype</span>(gridView)>, -1, R>(gridView, order);</div>\n-<div class=\"line\"><a id=\"l00508\" name=\"l00508\"></a><span class=\"lineno\"> 508</span> };</div>\n-<div class=\"line\"><a id=\"l00509\" name=\"l00509\"></a><span class=\"lineno\"> 509</span>}</div>\n-<div class=\"line\"><a id=\"l00510\" name=\"l00510\"></a><span class=\"lineno\"> 510</span> </div>\n-<div class=\"line\"><a id=\"l00511\" name=\"l00511\"></a><span class=\"lineno\"> 511</span>} <span class=\"comment\">// end namespace BasisFactory</span></div>\n-<div class=\"line\"><a id=\"l00512\" name=\"l00512\"></a><span class=\"lineno\"> 512</span> </div>\n-<div class=\"line\"><a id=\"l00513\" name=\"l00513\"></a><span class=\"lineno\"> 513</span> </div>\n-<div class=\"line\"><a id=\"l00514\" name=\"l00514\"></a><span class=\"lineno\"> 514</span> </div>\n-<div class=\"line\"><a id=\"l00538\" name=\"l00538\"></a><span class=\"lineno\"> 538</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k=-1, <span class=\"keyword\">typename</span> R=<span class=\"keywordtype\">double</span>></div>\n-<div class=\"line\"><a id=\"l00539\" name=\"l00539\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#ga566d155fed1f25513c4d927769722fcc\"> 539</a></span><span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01555.html\">LagrangeBasis</a> = <a class=\"code hl_class\" href=\"a01555.html\">DefaultGlobalBasis<LagrangePreBasis<GV, k, R></a> >;</div>\n-<div class=\"line\"><a id=\"l00540\" name=\"l00540\"></a><span class=\"lineno\"> 540</span> </div>\n-<div class=\"line\"><a id=\"l00541\" name=\"l00541\"></a><span class=\"lineno\"> 541</span> </div>\n-<div class=\"line\"><a id=\"l00542\" name=\"l00542\"></a><span class=\"lineno\"> 542</span> </div>\n-<div class=\"line\"><a id=\"l00543\" name=\"l00543\"></a><span class=\"lineno\"> 543</span> </div>\n-<div class=\"line\"><a id=\"l00544\" name=\"l00544\"></a><span class=\"lineno\"> 544</span> </div>\n-<div class=\"line\"><a id=\"l00545\" name=\"l00545\"></a><span class=\"lineno\"> 545</span>} <span class=\"comment\">// end namespace Functions</span></div>\n-<div class=\"line\"><a id=\"l00546\" name=\"l00546\"></a><span class=\"lineno\"> 546</span>} <span class=\"comment\">// end namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00547\" name=\"l00547\"></a><span class=\"lineno\"> 547</span> </div>\n-<div class=\"line\"><a id=\"l00548\" name=\"l00548\"></a><span class=\"lineno\"> 548</span> </div>\n-<div class=\"line\"><a id=\"l00549\" name=\"l00549\"></a><span class=\"lineno\"> 549</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH</span></div>\n-<div class=\"ttc\" id=\"aa00119_html\"><div class=\"ttname\"><a href=\"a00119.html\">defaultglobalbasis.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00191_html\"><div class=\"ttname\"><a href=\"a00191.html\">nodes.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00213_html_ga0d8eb549af76bc2563ab189e63668ee5\"><div class=\"ttname\"><a href=\"a00213.html#ga0d8eb549af76bc2563ab189e63668ee5\">Dune::Functions::BasisFactory::power</a></div><div class=\"ttdeci\">auto power(ChildPreBasisFactory &&childPreBasisFactory, const IndexMergingStrategy &)</div><div class=\"ttdoc\">Create a pre-basis factory that can build a PowerPreBasis.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:369</div></div>\n-<div class=\"ttc\" id=\"aa00213_html_ga5106c08bf6dd8eaca7d06075d581d760\"><div class=\"ttname\"><a href=\"a00213.html#ga5106c08bf6dd8eaca7d06075d581d760\">Dune::Functions::BasisFactory::lagrange</a></div><div class=\"ttdeci\">auto lagrange()</div><div class=\"ttdoc\">Create a pre-basis factory that can create a Lagrange pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:489</div></div>\n+<div class=\"line\"><a id=\"l00410\" name=\"l00410\"></a><span class=\"lineno\"> 410</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH</span></div>\n+<div class=\"ttc\" id=\"aa00029_html\"><div class=\"ttname\"><a href=\"a00029.html\">type_traits.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00041_html\"><div class=\"ttname\"><a href=\"a00041.html\">utility.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00152_html\"><div class=\"ttname\"><a href=\"a00152.html\">defaultglobalbasis.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00158_html\"><div class=\"ttname\"><a href=\"a00158.html\">basistags.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00179_html\"><div class=\"ttname\"><a href=\"a00179.html\">nodes.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00213_html_gab84b622cf7be16d0373640b6f0478eb0\"><div class=\"ttname\"><a href=\"a00213.html#gab84b622cf7be16d0373640b6f0478eb0\">Dune::Functions::BasisFactory::power</a></div><div class=\"ttdeci\">auto power(ChildPreBasisFactory &&childPreBasisFactory)</div><div class=\"ttdoc\">Create a factory builder that can build a PowerPreBasis.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:388</div></div>\n+<div class=\"ttc\" id=\"aa00215_html_ga673247dd74bcdd9e5acfc7735faf8a5b\"><div class=\"ttname\"><a href=\"a00215.html#ga673247dd74bcdd9e5acfc7735faf8a5b\">Dune::Functions::enableIfConstructible</a></div><div class=\"ttdeci\">typename std::enable_if< std::is_constructible< T, Args... >::value, int >::type enableIfConstructible</div><div class=\"ttdoc\">Helper to constrain forwarding constructors.</div><div class=\"ttdef\"><b>Definition:</b> type_traits.hh:26</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa01555_html\"><div class=\"ttname\"><a href=\"a01555.html\">Dune::Functions::DefaultGlobalBasis</a></div><div class=\"ttdoc\">Global basis for given pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:46</div></div>\n-<div class=\"ttc\" id=\"aa01667_html\"><div class=\"ttname\"><a href=\"a01667.html\">Dune::Functions::LagrangeNode</a></div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:387</div></div>\n-<div class=\"ttc\" id=\"aa01667_html_a006942ce9632177e69663989b739b1d2\"><div class=\"ttname\"><a href=\"a01667.html#a006942ce9632177e69663989b739b1d2\">Dune::Functions::LagrangeNode::LagrangeNode</a></div><div class=\"ttdeci\">LagrangeNode(unsigned int order)</div><div class=\"ttdoc\">Constructor with a run-time order.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:428</div></div>\n-<div class=\"ttc\" id=\"aa01667_html_a875dbcd906a847c0fd2c52da6f8de795\"><div class=\"ttname\"><a href=\"a01667.html#a875dbcd906a847c0fd2c52da6f8de795\">Dune::Functions::LagrangeNode::order</a></div><div class=\"ttdeci\">unsigned int order() const</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:463</div></div>\n-<div class=\"ttc\" id=\"aa01667_html_a8d23b1a79271358fc3326ee11df5ec4b\"><div class=\"ttname\"><a href=\"a01667.html#a8d23b1a79271358fc3326ee11df5ec4b\">Dune::Functions::LagrangeNode::finiteElement</a></div><div class=\"ttdeci\">const FiniteElement & finiteElement() const</div><div class=\"ttdoc\">Return the LocalFiniteElement for the element we are bound to.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:448</div></div>\n-<div class=\"ttc\" id=\"aa01667_html_a909fcfefa3945c7677f0be670e5f7aaf\"><div class=\"ttname\"><a href=\"a01667.html#a909fcfefa3945c7677f0be670e5f7aaf\">Dune::Functions::LagrangeNode::element_</a></div><div class=\"ttdeci\">const Element * element_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:473</div></div>\n-<div class=\"ttc\" id=\"aa01667_html_a9d58cded4e8fb6665c22c758e55f4914\"><div class=\"ttname\"><a href=\"a01667.html#a9d58cded4e8fb6665c22c758e55f4914\">Dune::Functions::LagrangeNode::element</a></div><div class=\"ttdeci\">const Element & element() const</div><div class=\"ttdoc\">Return current element, throw if unbound.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:439</div></div>\n-<div class=\"ttc\" id=\"aa01667_html_a9d77e8510356a9c3a37c2ed83548b68f\"><div class=\"ttname\"><a href=\"a01667.html#a9d77e8510356a9c3a37c2ed83548b68f\">Dune::Functions::LagrangeNode::cache_</a></div><div class=\"ttdeci\">FiniteElementCache cache_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:471</div></div>\n-<div class=\"ttc\" id=\"aa01667_html_a9fa83934c852af0f2377de6c23d0a82d\"><div class=\"ttname\"><a href=\"a01667.html#a9fa83934c852af0f2377de6c23d0a82d\">Dune::Functions::LagrangeNode::FiniteElement</a></div><div class=\"ttdeci\">typename FiniteElementCache::FiniteElementType FiniteElement</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:419</div></div>\n-<div class=\"ttc\" id=\"aa01667_html_aaeeb88d381c09b9df01e8c5db0c2ee4a\"><div class=\"ttname\"><a href=\"a01667.html#aaeeb88d381c09b9df01e8c5db0c2ee4a\">Dune::Functions::LagrangeNode::bind</a></div><div class=\"ttdeci\">void bind(const Element &e)</div><div class=\"ttdoc\">Bind to element.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:454</div></div>\n-<div class=\"ttc\" id=\"aa01667_html_acfd5593b366b82297333354ce3bfc963\"><div class=\"ttname\"><a href=\"a01667.html#acfd5593b366b82297333354ce3bfc963\">Dune::Functions::LagrangeNode::Element</a></div><div class=\"ttdeci\">typename GV::template Codim< 0 >::Entity Element</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:418</div></div>\n-<div class=\"ttc\" id=\"aa01667_html_ad4bf919a73a49e15162fb528d5572e2b\"><div class=\"ttname\"><a href=\"a01667.html#ad4bf919a73a49e15162fb528d5572e2b\">Dune::Functions::LagrangeNode::finiteElement_</a></div><div class=\"ttdeci\">const FiniteElement * finiteElement_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:472</div></div>\n-<div class=\"ttc\" id=\"aa01667_html_adad41ff7dc381b7c749945a992ea3dc8\"><div class=\"ttname\"><a href=\"a01667.html#adad41ff7dc381b7c749945a992ea3dc8\">Dune::Functions::LagrangeNode::order_</a></div><div class=\"ttdeci\">unsigned int order_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:469</div></div>\n-<div class=\"ttc\" id=\"aa01667_html_aebfb5ce0d89579136563b0bc00fd8cad\"><div class=\"ttname\"><a href=\"a01667.html#aebfb5ce0d89579136563b0bc00fd8cad\">Dune::Functions::LagrangeNode::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:417</div></div>\n-<div class=\"ttc\" id=\"aa01667_html_aee40cc92b0346bf21a597e75463112a8\"><div class=\"ttname\"><a href=\"a01667.html#aee40cc92b0346bf21a597e75463112a8\">Dune::Functions::LagrangeNode::LagrangeNode</a></div><div class=\"ttdeci\">LagrangeNode()</div><div class=\"ttdoc\">Constructor without order (uses the compile-time value)</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:422</div></div>\n-<div class=\"ttc\" id=\"aa01671_html\"><div class=\"ttname\"><a href=\"a01671.html\">Dune::Functions::LagrangePreBasis</a></div><div class=\"ttdoc\">A pre-basis for a PQ-lagrange bases with given order.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:55</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_a005c07b60bc225e41f6fbeee53ab20c2\"><div class=\"ttname\"><a href=\"a01671.html#a005c07b60bc225e41f6fbeee53ab20c2\">Dune::Functions::LagrangePreBasis::dofsPerPrism</a></div><div class=\"ttdeci\">size_type dofsPerPrism() const</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:333</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_a015986cee132f7ebd91ad8f3845a84be\"><div class=\"ttname\"><a href=\"a01671.html#a015986cee132f7ebd91ad8f3845a84be\">Dune::Functions::LagrangePreBasis::computeDofsPerCube</a></div><div class=\"ttdeci\">size_type computeDofsPerCube(std::size_t cubeDim) const</div><div class=\"ttdoc\">Number of degrees of freedom assigned to a cube (without the ones assigned to its faces!...</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:350</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_a01edf36372c30d045823bb5a330526e6\"><div class=\"ttname\"><a href=\"a01671.html#a01edf36372c30d045823bb5a330526e6\">Dune::Functions::LagrangePreBasis::computeDofsPerSimplex</a></div><div class=\"ttdeci\">size_type computeDofsPerSimplex(std::size_t simplexDim) const</div><div class=\"ttdoc\">Number of degrees of freedom assigned to a simplex (without the ones assigned to its faces!...</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:344</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_a04abff1d4b5ac732d83019938a019d2a\"><div class=\"ttname\"><a href=\"a01671.html#a04abff1d4b5ac732d83019938a019d2a\">Dune::Functions::LagrangePreBasis::maxMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type maxMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:70</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_a0c0e8ce0766d2a59986cb5daebe86132\"><div class=\"ttname\"><a href=\"a01671.html#a0c0e8ce0766d2a59986cb5daebe86132\">Dune::Functions::LagrangePreBasis::computeDofsPerPrism</a></div><div class=\"ttdeci\">size_type computeDofsPerPrism() const</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:355</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_a24780ed75bb6c40381f730e267f133f8\"><div class=\"ttname\"><a href=\"a01671.html#a24780ed75bb6c40381f730e267f133f8\">Dune::Functions::LagrangePreBasis::edgeOffset_</a></div><div class=\"ttdeci\">size_type edgeOffset_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:372</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_a39dcb5d78ac1216c75a75660e2d61849\"><div class=\"ttname\"><a href=\"a01671.html#a39dcb5d78ac1216c75a75660e2d61849\">Dune::Functions::LagrangePreBasis::dofsPerSimplex_</a></div><div class=\"ttdeci\">std::array< size_type, dim+1 > dofsPerSimplex_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:366</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_a45c031d3793e53e9413b86d49bffa5b0\"><div class=\"ttname\"><a href=\"a01671.html#a45c031d3793e53e9413b86d49bffa5b0\">Dune::Functions::LagrangePreBasis::indices</a></div><div class=\"ttdeci\">It indices(const Node &node, It it) const</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:192</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_a5664ce9110b445d622298dc5263f33b2\"><div class=\"ttname\"><a href=\"a01671.html#a5664ce9110b445d622298dc5263f33b2\">Dune::Functions::LagrangePreBasis::vertexOffset_</a></div><div class=\"ttdeci\">size_type vertexOffset_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:371</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_a5a34336b9868148ddade4d6b5fd044cf\"><div class=\"ttname\"><a href=\"a01671.html#a5a34336b9868148ddade4d6b5fd044cf\">Dune::Functions::LagrangePreBasis::dofsPerSimplex</a></div><div class=\"ttdeci\">size_type dofsPerSimplex(std::size_t simplexDim) const</div><div class=\"ttdoc\">Number of degrees of freedom assigned to a simplex (without the ones assigned to its faces!...</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:322</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_a62ff21d04ec74a6f369d6ba2cab1155a\"><div class=\"ttname\"><a href=\"a01671.html#a62ff21d04ec74a6f369d6ba2cab1155a\">Dune::Functions::LagrangePreBasis::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdoc\">Type used for indices and size information.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:65</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_a639dc115510426bbaf3f0431fc8f1748\"><div class=\"ttname\"><a href=\"a01671.html#a639dc115510426bbaf3f0431fc8f1748\">Dune::Functions::LagrangePreBasis::pyramidOffset_</a></div><div class=\"ttdeci\">size_type pyramidOffset_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:376</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_a649ad327ee6564de6263f497962d344e\"><div class=\"ttname\"><a href=\"a01671.html#a649ad327ee6564de6263f497962d344e\">Dune::Functions::LagrangePreBasis::prismOffset_</a></div><div class=\"ttdeci\">size_type prismOffset_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:377</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_a6c7ee6cdf1c33779542802c064878f9d\"><div class=\"ttname\"><a href=\"a01671.html#a6c7ee6cdf1c33779542802c064878f9d\">Dune::Functions::LagrangePreBasis::tetrahedronOffset_</a></div><div class=\"ttdeci\">size_type tetrahedronOffset_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:375</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_a7318cbabd5f57d0b6cbab1b2dc41fff8\"><div class=\"ttname\"><a href=\"a01671.html#a7318cbabd5f57d0b6cbab1b2dc41fff8\">Dune::Functions::LagrangePreBasis::initializeIndices</a></div><div class=\"ttdeci\">void initializeIndices()</div><div class=\"ttdoc\">Initialize the global indices.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:96</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_a76f8c4b5aa9e574556edd79f0b2812f1\"><div class=\"ttname\"><a href=\"a01671.html#a76f8c4b5aa9e574556edd79f0b2812f1\">Dune::Functions::LagrangePreBasis::computeDofsPerPyramid</a></div><div class=\"ttdeci\">size_type computeDofsPerPyramid() const</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:360</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_a791cbc108e89b7effc1c668b800667bb\"><div class=\"ttname\"><a href=\"a01671.html#a791cbc108e89b7effc1c668b800667bb\">Dune::Functions::LagrangePreBasis::LagrangePreBasis</a></div><div class=\"ttdeci\">LagrangePreBasis(const GridView &gv, unsigned int order)</div><div class=\"ttdoc\">Constructor for a given grid view object and run-time order.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:80</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_a9212ce0f83e8642244e10d3cd3d596c6\"><div class=\"ttname\"><a href=\"a01671.html#a9212ce0f83e8642244e10d3cd3d596c6\">Dune::Functions::LagrangePreBasis::dofsPerPyramid_</a></div><div class=\"ttdeci\">size_type dofsPerPyramid_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:369</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_a960a5535205e3449a3f0aa21f640e7c3\"><div class=\"ttname\"><a href=\"a01671.html#a960a5535205e3449a3f0aa21f640e7c3\">Dune::Functions::LagrangePreBasis::dimension</a></div><div class=\"ttdeci\">size_type dimension() const</div><div class=\"ttdoc\">Get the total dimension of the space spanned by this basis.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:178</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_a982937b8e5348046761303330fc35d18\"><div class=\"ttname\"><a href=\"a01671.html#a982937b8e5348046761303330fc35d18\">Dune::Functions::LagrangePreBasis::LagrangePreBasis</a></div><div class=\"ttdeci\">LagrangePreBasis(const GridView &gv)</div><div class=\"ttdoc\">Constructor for a given grid view object with compile-time order.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:75</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_a9a9c2b3c8b2b46160d68d46cd2ed2c00\"><div class=\"ttname\"><a href=\"a01671.html#a9a9c2b3c8b2b46160d68d46cd2ed2c00\">Dune::Functions::LagrangePreBasis::update</a></div><div class=\"ttdeci\">void update(const GridView &gv)</div><div class=\"ttdoc\">Update the stored grid view, to be called if the grid has changed.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:126</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_a9bf76c4a686bf3a6bfe4f7385aab619a\"><div class=\"ttname\"><a href=\"a01671.html#a9bf76c4a686bf3a6bfe4f7385aab619a\">Dune::Functions::LagrangePreBasis::size</a></div><div class=\"ttdeci\">size_type size(const SizePrefix &prefix) const</div><div class=\"ttdoc\">Return number of possible values for next position in multi index.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:171</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_aa07a2111fb2151f10c128f6ebf746d81\"><div class=\"ttname\"><a href=\"a01671.html#aa07a2111fb2151f10c128f6ebf746d81\">Dune::Functions::LagrangePreBasis::multiIndexBufferSize</a></div><div class=\"ttdeci\">static constexpr size_type multiIndexBufferSize</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:72</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_aaa2add570edd22047fd5cfba570dd982\"><div class=\"ttname\"><a href=\"a01671.html#aaa2add570edd22047fd5cfba570dd982\">Dune::Functions::LagrangePreBasis::GridView</a></div><div class=\"ttdeci\">GV GridView</div><div class=\"ttdoc\">The grid view that the FE basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:62</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_aaa4552a25872774f6f07f4dd8336be69\"><div class=\"ttname\"><a href=\"a01671.html#aaa4552a25872774f6f07f4dd8336be69\">Dune::Functions::LagrangePreBasis::quadrilateralOffset_</a></div><div class=\"ttdeci\">size_type quadrilateralOffset_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:374</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_ab21cdfcd52867003b7f3095f366109e7\"><div class=\"ttname\"><a href=\"a01671.html#ab21cdfcd52867003b7f3095f366109e7\">Dune::Functions::LagrangePreBasis::gridView</a></div><div class=\"ttdeci\">const GridView & gridView() const</div><div class=\"ttdoc\">Obtain the grid view that the basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:120</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_ab8b9e944762fe3f68430e41d24fb540b\"><div class=\"ttname\"><a href=\"a01671.html#ab8b9e944762fe3f68430e41d24fb540b\">Dune::Functions::LagrangePreBasis::gridView_</a></div><div class=\"ttdeci\">GridView gridView_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:316</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_abb2dc6ee4702bc2145a05b20be7f665d\"><div class=\"ttname\"><a href=\"a01671.html#abb2dc6ee4702bc2145a05b20be7f665d\">Dune::Functions::LagrangePreBasis::makeNode</a></div><div class=\"ttdeci\">Node makeNode() const</div><div class=\"ttdoc\">Create tree node.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:134</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_abbd87ea8be342b39e287babfec846db4\"><div class=\"ttname\"><a href=\"a01671.html#abbd87ea8be342b39e287babfec846db4\">Dune::Functions::LagrangePreBasis::order</a></div><div class=\"ttdeci\">unsigned int order() const</div><div class=\"ttdoc\">Polynomial order used in the local Lagrange finite-elements.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:310</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_abefe712249711f9caee5f9b4ace8fb2a\"><div class=\"ttname\"><a href=\"a01671.html#abefe712249711f9caee5f9b4ace8fb2a\">Dune::Functions::LagrangePreBasis::order_</a></div><div class=\"ttdeci\">const unsigned int order_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:319</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_abfa5632c391ed7160d081c63ab154377\"><div class=\"ttname\"><a href=\"a01671.html#abfa5632c391ed7160d081c63ab154377\">Dune::Functions::LagrangePreBasis::dofsPerCube_</a></div><div class=\"ttdeci\">std::array< size_type, dim+1 > dofsPerCube_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:367</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_ac91dcb0f3589b23598df3ced95d50d0c\"><div class=\"ttname\"><a href=\"a01671.html#ac91dcb0f3589b23598df3ced95d50d0c\">Dune::Functions::LagrangePreBasis::maxNodeSize</a></div><div class=\"ttdeci\">size_type maxNodeSize() const</div><div class=\"ttdoc\">Get the maximal number of DOFs associated to node for any element.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:184</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_adabf2688eef2d33a180ae9cfbde492b1\"><div class=\"ttname\"><a href=\"a01671.html#adabf2688eef2d33a180ae9cfbde492b1\">Dune::Functions::LagrangePreBasis::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdoc\">Same as size(prefix) with empty prefix.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:140</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_ade4d334b8ac70f9c18fc15a9eba04815\"><div class=\"ttname\"><a href=\"a01671.html#ade4d334b8ac70f9c18fc15a9eba04815\">Dune::Functions::LagrangePreBasis::dofsPerPrism_</a></div><div class=\"ttdeci\">size_type dofsPerPrism_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:368</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_ae51ebb4186d0677f3599176d23a42172\"><div class=\"ttname\"><a href=\"a01671.html#ae51ebb4186d0677f3599176d23a42172\">Dune::Functions::LagrangePreBasis::dofsPerCube</a></div><div class=\"ttdeci\">size_type dofsPerCube(std::size_t cubeDim) const</div><div class=\"ttdoc\">Number of degrees of freedom assigned to a cube (without the ones assigned to its faces!...</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:328</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_ae6c85768fc1d8aa23f94a2708d8d3ee6\"><div class=\"ttname\"><a href=\"a01671.html#ae6c85768fc1d8aa23f94a2708d8d3ee6\">Dune::Functions::LagrangePreBasis::triangleOffset_</a></div><div class=\"ttdeci\">size_type triangleOffset_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:373</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_aea5db4f517eaead23b62142891c0484a\"><div class=\"ttname\"><a href=\"a01671.html#aea5db4f517eaead23b62142891c0484a\">Dune::Functions::LagrangePreBasis::hexahedronOffset_</a></div><div class=\"ttdeci\">size_type hexahedronOffset_</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:378</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_af4e167602b8bc1cdccf0baea69572f60\"><div class=\"ttname\"><a href=\"a01671.html#af4e167602b8bc1cdccf0baea69572f60\">Dune::Functions::LagrangePreBasis::minMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type minMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:71</div></div>\n-<div class=\"ttc\" id=\"aa01671_html_afd0d5e9191756b1d6e6f7c2f77647739\"><div class=\"ttname\"><a href=\"a01671.html#afd0d5e9191756b1d6e6f7c2f77647739\">Dune::Functions::LagrangePreBasis::dofsPerPyramid</a></div><div class=\"ttdeci\">size_type dofsPerPyramid() const</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:338</div></div>\n-<div class=\"ttc\" id=\"aa01707_html_ae93815e5c4012f7be5d11786f40d267a\"><div class=\"ttname\"><a href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\">Dune::Functions::BasisNodeMixin::setSize</a></div><div class=\"ttdeci\">void setSize(const size_type size)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:164</div></div>\n-<div class=\"ttc\" id=\"aa01711_html\"><div class=\"ttname\"><a href=\"a01711.html\">Dune::Functions::LeafBasisNode</a></div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:186</div></div>\n+<div class=\"ttc\" id=\"aa01415_html\"><div class=\"ttname\"><a href=\"a01415.html\">Dune::Functions::BasisFactory::IndexMergingStrategy</a></div><div class=\"ttdoc\">Base class for index merging strategies to simplify detection.</div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:44</div></div>\n+<div class=\"ttc\" id=\"aa01423_html\"><div class=\"ttname\"><a href=\"a01423.html\">Dune::Functions::BasisFactory::FlatInterleaved</a></div><div class=\"ttdoc\">Interleaved merging of direct children without blocking.</div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:114</div></div>\n+<div class=\"ttc\" id=\"aa01715_html\"><div class=\"ttname\"><a href=\"a01715.html\">Dune::Functions::PowerBasisNode</a></div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:193</div></div>\n+<div class=\"ttc\" id=\"aa01735_html\"><div class=\"ttname\"><a href=\"a01735.html\">Dune::Functions::PowerPreBasis</a></div><div class=\"ttdoc\">A pre-basis for power bases.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:45</div></div>\n+<div class=\"ttc\" id=\"aa01735_html_a092a9a0c5fa8feb7cde428eb9d37d8e3\"><div class=\"ttname\"><a href=\"a01735.html#a092a9a0c5fa8feb7cde428eb9d37d8e3\">Dune::Functions::PowerPreBasis::dimension</a></div><div class=\"ttdeci\">size_type dimension() const</div><div class=\"ttdoc\">Get the total dimension of the space spanned by this basis.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:207</div></div>\n+<div class=\"ttc\" id=\"aa01735_html_a127b27c81a242f3bbe7fe62ba0f2877b\"><div class=\"ttname\"><a href=\"a01735.html#a127b27c81a242f3bbe7fe62ba0f2877b\">Dune::Functions::PowerPreBasis::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdoc\">Type used for indices and size information.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:58</div></div>\n+<div class=\"ttc\" id=\"aa01735_html_a1c74f8319f302dc61ba704be6489cf37\"><div class=\"ttname\"><a href=\"a01735.html#a1c74f8319f302dc61ba704be6489cf37\">Dune::Functions::PowerPreBasis::IndexMergingStrategy</a></div><div class=\"ttdeci\">IMS IndexMergingStrategy</div><div class=\"ttdoc\">Strategy used to merge the global indices of the child factories.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:61</div></div>\n+<div class=\"ttc\" id=\"aa01735_html_a32df93d56f2f547813944cb7bcd04ffa\"><div class=\"ttname\"><a href=\"a01735.html#a32df93d56f2f547813944cb7bcd04ffa\">Dune::Functions::PowerPreBasis::Node</a></div><div class=\"ttdeci\">PowerBasisNode< SubNode, children > Node</div><div class=\"ttdoc\">Template mapping root tree path to type of created tree node.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:66</div></div>\n+<div class=\"ttc\" id=\"aa01735_html_a37d97aeb515a5abfd55259f1fb320d12\"><div class=\"ttname\"><a href=\"a01735.html#a37d97aeb515a5abfd55259f1fb320d12\">Dune::Functions::PowerPreBasis::GridView</a></div><div class=\"ttdeci\">typename SPB::GridView GridView</div><div class=\"ttdoc\">The grid view that the FE basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:55</div></div>\n+<div class=\"ttc\" id=\"aa01735_html_a3a52441f0c9a8d94a76b6e0a87cdd6fc\"><div class=\"ttname\"><a href=\"a01735.html#a3a52441f0c9a8d94a76b6e0a87cdd6fc\">Dune::Functions::PowerPreBasis::multiIndexBufferSize</a></div><div class=\"ttdeci\">static constexpr size_type multiIndexBufferSize</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:70</div></div>\n+<div class=\"ttc\" id=\"aa01735_html_a419106855686e36864eea0100d8e618e\"><div class=\"ttname\"><a href=\"a01735.html#a419106855686e36864eea0100d8e618e\">Dune::Functions::PowerPreBasis::SubPreBasis</a></div><div class=\"ttdeci\">SPB SubPreBasis</div><div class=\"ttdoc\">The child pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:52</div></div>\n+<div class=\"ttc\" id=\"aa01735_html_a7b5f1965bab95ba5c42821645f548c38\"><div class=\"ttname\"><a href=\"a01735.html#a7b5f1965bab95ba5c42821645f548c38\">Dune::Functions::PowerPreBasis::SubNode</a></div><div class=\"ttdeci\">typename SubPreBasis::Node SubNode</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:63</div></div>\n+<div class=\"ttc\" id=\"aa01735_html_a813f4c07a10db215c7a19c9552993baa\"><div class=\"ttname\"><a href=\"a01735.html#a813f4c07a10db215c7a19c9552993baa\">Dune::Functions::PowerPreBasis::initializeIndices</a></div><div class=\"ttdeci\">void initializeIndices()</div><div class=\"ttdoc\">Initialize the global indices.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:87</div></div>\n+<div class=\"ttc\" id=\"aa01735_html_a982ebd97f308612c4dca7d980cf16070\"><div class=\"ttname\"><a href=\"a01735.html#a982ebd97f308612c4dca7d980cf16070\">Dune::Functions::PowerPreBasis::update</a></div><div class=\"ttdeci\">void update(const GridView &gv)</div><div class=\"ttdoc\">Update the stored grid view, to be called if the grid has changed.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:99</div></div>\n+<div class=\"ttc\" id=\"aa01735_html_aaf0cd03264066ab6e7ed385e6e74c578\"><div class=\"ttname\"><a href=\"a01735.html#aaf0cd03264066ab6e7ed385e6e74c578\">Dune::Functions::PowerPreBasis::indices</a></div><div class=\"ttdeci\">It indices(const Node &node, It it) const</div><div class=\"ttdoc\">Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:232</div></div>\n+<div class=\"ttc\" id=\"aa01735_html_ab0335222dc72364fe128e8459751377b\"><div class=\"ttname\"><a href=\"a01735.html#ab0335222dc72364fe128e8459751377b\">Dune::Functions::PowerPreBasis::PowerPreBasis</a></div><div class=\"ttdeci\">PowerPreBasis(SFArgs &&... sfArgs)</div><div class=\"ttdoc\">Constructor for given child pre-basis objects.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:80</div></div>\n+<div class=\"ttc\" id=\"aa01735_html_ac9e9c317b759d7dbb3ae74ee66595d5a\"><div class=\"ttname\"><a href=\"a01735.html#ac9e9c317b759d7dbb3ae74ee66595d5a\">Dune::Functions::PowerPreBasis::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdoc\">Same as size(prefix) with empty prefix.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:116</div></div>\n+<div class=\"ttc\" id=\"aa01735_html_ad3551fe05e2d4e6e9631a78e3f2f150a\"><div class=\"ttname\"><a href=\"a01735.html#ad3551fe05e2d4e6e9631a78e3f2f150a\">Dune::Functions::PowerPreBasis::subPreBasis</a></div><div class=\"ttdeci\">SubPreBasis & subPreBasis()</div><div class=\"ttdoc\">Mutable access to the stored prebasis of the factor in the power space.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:225</div></div>\n+<div class=\"ttc\" id=\"aa01735_html_ad5fae28034251ff8e4429288f951f3af\"><div class=\"ttname\"><a href=\"a01735.html#ad5fae28034251ff8e4429288f951f3af\">Dune::Functions::PowerPreBasis::makeNode</a></div><div class=\"ttdeci\">Node makeNode() const</div><div class=\"ttdoc\">Create tree node.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:107</div></div>\n+<div class=\"ttc\" id=\"aa01735_html_adc20cd44a238188f2f0117d30cfb3ea6\"><div class=\"ttname\"><a href=\"a01735.html#adc20cd44a238188f2f0117d30cfb3ea6\">Dune::Functions::PowerPreBasis::maxMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type maxMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:68</div></div>\n+<div class=\"ttc\" id=\"aa01735_html_aea6df17c50528be1cecdbd8f40264063\"><div class=\"ttname\"><a href=\"a01735.html#aea6df17c50528be1cecdbd8f40264063\">Dune::Functions::PowerPreBasis::minMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type minMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:69</div></div>\n+<div class=\"ttc\" id=\"aa01735_html_aeb555ecc3254d9be197f8d5157b3668c\"><div class=\"ttname\"><a href=\"a01735.html#aeb555ecc3254d9be197f8d5157b3668c\">Dune::Functions::PowerPreBasis::maxNodeSize</a></div><div class=\"ttdeci\">size_type maxNodeSize() const</div><div class=\"ttdoc\">Get the maximal number of DOFs associated to node for any element.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:213</div></div>\n+<div class=\"ttc\" id=\"aa01735_html_aee8905e7295cf03b6b7d9888d8594666\"><div class=\"ttname\"><a href=\"a01735.html#aee8905e7295cf03b6b7d9888d8594666\">Dune::Functions::PowerPreBasis::gridView</a></div><div class=\"ttdeci\">const GridView & gridView() const</div><div class=\"ttdoc\">Obtain the grid view that the basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:93</div></div>\n+<div class=\"ttc\" id=\"aa01735_html_aef3ffd96fc0d2a2926295da866014bef\"><div class=\"ttname\"><a href=\"a01735.html#aef3ffd96fc0d2a2926295da866014bef\">Dune::Functions::PowerPreBasis::size</a></div><div class=\"ttdeci\">size_type size(const SizePrefix &prefix) const</div><div class=\"ttdoc\">Return number of possible values for next position in multi index.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:124</div></div>\n+<div class=\"ttc\" id=\"aa01735_html_af2b075686a4ae66836d8ec0db85ae251\"><div class=\"ttname\"><a href=\"a01735.html#af2b075686a4ae66836d8ec0db85ae251\">Dune::Functions::PowerPreBasis::subPreBasis</a></div><div class=\"ttdeci\">const SubPreBasis & subPreBasis() const</div><div class=\"ttdoc\">Const access to the stored prebasis of the factor in the power space.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:219</div></div>\n+<div class=\"ttc\" id=\"aa02876_html\"><div class=\"ttname\"><a href=\"a02876.html\">concepts.hh</a></div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,744 +5,497 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-lagrangebasis.hh\n+powerbasis.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH\n- 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH\n+ 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH\n+ 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH\n 5\n- 6#include <type_traits>\n- 7#include <dune/common/exceptions.hh>\n- 8\n- 9#include <dune/localfunctions/lagrange.hh>\n- 10#include <dune/localfunctions/lagrange/equidistantpoints.hh>\n- 11#include <dune/localfunctions/lagrange/pqkfactory.hh>\n- 12\n+ 6#include <dune/common/reservedvector.hh>\n+ 7#include <dune/common/typeutilities.hh>\n+ 8#include <dune/common/indices.hh>\n+ 9\n+ 10#include <dune/functions/common/utility.hh>\n+ 11#include <dune/functions/common/type_traits.hh>\n+ 12#include <dune/functions/functionspacebases/basistags.hh>\n 13#include <dune/functions/functionspacebases/nodes.hh>\n- 14#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n- 15\n+ 14#include <dune/functions/functionspacebases/concepts.hh>\n+ 15#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n 16\n- 17namespace Dune {\n- 18namespace Functions {\n- 19\n- 20/\n+ 17\n+ 18\n+ 19namespace Dune {\n+ 20namespace Functions {\n+ 21\n+ 22\n+ 23/\n / *****************************************************************************\n- 21// This is the reusable part of the LagrangeBasis. It contains\n- 22//\n- 23// LagrangePreBasis\n- 24// LagrangeNode\n+ 24// This is the reusable part of the power bases. It contains\n 25//\n- 26// The pre-basis allows to create the others and is the owner of possible\n+ 26// PowerPreBasis\n+ 27//\n+ 28// The pre-basis allows to create the others and is the owner of possible\n shared\n- 27// state. These components do _not_ depend on the global basis and local\n+ 29// state. These components do _not_ depend on the global basis and local\n view\n- 28// and can be used without a global basis.\n- 29/\n+ 30// and can be used without a global basis.\n+ 31/\n / *****************************************************************************\n- 30\n- 31template<typename GV, int k, typename R=double>\n- 32class LagrangeNode;\n- 33\n- 34template<typename GV, int k, typename R=double>\n- 35class LagrangePreBasis;\n- 36\n- 37\n- 38\n- 53template<typename GV, int k, typename R>\n-54class LagrangePreBasis\n- 55{\n- 56 static const int dim = GV::dimension;\n- 57 static const bool useDynamicOrder = (k<0);\n- 58\n- 59public:\n- 60\n-62 using GridView = GV;\n- 63\n-65 using size_type = std::size_t;\n- 66\n-68 using Node = LagrangeNode<GV,_k,_R>;\n- 69\n-70 static constexpr size_type maxMultiIndexSize = 1;\n-71 static constexpr size_type minMultiIndexSize = 1;\n-72 static constexpr size_type multiIndexBufferSize = 1;\n- 73\n-75 LagrangePreBasis(const GridView& gv)\n- 76 : LagrangePreBasis(gv, std::numeric_limits<unsigned int>::max())\n- 77 {}\n- 78\n-80 LagrangePreBasis(const GridView& gv, unsigned int order) :\n- 81 gridView_(gv), order_(order)\n+ 32\n+ 43template<class IMS, class SPB, std::size_t C>\n+44class PowerPreBasis\n+ 45{\n+ 46 static const std::size_t children = C;\n+ 47 static const bool isBlocked = std::is_same_v<IMS,BasisFactory::\n+BlockedLexicographic> or std::is_same_v<IMS,BasisFactory::BlockedInterleaved>;\n+ 48\n+ 49public:\n+ 50\n+52 using SubPreBasis = SPB;\n+ 53\n+55 using GridView = typename SPB::GridView;\n+ 56\n+58 using size_type = std::size_t;\n+ 59\n+61 using IndexMergingStrategy = IMS;\n+ 62\n+63 using SubNode = typename SubPreBasis::Node;\n+ 64\n+66 using Node = PowerBasisNode<SubNode,_children>;\n+ 67\n+68 static constexpr size_type maxMultiIndexSize = SubPreBasis::\n+maxMultiIndexSize + isBlocked;\n+69 static constexpr size_type minMultiIndexSize = SubPreBasis::\n+minMultiIndexSize + isBlocked;\n+70 static constexpr size_type multiIndexBufferSize = SubPreBasis::\n+multiIndexBufferSize + isBlocked;\n+ 71\n+ 77 template<class... SFArgs,\n+ 78 disableCopyMove<PowerPreBasis, SFArgs...> = 0,\n+ 79 enableIfConstructible<SubPreBasis, SFArgs...> = 0>\n+80 PowerPreBasis(SFArgs&&... sfArgs) :\n+ 81 subPreBasis_(std::forward<SFArgs>(sfArgs)...)\n 82 {\n- 83 if (!useDynamicOrder && order!=std::numeric_limits<unsigned int>::max())\n- 84 DUNE_THROW(RangeError, \"Template argument k has to be -1 when supplying a\n-run-time order!\");\n+ 83 static_assert(models<Concept::PreBasis<GridView>, SubPreBasis>(),\n+\"Subprebasis passed to PowerPreBasis does not model the PreBasis concept.\");\n+ 84 }\n 85\n- 86 for (int i=0; i<=dim; i++)\n- 87 {\n- 88 dofsPerCube_[i] = computeDofsPerCube(i);\n- 89 dofsPerSimplex_[i] = computeDofsPerSimplex(i);\n+87 void initializeIndices()\n+ 88 {\n+ 89 subPreBasis_.initializeIndices();\n 90 }\n- 91 dofsPerPrism_ = computeDofsPerPrism();\n- 92 dofsPerPyramid_ = computeDofsPerPyramid();\n- 93 }\n- 94\n-96 void initializeIndices()\n- 97 {\n- 98 vertexOffset_ = 0;\n- 99 edgeOffset_ = vertexOffset_ + dofsPerCube(0) * ((size_type)gridView_.size\n-(dim));\n- 100\n- 101 if (dim>=2)\n- 102 {\n- 103 triangleOffset_ = edgeOffset_ + dofsPerCube(1) * ((size_type)\n-gridView_.size(dim-1));\n- 104\n- 105 quadrilateralOffset_ = triangleOffset_ + dofsPerSimplex(2) * (\n-(size_type)gridView_.size(Dune::GeometryTypes::triangle));\n- 106 }\n- 107\n- 108 if (dim==3) {\n- 109 tetrahedronOffset_ = quadrilateralOffset_ + dofsPerCube(2) * (\n-(size_type)gridView_.size(Dune::GeometryTypes::quadrilateral));\n- 110\n- 111 prismOffset_ = tetrahedronOffset_ + dofsPerSimplex(3) * (\n-(size_type)gridView_.size(Dune::GeometryTypes::tetrahedron));\n- 112\n- 113 hexahedronOffset_ = prismOffset_ + dofsPerPrism() * (\n-(size_type)gridView_.size(Dune::GeometryTypes::prism));\n+ 91\n+93 const GridView& gridView() const\n+ 94 {\n+ 95 return subPreBasis_.gridView();\n+ 96 }\n+ 97\n+99 void update(const GridView& gv)\n+ 100 {\n+ 101 subPreBasis_.update(gv);\n+ 102 }\n+ 103\n+107 Node makeNode() const\n+ 108 {\n+ 109 auto node = Node{};\n+ 110 for (std::size_t i=0; i<children; ++i)\n+ 111 node.setChild(i, subPreBasis_.makeNode());\n+ 112 return node;\n+ 113 }\n 114\n- 115 pyramidOffset_ = hexahedronOffset_ + dofsPerCube(3) * (\n-(size_type)gridView_.size(Dune::GeometryTypes::hexahedron));\n- 116 }\n- 117 }\n- 118\n-120 const GridView& gridView() const\n- 121 {\n- 122 return gridView_;\n- 123 }\n- 124\n-126 void update (const GridView& gv)\n- 127 {\n- 128 gridView_ = gv;\n- 129 }\n+116 size_type size() const\n+ 117 {\n+ 118 return size(Dune::ReservedVector<size_type, multiIndexBufferSize>{});\n+ 119 }\n+ 120\n+ 122\n+ 123 template<class SizePrefix>\n+124 size_type size(const SizePrefix& prefix) const\n+ 125 {\n+ 126 return size(prefix, IndexMergingStrategy{});\n+ 127 }\n+ 128\n+ 129private:\n 130\n-134 Node makeNode() const\n- 135 {\n- 136 return Node{order_};\n- 137 }\n- 138\n-140 size_type size() const\n- 141 {\n- 142 switch (dim)\n- 143 {\n- 144 case 1:\n- 145 return dofsPerCube(0) * ((size_type)gridView_.size(dim))\n- 146 + dofsPerCube(1) * ((size_type)gridView_.size(dim-1));\n- 147 case 2:\n- 148 {\n- 149 return dofsPerCube(0) * ((size_type)gridView_.size(dim))\n- 150 + dofsPerCube(1) * ((size_type)gridView_.size(dim-1))\n- 151 + dofsPerSimplex(2) * ((size_type)gridView_.size(Dune::GeometryTypes::\n-triangle))\n- 152 + dofsPerCube(2) * ((size_type)gridView_.size(Dune::GeometryTypes::\n-quadrilateral));\n- 153 }\n- 154 case 3:\n- 155 {\n- 156 return dofsPerCube(0) * ((size_type)gridView_.size(dim))\n- 157 + dofsPerCube(1) * ((size_type)gridView_.size(dim-1))\n- 158 + dofsPerSimplex(2) * ((size_type)gridView_.size(Dune::GeometryTypes::\n-triangle))\n- 159 + dofsPerCube(2) * ((size_type)gridView_.size(Dune::GeometryTypes::\n-quadrilateral))\n- 160 + dofsPerSimplex(3) * ((size_type)gridView_.size(Dune::GeometryTypes::\n-tetrahedron))\n- 161 + dofsPerPyramid() * ((size_type)gridView_.size(Dune::GeometryTypes::\n-pyramid))\n- 162 + dofsPerPrism() * ((size_type)gridView_.size(Dune::GeometryTypes::prism))\n- 163 + dofsPerCube(3) * ((size_type)gridView_.size(Dune::GeometryTypes::\n-hexahedron));\n- 164 }\n- 165 }\n- 166 DUNE_THROW(Dune::NotImplemented, \"No size method for \" << dim << \"d grids\n-available yet!\");\n- 167 }\n- 168\n- 170 template<class SizePrefix>\n-171 size_type size(const SizePrefix& prefix) const\n- 172 {\n- 173 assert(prefix.size() == 0 || prefix.size() == 1);\n- 174 return (prefix.size() == 0) ? size() : 0;\n- 175 }\n- 176\n-178 size_type dimension() const\n- 179 {\n- 180 return size();\n- 181 }\n- 182\n-184 size_type maxNodeSize() const\n- 185 {\n- 186 // That cast to unsigned int is necessary because GV::dimension is an\n-enum,\n- 187 // which is not recognized by the power method as an integer type...\n- 188 return power(order()+1, (unsigned int)GV::dimension);\n- 189 }\n- 190\n- 191 template<typename It>\n-192 It indices(const Node& node, It it) const\n- 193 {\n- 194 for (size_type i = 0, end = node.finiteElement().size() ; i < end ; ++it,\n-++i)\n- 195 {\n- 196 Dune::LocalKey localKey = node.finiteElement().localCoefficients\n-().localKey(i);\n- 197 const auto& gridIndexSet = gridView().indexSet();\n- 198 const auto& element = node.element();\n- 199\n- 200 // The dimension of the entity that the current dof is related to\n- 201 auto dofDim = dim - localKey.codim();\n- 202\n- 203 // Test for a vertex dof\n- 204 // The test for k==1 is redundant, but having it here allows the compiler\n-to conclude\n- 205 // at compile-time that the dofDim==0 case is the only one that will ever\n-happen.\n- 206 // This leads to measurable speed-up: see\n- 207 // https://gitlab.dune-project.org/staging/dune-functions/issues/30\n- 208 if (k==1 || dofDim==0) {\n- 209 *it = {{ (size_type)(gridIndexSet.subIndex(element,localKey.subEntity\n-(),dim)) }};\n- 210 continue;\n- 211 }\n- 212\n- 213 if (dofDim==1)\n- 214 { // edge dof\n- 215 if (dim==1) // element dof -- any local numbering is fine\n- 216 {\n- 217 *it = {{ edgeOffset_\n- 218 + dofsPerCube(1) * ((size_type)gridIndexSet.subIndex(element,0,0))\n- 219 + localKey.index() }};\n- 220 continue;\n- 221 }\n- 222 else\n- 223 {\n- 224 const auto refElement\n- 225 = Dune::referenceElement<double,dim>(element.type());\n- 226\n- 227 // We have to reverse the numbering if the local element edge is\n- 228 // not aligned with the global edge.\n- 229 auto v0 = (size_type)gridIndexSet.subIndex(element,refElement.subEntity\n-(localKey.subEntity(),localKey.codim(),0,dim),dim);\n- 230 auto v1 = (size_type)gridIndexSet.subIndex(element,refElement.subEntity\n-(localKey.subEntity(),localKey.codim(),1,dim),dim);\n- 231 bool flip = (v0 > v1);\n- 232 *it = {{ (flip)\n- 233 ? edgeOffset_\n- 234 + dofsPerCube(1)*((size_type)gridIndexSet.subIndex\n-(element,localKey.subEntity(),localKey.codim()))\n- 235 + (dofsPerCube(1)-1)-localKey.index()\n- 236 : edgeOffset_\n- 237 + dofsPerCube(1)*((size_type)gridIndexSet.subIndex\n-(element,localKey.subEntity(),localKey.codim()))\n- 238 + localKey.index() }};\n- 239 continue;\n- 240 }\n- 241 }\n- 242\n- 243 if (dofDim==2)\n- 244 {\n- 245 if (dim==2) // element dof -- any local numbering is fine\n- 246 {\n- 247 if (element.type().isTriangle())\n- 248 {\n- 249 *it = {{ triangleOffset_ + dofsPerSimplex(2)*(\n-(size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};\n- 250 continue;\n- 251 }\n- 252 else if (element.type().isQuadrilateral())\n+ 131 template<class SizePrefix>\n+ 132 size_type size(const SizePrefix& prefix, BasisFactory::FlatInterleaved)\n+const\n+ 133 {\n+ 134 // The root index size is the root index size of a single subnode\n+ 135 // multiplied by the number of subnodes because we enumerate all\n+ 136 // child indices in a row.\n+ 137 if (prefix.size() == 0)\n+ 138 return children*subPreBasis_.size();\n+ 139\n+ 140 // The first prefix entry refers to one of the (root index size)\n+ 141 // subindex trees. Hence we have to first compute the corresponding\n+ 142 // prefix entry for a single subnode subnode. The we can append\n+ 143 // the other prefix entries unmodified, because the index tree\n+ 144 // looks the same after the first level.\n+ 145 SizePrefix subPrefix;\n+ 146 subPrefix.push_back(prefix[0] / children);\n+ 147 for(std::size_t i=1; i<prefix.size(); ++i)\n+ 148 subPrefix.push_back(prefix[i]);\n+ 149 return subPreBasis_.size(subPrefix);\n+ 150 }\n+ 151\n+ 152 template<class SizePrefix>\n+ 153 size_type size(const SizePrefix& prefix, BasisFactory::FlatLexicographic)\n+const\n+ 154 {\n+ 155 // The size at the index tree root is the size of at the index tree\n+ 156 // root of a single subnode multiplied by the number of subnodes\n+ 157 // because we enumerate all child indices in a row.\n+ 158 if (prefix.size() == 0)\n+ 159 return children*subPreBasis_.size();\n+ 160\n+ 161 // The first prefix entry refers to one of the (root index size)\n+ 162 // subindex trees. Hence we have to first compute the corresponding\n+ 163 // prefix entry for a single subnode subnode. The we can append\n+ 164 // the other prefix entries unmodified, because the index tree\n+ 165 // looks the same after the first level.\n+ 166 SizePrefix subPrefix;\n+ 167 subPrefix.push_back(prefix[0] % children);\n+ 168 for(std::size_t i=1; i<prefix.size(); ++i)\n+ 169 subPrefix.push_back(prefix[i]);\n+ 170 return subPreBasis_.size(subPrefix);\n+ 171 }\n+ 172\n+ 173 template<class SizePrefix>\n+ 174 size_type size(const SizePrefix& prefix, BasisFactory::\n+BlockedLexicographic) const\n+ 175 {\n+ 176 if (prefix.size() == 0)\n+ 177 return children;\n+ 178 SizePrefix subPrefix;\n+ 179 for(std::size_t i=1; i<prefix.size(); ++i)\n+ 180 subPrefix.push_back(prefix[i]);\n+ 181 return subPreBasis_.size(subPrefix);\n+ 182 }\n+ 183\n+ 184 template<class SizePrefix>\n+ 185 size_type size(const SizePrefix& prefix, BasisFactory::BlockedInterleaved)\n+const\n+ 186 {\n+ 187 if (prefix.size() == 0)\n+ 188 return subPreBasis_.size();\n+ 189\n+ 190 SizePrefix subPrefix;\n+ 191 for(std::size_t i=0; i<prefix.size()-1; ++i)\n+ 192 subPrefix.push_back(prefix[i]);\n+ 193\n+ 194 size_type r = subPreBasis_.size(subPrefix);\n+ 195 if (r==0)\n+ 196 return 0;\n+ 197 subPrefix.push_back(prefix.back());\n+ 198 r = subPreBasis_.size(subPrefix);\n+ 199 if (r==0)\n+ 200 return children;\n+ 201 return r;\n+ 202 }\n+ 203\n+ 204public:\n+ 205\n+207 size_type dimension() const\n+ 208 {\n+ 209 return subPreBasis_.dimension() * children;\n+ 210 }\n+ 211\n+213 size_type maxNodeSize() const\n+ 214 {\n+ 215 return subPreBasis_.maxNodeSize() * children;\n+ 216 }\n+ 217\n+219 const SubPreBasis& subPreBasis() const\n+ 220 {\n+ 221 return subPreBasis_;\n+ 222 }\n+ 223\n+225 SubPreBasis& subPreBasis()\n+ 226 {\n+ 227 return subPreBasis_;\n+ 228 }\n+ 229\n+ 231 template<typename It>\n+232 It indices(const Node& node, It it) const\n+ 233 {\n+ 234 return indices(node, it, IndexMergingStrategy{});\n+ 235 }\n+ 236\n+ 237private:\n+ 238\n+ 239 template<typename It>\n+ 240 It indices(const Node& node, It multiIndices, BasisFactory::\n+FlatInterleaved) const\n+ 241 {\n+ 242 using namespace Dune::Indices;\n+ 243 size_type subTreeSize = node.child(_0).size();\n+ 244 // Fill indices for first child at the beginning.\n+ 245 auto next = subPreBasis().indices(node.child(_0), multiIndices);\n+ 246 // Multiply first component of all indices for first child by\n+ 247 // number of children to stretch the index range for interleaving.\n+ 248 for (std::size_t i = 0; i<subTreeSize; ++i)\n+ 249 multiIndices[i][0] *= children;\n+ 250 for (std::size_t child = 1; child<children; ++child)\n+ 251 {\n+ 252 for (std::size_t i = 0; i<subTreeSize; ++i)\n 253 {\n- 254 *it = {{ quadrilateralOffset_ + dofsPerCube(2)*(\n-(size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};\n- 255 continue;\n- 256 }\n- 257 else\n- 258 DUNE_THROW(Dune::NotImplemented, \"2d elements have to be triangles or\n-quadrilaterals\");\n- 259 } else\n- 260 {\n- 261 const auto refElement\n- 262 = Dune::referenceElement<double,dim>(element.type());\n- 263\n- 264 if (order()>3)\n- 265 DUNE_THROW(Dune::NotImplemented, \"LagrangeBasis for 3D grids is only\n-implemented if k<=3\");\n- 266\n- 267 if (order()==3 and !refElement.type(localKey.subEntity(), localKey.codim\n-()).isTriangle())\n- 268 DUNE_THROW(Dune::NotImplemented, \"LagrangeBasis for 3D grids with k==3 is\n-only implemented if the grid is a simplex grid\");\n- 269\n- 270 *it = {{ triangleOffset_ + ((size_type)gridIndexSet.subIndex\n-(element,localKey.subEntity(),localKey.codim())) }};\n- 271 continue;\n- 272 }\n- 273 }\n- 274\n- 275 if (dofDim==3)\n- 276 {\n- 277 if (dim==3) // element dof -- any local numbering is fine\n- 278 {\n- 279 if (element.type().isTetrahedron())\n- 280 {\n- 281 *it = {{ tetrahedronOffset_ + dofsPerSimplex(3)*(\n-(size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};\n- 282 continue;\n- 283 }\n- 284 else if (element.type().isHexahedron())\n- 285 {\n- 286 *it = {{ hexahedronOffset_ + dofsPerCube(3)*(\n-(size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};\n- 287 continue;\n+ 254 // Copy indices from first child for all other children\n+ 255 // and shift them by child index to interleave indices.\n+ 256 // multiIndices[child*subTreeSize+i] = multiIndices[i];\n+ 257 // multiIndices[child*subTreeSize+i][0] = multiIndices[i][0]+child;\n+ 258 (*next) = multiIndices[i];\n+ 259 (*next)[0] = multiIndices[i][0]+child;\n+ 260 ++next;\n+ 261 }\n+ 262 }\n+ 263 return next;\n+ 264 }\n+ 265\n+ 266 template<typename It>\n+ 267 It indices(const Node& node, It multiIndices, BasisFactory::\n+FlatLexicographic) const\n+ 268 {\n+ 269 using namespace Dune::Indices;\n+ 270 size_type subTreeSize = node.child(_0).size();\n+ 271 size_type firstIndexEntrySize = subPreBasis().size();\n+ 272 // Fill indices for first child at the beginning.\n+ 273 auto next = subPreBasis().indices(node.child(_0), multiIndices);\n+ 274 for (std::size_t child = 1; child<children; ++child)\n+ 275 {\n+ 276 for (std::size_t i = 0; i<subTreeSize; ++i)\n+ 277 {\n+ 278 // Copy indices from first child for all other children\n+ 279 // and shift them by suitable offset to get lexicographic indices.\n+ 280 // multiIndices[child*subTreeSize+i] = multiIndices[i];\n+ 281 // multiIndices[child*subTreeSize+i][0] += child*firstIndexEntrySize;\n+ 282 (*next) = multiIndices[i];\n+ 283 (*next)[0] += child*firstIndexEntrySize;\n+ 284 ++next;\n+ 285 }\n+ 286 }\n+ 287 return next;\n 288 }\n- 289 else if (element.type().isPrism())\n- 290 {\n- 291 *it = {{ prismOffset_ + dofsPerPrism()*((size_type)gridIndexSet.subIndex\n-(element,0,0)) + localKey.index() }};\n- 292 continue;\n- 293 }\n- 294 else if (element.type().isPyramid())\n- 295 {\n- 296 *it = {{ pyramidOffset_ + dofsPerPyramid()*(\n-(size_type)gridIndexSet.subIndex(element,0,0)) + localKey.index() }};\n- 297 continue;\n- 298 }\n- 299 else\n- 300 DUNE_THROW(Dune::NotImplemented, \"3d elements have to be tetrahedra,\n-hexahedra, prisms, or pyramids\");\n- 301 } else\n- 302 DUNE_THROW(Dune::NotImplemented, \"Grids of dimension larger than 3 are no\n-supported\");\n- 303 }\n- 304 DUNE_THROW(Dune::NotImplemented, \"Grid contains elements not supported for\n-the LagrangeBasis\");\n- 305 }\n- 306 return it;\n- 307 }\n- 308\n-310 unsigned int order() const\n- 311 {\n- 312 return (useDynamicOrder) ? order_ : k;\n- 313 }\n- 314\n- 315protected:\n-316 GridView gridView_;\n- 317\n- 318 // Run-time order, only valid if k<0\n-319 const unsigned int order_;\n- 320\n-322 size_type dofsPerSimplex(std::size_t simplexDim) const\n- 323 {\n- 324 return useDynamicOrder ? dofsPerSimplex_[simplexDim] :\n-computeDofsPerSimplex(simplexDim);\n- 325 }\n- 326\n-328 size_type dofsPerCube(std::size_t cubeDim) const\n- 329 {\n- 330 return useDynamicOrder ? dofsPerCube_[cubeDim] : computeDofsPerCube\n-(cubeDim);\n- 331 }\n- 332\n-333 size_type dofsPerPrism() const\n- 334 {\n- 335 return useDynamicOrder ? dofsPerPrism_ : computeDofsPerPrism();\n- 336 }\n- 337\n-338 size_type dofsPerPyramid() const\n- 339 {\n- 340 return useDynamicOrder ? dofsPerPyramid_ : computeDofsPerPyramid();\n- 341 }\n- 342\n-344 size_type computeDofsPerSimplex(std::size_t simplexDim) const\n- 345 {\n- 346 return order() == 0 ? (dim == simplexDim ? 1 : 0) : Dune::binomial(std::\n-size_t(order()-1),simplexDim);\n+ 289\n+ 290 template<class MultiIndex>\n+ 291 static void multiIndexPushFront(MultiIndex& M, size_type M0)\n+ 292 {\n+ 293 M.resize(M.size()+1);\n+ 294 for(std::size_t i=M.size()-1; i>0; --i)\n+ 295 M[i] = M[i-1];\n+ 296 M[0] = M0;\n+ 297 }\n+ 298\n+ 299 template<typename It>\n+ 300 It indices(const Node& node, It multiIndices, BasisFactory::\n+BlockedLexicographic) const\n+ 301 {\n+ 302 using namespace Dune::Indices;\n+ 303 size_type subTreeSize = node.child(_0).size();\n+ 304 // Fill indices for first child at the beginning.\n+ 305 auto next = subPreBasis().indices(node.child(_0), multiIndices);\n+ 306 // Insert 0 before first component of all indices for first child.\n+ 307 for (std::size_t i = 0; i<subTreeSize; ++i)\n+ 308 multiIndexPushFront(multiIndices[i], 0);\n+ 309 for (std::size_t child = 1; child<children; ++child)\n+ 310 {\n+ 311 for (std::size_t i = 0; i<subTreeSize; ++i)\n+ 312 {\n+ 313 // Copy indices from first child for all other children and overwrite\n+ 314 // zero in first component as inserted above by child index.\n+ 315 // multiIndices[child*subTreeSize+i] = multiIndices[i];\n+ 316 // multiIndices[child*subTreeSize+i][0] = child;\n+ 317 (*next) = multiIndices[i];\n+ 318 (*next)[0] = child;\n+ 319 ++next;\n+ 320 }\n+ 321 }\n+ 322 return next;\n+ 323 }\n+ 324\n+ 325 template<typename It>\n+ 326 It indices(const Node& node, It multiIndices, BasisFactory::\n+BlockedInterleaved) const\n+ 327 {\n+ 328 using namespace Dune::Indices;\n+ 329 size_type subTreeSize = node.child(_0).size();\n+ 330 // Fill indices for first child at the beginning.\n+ 331 auto next = subPreBasis().indices(node.child(_0), multiIndices);\n+ 332 // Append 0 after last component of all indices for first child.\n+ 333 for (std::size_t i = 0; i<subTreeSize; ++i)\n+ 334 multiIndices[i].push_back(0);\n+ 335 for (std::size_t child = 1; child<children; ++child)\n+ 336 {\n+ 337 for (std::size_t i = 0; i<subTreeSize; ++i)\n+ 338 {\n+ 339 // Copy indices from first child for all other children and overwrite\n+ 340 // zero in last component as appended above by child index.\n+ 341 (*next) = multiIndices[i];\n+ 342 (*next).back() = child;\n+ 343 ++next;\n+ 344 }\n+ 345 }\n+ 346 return next;\n 347 }\n 348\n-350 size_type computeDofsPerCube(std::size_t cubeDim) const\n- 351 {\n- 352 return order() == 0 ? (dim == cubeDim ? 1 : 0) : Dune::power(order()-1,\n-cubeDim);\n- 353 }\n- 354\n-355 size_type computeDofsPerPrism() const\n- 356 {\n- 357 return order() == 0 ? (dim == 3 ? 1 : 0) : (order()-1)*(order()-1)*(order\n-()-2)/2;\n- 358 }\n- 359\n-360 size_type computeDofsPerPyramid() const\n- 361 {\n- 362 return order() == 0 ? (dim == 3 ? 1 : 0) : (order()-2)*(order()-1)*\n-(2*order()-3)/6;\n- 363 }\n- 364\n- 365 // When the order is given at run-time, the following numbers are pre-\n-computed:\n-366 std::array<size_type,dim+1> dofsPerSimplex_;\n-367 std::array<size_type,dim+1> dofsPerCube_;\n-368 size_type dofsPerPrism_;\n-369 size_type dofsPerPyramid_;\n- 370\n-371 size_type vertexOffset_;\n-372 size_type edgeOffset_;\n-373 size_type triangleOffset_;\n-374 size_type quadrilateralOffset_;\n-375 size_type tetrahedronOffset_;\n-376 size_type pyramidOffset_;\n-377 size_type prismOffset_;\n-378 size_type hexahedronOffset_;\n- 379\n- 380};\n- 381\n- 382\n- 383\n- 384template<typename GV, int k, typename R>\n-385class LagrangeNode :\n- 386 public LeafBasisNode\n- 387{\n- 388 // Stores LocalFiniteElement implementations with run-time order as a\n-function of GeometryType\n- 389 template<typename Domain, typename Range, int dim>\n- 390 class LagrangeRunTimeLFECache\n- 391 {\n- 392 public:\n- 393 using FiniteElementType =\n-LagrangeLocalFiniteElement<EquidistantPointSet,dim,Domain,Range>;\n- 394\n- 395 const FiniteElementType& get(GeometryType type)\n- 396 {\n- 397 auto i = data_.find(type);\n- 398 if (i==data_.end())\n- 399 i = data_.emplace(type,FiniteElementType(type,order_)).first;\n- 400 return (*i).second;\n- 401 }\n+ 349 SubPreBasis subPreBasis_;\n+ 350};\n+ 351\n+ 352\n+ 353\n+ 354namespace BasisFactory {\n+ 355\n+ 368template<std::size_t k, class ChildPreBasisFactory, class\n+IndexMergingStrategy>\n+369auto power(ChildPreBasisFactory&& childPreBasisFactory, const\n+IndexMergingStrategy&)\n+ 370{\n+ 371 return [childPreBasisFactory](const auto& gridView) {\n+ 372 auto childPreBasis = childPreBasisFactory(gridView);\n+ 373 return PowerPreBasis<IndexMergingStrategy,_decltype(childPreBasis),_k>\n+(std::move(childPreBasis));\n+ 374 };\n+ 375}\n+ 376\n+ 387template<std::size_t k, class ChildPreBasisFactory>\n+388auto power(ChildPreBasisFactory&& childPreBasisFactory)\n+ 389{\n+ 390 return [childPreBasisFactory](const auto& gridView) {\n+ 391 auto childPreBasis = childPreBasisFactory(gridView);\n+ 392 return PowerPreBasis<BlockedInterleaved,_decltype(childPreBasis),_k>(std::\n+move(childPreBasis));\n+ 393 };\n+ 394}\n+ 395\n+ 396} // end namespace BasisFactory\n+ 397\n+ 398// Backward compatibility\n+ 399namespace BasisBuilder {\n+ 400\n+ 401 using namespace BasisFactory;\n 402\n- 403 std::map<GeometryType, FiniteElementType> data_;\n- 404 unsigned int order_;\n- 405 };\n- 406\n- 407 static constexpr int dim = GV::dimension;\n- 408 static constexpr bool useDynamicOrder = (k<0);\n+ 403}\n+ 404\n+ 405\n+ 406} // end namespace Functions\n+ 407} // end namespace Dune\n+ 408\n 409\n- 410 using FiniteElementCache = typename std::conditional<(useDynamicOrder),\n- 411 LagrangeRunTimeLFECache<typename GV::ctype, R, dim>,\n- 412 PQkLocalFiniteElementCache<typename GV::ctype, R, dim, k>\n- 413 >::type;\n- 414\n- 415public:\n- 416\n-417 using size_type = std::size_t;\n-418 using Element = typename GV::template Codim<0>::Entity;\n-419 using FiniteElement = typename FiniteElementCache::FiniteElementType;\n- 420\n-422 LagrangeNode() :\n- 423 finiteElement_(nullptr),\n- 424 element_(nullptr)\n- 425 {}\n- 426\n-428 LagrangeNode(unsigned int order) :\n- 429 order_(order),\n- 430 finiteElement_(nullptr),\n- 431 element_(nullptr)\n- 432 {\n- 433 // Only the cache for the run-time-order case (i.e., k<0), has the\n-'order_' member\n- 434 if constexpr (useDynamicOrder)\n- 435 cache_.order_ = order;\n- 436 }\n- 437\n-439 const Element& element() const\n- 440 {\n- 441 return *element_;\n- 442 }\n- 443\n-448 const FiniteElement& finiteElement() const\n- 449 {\n- 450 return *finiteElement_;\n- 451 }\n- 452\n-454 void bind(const Element& e)\n- 455 {\n- 456 element_ = &e;\n- 457 finiteElement_ = &(cache_.get(element_->type()));\n- 458 this->setSize(finiteElement_->size());\n- 459 }\n- 460\n- 461protected:\n- 462\n-463 unsigned int order() const\n- 464 {\n- 465 return (useDynamicOrder) ? order_ : k;\n- 466 }\n- 467\n- 468 // Run-time order, only valid if k<0\n-469 unsigned int order_;\n- 470\n-471 FiniteElementCache cache_;\n-472 const FiniteElement* finiteElement_;\n-473 const Element* element_;\n- 474};\n- 475\n- 476\n- 477\n- 478namespace BasisFactory {\n- 479\n- 488template<std::size_t k, typename R=double>\n-489auto lagrange()\n- 490{\n- 491 return [](const auto& gridView) {\n- 492 return LagrangePreBasis<std::decay_t<decltype(gridView)>, k, R>(gridView);\n- 493 };\n- 494}\n- 495\n- 503template<typename R=double>\n-504auto lagrange(int order)\n- 505{\n- 506 return [=](const auto& gridView) {\n- 507 return LagrangePreBasis<std::decay_t<decltype(gridView)>, -1, R>(gridView,\n-order);\n- 508 };\n- 509}\n- 510\n- 511} // end namespace BasisFactory\n- 512\n- 513\n- 514\n- 538template<typename GV, int k=-1, typename R=double>\n-539using LagrangeBasis = DefaultGlobalBasis<LagrangePreBasis<GV,_k,_R> >;\n- 540\n- 541\n- 542\n- 543\n- 544\n- 545} // end namespace Functions\n- 546} // end namespace Dune\n- 547\n- 548\n- 549#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEBASIS_HH\n+ 410#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_POWERBASIS_HH\n+type_traits.hh\n+utility.hh\n defaultglobalbasis.hh\n+basistags.hh\n nodes.hh\n Dune::Functions::BasisFactory::power\n-auto power(ChildPreBasisFactory &&childPreBasisFactory, const\n-IndexMergingStrategy &)\n-Create a pre-basis factory that can build a PowerPreBasis.\n-Definition: powerbasis.hh:369\n-Dune::Functions::BasisFactory::lagrange\n-auto lagrange()\n-Create a pre-basis factory that can create a Lagrange pre-basis.\n-Definition: lagrangebasis.hh:489\n+auto power(ChildPreBasisFactory &&childPreBasisFactory)\n+Create a factory builder that can build a PowerPreBasis.\n+Definition: powerbasis.hh:388\n+Dune::Functions::enableIfConstructible\n+typename std::enable_if< std::is_constructible< T, Args... >::value, int >::\n+type enableIfConstructible\n+Helper to constrain forwarding constructors.\n+Definition: type_traits.hh:26\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::DefaultGlobalBasis\n-Global basis for given pre-basis.\n-Definition: defaultglobalbasis.hh:46\n-Dune::Functions::LagrangeNode\n-Definition: lagrangebasis.hh:387\n-Dune::Functions::LagrangeNode::LagrangeNode\n-LagrangeNode(unsigned int order)\n-Constructor with a run-time order.\n-Definition: lagrangebasis.hh:428\n-Dune::Functions::LagrangeNode::order\n-unsigned int order() const\n-Definition: lagrangebasis.hh:463\n-Dune::Functions::LagrangeNode::finiteElement\n-const FiniteElement & finiteElement() const\n-Return the LocalFiniteElement for the element we are bound to.\n-Definition: lagrangebasis.hh:448\n-Dune::Functions::LagrangeNode::element_\n-const Element * element_\n-Definition: lagrangebasis.hh:473\n-Dune::Functions::LagrangeNode::element\n-const Element & element() const\n-Return current element, throw if unbound.\n-Definition: lagrangebasis.hh:439\n-Dune::Functions::LagrangeNode::cache_\n-FiniteElementCache cache_\n-Definition: lagrangebasis.hh:471\n-Dune::Functions::LagrangeNode::FiniteElement\n-typename FiniteElementCache::FiniteElementType FiniteElement\n-Definition: lagrangebasis.hh:419\n-Dune::Functions::LagrangeNode::bind\n-void bind(const Element &e)\n-Bind to element.\n-Definition: lagrangebasis.hh:454\n-Dune::Functions::LagrangeNode::Element\n-typename GV::template Codim< 0 >::Entity Element\n-Definition: lagrangebasis.hh:418\n-Dune::Functions::LagrangeNode::finiteElement_\n-const FiniteElement * finiteElement_\n-Definition: lagrangebasis.hh:472\n-Dune::Functions::LagrangeNode::order_\n-unsigned int order_\n-Definition: lagrangebasis.hh:469\n-Dune::Functions::LagrangeNode::size_type\n-std::size_t size_type\n-Definition: lagrangebasis.hh:417\n-Dune::Functions::LagrangeNode::LagrangeNode\n-LagrangeNode()\n-Constructor without order (uses the compile-time value)\n-Definition: lagrangebasis.hh:422\n-Dune::Functions::LagrangePreBasis\n-A pre-basis for a PQ-lagrange bases with given order.\n-Definition: lagrangebasis.hh:55\n-Dune::Functions::LagrangePreBasis::dofsPerPrism\n-size_type dofsPerPrism() const\n-Definition: lagrangebasis.hh:333\n-Dune::Functions::LagrangePreBasis::computeDofsPerCube\n-size_type computeDofsPerCube(std::size_t cubeDim) const\n-Number of degrees of freedom assigned to a cube (without the ones assigned to\n-its faces!...\n-Definition: lagrangebasis.hh:350\n-Dune::Functions::LagrangePreBasis::computeDofsPerSimplex\n-size_type computeDofsPerSimplex(std::size_t simplexDim) const\n-Number of degrees of freedom assigned to a simplex (without the ones assigned\n-to its faces!...\n-Definition: lagrangebasis.hh:344\n-Dune::Functions::LagrangePreBasis::maxMultiIndexSize\n-static constexpr size_type maxMultiIndexSize\n-Definition: lagrangebasis.hh:70\n-Dune::Functions::LagrangePreBasis::computeDofsPerPrism\n-size_type computeDofsPerPrism() const\n-Definition: lagrangebasis.hh:355\n-Dune::Functions::LagrangePreBasis::edgeOffset_\n-size_type edgeOffset_\n-Definition: lagrangebasis.hh:372\n-Dune::Functions::LagrangePreBasis::dofsPerSimplex_\n-std::array< size_type, dim+1 > dofsPerSimplex_\n-Definition: lagrangebasis.hh:366\n-Dune::Functions::LagrangePreBasis::indices\n-It indices(const Node &node, It it) const\n-Definition: lagrangebasis.hh:192\n-Dune::Functions::LagrangePreBasis::vertexOffset_\n-size_type vertexOffset_\n-Definition: lagrangebasis.hh:371\n-Dune::Functions::LagrangePreBasis::dofsPerSimplex\n-size_type dofsPerSimplex(std::size_t simplexDim) const\n-Number of degrees of freedom assigned to a simplex (without the ones assigned\n-to its faces!...\n-Definition: lagrangebasis.hh:322\n-Dune::Functions::LagrangePreBasis::size_type\n+Dune::Functions::BasisFactory::IndexMergingStrategy\n+Base class for index merging strategies to simplify detection.\n+Definition: basistags.hh:44\n+Dune::Functions::BasisFactory::FlatInterleaved\n+Interleaved merging of direct children without blocking.\n+Definition: basistags.hh:114\n+Dune::Functions::PowerBasisNode\n+Definition: nodes.hh:193\n+Dune::Functions::PowerPreBasis\n+A pre-basis for power bases.\n+Definition: powerbasis.hh:45\n+Dune::Functions::PowerPreBasis::dimension\n+size_type dimension() const\n+Get the total dimension of the space spanned by this basis.\n+Definition: powerbasis.hh:207\n+Dune::Functions::PowerPreBasis::size_type\n std::size_t size_type\n Type used for indices and size information.\n-Definition: lagrangebasis.hh:65\n-Dune::Functions::LagrangePreBasis::pyramidOffset_\n-size_type pyramidOffset_\n-Definition: lagrangebasis.hh:376\n-Dune::Functions::LagrangePreBasis::prismOffset_\n-size_type prismOffset_\n-Definition: lagrangebasis.hh:377\n-Dune::Functions::LagrangePreBasis::tetrahedronOffset_\n-size_type tetrahedronOffset_\n-Definition: lagrangebasis.hh:375\n-Dune::Functions::LagrangePreBasis::initializeIndices\n+Definition: powerbasis.hh:58\n+Dune::Functions::PowerPreBasis::IndexMergingStrategy\n+IMS IndexMergingStrategy\n+Strategy used to merge the global indices of the child factories.\n+Definition: powerbasis.hh:61\n+Dune::Functions::PowerPreBasis::Node\n+PowerBasisNode< SubNode, children > Node\n+Template mapping root tree path to type of created tree node.\n+Definition: powerbasis.hh:66\n+Dune::Functions::PowerPreBasis::GridView\n+typename SPB::GridView GridView\n+The grid view that the FE basis is defined on.\n+Definition: powerbasis.hh:55\n+Dune::Functions::PowerPreBasis::multiIndexBufferSize\n+static constexpr size_type multiIndexBufferSize\n+Definition: powerbasis.hh:70\n+Dune::Functions::PowerPreBasis::SubPreBasis\n+SPB SubPreBasis\n+The child pre-basis.\n+Definition: powerbasis.hh:52\n+Dune::Functions::PowerPreBasis::SubNode\n+typename SubPreBasis::Node SubNode\n+Definition: powerbasis.hh:63\n+Dune::Functions::PowerPreBasis::initializeIndices\n void initializeIndices()\n Initialize the global indices.\n-Definition: lagrangebasis.hh:96\n-Dune::Functions::LagrangePreBasis::computeDofsPerPyramid\n-size_type computeDofsPerPyramid() const\n-Definition: lagrangebasis.hh:360\n-Dune::Functions::LagrangePreBasis::LagrangePreBasis\n-LagrangePreBasis(const GridView &gv, unsigned int order)\n-Constructor for a given grid view object and run-time order.\n-Definition: lagrangebasis.hh:80\n-Dune::Functions::LagrangePreBasis::dofsPerPyramid_\n-size_type dofsPerPyramid_\n-Definition: lagrangebasis.hh:369\n-Dune::Functions::LagrangePreBasis::dimension\n-size_type dimension() const\n-Get the total dimension of the space spanned by this basis.\n-Definition: lagrangebasis.hh:178\n-Dune::Functions::LagrangePreBasis::LagrangePreBasis\n-LagrangePreBasis(const GridView &gv)\n-Constructor for a given grid view object with compile-time order.\n-Definition: lagrangebasis.hh:75\n-Dune::Functions::LagrangePreBasis::update\n+Definition: powerbasis.hh:87\n+Dune::Functions::PowerPreBasis::update\n void update(const GridView &gv)\n Update the stored grid view, to be called if the grid has changed.\n-Definition: lagrangebasis.hh:126\n-Dune::Functions::LagrangePreBasis::size\n-size_type size(const SizePrefix &prefix) const\n-Return number of possible values for next position in multi index.\n-Definition: lagrangebasis.hh:171\n-Dune::Functions::LagrangePreBasis::multiIndexBufferSize\n-static constexpr size_type multiIndexBufferSize\n-Definition: lagrangebasis.hh:72\n-Dune::Functions::LagrangePreBasis::GridView\n-GV GridView\n-The grid view that the FE basis is defined on.\n-Definition: lagrangebasis.hh:62\n-Dune::Functions::LagrangePreBasis::quadrilateralOffset_\n-size_type quadrilateralOffset_\n-Definition: lagrangebasis.hh:374\n-Dune::Functions::LagrangePreBasis::gridView\n-const GridView & gridView() const\n-Obtain the grid view that the basis is defined on.\n-Definition: lagrangebasis.hh:120\n-Dune::Functions::LagrangePreBasis::gridView_\n-GridView gridView_\n-Definition: lagrangebasis.hh:316\n-Dune::Functions::LagrangePreBasis::makeNode\n+Definition: powerbasis.hh:99\n+Dune::Functions::PowerPreBasis::indices\n+It indices(const Node &node, It it) const\n+Maps from subtree index set [0..size-1] to a globally unique multi index in\n+global basis.\n+Definition: powerbasis.hh:232\n+Dune::Functions::PowerPreBasis::PowerPreBasis\n+PowerPreBasis(SFArgs &&... sfArgs)\n+Constructor for given child pre-basis objects.\n+Definition: powerbasis.hh:80\n+Dune::Functions::PowerPreBasis::size\n+size_type size() const\n+Same as size(prefix) with empty prefix.\n+Definition: powerbasis.hh:116\n+Dune::Functions::PowerPreBasis::subPreBasis\n+SubPreBasis & subPreBasis()\n+Mutable access to the stored prebasis of the factor in the power space.\n+Definition: powerbasis.hh:225\n+Dune::Functions::PowerPreBasis::makeNode\n Node makeNode() const\n Create tree node.\n-Definition: lagrangebasis.hh:134\n-Dune::Functions::LagrangePreBasis::order\n-unsigned int order() const\n-Polynomial order used in the local Lagrange finite-elements.\n-Definition: lagrangebasis.hh:310\n-Dune::Functions::LagrangePreBasis::order_\n-const unsigned int order_\n-Definition: lagrangebasis.hh:319\n-Dune::Functions::LagrangePreBasis::dofsPerCube_\n-std::array< size_type, dim+1 > dofsPerCube_\n-Definition: lagrangebasis.hh:367\n-Dune::Functions::LagrangePreBasis::maxNodeSize\n+Definition: powerbasis.hh:107\n+Dune::Functions::PowerPreBasis::maxMultiIndexSize\n+static constexpr size_type maxMultiIndexSize\n+Definition: powerbasis.hh:68\n+Dune::Functions::PowerPreBasis::minMultiIndexSize\n+static constexpr size_type minMultiIndexSize\n+Definition: powerbasis.hh:69\n+Dune::Functions::PowerPreBasis::maxNodeSize\n size_type maxNodeSize() const\n Get the maximal number of DOFs associated to node for any element.\n-Definition: lagrangebasis.hh:184\n-Dune::Functions::LagrangePreBasis::size\n-size_type size() const\n-Same as size(prefix) with empty prefix.\n-Definition: lagrangebasis.hh:140\n-Dune::Functions::LagrangePreBasis::dofsPerPrism_\n-size_type dofsPerPrism_\n-Definition: lagrangebasis.hh:368\n-Dune::Functions::LagrangePreBasis::dofsPerCube\n-size_type dofsPerCube(std::size_t cubeDim) const\n-Number of degrees of freedom assigned to a cube (without the ones assigned to\n-its faces!...\n-Definition: lagrangebasis.hh:328\n-Dune::Functions::LagrangePreBasis::triangleOffset_\n-size_type triangleOffset_\n-Definition: lagrangebasis.hh:373\n-Dune::Functions::LagrangePreBasis::hexahedronOffset_\n-size_type hexahedronOffset_\n-Definition: lagrangebasis.hh:378\n-Dune::Functions::LagrangePreBasis::minMultiIndexSize\n-static constexpr size_type minMultiIndexSize\n-Definition: lagrangebasis.hh:71\n-Dune::Functions::LagrangePreBasis::dofsPerPyramid\n-size_type dofsPerPyramid() const\n-Definition: lagrangebasis.hh:338\n-Dune::Functions::BasisNodeMixin::setSize\n-void setSize(const size_type size)\n-Definition: nodes.hh:164\n-Dune::Functions::LeafBasisNode\n-Definition: nodes.hh:186\n+Definition: powerbasis.hh:213\n+Dune::Functions::PowerPreBasis::gridView\n+const GridView & gridView() const\n+Obtain the grid view that the basis is defined on.\n+Definition: powerbasis.hh:93\n+Dune::Functions::PowerPreBasis::size\n+size_type size(const SizePrefix &prefix) const\n+Return number of possible values for next position in multi index.\n+Definition: powerbasis.hh:124\n+Dune::Functions::PowerPreBasis::subPreBasis\n+const SubPreBasis & subPreBasis() const\n+Const access to the stored prebasis of the factor in the power space.\n+Definition: powerbasis.hh:219\n+concepts.hh\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00128.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00128.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: flatvectorview.hh File Reference</title>\n+<title>dune-functions: defaultlocalview.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -63,48 +63,42 @@\n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n-<a href=\"#namespaces\">Namespaces</a> |\n-<a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">flatvectorview.hh File Reference</div></div>\n+<a href=\"#nested-classes\">Classes</a> |\n+<a href=\"#namespaces\">Namespaces</a> </div>\n+ <div class=\"headertitle\"><div class=\"title\">defaultlocalview.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <array></code><br />\n+<div class=\"textblock\"><code>#include <tuple></code><br />\n+<code>#include <optional></code><br />\n <code>#include <dune/common/concept.hh></code><br />\n <code>#include <dune/common/hybridutilities.hh></code><br />\n-<code>#include <dune/common/indices.hh></code><br />\n+<code>#include <dune/common/reservedvector.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00059_source.html\">dune/functions/common/overflowarray.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00032_source.html\">dune/functions/common/multiindex.hh</a>></code><br />\n <code>#include <<a class=\"el\" href=\"a02876_source.html\">dune/functions/functionspacebases/concepts.hh</a>></code><br />\n </div>\n <p><a href=\"a00128_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n+Classes</h2></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01559.html\">Dune::Functions::DefaultLocalView< GB ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">The restriction of a finite element basis to a single element. <a href=\"a01559.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+</table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-</table><table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n-Functions</h2></td></tr>\n-<tr class=\"memitem:ad98b265d97ebd619e7732df6a8d1f7da\"><td class=\"memTemplParams\" colspan=\"2\">template<class T > </td></tr>\n-<tr class=\"memitem:ad98b265d97ebd619e7732df6a8d1f7da\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\">Dune::Functions::flatVectorView</a> (T &t)</td></tr>\n-<tr class=\"memdesc:ad98b265d97ebd619e7732df6a8d1f7da\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create flat vector view of passed mutable container. <a href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\">More...</a><br /></td></tr>\n-<tr class=\"separator:ad98b265d97ebd619e7732df6a8d1f7da\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:ac37c350bd2f6cb4fea793ac4f665c0fe\"><td class=\"memTemplParams\" colspan=\"2\">template<class T > </td></tr>\n-<tr class=\"memitem:ac37c350bd2f6cb4fea793ac4f665c0fe\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#ac37c350bd2f6cb4fea793ac4f665c0fe\">Dune::Functions::flatVectorView</a> (const T &t)</td></tr>\n-<tr class=\"memdesc:ac37c350bd2f6cb4fea793ac4f665c0fe\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create flat vector view of passed const container. <a href=\"a00219.html#ac37c350bd2f6cb4fea793ac4f665c0fe\">More...</a><br /></td></tr>\n-<tr class=\"separator:ac37c350bd2f6cb4fea793ac4f665c0fe\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a4fac6802f21000f59e52aade3cd47b08\"><td class=\"memTemplParams\" colspan=\"2\">template<class T > </td></tr>\n-<tr class=\"memitem:a4fac6802f21000f59e52aade3cd47b08\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a4fac6802f21000f59e52aade3cd47b08\">Dune::Functions::flatVectorView</a> (T &&t)</td></tr>\n-<tr class=\"memdesc:a4fac6802f21000f59e52aade3cd47b08\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create flat vector view of passed container temporary. <a href=\"a00219.html#a4fac6802f21000f59e52aade3cd47b08\">More...</a><br /></td></tr>\n-<tr class=\"separator:a4fac6802f21000f59e52aade3cd47b08\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,36 +5,30 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-Namespaces | Functions\n-flatvectorview.hh File Reference\n-#include <array>\n+Classes | Namespaces\n+defaultlocalview.hh File Reference\n+#include <tuple>\n+#include <optional>\n #include <dune/common/concept.hh>\n #include <dune/common/hybridutilities.hh>\n-#include <dune/common/indices.hh>\n+#include <dune/common/reservedvector.hh>\n+#include <dune/functions/common/overflowarray.hh>\n+#include <dune/functions/common/multiindex.hh>\n #include <dune/functions/functionspacebases/concepts.hh>\n Go_to_the_source_code_of_this_file.\n+ Classes\n+class \u00a0Dune::Functions::DefaultLocalView<_GB_>\n+\u00a0 The restriction of a finite element basis to a single element. More...\n+\u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n- Functions\n-template<class T >\n-auto\u00a0Dune::Functions::flatVectorView (T &t)\n-\u00a0 Create flat vector view of passed mutable container. More...\n-\u00a0\n-template<class T >\n-auto\u00a0Dune::Functions::flatVectorView (const T &t)\n-\u00a0 Create flat vector view of passed const container. More...\n-\u00a0\n-template<class T >\n-auto\u00a0Dune::Functions::flatVectorView (T &&t)\n-\u00a0 Create flat vector view of passed container temporary. More...\n-\u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00128_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00128_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: flatvectorview.hh Source File</title>\n+<title>dune-functions: defaultlocalview.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,208 +62,189 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">flatvectorview.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">defaultlocalview.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00128.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATVECTORVIEW_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATVECTORVIEW_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n <div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span> </div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <array></span></div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/common/concept.hh></span></div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/hybridutilities.hh></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/common/indices.hh></span></div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a02876.html\">dune/functions/functionspacebases/concepts.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <tuple></span></div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <optional></span></div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/concept.hh></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/common/hybridutilities.hh></span></div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <dune/common/reservedvector.hh></span></div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00059.html\">dune/functions/common/overflowarray.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00032.html\">dune/functions/common/multiindex.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a02876.html\">dune/functions/functionspacebases/concepts.hh</a>></span></div>\n <div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"keyword\">namespace </span>Impl {</div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> </div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"keyword\">namespace </span>Functions {</div>\n <div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> </div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> V></div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"keyword\">struct </span>FlatVectorBackend</div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span>{</div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> </div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>VV, <span class=\"keyword\">class </span>Index,</div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> <span class=\"keyword\">typename</span> std::enable_if< models<Concept::HasIndexAccess, VV, Index>(), <span class=\"keywordtype\">int</span>>::type = 0></div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span> <span class=\"keyword\">static</span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) getEntry(VV&& v, <span class=\"keyword\">const</span> Index& i)</div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> {</div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> <span class=\"keywordflow\">return</span> v[i];</div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> }</div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span> </div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> </div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> GB></div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html\"> 27</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01559.html\">DefaultLocalView</a></div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span>{</div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> </div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#a9523d45b214ee146d2135416d01aceda\"> 32</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01559.html#a9523d45b214ee146d2135416d01aceda\">GlobalBasis</a> = GB;</div>\n <div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> </div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>VV, <span class=\"keyword\">class </span>Index,</div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> <span class=\"keyword\">typename</span> std::enable_if< not models<Concept::HasIndexAccess, VV, Index>(), <span class=\"keywordtype\">int</span>>::type = 0></div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> <span class=\"keyword\">static</span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) getEntry(VV&& v, <span class=\"keyword\">const</span> Index&)</div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> {</div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> <span class=\"keywordflow\">return</span> std::forward<VV>(v);</div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> }</div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> </div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>VV,</div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> <span class=\"keyword\">typename</span> std::enable_if< models<Concept::HasSizeMethod, VV>(), <span class=\"keywordtype\">int</span>>::type = 0></div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> <span class=\"keyword\">static</span> <span class=\"keyword\">auto</span> size(VV&& v)</div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> {</div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> <span class=\"keywordflow\">return</span> Dune::Hybrid::size(v);</div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> }</div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#a29917f5ca32a2b2df56b1ae72c2a25ca\"> 35</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01559.html#a29917f5ca32a2b2df56b1ae72c2a25ca\">GridView</a> = <span class=\"keyword\">typename</span> GlobalBasis::GridView;</div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> </div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#a5ff210d62e5d3e52189808a8881f1911\"> 38</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01559.html#a5ff210d62e5d3e52189808a8881f1911\">Element</a> = <span class=\"keyword\">typename</span> GridView::template Codim<0>::Entity;</div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> </div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#ab1f301991c77e4923149d845044001bf\"> 41</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01559.html#ab1f301991c77e4923149d845044001bf\">size_type</a> = std::size_t;</div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> </div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#adeb4377aeb75298c38c5516719ab5e09\"> 44</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01559.html#adeb4377aeb75298c38c5516719ab5e09\">Tree</a> = <span class=\"keyword\">typename</span> GlobalBasis::PreBasis::Node;</div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> </div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span><span class=\"keyword\">protected</span>:</div>\n <div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>VV,</div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> <span class=\"keyword\">typename</span> std::enable_if< not models<Concept::HasSizeMethod, VV>(), <span class=\"keywordtype\">int</span>>::type = 0></div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> <span class=\"keyword\">static</span> <span class=\"keyword\">auto</span> size(VV&&)</div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> {</div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> <span class=\"keywordflow\">return</span> Dune::index_constant<1>{};</div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> }</div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span>};</div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> </div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> </div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#a0fcc00c7b8afe993e08c9fbf9bb9efff\"> 48</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01559.html#a0fcc00c7b8afe993e08c9fbf9bb9efff\">PreBasis</a> = <span class=\"keyword\">typename</span> GlobalBasis::PreBasis;</div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> </div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> <span class=\"comment\">// Type used to store the multi indices of the basis vectors.</span></div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> <span class=\"comment\">// In contrast to MultiIndex this always has dynamic size.</span></div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> <span class=\"comment\">// It's guaranteed, that you can always cast it to MultiIndex</span></div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#acc3dcfbb6962f1023cc1113b07b76102\"> 53</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01559.html#acc3dcfbb6962f1023cc1113b07b76102\">MultiIndexStorage</a> =</div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> std::conditional_t<(PreBasis::minMultiIndexSize == PreBasis::maxMultiIndexSize),</div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> <a class=\"code hl_class\" href=\"a01275.html\">OverflowArray</a><<a class=\"code hl_class\" href=\"a01263.html\">StaticMultiIndex<size_type, PreBasis::maxMultiIndexSize></a>, PreBasis::multiIndexBufferSize>,</div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> Dune::ReservedVector<size_type, PreBasis::multiIndexBufferSize>>;</div>\n <div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> </div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> </div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> K, <span class=\"keywordtype\">int</span> n, <span class=\"keywordtype\">int</span> m></div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span><span class=\"keyword\">struct </span>FlatVectorBackend<typename <a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a>::FieldMatrix<K, n, m> ></div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span>{</div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> </div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> VV, <span class=\"keyword\">class</span> Index></div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> <span class=\"keyword\">static</span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) getEntry(VV&& v, <span class=\"keyword\">const</span> Index& i)</div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> {</div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> <span class=\"keywordflow\">return</span> v[i/m][i%m];</div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> }</div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> </div>\n-<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> VV></div>\n-<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> <span class=\"keyword\">static</span> <span class=\"keyword\">auto</span> size(VV&& v)</div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> </div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#acffe4cd37e8a7720e1a3eced31570c5a\"> 61</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01559.html#acffe4cd37e8a7720e1a3eced31570c5a\">MultiIndex</a> =</div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> std::conditional_t<(PreBasis::minMultiIndexSize == PreBasis::maxMultiIndexSize),</div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> <a class=\"code hl_class\" href=\"a01263.html\">StaticMultiIndex<size_type, PreBasis::maxMultiIndexSize></a>,</div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> Dune::ReservedVector<size_type, PreBasis::multiIndexBufferSize>>;</div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> </div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> </div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#ae47ddda96d907628497ded87d44f38d0\"> 68</a></span> <a class=\"code hl_function\" href=\"a01559.html#ae47ddda96d907628497ded87d44f38d0\">DefaultLocalView</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01559.html#a9523d45b214ee146d2135416d01aceda\">GlobalBasis</a>& <a class=\"code hl_function\" href=\"a01559.html#afa30602e3769204e2cfe86f3ffc90817\">globalBasis</a>) :</div>\n+<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> <a class=\"code hl_variable\" href=\"a01559.html#aeedcb16a681bc1d7721351bd7125a951\">globalBasis_</a>(&<a class=\"code hl_function\" href=\"a01559.html#afa30602e3769204e2cfe86f3ffc90817\">globalBasis</a>),</div>\n+<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> <a class=\"code hl_variable\" href=\"a01559.html#aa139b45a7e58c7183d2c38ad71ef4bd3\">tree_</a>(<a class=\"code hl_variable\" href=\"a01559.html#aeedcb16a681bc1d7721351bd7125a951\">globalBasis_</a>->preBasis().makeNode())</div>\n <div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> {</div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> <span class=\"keywordflow\">return</span> Dune::index_constant<n*m>{};</div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> }</div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span>};</div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> <span class=\"keyword\">static_assert</span>(models<Concept::BasisTree<GridView>, <a class=\"code hl_typedef\" href=\"a01559.html#adeb4377aeb75298c38c5516719ab5e09\">Tree</a>>(), <span class=\"stringliteral\">"Tree type passed to DefaultLocalView does not model the BasisNode concept."</span>);</div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> <a class=\"code hl_function\" href=\"a00219.html#a5e19b913a34ad68144f4fd873c51b977\">initializeTree</a>(<a class=\"code hl_variable\" href=\"a01559.html#aa139b45a7e58c7183d2c38ad71ef4bd3\">tree_</a>);</div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> }</div>\n <div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> </div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> </div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> </div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> K, std::<span class=\"keywordtype\">size_t</span> n></div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span><span class=\"keyword\">struct </span>FlatVectorBackend< std::array<K, n> ></div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span>{</div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> </div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> VV, <span class=\"keyword\">class</span> Index></div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> <span class=\"keyword\">static</span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) getEntry(VV&& v, <span class=\"keyword\">const</span> Index& i)</div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> {</div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span> innerSize = <span class=\"keyword\">decltype</span>(FlatVectorBackend<K>::size(v[0]))::value;</div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> <span class=\"keywordflow\">return</span> FlatVectorBackend<K>::getEntry(v[i/innerSize], i%innerSize);</div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#a89ec09c03236189c4bd9d41cae713cae\"> 81</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01559.html#a89ec09c03236189c4bd9d41cae713cae\">bind</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01559.html#a5ff210d62e5d3e52189808a8881f1911\">Element</a>& e)</div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> {</div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> <a class=\"code hl_variable\" href=\"a01559.html#a47292fa1338b995ad8ab511f4fc66fe5\">element_</a> = e;</div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> <a class=\"code hl_function\" href=\"a00219.html#a4dc892a209e0f55bc65eadaf2c808454\">bindTree</a>(<a class=\"code hl_variable\" href=\"a01559.html#aa139b45a7e58c7183d2c38ad71ef4bd3\">tree_</a>, *<a class=\"code hl_variable\" href=\"a01559.html#a47292fa1338b995ad8ab511f4fc66fe5\">element_</a>);</div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> <a class=\"code hl_variable\" href=\"a01559.html#ad3e344f7adb2d81622de39ae3c80468e\">indices_</a>.resize(<a class=\"code hl_function\" href=\"a01559.html#a943c5bd1c1b92e5a9ff93286ec0ed341\">size</a>());</div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> <a class=\"code hl_variable\" href=\"a01559.html#aeedcb16a681bc1d7721351bd7125a951\">globalBasis_</a>->preBasis().indices(<a class=\"code hl_variable\" href=\"a01559.html#aa139b45a7e58c7183d2c38ad71ef4bd3\">tree_</a>, <a class=\"code hl_variable\" href=\"a01559.html#ad3e344f7adb2d81622de39ae3c80468e\">indices_</a>.begin());</div>\n <div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> }</div>\n <div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> </div>\n-<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> VV></div>\n-<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> <span class=\"keyword\">static</span> <span class=\"keyword\">auto</span> size(VV&& v)</div>\n-<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> {</div>\n-<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span> innerSize = <span class=\"keyword\">decltype</span>(FlatVectorBackend<K>::size(v[0]))::value;</div>\n-<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> <span class=\"keywordflow\">return</span> Dune::index_constant<n*innerSize>{};</div>\n+<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> [[deprecated(<span class=\"stringliteral\">"Use the bound() method instead"</span>)]]</div>\n+<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#ab9794df271c84c6966690560ddaf21e7\"> 92</a></span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a01559.html#ab9794df271c84c6966690560ddaf21e7\">isBound</a>()<span class=\"keyword\"> const </span>{</div>\n+<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> <span class=\"keywordflow\">return</span> <span class=\"keyword\">static_cast<</span><span class=\"keywordtype\">bool</span><span class=\"keyword\">></span>(<a class=\"code hl_variable\" href=\"a01559.html#a47292fa1338b995ad8ab511f4fc66fe5\">element_</a>);</div>\n <div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> }</div>\n <div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> </div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span>};</div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> </div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> </div>\n-<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> </div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> </div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n-<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span><span class=\"keyword\">class </span>FlatVectorView</div>\n-<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span>{</div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> <span class=\"keyword\">using </span>Backend = FlatVectorBackend<std::decay_t<T>>;</div>\n-<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> FlatVectorView(T& t) :</div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> t_(&t)</div>\n-<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> {}</div>\n-<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> </div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> <span class=\"keyword\">auto</span> size()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> <span class=\"keywordflow\">return</span> Backend::size(*t_);</div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> }</div>\n-<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> </div>\n-<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Index></div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <span class=\"keyword\">operator</span>[](<span class=\"keyword\">const</span> Index& i) <span class=\"keyword\">const</span></div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#a198ccca836349c34a08f75351a1a29b0\"> 98</a></span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a01559.html#a198ccca836349c34a08f75351a1a29b0\">bound</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> <span class=\"keywordflow\">return</span> <span class=\"keyword\">static_cast<</span><span class=\"keywordtype\">bool</span><span class=\"keyword\">></span>(<a class=\"code hl_variable\" href=\"a01559.html#a47292fa1338b995ad8ab511f4fc66fe5\">element_</a>);</div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> }</div>\n+<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> </div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#a8bf835186bb00012f86be12becf03a04\"> 107</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01559.html#a5ff210d62e5d3e52189808a8881f1911\">Element</a>& <a class=\"code hl_function\" href=\"a01559.html#a8bf835186bb00012f86be12becf03a04\">element</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> <span class=\"keywordflow\">return</span> *<a class=\"code hl_variable\" href=\"a01559.html#a47292fa1338b995ad8ab511f4fc66fe5\">element_</a>;</div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> }</div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> </div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#a15b7fa9e24937ca74a8d9329512d6aa0\"> 116</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01559.html#a15b7fa9e24937ca74a8d9329512d6aa0\">unbind</a>()</div>\n <div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> {</div>\n-<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> <span class=\"keywordflow\">return</span> Backend::getEntry(*t_, i);</div>\n+<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> <a class=\"code hl_variable\" href=\"a01559.html#a47292fa1338b995ad8ab511f4fc66fe5\">element_</a>.reset();</div>\n <div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> }</div>\n <div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> </div>\n-<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Index></div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <span class=\"keyword\">operator</span>[](<span class=\"keyword\">const</span> Index& i)</div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> {</div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> <span class=\"keywordflow\">return</span> Backend::getEntry(*t_, i);</div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> }</div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> </div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span><span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> T* t_;</div>\n-<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span>};</div>\n-<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> </div>\n-<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> </div>\n-<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n-<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span><span class=\"keyword\">class </span>FlatVectorView<T&&></div>\n-<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span>{</div>\n-<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> <span class=\"keyword\">using </span>Backend = FlatVectorBackend<std::decay_t<T>>;</div>\n-<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> FlatVectorView(T&& t) :</div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> t_(std::move(t))</div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> {}</div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> </div>\n-<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> <span class=\"keyword\">auto</span> size()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> <span class=\"keywordflow\">return</span> Backend::size(t_);</div>\n-<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> }</div>\n-<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> </div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Index></div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <span class=\"keyword\">operator</span>[](<span class=\"keyword\">const</span> Index& i) <span class=\"keyword\">const</span></div>\n-<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> {</div>\n-<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> <span class=\"keywordflow\">return</span> Backend::getEntry(t_, i);</div>\n-<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> }</div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> </div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Index></div>\n-<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <span class=\"keyword\">operator</span>[](<span class=\"keyword\">const</span> Index& i)</div>\n-<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> {</div>\n-<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> <span class=\"keywordflow\">return</span> Backend::getEntry(t_, i);</div>\n-<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> }</div>\n-<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> </div>\n-<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span><span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> T t_;</div>\n-<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span>};</div>\n-<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> </div>\n-<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span>} <span class=\"comment\">// namespace Impl</span></div>\n-<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> </div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> </div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#a6796b00299c502430bea728eee078c50\"> 125</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01559.html#adeb4377aeb75298c38c5516719ab5e09\">Tree</a>& <a class=\"code hl_function\" href=\"a01559.html#a6796b00299c502430bea728eee078c50\">tree</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01559.html#aa139b45a7e58c7183d2c38ad71ef4bd3\">tree_</a>;</div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> }</div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> </div>\n+<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#a943c5bd1c1b92e5a9ff93286ec0ed341\"> 132</a></span> <a class=\"code hl_typedef\" href=\"a01559.html#ab1f301991c77e4923149d845044001bf\">size_type</a> <a class=\"code hl_function\" href=\"a01559.html#a943c5bd1c1b92e5a9ff93286ec0ed341\">size</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01559.html#aa139b45a7e58c7183d2c38ad71ef4bd3\">tree_</a>.size();</div>\n+<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> }</div>\n+<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> </div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#aa2ee90c6ad5bfcae29ef9f04df6592c9\"> 143</a></span> <a class=\"code hl_typedef\" href=\"a01559.html#ab1f301991c77e4923149d845044001bf\">size_type</a> <a class=\"code hl_function\" href=\"a01559.html#aa2ee90c6ad5bfcae29ef9f04df6592c9\">maxSize</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01559.html#aeedcb16a681bc1d7721351bd7125a951\">globalBasis_</a>->preBasis().maxNodeSize();</div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> }</div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> </div>\n+<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#a3f13e3fc04ae1fa6d300b8092d84f315\"> 149</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01559.html#acffe4cd37e8a7720e1a3eced31570c5a\">MultiIndex</a>& <a class=\"code hl_function\" href=\"a01559.html#a3f13e3fc04ae1fa6d300b8092d84f315\">index</a>(<a class=\"code hl_typedef\" href=\"a01559.html#ab1f301991c77e4923149d845044001bf\">size_type</a> i)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01559.html#ad3e344f7adb2d81622de39ae3c80468e\">indices_</a>[i];</div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> }</div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> </div>\n+<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#afa30602e3769204e2cfe86f3ffc90817\"> 156</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01559.html#a9523d45b214ee146d2135416d01aceda\">GlobalBasis</a>& <a class=\"code hl_function\" href=\"a01559.html#afa30602e3769204e2cfe86f3ffc90817\">globalBasis</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> <span class=\"keywordflow\">return</span> *<a class=\"code hl_variable\" href=\"a01559.html#aeedcb16a681bc1d7721351bd7125a951\">globalBasis_</a>;</div>\n+<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> }</div>\n+<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> </div>\n+<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#ac5d11840fb83d0116cbf9d1da169c5c6\"> 161</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01559.html\">DefaultLocalView</a>& <a class=\"code hl_function\" href=\"a01559.html#ac5d11840fb83d0116cbf9d1da169c5c6\">rootLocalView</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>;</div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> }</div>\n <div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> </div>\n-<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n-<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\"> 179</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\">flatVectorView</a>(T& t)</div>\n-<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span>{</div>\n-<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> <span class=\"keywordflow\">return</span> Impl::FlatVectorView<T>(t);</div>\n-<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span>}</div>\n-<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span> </div>\n-<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n-<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#ac37c350bd2f6cb4fea793ac4f665c0fe\"> 197</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\">flatVectorView</a>(<span class=\"keyword\">const</span> T& t)</div>\n-<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span>{</div>\n-<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> <span class=\"keywordflow\">return</span> Impl::FlatVectorView<const T>(t);</div>\n-<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span>}</div>\n-<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> </div>\n-<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n-<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a4fac6802f21000f59e52aade3cd47b08\"> 215</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\">flatVectorView</a>(T&& t)</div>\n-<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span>{</div>\n-<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> <span class=\"keywordflow\">return</span> Impl::FlatVectorView<T&&>(std::move(t));</div>\n-<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span>}</div>\n-<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> </div>\n-<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span> </div>\n-<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span>} <span class=\"comment\">// namespace Dune::Functions</span></div>\n-<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span>} <span class=\"comment\">// namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> </div>\n-<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> </div>\n-<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATVECTORVIEW_HH</span></div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span><span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#aeedcb16a681bc1d7721351bd7125a951\"> 167</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01559.html#a9523d45b214ee146d2135416d01aceda\">GlobalBasis</a>* <a class=\"code hl_variable\" href=\"a01559.html#aeedcb16a681bc1d7721351bd7125a951\">globalBasis_</a>;</div>\n+<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#a47292fa1338b995ad8ab511f4fc66fe5\"> 168</a></span> std::optional<Element> <a class=\"code hl_variable\" href=\"a01559.html#a47292fa1338b995ad8ab511f4fc66fe5\">element_</a>;</div>\n+<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#aa139b45a7e58c7183d2c38ad71ef4bd3\"> 169</a></span> <a class=\"code hl_typedef\" href=\"a01559.html#adeb4377aeb75298c38c5516719ab5e09\">Tree</a> <a class=\"code hl_variable\" href=\"a01559.html#aa139b45a7e58c7183d2c38ad71ef4bd3\">tree_</a>;</div>\n+<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#ad3e344f7adb2d81622de39ae3c80468e\"> 170</a></span> std::vector<MultiIndexStorage> <a class=\"code hl_variable\" href=\"a01559.html#ad3e344f7adb2d81622de39ae3c80468e\">indices_</a>;</div>\n+<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span>};</div>\n+<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> </div>\n+<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> </div>\n+<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> </div>\n+<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span>} <span class=\"comment\">// end namespace Functions</span></div>\n+<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span>} <span class=\"comment\">// end namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> </div>\n+<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> </div>\n+<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> </div>\n+<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH</span></div>\n+<div class=\"ttc\" id=\"aa00032_html\"><div class=\"ttname\"><a href=\"a00032.html\">multiindex.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00059_html\"><div class=\"ttname\"><a href=\"a00059.html\">overflowarray.hh</a></div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa00219_html_ad98b265d97ebd619e7732df6a8d1f7da\"><div class=\"ttname\"><a href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\">Dune::Functions::flatVectorView</a></div><div class=\"ttdeci\">auto flatVectorView(T &t)</div><div class=\"ttdoc\">Create flat vector view of passed mutable container.</div><div class=\"ttdef\"><b>Definition:</b> flatvectorview.hh:179</div></div>\n+<div class=\"ttc\" id=\"aa00219_html_a4dc892a209e0f55bc65eadaf2c808454\"><div class=\"ttname\"><a href=\"a00219.html#a4dc892a209e0f55bc65eadaf2c808454\">Dune::Functions::bindTree</a></div><div class=\"ttdeci\">void bindTree(Tree &tree, const Entity &entity, std::size_t offset=0)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:253</div></div>\n+<div class=\"ttc\" id=\"aa00219_html_a5e19b913a34ad68144f4fd873c51b977\"><div class=\"ttname\"><a href=\"a00219.html#a5e19b913a34ad68144f4fd873c51b977\">Dune::Functions::initializeTree</a></div><div class=\"ttdeci\">void initializeTree(Tree &tree, std::size_t treeIndexOffset=0)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:260</div></div>\n+<div class=\"ttc\" id=\"aa01263_html\"><div class=\"ttname\"><a href=\"a01263.html\">Dune::Functions::StaticMultiIndex</a></div><div class=\"ttdoc\">A statically sized MultiIndex type.</div><div class=\"ttdef\"><b>Definition:</b> multiindex.hh:25</div></div>\n+<div class=\"ttc\" id=\"aa01275_html\"><div class=\"ttname\"><a href=\"a01275.html\">Dune::Functions::OverflowArray</a></div><div class=\"ttdoc\">A dynamically sized array-like class with overflow.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:45</div></div>\n+<div class=\"ttc\" id=\"aa01559_html\"><div class=\"ttname\"><a href=\"a01559.html\">Dune::Functions::DefaultLocalView</a></div><div class=\"ttdoc\">The restriction of a finite element basis to a single element.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:28</div></div>\n+<div class=\"ttc\" id=\"aa01559_html_a0fcc00c7b8afe993e08c9fbf9bb9efff\"><div class=\"ttname\"><a href=\"a01559.html#a0fcc00c7b8afe993e08c9fbf9bb9efff\">Dune::Functions::DefaultLocalView::PreBasis</a></div><div class=\"ttdeci\">typename GlobalBasis::PreBasis PreBasis</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:48</div></div>\n+<div class=\"ttc\" id=\"aa01559_html_a15b7fa9e24937ca74a8d9329512d6aa0\"><div class=\"ttname\"><a href=\"a01559.html#a15b7fa9e24937ca74a8d9329512d6aa0\">Dune::Functions::DefaultLocalView::unbind</a></div><div class=\"ttdeci\">void unbind()</div><div class=\"ttdoc\">Unbind from the current element.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:116</div></div>\n+<div class=\"ttc\" id=\"aa01559_html_a198ccca836349c34a08f75351a1a29b0\"><div class=\"ttname\"><a href=\"a01559.html#a198ccca836349c34a08f75351a1a29b0\">Dune::Functions::DefaultLocalView::bound</a></div><div class=\"ttdeci\">bool bound() const</div><div class=\"ttdoc\">Return if the view is bound to a grid element.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:98</div></div>\n+<div class=\"ttc\" id=\"aa01559_html_a29917f5ca32a2b2df56b1ae72c2a25ca\"><div class=\"ttname\"><a href=\"a01559.html#a29917f5ca32a2b2df56b1ae72c2a25ca\">Dune::Functions::DefaultLocalView::GridView</a></div><div class=\"ttdeci\">typename GlobalBasis::GridView GridView</div><div class=\"ttdoc\">The grid view the global FE basis lives on.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:35</div></div>\n+<div class=\"ttc\" id=\"aa01559_html_a3f13e3fc04ae1fa6d300b8092d84f315\"><div class=\"ttname\"><a href=\"a01559.html#a3f13e3fc04ae1fa6d300b8092d84f315\">Dune::Functions::DefaultLocalView::index</a></div><div class=\"ttdeci\">const MultiIndex & index(size_type i) const</div><div class=\"ttdoc\">Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:149</div></div>\n+<div class=\"ttc\" id=\"aa01559_html_a47292fa1338b995ad8ab511f4fc66fe5\"><div class=\"ttname\"><a href=\"a01559.html#a47292fa1338b995ad8ab511f4fc66fe5\">Dune::Functions::DefaultLocalView::element_</a></div><div class=\"ttdeci\">std::optional< Element > element_</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:168</div></div>\n+<div class=\"ttc\" id=\"aa01559_html_a5ff210d62e5d3e52189808a8881f1911\"><div class=\"ttname\"><a href=\"a01559.html#a5ff210d62e5d3e52189808a8881f1911\">Dune::Functions::DefaultLocalView::Element</a></div><div class=\"ttdeci\">typename GridView::template Codim< 0 >::Entity Element</div><div class=\"ttdoc\">Type of the grid element we are bound to.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:38</div></div>\n+<div class=\"ttc\" id=\"aa01559_html_a6796b00299c502430bea728eee078c50\"><div class=\"ttname\"><a href=\"a01559.html#a6796b00299c502430bea728eee078c50\">Dune::Functions::DefaultLocalView::tree</a></div><div class=\"ttdeci\">const Tree & tree() const</div><div class=\"ttdoc\">Return the local ansatz tree associated to the bound entity.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:125</div></div>\n+<div class=\"ttc\" id=\"aa01559_html_a89ec09c03236189c4bd9d41cae713cae\"><div class=\"ttname\"><a href=\"a01559.html#a89ec09c03236189c4bd9d41cae713cae\">Dune::Functions::DefaultLocalView::bind</a></div><div class=\"ttdeci\">void bind(const Element &e)</div><div class=\"ttdoc\">Bind the view to a grid element.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:81</div></div>\n+<div class=\"ttc\" id=\"aa01559_html_a8bf835186bb00012f86be12becf03a04\"><div class=\"ttname\"><a href=\"a01559.html#a8bf835186bb00012f86be12becf03a04\">Dune::Functions::DefaultLocalView::element</a></div><div class=\"ttdeci\">const Element & element() const</div><div class=\"ttdoc\">Return the grid element that the view is bound to.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:107</div></div>\n+<div class=\"ttc\" id=\"aa01559_html_a943c5bd1c1b92e5a9ff93286ec0ed341\"><div class=\"ttname\"><a href=\"a01559.html#a943c5bd1c1b92e5a9ff93286ec0ed341\">Dune::Functions::DefaultLocalView::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdoc\">Total number of degrees of freedom on this element.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:132</div></div>\n+<div class=\"ttc\" id=\"aa01559_html_a9523d45b214ee146d2135416d01aceda\"><div class=\"ttname\"><a href=\"a01559.html#a9523d45b214ee146d2135416d01aceda\">Dune::Functions::DefaultLocalView::GlobalBasis</a></div><div class=\"ttdeci\">GB GlobalBasis</div><div class=\"ttdoc\">The global FE basis that this is a view on.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:32</div></div>\n+<div class=\"ttc\" id=\"aa01559_html_aa139b45a7e58c7183d2c38ad71ef4bd3\"><div class=\"ttname\"><a href=\"a01559.html#aa139b45a7e58c7183d2c38ad71ef4bd3\">Dune::Functions::DefaultLocalView::tree_</a></div><div class=\"ttdeci\">Tree tree_</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:169</div></div>\n+<div class=\"ttc\" id=\"aa01559_html_aa2ee90c6ad5bfcae29ef9f04df6592c9\"><div class=\"ttname\"><a href=\"a01559.html#aa2ee90c6ad5bfcae29ef9f04df6592c9\">Dune::Functions::DefaultLocalView::maxSize</a></div><div class=\"ttdeci\">size_type maxSize() const</div><div class=\"ttdoc\">Maximum local size for any element on the GridView.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:143</div></div>\n+<div class=\"ttc\" id=\"aa01559_html_ab1f301991c77e4923149d845044001bf\"><div class=\"ttname\"><a href=\"a01559.html#ab1f301991c77e4923149d845044001bf\">Dune::Functions::DefaultLocalView::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdoc\">The type used for sizes.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:41</div></div>\n+<div class=\"ttc\" id=\"aa01559_html_ab9794df271c84c6966690560ddaf21e7\"><div class=\"ttname\"><a href=\"a01559.html#ab9794df271c84c6966690560ddaf21e7\">Dune::Functions::DefaultLocalView::isBound</a></div><div class=\"ttdeci\">bool isBound() const</div><div class=\"ttdoc\">Return if the view is bound to a grid element.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:92</div></div>\n+<div class=\"ttc\" id=\"aa01559_html_ac5d11840fb83d0116cbf9d1da169c5c6\"><div class=\"ttname\"><a href=\"a01559.html#ac5d11840fb83d0116cbf9d1da169c5c6\">Dune::Functions::DefaultLocalView::rootLocalView</a></div><div class=\"ttdeci\">const DefaultLocalView & rootLocalView() const</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:161</div></div>\n+<div class=\"ttc\" id=\"aa01559_html_acc3dcfbb6962f1023cc1113b07b76102\"><div class=\"ttname\"><a href=\"a01559.html#acc3dcfbb6962f1023cc1113b07b76102\">Dune::Functions::DefaultLocalView::MultiIndexStorage</a></div><div class=\"ttdeci\">std::conditional_t<(PreBasis::minMultiIndexSize==PreBasis::maxMultiIndexSize), OverflowArray< StaticMultiIndex< size_type, PreBasis::maxMultiIndexSize >, PreBasis::multiIndexBufferSize >, Dune::ReservedVector< size_type, PreBasis::multiIndexBufferSize > > MultiIndexStorage</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:56</div></div>\n+<div class=\"ttc\" id=\"aa01559_html_acffe4cd37e8a7720e1a3eced31570c5a\"><div class=\"ttname\"><a href=\"a01559.html#acffe4cd37e8a7720e1a3eced31570c5a\">Dune::Functions::DefaultLocalView::MultiIndex</a></div><div class=\"ttdeci\">std::conditional_t<(PreBasis::minMultiIndexSize==PreBasis::maxMultiIndexSize), StaticMultiIndex< size_type, PreBasis::maxMultiIndexSize >, Dune::ReservedVector< size_type, PreBasis::multiIndexBufferSize > > MultiIndex</div><div class=\"ttdoc\">Type used for global numbering of the basis vectors.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:64</div></div>\n+<div class=\"ttc\" id=\"aa01559_html_ad3e344f7adb2d81622de39ae3c80468e\"><div class=\"ttname\"><a href=\"a01559.html#ad3e344f7adb2d81622de39ae3c80468e\">Dune::Functions::DefaultLocalView::indices_</a></div><div class=\"ttdeci\">std::vector< MultiIndexStorage > indices_</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:170</div></div>\n+<div class=\"ttc\" id=\"aa01559_html_adeb4377aeb75298c38c5516719ab5e09\"><div class=\"ttname\"><a href=\"a01559.html#adeb4377aeb75298c38c5516719ab5e09\">Dune::Functions::DefaultLocalView::Tree</a></div><div class=\"ttdeci\">typename GlobalBasis::PreBasis::Node Tree</div><div class=\"ttdoc\">Tree of local finite elements / local shape function sets.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:44</div></div>\n+<div class=\"ttc\" id=\"aa01559_html_ae47ddda96d907628497ded87d44f38d0\"><div class=\"ttname\"><a href=\"a01559.html#ae47ddda96d907628497ded87d44f38d0\">Dune::Functions::DefaultLocalView::DefaultLocalView</a></div><div class=\"ttdeci\">DefaultLocalView(const GlobalBasis &globalBasis)</div><div class=\"ttdoc\">Construct local view for a given global finite element basis.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:68</div></div>\n+<div class=\"ttc\" id=\"aa01559_html_aeedcb16a681bc1d7721351bd7125a951\"><div class=\"ttname\"><a href=\"a01559.html#aeedcb16a681bc1d7721351bd7125a951\">Dune::Functions::DefaultLocalView::globalBasis_</a></div><div class=\"ttdeci\">const GlobalBasis * globalBasis_</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:167</div></div>\n+<div class=\"ttc\" id=\"aa01559_html_afa30602e3769204e2cfe86f3ffc90817\"><div class=\"ttname\"><a href=\"a01559.html#afa30602e3769204e2cfe86f3ffc90817\">Dune::Functions::DefaultLocalView::globalBasis</a></div><div class=\"ttdeci\">const GlobalBasis & globalBasis() const</div><div class=\"ttdoc\">Return the global basis that we are a view on.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:156</div></div>\n <div class=\"ttc\" id=\"aa02876_html\"><div class=\"ttname\"><a href=\"a02876.html\">concepts.hh</a></div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,212 +5,271 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-flatvectorview.hh\n+defaultlocalview.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATVECTORVIEW_HH\n- 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATVECTORVIEW_HH\n+ 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH\n+ 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH\n 5\n 6\n- 7#include <array>\n- 8\n- 9#include <dune/common/concept.hh>\n- 10#include <dune/common/hybridutilities.hh>\n- 11#include <dune/common/indices.hh>\n- 12\n- 13#include <dune/functions/functionspacebases/concepts.hh>\n- 14\n- 15\n- 16\n+ 7#include <tuple>\n+ 8#include <optional>\n+ 9\n+ 10#include <dune/common/concept.hh>\n+ 11#include <dune/common/hybridutilities.hh>\n+ 12#include <dune/common/reservedvector.hh>\n+ 13\n+ 14#include <dune/functions/common/overflowarray.hh>\n+ 15#include <dune/functions/common/multiindex.hh>\n+ 16#include <dune/functions/functionspacebases/concepts.hh>\n 17\n- 18namespace Dune {\n- 19namespace Functions {\n- 20namespace Impl {\n- 21\n+ 18\n+ 19\n+ 20namespace Dune {\n+ 21namespace Functions {\n 22\n- 23template<class V>\n- 24struct FlatVectorBackend\n- 25{\n- 26\n- 27 template<class VV, class Index,\n- 28 typename std::enable_if< models<Concept::HasIndexAccess, VV, Index>(),\n-int>::type = 0>\n- 29 static decltype(auto) getEntry(VV&& v, const Index& i)\n- 30 {\n- 31 return v[i];\n- 32 }\n+ 23\n+ 24\n+ 26template<class GB>\n+27class DefaultLocalView\n+ 28{\n+ 29public:\n+ 30\n+32 using GlobalBasis = GB;\n 33\n- 34 template<class VV, class Index,\n- 35 typename std::enable_if< not models<Concept::HasIndexAccess, VV, Index>(),\n-int>::type = 0>\n- 36 static decltype(auto) getEntry(VV&& v, const Index&)\n- 37 {\n- 38 return std::forward<VV>(v);\n- 39 }\n- 40\n- 41 template<class VV,\n- 42 typename std::enable_if< models<Concept::HasSizeMethod, VV>(), int>::type =\n-0>\n- 43 static auto size(VV&& v)\n- 44 {\n- 45 return Dune::Hybrid::size(v);\n- 46 }\n+35 using GridView = typename GlobalBasis::GridView;\n+ 36\n+38 using Element = typename GridView::template Codim<0>::Entity;\n+ 39\n+41 using size_type = std::size_t;\n+ 42\n+44 using Tree = typename GlobalBasis::PreBasis::Node;\n+ 45\n+ 46protected:\n 47\n- 48 template<class VV,\n- 49 typename std::enable_if< not models<Concept::HasSizeMethod, VV>(), int>::\n-type = 0>\n- 50 static auto size(VV&&)\n- 51 {\n- 52 return Dune::index_constant<1>{};\n- 53 }\n- 54};\n- 55\n- 56\n+48 using PreBasis = typename GlobalBasis::PreBasis;\n+ 49\n+ 50 // Type used to store the multi indices of the basis vectors.\n+ 51 // In contrast to MultiIndex this always has dynamic size.\n+ 52 // It's guaranteed, that you can always cast it to MultiIndex\n+53 using MultiIndexStorage =\n+ 54 std::conditional_t<(PreBasis::minMultiIndexSize == PreBasis::\n+maxMultiIndexSize),\n+ 55 OverflowArray<StaticMultiIndex<size_type,_PreBasis::maxMultiIndexSize>,\n+PreBasis::multiIndexBufferSize>,\n+ 56 Dune::ReservedVector<size_type, PreBasis::multiIndexBufferSize>>;\n 57\n- 58\n- 59template<class K, int n, int m>\n- 60struct FlatVectorBackend<typename Dune::FieldMatrix<K, n, m> >\n- 61{\n- 62\n- 63 template<class VV, class Index>\n- 64 static decltype(auto) getEntry(VV&& v, const Index& i)\n- 65 {\n- 66 return v[i/m][i%m];\n- 67 }\n- 68\n- 69 template<class VV>\n- 70 static auto size(VV&& v)\n+ 58public:\n+ 59\n+61 using MultiIndex =\n+ 62 std::conditional_t<(PreBasis::minMultiIndexSize == PreBasis::\n+maxMultiIndexSize),\n+ 63 StaticMultiIndex<size_type,_PreBasis::maxMultiIndexSize>,\n+ 64 Dune::ReservedVector<size_type, PreBasis::multiIndexBufferSize>>;\n+ 65\n+ 66\n+68 DefaultLocalView(const GlobalBasis& globalBasis) :\n+ 69 globalBasis_(&globalBasis),\n+ 70 tree_(globalBasis_->preBasis().makeNode())\n 71 {\n- 72 return Dune::index_constant<n*m>{};\n- 73 }\n- 74};\n+ 72 static_assert(models<Concept::BasisTree<GridView>, Tree>(), \"Tree type\n+passed to DefaultLocalView does not model the BasisNode concept.\");\n+ 73 initializeTree(tree_);\n+ 74 }\n 75\n- 76\n- 77\n- 78template<class K, std::size_t n>\n- 79struct FlatVectorBackend< std::array<K, n> >\n- 80{\n- 81\n- 82 template<class VV, class Index>\n- 83 static decltype(auto) getEntry(VV&& v, const Index& i)\n- 84 {\n- 85 const auto innerSize = decltype(FlatVectorBackend<K>::size(v[0]))::value;\n- 86 return FlatVectorBackend<K>::getEntry(v[i/innerSize], i%innerSize);\n+81 void bind(const Element& e)\n+ 82 {\n+ 83 element_ = e;\n+ 84 bindTree(tree_, *element_);\n+ 85 indices_.resize(size());\n+ 86 globalBasis_->preBasis().indices(tree_, indices_.begin());\n 87 }\n 88\n- 89 template<class VV>\n- 90 static auto size(VV&& v)\n- 91 {\n- 92 const auto innerSize = decltype(FlatVectorBackend<K>::size(v[0]))::value;\n- 93 return Dune::index_constant<n*innerSize>{};\n+ 91 [[deprecated(\"Use the bound() method instead\")]]\n+92 bool isBound() const {\n+ 93 return static_cast<bool>(element_);\n 94 }\n 95\n- 96};\n- 97\n- 98\n- 99\n- 100\n- 101template<class T>\n- 102class FlatVectorView\n- 103{\n- 104 using Backend = FlatVectorBackend<std::decay_t<T>>;\n- 105public:\n- 106 FlatVectorView(T& t) :\n- 107 t_(&t)\n- 108 {}\n- 109\n- 110 auto size() const\n- 111 {\n- 112 return Backend::size(*t_);\n- 113 }\n- 114\n- 115 template<class Index>\n- 116 decltype(auto) operator[](const Index& i) const\n+98 bool bound() const\n+ 99 {\n+ 100 return static_cast<bool>(element_);\n+ 101 }\n+ 102\n+107 const Element& element() const\n+ 108 {\n+ 109 return *element_;\n+ 110 }\n+ 111\n+116 void unbind()\n 117 {\n- 118 return Backend::getEntry(*t_, i);\n+ 118 element_.reset();\n 119 }\n 120\n- 121 template<class Index>\n- 122 decltype(auto) operator[](const Index& i)\n- 123 {\n- 124 return Backend::getEntry(*t_, i);\n- 125 }\n- 126\n- 127private:\n- 128 T* t_;\n- 129};\n- 130\n- 131\n- 132template<class T>\n- 133class FlatVectorView<T&&>\n- 134{\n- 135 using Backend = FlatVectorBackend<std::decay_t<T>>;\n- 136public:\n- 137 FlatVectorView(T&& t) :\n- 138 t_(std::move(t))\n- 139 {}\n- 140\n- 141 auto size() const\n- 142 {\n- 143 return Backend::size(t_);\n- 144 }\n- 145\n- 146 template<class Index>\n- 147 decltype(auto) operator[](const Index& i) const\n- 148 {\n- 149 return Backend::getEntry(t_, i);\n- 150 }\n- 151\n- 152 template<class Index>\n- 153 decltype(auto) operator[](const Index& i)\n- 154 {\n- 155 return Backend::getEntry(t_, i);\n- 156 }\n- 157\n- 158private:\n- 159 T t_;\n- 160};\n- 161\n- 162} // namespace Impl\n- 163\n- 164\n+125 const Tree& tree() const\n+ 126 {\n+ 127 return tree_;\n+ 128 }\n+ 129\n+132 size_type size() const\n+ 133 {\n+ 134 return tree_.size();\n+ 135 }\n+ 136\n+143 size_type maxSize() const\n+ 144 {\n+ 145 return globalBasis_->preBasis().maxNodeSize();\n+ 146 }\n+ 147\n+149 const MultiIndex& index(size_type i) const\n+ 150 {\n+ 151 return indices_[i];\n+ 152 }\n+ 153\n+156 const GlobalBasis& globalBasis() const\n+ 157 {\n+ 158 return *globalBasis_;\n+ 159 }\n+ 160\n+161 const DefaultLocalView& rootLocalView() const\n+ 162 {\n+ 163 return *this;\n+ 164 }\n 165\n- 178template<class T>\n-179auto flatVectorView(T& t)\n- 180{\n- 181 return Impl::FlatVectorView<T>(t);\n- 182}\n- 183\n- 196template<class T>\n-197auto flatVectorView(const T& t)\n- 198{\n- 199 return Impl::FlatVectorView<const T>(t);\n- 200}\n- 201\n- 214template<class T>\n-215auto flatVectorView(T&& t)\n- 216{\n- 217 return Impl::FlatVectorView<T&&>(std::move(t));\n- 218}\n- 219\n- 220\n- 221} // namespace Dune::Functions\n- 222} // namespace Dune\n- 223\n- 224\n- 225#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATVECTORVIEW_HH\n+ 166protected:\n+167 const GlobalBasis* globalBasis_;\n+168 std::optional<Element> element_;\n+169 Tree tree_;\n+170 std::vector<MultiIndexStorage> indices_;\n+ 171};\n+ 172\n+ 173\n+ 174\n+ 175} // end namespace Functions\n+ 176} // end namespace Dune\n+ 177\n+ 178\n+ 179\n+ 180#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH\n+multiindex.hh\n+overflowarray.hh\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::flatVectorView\n-auto flatVectorView(T &t)\n-Create flat vector view of passed mutable container.\n-Definition: flatvectorview.hh:179\n+Dune::Functions::bindTree\n+void bindTree(Tree &tree, const Entity &entity, std::size_t offset=0)\n+Definition: nodes.hh:253\n+Dune::Functions::initializeTree\n+void initializeTree(Tree &tree, std::size_t treeIndexOffset=0)\n+Definition: nodes.hh:260\n+Dune::Functions::StaticMultiIndex\n+A statically sized MultiIndex type.\n+Definition: multiindex.hh:25\n+Dune::Functions::OverflowArray\n+A dynamically sized array-like class with overflow.\n+Definition: overflowarray.hh:45\n+Dune::Functions::DefaultLocalView\n+The restriction of a finite element basis to a single element.\n+Definition: defaultlocalview.hh:28\n+Dune::Functions::DefaultLocalView::PreBasis\n+typename GlobalBasis::PreBasis PreBasis\n+Definition: defaultlocalview.hh:48\n+Dune::Functions::DefaultLocalView::unbind\n+void unbind()\n+Unbind from the current element.\n+Definition: defaultlocalview.hh:116\n+Dune::Functions::DefaultLocalView::bound\n+bool bound() const\n+Return if the view is bound to a grid element.\n+Definition: defaultlocalview.hh:98\n+Dune::Functions::DefaultLocalView::GridView\n+typename GlobalBasis::GridView GridView\n+The grid view the global FE basis lives on.\n+Definition: defaultlocalview.hh:35\n+Dune::Functions::DefaultLocalView::index\n+const MultiIndex & index(size_type i) const\n+Maps from subtree index set [0..size-1] to a globally unique multi index in\n+global basis.\n+Definition: defaultlocalview.hh:149\n+Dune::Functions::DefaultLocalView::element_\n+std::optional< Element > element_\n+Definition: defaultlocalview.hh:168\n+Dune::Functions::DefaultLocalView::Element\n+typename GridView::template Codim< 0 >::Entity Element\n+Type of the grid element we are bound to.\n+Definition: defaultlocalview.hh:38\n+Dune::Functions::DefaultLocalView::tree\n+const Tree & tree() const\n+Return the local ansatz tree associated to the bound entity.\n+Definition: defaultlocalview.hh:125\n+Dune::Functions::DefaultLocalView::bind\n+void bind(const Element &e)\n+Bind the view to a grid element.\n+Definition: defaultlocalview.hh:81\n+Dune::Functions::DefaultLocalView::element\n+const Element & element() const\n+Return the grid element that the view is bound to.\n+Definition: defaultlocalview.hh:107\n+Dune::Functions::DefaultLocalView::size\n+size_type size() const\n+Total number of degrees of freedom on this element.\n+Definition: defaultlocalview.hh:132\n+Dune::Functions::DefaultLocalView::GlobalBasis\n+GB GlobalBasis\n+The global FE basis that this is a view on.\n+Definition: defaultlocalview.hh:32\n+Dune::Functions::DefaultLocalView::tree_\n+Tree tree_\n+Definition: defaultlocalview.hh:169\n+Dune::Functions::DefaultLocalView::maxSize\n+size_type maxSize() const\n+Maximum local size for any element on the GridView.\n+Definition: defaultlocalview.hh:143\n+Dune::Functions::DefaultLocalView::size_type\n+std::size_t size_type\n+The type used for sizes.\n+Definition: defaultlocalview.hh:41\n+Dune::Functions::DefaultLocalView::isBound\n+bool isBound() const\n+Return if the view is bound to a grid element.\n+Definition: defaultlocalview.hh:92\n+Dune::Functions::DefaultLocalView::rootLocalView\n+const DefaultLocalView & rootLocalView() const\n+Definition: defaultlocalview.hh:161\n+Dune::Functions::DefaultLocalView::MultiIndexStorage\n+std::conditional_t<(PreBasis::minMultiIndexSize==PreBasis::maxMultiIndexSize),\n+OverflowArray< StaticMultiIndex< size_type, PreBasis::maxMultiIndexSize >,\n+PreBasis::multiIndexBufferSize >, Dune::ReservedVector< size_type, PreBasis::\n+multiIndexBufferSize > > MultiIndexStorage\n+Definition: defaultlocalview.hh:56\n+Dune::Functions::DefaultLocalView::MultiIndex\n+std::conditional_t<(PreBasis::minMultiIndexSize==PreBasis::maxMultiIndexSize),\n+StaticMultiIndex< size_type, PreBasis::maxMultiIndexSize >, Dune::\n+ReservedVector< size_type, PreBasis::multiIndexBufferSize > > MultiIndex\n+Type used for global numbering of the basis vectors.\n+Definition: defaultlocalview.hh:64\n+Dune::Functions::DefaultLocalView::indices_\n+std::vector< MultiIndexStorage > indices_\n+Definition: defaultlocalview.hh:170\n+Dune::Functions::DefaultLocalView::Tree\n+typename GlobalBasis::PreBasis::Node Tree\n+Tree of local finite elements / local shape function sets.\n+Definition: defaultlocalview.hh:44\n+Dune::Functions::DefaultLocalView::DefaultLocalView\n+DefaultLocalView(const GlobalBasis &globalBasis)\n+Construct local view for a given global finite element basis.\n+Definition: defaultlocalview.hh:68\n+Dune::Functions::DefaultLocalView::globalBasis_\n+const GlobalBasis * globalBasis_\n+Definition: defaultlocalview.hh:167\n+Dune::Functions::DefaultLocalView::globalBasis\n+const GlobalBasis & globalBasis() const\n+Return the global basis that we are a view on.\n+Definition: defaultlocalview.hh:156\n concepts.hh\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00131.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00131.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: nedelecbasis.hh File Reference</title>\n+<title>dune-functions: interpolate.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -63,62 +63,57 @@\n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n-<a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> |\n-<a href=\"#typedef-members\">Typedefs</a> |\n <a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">nedelecbasis.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">interpolate.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <array></code><br />\n+<div class=\"textblock\"><code>#include <memory></code><br />\n+<code>#include <vector></code><br />\n <code>#include <dune/common/exceptions.hh></code><br />\n-<code>#include <dune/grid/common/capabilities.hh></code><br />\n-<code>#include <dune/grid/common/mcmgmapper.hh></code><br />\n-<code>#include <dune/localfunctions/common/localfiniteelementvariant.hh></code><br />\n-<code>#include <dune/localfunctions/nedelec.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00119_source.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00134_source.html\">dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00191_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code><br />\n+<code>#include <dune/common/bitsetvector.hh></code><br />\n+<code>#include <dune/typetree/childextraction.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00086_source.html\">dune/functions/gridfunctions/gridviewfunction.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00020_source.html\">dune/functions/common/functionconcepts.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a02873_source.html\">dune/functions/backends/concepts.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00191_source.html\">dune/functions/backends/istlvectorbackend.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00110_source.html\">dune/functions/functionspacebases/sizeinfo.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00155_source.html\">dune/functions/functionspacebases/flatvectorview.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00170_source.html\">dune/functions/functionspacebases/hierarchicnodetorangemap.hh</a>></code><br />\n+<code>#include <dune/typetree/traversal.hh></code><br />\n+<code>#include <dune/typetree/visitor.hh></code><br />\n </div>\n <p><a href=\"a00131_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n-Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01691.html\">Dune::Functions::NedelecPreBasis< GV, Range, kind, order ></a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01687.html\">Dune::Functions::NedelecNode< GV, Range, kind, order ></a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-</table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a00224\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00224.html\">Dune::Functions::BasisFactory</a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-</table><table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"typedef-members\" name=\"typedef-members\"></a>\n-Typedefs</h2></td></tr>\n-<tr class=\"memitem:a744da0623cd512fc478d47bd2f7908eb\"><td class=\"memTemplParams\" colspan=\"2\">template<typename GV , std::size_t kind, std::size_t order, typename Range = double> </td></tr>\n-<tr class=\"memitem:a744da0623cd512fc478d47bd2f7908eb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a744da0623cd512fc478d47bd2f7908eb\">Dune::Functions::NedelecBasis</a> = DefaultGlobalBasis< NedelecPreBasis< GV, Range, kind, order > ></td></tr>\n-<tr class=\"memdesc:a744da0623cd512fc478d47bd2f7908eb\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Basis of a k-th-order N\u00e9d\u00e9lec finite element space. <a href=\"a00219.html#a744da0623cd512fc478d47bd2f7908eb\">More...</a><br /></td></tr>\n-<tr class=\"separator:a744da0623cd512fc478d47bd2f7908eb\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n Functions</h2></td></tr>\n-<tr class=\"memitem:gafe0fe439067c288f197101b8686223e8\"><td class=\"memTemplParams\" colspan=\"2\">template<std::size_t kind, std::size_t order, typename Range = double> </td></tr>\n-<tr class=\"memitem:gafe0fe439067c288f197101b8686223e8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#gafe0fe439067c288f197101b8686223e8\">Dune::Functions::BasisFactory::nedelec</a> ()</td></tr>\n-<tr class=\"memdesc:gafe0fe439067c288f197101b8686223e8\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a pre-basis factory that can create a N\u00e9d\u00e9lec pre-basis. <a href=\"a00213.html#gafe0fe439067c288f197101b8686223e8\">More...</a><br /></td></tr>\n-<tr class=\"separator:gafe0fe439067c288f197101b8686223e8\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a13b0c6bf02d744e7b2078d1a535b5211\"><td class=\"memTemplParams\" colspan=\"2\">template<class B , class C , class F , class BV , class NTRE > </td></tr>\n+<tr class=\"memitem:a13b0c6bf02d744e7b2078d1a535b5211\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a13b0c6bf02d744e7b2078d1a535b5211\">Dune::Functions::interpolate</a> (const B &basis, C &&coeff, const F &f, const BV &bv, const NTRE &nodeToRangeEntry)</td></tr>\n+<tr class=\"memdesc:a13b0c6bf02d744e7b2078d1a535b5211\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Interpolate given function in discrete function space. <a href=\"a00219.html#a13b0c6bf02d744e7b2078d1a535b5211\">More...</a><br /></td></tr>\n+<tr class=\"separator:a13b0c6bf02d744e7b2078d1a535b5211\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ae167dc7b5ace0ff9617a3205b05744b5\"><td class=\"memTemplParams\" colspan=\"2\">template<class B , class C , class F , class BV > </td></tr>\n+<tr class=\"memitem:ae167dc7b5ace0ff9617a3205b05744b5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#ae167dc7b5ace0ff9617a3205b05744b5\">Dune::Functions::interpolate</a> (const B &basis, C &&coeff, const F &f, const BV &bitVector)</td></tr>\n+<tr class=\"memdesc:ae167dc7b5ace0ff9617a3205b05744b5\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Interpolate given function in discrete function space. <a href=\"a00219.html#ae167dc7b5ace0ff9617a3205b05744b5\">More...</a><br /></td></tr>\n+<tr class=\"separator:ae167dc7b5ace0ff9617a3205b05744b5\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a2e34859322800ae26a292903910ef9f7\"><td class=\"memTemplParams\" colspan=\"2\">template<class B , class C , class F > </td></tr>\n+<tr class=\"memitem:a2e34859322800ae26a292903910ef9f7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a2e34859322800ae26a292903910ef9f7\">Dune::Functions::interpolate</a> (const B &basis, C &&coeff, const F &f)</td></tr>\n+<tr class=\"memdesc:a2e34859322800ae26a292903910ef9f7\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Interpolate given function in discrete function space. <a href=\"a00219.html#a2e34859322800ae26a292903910ef9f7\">More...</a><br /></td></tr>\n+<tr class=\"separator:a2e34859322800ae26a292903910ef9f7\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-utf-8\n+us-ascii\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,46 +5,47 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-Classes | Namespaces | Typedefs | Functions\n-nedelecbasis.hh File Reference\n-#include <array>\n+Namespaces | Functions\n+interpolate.hh File Reference\n+#include <memory>\n+#include <vector>\n #include <dune/common/exceptions.hh>\n-#include <dune/grid/common/capabilities.hh>\n-#include <dune/grid/common/mcmgmapper.hh>\n-#include <dune/localfunctions/common/localfiniteelementvariant.hh>\n-#include <dune/localfunctions/nedelec.hh>\n-#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n-#include <dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh>\n-#include <dune/functions/functionspacebases/nodes.hh>\n+#include <dune/common/bitsetvector.hh>\n+#include <dune/typetree/childextraction.hh>\n+#include <dune/functions/gridfunctions/gridviewfunction.hh>\n+#include <dune/functions/common/functionconcepts.hh>\n+#include <dune/functions/backends/concepts.hh>\n+#include <dune/functions/backends/istlvectorbackend.hh>\n+#include <dune/functions/functionspacebases/sizeinfo.hh>\n+#include <dune/functions/functionspacebases/flatvectorview.hh>\n+#include <dune/functions/functionspacebases/hierarchicnodetorangemap.hh>\n+#include <dune/typetree/traversal.hh>\n+#include <dune/typetree/visitor.hh>\n Go_to_the_source_code_of_this_file.\n- Classes\n-class \u00a0Dune::Functions::NedelecPreBasis<_GV,_Range,_kind,_order_>\n-\u00a0\n-class \u00a0Dune::Functions::NedelecNode<_GV,_Range,_kind,_order_>\n-\u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n-namespace \u00a0Dune::Functions::BasisFactory\n-\u00a0\n- Typedefs\n-template<typename GV , std::size_t kind, std::size_t order, typename Range =\n-double>\n-using\u00a0Dune::Functions::NedelecBasis = DefaultGlobalBasis< NedelecPreBasis< GV,\n- Range, kind, order > >\n-\u00a0 Basis of a k-th-order N\u00e9d\u00e9lec finite element space. More...\n-\u00a0\n Functions\n-template<std::size_t kind, std::size_t order, typename Range = double>\n-auto\u00a0Dune::Functions::BasisFactory::nedelec ()\n-\u00a0 Create a pre-basis factory that can create a N\u00e9d\u00e9lec pre-basis. More...\n+template<class B , class C , class F , class BV , class NTRE >\n+void\u00a0Dune::Functions::interpolate (const B &basis, C &&coeff, const F &f,\n+ const BV &bv, const NTRE &nodeToRangeEntry)\n+\u00a0 Interpolate given function in discrete function space. More...\n+\u00a0\n+template<class B , class C , class F , class BV >\n+void\u00a0Dune::Functions::interpolate (const B &basis, C &&coeff, const F &f,\n+ const BV &bitVector)\n+\u00a0 Interpolate given function in discrete function space. More...\n+\u00a0\n+template<class B , class C , class F >\n+void\u00a0Dune::Functions::interpolate (const B &basis, C &&coeff, const F &f)\n+\u00a0 Interpolate given function in discrete function space. More...\n \u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00131_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00131_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: nedelecbasis.hh Source File</title>\n+<title>dune-functions: interpolate.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,381 +62,286 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">nedelecbasis.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">interpolate.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00131.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <array></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <dune/common/exceptions.hh></span></div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <memory></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <vector></span></div>\n <div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/grid/common/capabilities.hh></span></div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/grid/common/mcmgmapper.hh></span></div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/common/exceptions.hh></span></div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/bitsetvector.hh></span></div>\n <div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <dune/localfunctions/common/localfiniteelementvariant.hh></span></div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <dune/localfunctions/nedelec.hh></span></div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00119.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00134.html\">dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00191.html\">dune/functions/functionspacebases/nodes.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00219.html\">Dune::Functions</a></div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span>{</div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> </div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"keyword\">namespace </span>Impl</div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span>{</div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> dim, <span class=\"keyword\">typename</span> R, std::<span class=\"keywordtype\">size_t</span> order></div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> <span class=\"keyword\">class </span>Nedelec1stKindLocalFiniteElementMap</div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> {</div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> <span class=\"keyword\">using </span>D = <span class=\"keyword\">typename</span> GV::ctype;</div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> hasFixedElementType = Capabilities::hasSingleGeometryType<typename GV::Grid>::v;</div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span> </div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> <span class=\"keyword\">using </span>CubeFiniteElement = Nedelec1stKindCubeLocalFiniteElement<D,R,dim,order>;</div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> <span class=\"keyword\">using </span>SimplexFiniteElement = Nedelec1stKindSimplexLocalFiniteElement<D,R,dim,order>;</div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> </div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> <span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> </div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> <span class=\"keyword\">using </span>T = LocalBasisTraits<D, dim, FieldVector<D,dim>, R, dim, FieldVector<R,dim>, FieldMatrix<D,dim,dim> >;</div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> </div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> topologyId = Capabilities::hasSingleGeometryType<typename GV::Grid>::topologyId; <span class=\"comment\">// meaningless if hasFixedElementType is false</span></div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">static</span> GeometryType type = GeometryType(topologyId, GV::dimension);</div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> </div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> <span class=\"keyword\">using </span>FiniteElement = std::conditional_t<hasFixedElementType,</div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> std::conditional_t<type.isCube(),CubeFiniteElement,SimplexFiniteElement>,</div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> LocalFiniteElementVariant<CubeFiniteElement, SimplexFiniteElement> >;</div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> </div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> <span class=\"keyword\">static</span> std::size_t numVariants(GeometryType type)</div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> {</div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> <span class=\"keywordflow\">if</span> (order!=1) <span class=\"comment\">// I am not sure whether the formula below is correct for all orders.</span></div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> DUNE_THROW(NotImplemented, <span class=\"stringliteral\">"Only Nedelec elements of order 1 are implemented!"</span>);</div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <dune/typetree/childextraction.hh></span></div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00086.html\">dune/functions/gridfunctions/gridviewfunction.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00020.html\">dune/functions/common/functionconcepts.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a02873.html\">dune/functions/backends/concepts.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00191.html\">dune/functions/backends/istlvectorbackend.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00110.html\">dune/functions/functionspacebases/sizeinfo.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00155.html\">dune/functions/functionspacebases/flatvectorview.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00170.html\">dune/functions/functionspacebases/hierarchicnodetorangemap.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> </div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"preprocessor\">#include <dune/typetree/traversal.hh></span></div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"preprocessor\">#include <dune/typetree/visitor.hh></span></div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> </div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> </div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span><span class=\"keyword\">namespace </span>Imp {</div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> </div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span><span class=\"keyword\">struct </span>AllTrueBitSetVector</div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span>{</div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> <span class=\"keyword\">struct </span>AllTrueBitSet</div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> {</div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> <span class=\"keywordtype\">bool</span> test(<span class=\"keywordtype\">int</span>)<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>; }</div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> } allTrue_;</div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> </div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> <span class=\"keyword\">operator</span> bool()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> }</div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> </div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> I></div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> <span class=\"keyword\">const</span> AllTrueBitSetVector& operator[](<span class=\"keyword\">const</span> I&)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>;</div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> }</div>\n <div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> </div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> <span class=\"keyword\">auto</span> numEdges = referenceElement<D,dim>(type).size(dim-1);</div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00213.html#ga0d8eb549af76bc2563ab189e63668ee5\">power</a>(2,numEdges);</div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> }</div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SP></div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> <span class=\"keywordtype\">void</span> resize(<span class=\"keyword\">const</span> SP&)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span><span class=\"keyword\"> </span>{}</div>\n <div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> </div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> Nedelec1stKindLocalFiniteElementMap(<span class=\"keyword\">const</span> GV& gv)</div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> : elementMapper_(gv, mcmgElementLayout()),</div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> orientation_(gv.size(0))</div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> {</div>\n-<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> <span class=\"comment\">// create all variants</span></div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> (hasFixedElementType)</div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> {</div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> variants_.resize(numVariants(type));</div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i = 0; i < numVariants(type); i++)</div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> variants_[i] = FiniteElement(i);</div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> }</div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> <span class=\"keywordflow\">else</span></div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> {</div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> <span class=\"comment\">// for mixed grids add offset for cubes</span></div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> variants_.resize(numVariants(GeometryTypes::simplex(dim)) + numVariants(GeometryTypes::cube(dim)));</div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i = 0; i < numVariants(GeometryTypes::simplex(dim)); i++)</div>\n-<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> variants_[i] = SimplexFiniteElement(i);</div>\n-<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i = 0; i < numVariants(GeometryTypes::cube(dim)); i++)</div>\n-<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> variants_[i + numVariants(GeometryTypes::simplex(dim))] = CubeFiniteElement(i);</div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> }</div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> </div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> </div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> <span class=\"comment\">// compute orientation for all elements</span></div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& indexSet = gv.indexSet();</div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span>};</div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> </div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> </div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> </div>\n+<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span><span class=\"keyword\">template</span> <<span class=\"keyword\">class</span> B, <span class=\"keyword\">class</span> T, <span class=\"keyword\">class</span> NTRE, <span class=\"keyword\">class</span> HV, <span class=\"keyword\">class</span> LF, <span class=\"keyword\">class</span> HBV></div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span><span class=\"keyword\">class </span>LocalInterpolateVisitor</div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> : <span class=\"keyword\">public</span> TypeTree::TreeVisitor</div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> , <span class=\"keyword\">public</span> TypeTree::DynamicTraversal</div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span>{</div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> </div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> </div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> <span class=\"keyword\">using </span>Basis = B;</div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> <span class=\"keyword\">using </span>LocalView = <span class=\"keyword\">typename</span> B::LocalView;</div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> <span class=\"keyword\">using </span>MultiIndex = <span class=\"keyword\">typename</span> LocalView::MultiIndex;</div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> </div>\n+<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> <span class=\"keyword\">using </span>LocalFunction = LF;</div>\n+<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> </div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> <span class=\"keyword\">using </span>Tree = T;</div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> </div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> <span class=\"keyword\">using </span>VectorBackend = HV;</div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> <span class=\"keyword\">using </span>BitVectorBackend = HBV;</div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> </div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> <span class=\"keyword\">using </span>NodeToRangeEntry = NTRE;</div>\n <div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> </div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& element : elements(gv))</div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> {</div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& refElement = referenceElement(element);</div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> <span class=\"keyword\">auto</span> elementIndex = elementMapper_.index(element);</div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> orientation_[elementIndex] = 0;</div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> </div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> <span class=\"keywordflow\">for</span> (std::size_t i=0; i<element.subEntities(dim-1); i++)</div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> {</div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> <span class=\"comment\">// Local vertex indices within the element</span></div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> <span class=\"keyword\">auto</span> localV0 = refElement.subEntity(i,dim-1, 0,dim);</div>\n-<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> <span class=\"keyword\">auto</span> localV1 = refElement.subEntity(i,dim-1, 1,dim);</div>\n-<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> </div>\n-<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> <span class=\"comment\">// Global vertex indices within the grid</span></div>\n-<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> <span class=\"keyword\">auto</span> globalV0 = indexSet.subIndex(element,localV0,dim);</div>\n-<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> <span class=\"keyword\">auto</span> globalV1 = indexSet.subIndex(element,localV1,dim);</div>\n-<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> </div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> <span class=\"keywordflow\">if</span> ( (localV0<localV1 && globalV0>globalV1) || (localV0>localV1 && globalV0<globalV1) )</div>\n-<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> orientation_[elementIndex] |= (1 << i);</div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> }</div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> <span class=\"comment\">// for mixed grids add offset for cubes</span></div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> (!hasFixedElementType)</div>\n-<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> <span class=\"keywordflow\">if</span> (element.type().isCube())</div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> orientation_[elementIndex] += numVariants(GeometryTypes::simplex(dim));</div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> }</div>\n-<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> }</div>\n-<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> </div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Element></div>\n-<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& find(<span class=\"keyword\">const</span> Element& element)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> <span class=\"keywordflow\">return</span> variants_[orientation_[elementMapper_.index(element)]];</div>\n-<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> }</div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> <span class=\"keyword\">using </span>GridView = <span class=\"keyword\">typename</span> Basis::GridView;</div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> <span class=\"keyword\">using </span>Element = <span class=\"keyword\">typename</span> GridView::template Codim<0>::Entity;</div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> </div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> <span class=\"keyword\">using </span>LocalDomain = <span class=\"keyword\">typename</span> Element::Geometry::LocalCoordinate;</div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> </div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> <span class=\"keyword\">using </span>GlobalDomain = <span class=\"keyword\">typename</span> Element::Geometry::GlobalCoordinate;</div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> </div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> LocalInterpolateVisitor(<span class=\"keyword\">const</span> B& <span class=\"comment\">/*basis*/</span>, HV& coeff, <span class=\"keyword\">const</span> HBV& bitVector, <span class=\"keyword\">const</span> LF& localF, <span class=\"keyword\">const</span> LocalView& localView, <span class=\"keyword\">const</span> NodeToRangeEntry& nodeToRangeEntry) :</div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> vector_(coeff),</div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> localF_(localF),</div>\n+<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> bitVector_(bitVector),</div>\n+<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> localView_(localView),</div>\n+<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> nodeToRangeEntry_(nodeToRangeEntry)</div>\n+<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> {</div>\n+<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> <span class=\"keyword\">static_assert</span>(Dune::Functions::Concept::isCallable<LocalFunction, LocalDomain>(), <span class=\"stringliteral\">"Function passed to LocalInterpolateVisitor does not model the Callable<LocalCoordinate> concept"</span>);</div>\n+<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> }</div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> </div>\n+<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath></div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> <span class=\"keywordtype\">void</span> pre(Node&, TreePath)</div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> {}</div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> </div>\n+<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath></div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> <span class=\"keywordtype\">void</span> post(Node&, TreePath)</div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> {}</div>\n+<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> </div>\n+<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath></div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> <span class=\"keywordtype\">void</span> leaf(Node& node, TreePath treePath)</div>\n+<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> {</div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> <span class=\"keyword\">using </span>FiniteElement = <span class=\"keyword\">typename</span> Node::FiniteElement;</div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> <span class=\"keyword\">using </span>FiniteElementRange = <span class=\"keyword\">typename</span> FiniteElement::Traits::LocalBasisType::Traits::RangeType;</div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> <span class=\"keyword\">using </span>FiniteElementRangeField = <span class=\"keyword\">typename</span> FiniteElement::Traits::LocalBasisType::Traits::RangeFieldType;</div>\n <div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> </div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> <span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> std::vector<FiniteElement> variants_;</div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> <span class=\"keyword\">const</span> Dune::MultipleCodimMultipleGeomTypeMapper<GV> elementMapper_;</div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> std::vector<unsigned short> orientation_;</div>\n-<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> };</div>\n-<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> </div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> </div>\n-<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span>} <span class=\"comment\">// namespace Impl</span></div>\n-<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> </div>\n-<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> </div>\n-<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span><span class=\"comment\">// *****************************************************************************</span></div>\n-<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span><span class=\"comment\">// This is the reusable part of the basis. It contains</span></div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span><span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span><span class=\"comment\">// NedelecPreBasis</span></div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span><span class=\"comment\">// NedelecNode</span></div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span><span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span><span class=\"comment\">// The pre-basis allows to create the others and is the owner of possible shared</span></div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span><span class=\"comment\">// state. These components do _not_ depend on the global basis and local view</span></div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span><span class=\"comment\">// and can be used without a global basis.</span></div>\n-<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> <span class=\"keyword\">auto</span> interpolationCoefficients = std::vector<FiniteElementRangeField>();</div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> <span class=\"keyword\">auto</span>&& fe = node.finiteElement();</div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> </div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> <span class=\"comment\">// backward compatibility: for scalar basis functions and possibly vector valued coefficients</span></div>\n+<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> <span class=\"comment\">// (like used in dune-fufem for power bases) loop over the components</span></div>\n+<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> <span class=\"comment\">// of the coefficients</span></div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> ( FiniteElement::Traits::LocalBasisType::Traits::dimRange == 1 )</div>\n+<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> {</div>\n+<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> <span class=\"comment\">// Note that we capture j by reference. Hence we can switch</span></div>\n+<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> <span class=\"comment\">// the selected component later on by modifying j. Maybe we</span></div>\n+<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> <span class=\"comment\">// should avoid this naughty statefull lambda hack in favor</span></div>\n+<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> <span class=\"comment\">// of a separate helper class.</span></div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> std::size_t j=0;</div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> <span class=\"keyword\">auto</span> localFj = [&](<span class=\"keyword\">const</span> LocalDomain& x){</div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& y = localF_(x);</div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> <span class=\"keywordflow\">return</span> FiniteElementRange(<a class=\"code hl_function\" href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\">flatVectorView</a>(nodeToRangeEntry_(node, treePath, y))[j]);</div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> };</div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> </div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> <span class=\"comment\">// We loop over j defined above and thus over the components of the</span></div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> <span class=\"comment\">// range type of localF_.</span></div>\n <div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> </div>\n-<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keyword\">typename</span> Range, std::<span class=\"keywordtype\">size_t</span> kind, <span class=\"keywordtype\">int</span> order></div>\n-<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span><span class=\"keyword\">class </span>NedelecNode;</div>\n-<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> </div>\n-<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keyword\">typename</span> Range, std::<span class=\"keywordtype\">size_t</span> kind, <span class=\"keywordtype\">int</span> order></div>\n-<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html\"> 135</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01691.html\">NedelecPreBasis</a></div>\n-<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span>{</div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dim = GV::dimension;</div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> <span class=\"keyword\">static_assert</span>(kind==1, <span class=\"stringliteral\">"Only the Nedelec basis of the first kind is currently implemented!"</span>);</div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> <span class=\"keyword\">using </span>FiniteElementMap = <span class=\"keyword\">typename</span> Impl::Nedelec1stKindLocalFiniteElementMap<GV, dim, Range, order>;</div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> </div>\n-<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> <span class=\"keyword\">using </span>Mapper = Dune::MultipleCodimMultipleGeomTypeMapper<GV>;</div>\n-<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> </div>\n-<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#a4c8d0ac657c0dd2ecc6ecc826cb996a4\"> 145</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01691.html#a4c8d0ac657c0dd2ecc6ecc826cb996a4\">GridView</a> = GV;</div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#a1ed8686000377d0557455ef973bc5e12\"> 146</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01691.html#a1ed8686000377d0557455ef973bc5e12\">size_type</a> = std::size_t;</div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> </div>\n-<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#a9e12525dff004cd004c660e0fd9059c9\"> 148</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01687.html\">Node</a> = <a class=\"code hl_class\" href=\"a01687.html\">NedelecNode<GV, Range, kind, order></a>;</div>\n-<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> </div>\n-<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#a4de124caaadb756727f51db481bb0805\"> 150</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01691.html#a1ed8686000377d0557455ef973bc5e12\">size_type</a> <a class=\"code hl_variable\" href=\"a01691.html#a4de124caaadb756727f51db481bb0805\">maxMultiIndexSize</a> = 1;</div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#a9b75a17cf69d14b337838115fa346f3d\"> 151</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01691.html#a1ed8686000377d0557455ef973bc5e12\">size_type</a> <a class=\"code hl_variable\" href=\"a01691.html#a9b75a17cf69d14b337838115fa346f3d\">minMultiIndexSize</a> = 1;</div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#a60ebf4bfd1fa2b95eff282f3e813f528\"> 152</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01691.html#a1ed8686000377d0557455ef973bc5e12\">size_type</a> <a class=\"code hl_variable\" href=\"a01691.html#a60ebf4bfd1fa2b95eff282f3e813f528\">multiIndexBufferSize</a> = 1;</div>\n-<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> </div>\n-<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#a2591944cb29062fb7efcbcfb0a4363a5\"> 155</a></span> <a class=\"code hl_function\" href=\"a01691.html#a2591944cb29062fb7efcbcfb0a4363a5\">NedelecPreBasis</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01691.html#a4c8d0ac657c0dd2ecc6ecc826cb996a4\">GridView</a>& gv) :</div>\n-<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> <a class=\"code hl_variable\" href=\"a01691.html#a642b89d420e83f45643e63e567767bec\">gridView_</a>(gv),</div>\n-<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> <a class=\"code hl_variable\" href=\"a01691.html#a8069227fa8227b40007a976855c169f0\">finiteElementMap_</a>(gv),</div>\n-<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> <a class=\"code hl_variable\" href=\"a01691.html#af701774f82071f15fc8990d00c315e2b\">mapper_</a>(<a class=\"code hl_variable\" href=\"a01691.html#a642b89d420e83f45643e63e567767bec\">gridView_</a>, mcmgLayout(Dim<1>{}))</div>\n-<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> {</div>\n-<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> <span class=\"keywordflow\">if</span> (kind!=1)</div>\n-<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> DUNE_THROW(NotImplemented, <span class=\"stringliteral\">"Only Nedelec elements of the first kind are implemented!"</span>);</div>\n-<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> </div>\n-<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> <span class=\"comment\">// There is no inherent reason why the basis shouldn't work for grids with more than two</span></div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> <span class=\"comment\">// element types. Somebody simply has to sit down and implement the missing bits.</span></div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> <span class=\"keywordflow\">if</span> (gv.indexSet().types(0).size() > 2)</div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> DUNE_THROW(NotImplemented, <span class=\"stringliteral\">"N\u00e9d\u00e9lec basis is only implemented for grids with simplex and cube elements"</span>);</div>\n+<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> <span class=\"keyword\">auto</span> blockSize = <a class=\"code hl_function\" href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\">flatVectorView</a>(vector_[localView_.index(0)]).size();</div>\n+<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> </div>\n+<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> <span class=\"keywordflow\">for</span>(j=0; j<blockSize; ++j)</div>\n+<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> {</div>\n+<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> fe.localInterpolation().interpolate(localFj, interpolationCoefficients);</div>\n+<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<fe.localBasis().size(); ++i)</div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> {</div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> <span class=\"keyword\">auto</span> multiIndex = localView_.index(node.localIndex(i));</div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> <span class=\"keyword\">auto</span> bitVectorBlock = <a class=\"code hl_function\" href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\">flatVectorView</a>(bitVector_[multiIndex]);</div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> <span class=\"keywordflow\">if</span> (bitVectorBlock[j])</div>\n+<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> {</div>\n+<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> <span class=\"keyword\">auto</span> vectorBlock = <a class=\"code hl_function\" href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\">flatVectorView</a>(vector_[multiIndex]);</div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> vectorBlock[j] = interpolationCoefficients[i];</div>\n+<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> }</div>\n+<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> }</div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> }</div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> }</div>\n+<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> <span class=\"keywordflow\">else</span> <span class=\"comment\">// ( FiniteElement::Traits::LocalBasisType::Traits::dimRange != 1 )</span></div>\n+<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> {</div>\n+<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> <span class=\"comment\">// for all other finite elements: use the FiniteElementRange directly for the interpolation</span></div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> <span class=\"keyword\">auto</span> localF = [&](<span class=\"keyword\">const</span> LocalDomain& x){</div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& y = localF_(x);</div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> <span class=\"keywordflow\">return</span> FiniteElementRange(nodeToRangeEntry_(node, treePath, y));</div>\n+<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> };</div>\n+<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> </div>\n+<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> fe.localInterpolation().interpolate(localF, interpolationCoefficients);</div>\n+<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<fe.localBasis().size(); ++i)</div>\n+<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> {</div>\n+<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> <span class=\"keyword\">auto</span> multiIndex = localView_.index(node.localIndex(i));</div>\n+<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> <span class=\"keywordflow\">if</span> ( bitVector_[multiIndex] )</div>\n+<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> {</div>\n+<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> vector_[multiIndex] = interpolationCoefficients[i];</div>\n+<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> }</div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> }</div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> }</div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> }</div>\n <div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> </div>\n-<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">auto</span> type : gv.indexSet().types(0))</div>\n-<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> <span class=\"keywordflow\">if</span> (!type.isSimplex() && !type.isCube())</div>\n-<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> DUNE_THROW(NotImplemented, <span class=\"stringliteral\">"N\u00e9d\u00e9lec basis is only implemented for grids with simplex or cube elements."</span>);</div>\n-<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> </div>\n-<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> <span class=\"keywordflow\">if</span> (order>1)</div>\n-<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> DUNE_THROW(NotImplemented, <span class=\"stringliteral\">"Only first-order elements are implemented"</span>);</div>\n-<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> </div>\n-<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> <span class=\"keywordflow\">if</span> (dim!=2 && dim!=3)</div>\n-<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> DUNE_THROW(NotImplemented, <span class=\"stringliteral\">"Only 2d and 3d N\u00e9d\u00e9lec elements are implemented"</span>);</div>\n-<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> }</div>\n+<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> </div>\n+<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span><span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> </div>\n+<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> VectorBackend& vector_;</div>\n+<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> <span class=\"keyword\">const</span> LocalFunction& localF_;</div>\n+<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> <span class=\"keyword\">const</span> BitVectorBackend& bitVector_;</div>\n+<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> <span class=\"keyword\">const</span> LocalView& localView_;</div>\n+<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> <span class=\"keyword\">const</span> NodeToRangeEntry& nodeToRangeEntry_;</div>\n+<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span>};</div>\n+<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> </div>\n <div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> </div>\n-<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#aaa3ff181601337d43c072813cc060b90\"> 179</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01691.html#aaa3ff181601337d43c072813cc060b90\">initializeIndices</a>()</div>\n-<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> {}</div>\n+<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span>} <span class=\"comment\">// namespace Imp</span></div>\n+<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> </div>\n <div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> </div>\n-<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#aca814fbd069b0e979707d925c1338a44\"> 184</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01691.html#a4c8d0ac657c0dd2ecc6ecc826cb996a4\">GridView</a>& <a class=\"code hl_function\" href=\"a01691.html#aca814fbd069b0e979707d925c1338a44\">gridView</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01691.html#a642b89d420e83f45643e63e567767bec\">gridView_</a>;</div>\n-<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> }</div>\n-<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> </div>\n-<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> <span class=\"comment\">/* \\brief Update the stored grid view, to be called if the grid has changed */</span></div>\n-<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#abfad7bccc671799c5ed406a16510e8a1\"> 190</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01691.html#abfad7bccc671799c5ed406a16510e8a1\">update</a> (<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01691.html#a4c8d0ac657c0dd2ecc6ecc826cb996a4\">GridView</a>& gv)</div>\n-<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> {</div>\n-<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> <a class=\"code hl_variable\" href=\"a01691.html#a642b89d420e83f45643e63e567767bec\">gridView_</a> = gv;</div>\n-<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> <a class=\"code hl_variable\" href=\"a01691.html#af701774f82071f15fc8990d00c315e2b\">mapper_</a>.update(<a class=\"code hl_variable\" href=\"a01691.html#a642b89d420e83f45643e63e567767bec\">gridView_</a>);</div>\n-<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> }</div>\n-<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> </div>\n-<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#ad5124fec497b3042e767d265807cc63a\"> 199</a></span> <a class=\"code hl_class\" href=\"a01687.html\">Node</a> <a class=\"code hl_function\" href=\"a01691.html#ad5124fec497b3042e767d265807cc63a\">makeNode</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01687.html\">Node</a>{&<a class=\"code hl_variable\" href=\"a01691.html#a8069227fa8227b40007a976855c169f0\">finiteElementMap_</a>};</div>\n-<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> }</div>\n-<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> </div>\n-<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#ada93cc4c9448c413a3aa9bebce67ab29\"> 204</a></span> <a class=\"code hl_typedef\" href=\"a01691.html#a1ed8686000377d0557455ef973bc5e12\">size_type</a> <a class=\"code hl_function\" href=\"a01691.html#ada93cc4c9448c413a3aa9bebce67ab29\">size</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01691.html#af701774f82071f15fc8990d00c315e2b\">mapper_</a>.size();</div>\n-<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> }</div>\n+<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> </div>\n+<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span> </div>\n+<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span><span class=\"keyword\">template</span> <<span class=\"keyword\">class</span> B, <span class=\"keyword\">class</span> C, <span class=\"keyword\">class</span> F, <span class=\"keyword\">class</span> BV, <span class=\"keyword\">class</span> NTRE></div>\n+<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a13b0c6bf02d744e7b2078d1a535b5211\"> 202</a></span><span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a00219.html#a13b0c6bf02d744e7b2078d1a535b5211\">interpolate</a>(<span class=\"keyword\">const</span> B& basis, C&& coeff, <span class=\"keyword\">const</span> F& f, <span class=\"keyword\">const</span> BV& bv, <span class=\"keyword\">const</span> NTRE& nodeToRangeEntry)</div>\n+<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span>{</div>\n+<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> <span class=\"keyword\">using </span>GridView = <span class=\"keyword\">typename</span> B::GridView;</div>\n+<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span> <span class=\"keyword\">using </span>Element = <span class=\"keyword\">typename</span> GridView::template Codim<0>::Entity;</div>\n+<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> </div>\n+<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> <span class=\"keyword\">using </span>Tree = <span class=\"keyword\">typename</span> B::LocalView::Tree;</div>\n <div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span> </div>\n-<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n-<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#a185c22a27f1499d80a1c3ff4d4640ff8\"> 211</a></span> <a class=\"code hl_typedef\" href=\"a01691.html#a1ed8686000377d0557455ef973bc5e12\">size_type</a> <a class=\"code hl_function\" href=\"a01691.html#a185c22a27f1499d80a1c3ff4d4640ff8\">size</a>(<span class=\"keyword\">const</span> SizePrefix& prefix)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"> 212</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span> assert(prefix.size() == 0 || prefix.size() == 1);</div>\n-<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> <span class=\"keywordflow\">return</span> (prefix.size() == 0) ? <a class=\"code hl_function\" href=\"a01691.html#ada93cc4c9448c413a3aa9bebce67ab29\">size</a>() : 0;</div>\n-<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> }</div>\n-<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span> </div>\n-<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#a4d2833397c8b6ee3c761ce62d40eaad5\"> 217</a></span> <a class=\"code hl_typedef\" href=\"a01691.html#a1ed8686000377d0557455ef973bc5e12\">size_type</a> <a class=\"code hl_function\" href=\"a01691.html#a4d2833397c8b6ee3c761ce62d40eaad5\">dimension</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01691.html#ada93cc4c9448c413a3aa9bebce67ab29\">size</a>();</div>\n-<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span> }</div>\n-<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> </div>\n-<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#ac7a7c76bab36e858497aa265fab90d76\"> 222</a></span> <a class=\"code hl_typedef\" href=\"a01691.html#a1ed8686000377d0557455ef973bc5e12\">size_type</a> <a class=\"code hl_function\" href=\"a01691.html#ac7a7c76bab36e858497aa265fab90d76\">maxNodeSize</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> <a class=\"code hl_typedef\" href=\"a01691.html#a1ed8686000377d0557455ef973bc5e12\">size_type</a> result = 0;</div>\n-<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span> <span class=\"keywordflow\">for</span> (<span class=\"keyword\">auto</span>&& type : <a class=\"code hl_variable\" href=\"a01691.html#a642b89d420e83f45643e63e567767bec\">gridView_</a>.indexSet().types(0))</div>\n-<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> {</div>\n-<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> <a class=\"code hl_typedef\" href=\"a01691.html#a1ed8686000377d0557455ef973bc5e12\">size_type</a> numEdges = referenceElement<typename GV::ctype,dim>(type).size(dim-1);</div>\n-<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> result = std::max(result, numEdges);</div>\n-<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> }</div>\n-<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span> </div>\n-<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span> <span class=\"keywordflow\">return</span> result;</div>\n-<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> }</div>\n-<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> </div>\n-<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n-<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#a0ec65692ba465323c3aae1deb95bd98b\"> 238</a></span> It <a class=\"code hl_function\" href=\"a01691.html#a0ec65692ba465323c3aae1deb95bd98b\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01687.html\">Node</a>& node, It it)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"> 240</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& element = node.<a class=\"code hl_function\" href=\"a01687.html#a61628ce23ca5cac05850c3d47081955a\">element</a>();</div>\n+<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> <span class=\"keyword\">using </span>GlobalDomain = <span class=\"keyword\">typename</span> Element::Geometry::GlobalCoordinate;</div>\n+<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> </div>\n+<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> <span class=\"keyword\">static_assert</span>(Dune::Functions::Concept::isCallable<F, GlobalDomain>(), <span class=\"stringliteral\">"Function passed to interpolate does not model the Callable<GlobalCoordinate> concept"</span>);</div>\n+<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"> 212</span> </div>\n+<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span> <span class=\"keyword\">auto</span>&& gridView = basis.gridView();</div>\n+<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> </div>\n+<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> <span class=\"comment\">// Small helper functions to wrap vectors using istlVectorBackend</span></div>\n+<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span> <span class=\"comment\">// if they do not already satisfy the VectorBackend interface.</span></div>\n+<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> <span class=\"keyword\">auto</span> toVectorBackend = [&](<span class=\"keyword\">auto</span>& v) -> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) {</div>\n+<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> (models<Concept::VectorBackend<B>, <span class=\"keyword\">decltype</span>(v)>()) {</div>\n+<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> <span class=\"keywordflow\">return</span> v;</div>\n+<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span> } <span class=\"keywordflow\">else</span> {</div>\n+<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00214.html#gae5b9f62f85e3d638423142695a74d056\">istlVectorBackend</a>(v);</div>\n+<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span> }</div>\n+<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> };</div>\n+<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> </div>\n+<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span> <span class=\"keyword\">auto</span> toConstVectorBackend = [&](<span class=\"keyword\">auto</span>& v) -> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) {</div>\n+<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> (models<Concept::ConstVectorBackend<B>, <span class=\"keyword\">decltype</span>(v)>()) {</div>\n+<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> <span class=\"keywordflow\">return</span> v;</div>\n+<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> } <span class=\"keywordflow\">else</span> {</div>\n+<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00214.html#gae5b9f62f85e3d638423142695a74d056\">istlVectorBackend</a>(v);</div>\n+<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span> }</div>\n+<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span> };</div>\n+<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> </div>\n+<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> <span class=\"keyword\">auto</span>&& bitVector = toConstVectorBackend(bv);</div>\n+<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> <span class=\"keyword\">auto</span>&& vector = toVectorBackend(coeff);</div>\n+<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> vector.resize(<a class=\"code hl_function\" href=\"a00219.html#abd7e25a89325dbe2232b17308dae45f2\">sizeInfo</a>(basis));</div>\n+<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span> </div>\n+<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span> </div>\n+<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span> </div>\n+<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span> <span class=\"comment\">// Make a grid function supporting local evaluation out of f</span></div>\n+<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"> 240</span> <span class=\"keyword\">auto</span> gf = <a class=\"code hl_function\" href=\"a00219.html#ab31121faf1c753f425b7360cedeb9a6a\">makeGridViewFunction</a>(f, gridView);</div>\n <div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span> </div>\n-<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span> <span class=\"comment\">// throw if Element is not of predefined type</span></div>\n-<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> <span class=\"keywordflow\">if</span> (not(element.type().isCube()) and not(element.type().isSimplex()))</div>\n-<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> DUNE_THROW(NotImplemented, <span class=\"stringliteral\">"NedelecBasis only implemented for cube and simplex elements."</span>);</div>\n-<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> </div>\n-<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span> <span class=\"keywordflow\">for</span>(std::size_t i=0, end=node.<a class=\"code hl_function\" href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">size</a>(); i<end; ++i, ++it)</div>\n-<div class=\"line\"><a id=\"l00247\" name=\"l00247\"></a><span class=\"lineno\"> 247</span> {</div>\n-<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"> 248</span> Dune::LocalKey localKey = node.<a class=\"code hl_function\" href=\"a01687.html#a7af9ddb25575c6d15b5053b6645c4b4c\">finiteElement</a>().localCoefficients().localKey(i);</div>\n-<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span> *it = { <a class=\"code hl_variable\" href=\"a01691.html#af701774f82071f15fc8990d00c315e2b\">mapper_</a>.subIndex(element, localKey.subEntity(), localKey.codim()) + localKey.index() };</div>\n-<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span> }</div>\n+<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span> <span class=\"comment\">// Obtain a local view of f</span></div>\n+<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> <span class=\"keyword\">auto</span> localF = localFunction(gf);</div>\n+<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> </div>\n+<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> <span class=\"keyword\">auto</span> localView = basis.localView();</div>\n+<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span> </div>\n+<div class=\"line\"><a id=\"l00247\" name=\"l00247\"></a><span class=\"lineno\"> 247</span> <span class=\"keywordflow\">for</span> (<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& e : elements(gridView))</div>\n+<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"> 248</span> {</div>\n+<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span> localView.bind(e);</div>\n+<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span> localF.bind(e);</div>\n <div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span> </div>\n-<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span> <span class=\"keywordflow\">return</span> it;</div>\n-<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"> 253</span> }</div>\n-<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"> 254</span> </div>\n-<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span><span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#a642b89d420e83f45643e63e567767bec\"> 256</a></span> <a class=\"code hl_typedef\" href=\"a01691.html#a4c8d0ac657c0dd2ecc6ecc826cb996a4\">GridView</a> <a class=\"code hl_variable\" href=\"a01691.html#a642b89d420e83f45643e63e567767bec\">gridView_</a>;</div>\n-<div class=\"line\"><a id=\"l00257\" name=\"l00257\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#a8069227fa8227b40007a976855c169f0\"> 257</a></span> FiniteElementMap <a class=\"code hl_variable\" href=\"a01691.html#a8069227fa8227b40007a976855c169f0\">finiteElementMap_</a>;</div>\n-<div class=\"line\"><a id=\"l00258\" name=\"l00258\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#af701774f82071f15fc8990d00c315e2b\"> 258</a></span> Mapper <a class=\"code hl_variable\" href=\"a01691.html#af701774f82071f15fc8990d00c315e2b\">mapper_</a>;</div>\n-<div class=\"line\"><a id=\"l00259\" name=\"l00259\"></a><span class=\"lineno\"> 259</span>};</div>\n-<div class=\"line\"><a id=\"l00260\" name=\"l00260\"></a><span class=\"lineno\"> 260</span> </div>\n-<div class=\"line\"><a id=\"l00261\" name=\"l00261\"></a><span class=\"lineno\"> 261</span> </div>\n-<div class=\"line\"><a id=\"l00262\" name=\"l00262\"></a><span class=\"lineno\"> 262</span> </div>\n-<div class=\"line\"><a id=\"l00263\" name=\"l00263\"></a><span class=\"lineno\"> 263</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keyword\">typename</span> Range, <span class=\"keywordtype\">size_t</span> kind, <span class=\"keywordtype\">int</span> order></div>\n-<div class=\"line\"><a id=\"l00264\" name=\"l00264\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01687.html\"> 264</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01687.html\">NedelecNode</a> :</div>\n-<div class=\"line\"><a id=\"l00265\" name=\"l00265\"></a><span class=\"lineno\"> 265</span> <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01711.html\">LeafBasisNode</a></div>\n-<div class=\"line\"><a id=\"l00266\" name=\"l00266\"></a><span class=\"lineno\"> 266</span>{</div>\n-<div class=\"line\"><a id=\"l00267\" name=\"l00267\"></a><span class=\"lineno\"> 267</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dim = GV::dimension;</div>\n-<div class=\"line\"><a id=\"l00268\" name=\"l00268\"></a><span class=\"lineno\"> 268</span> </div>\n-<div class=\"line\"><a id=\"l00269\" name=\"l00269\"></a><span class=\"lineno\"> 269</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00270\" name=\"l00270\"></a><span class=\"lineno\"> 270</span> </div>\n-<div class=\"line\"><a id=\"l00271\" name=\"l00271\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01687.html#af23a2827c1532d33944367e067f2d249\"> 271</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01687.html#af23a2827c1532d33944367e067f2d249\">size_type</a> = std::size_t;</div>\n-<div class=\"line\"><a id=\"l00272\" name=\"l00272\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01687.html#a71f7ac9c203201db021a4e1d7d9c15da\"> 272</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01687.html#a71f7ac9c203201db021a4e1d7d9c15da\">Element</a> = <span class=\"keyword\">typename</span> GV::template Codim<0>::Entity;</div>\n-<div class=\"line\"><a id=\"l00273\" name=\"l00273\"></a><span class=\"lineno\"> 273</span> <span class=\"keyword\">static_assert</span>(kind==1, <span class=\"stringliteral\">"Only Nedelec elements of the first kind are implemented!"</span>);</div>\n-<div class=\"line\"><a id=\"l00274\" name=\"l00274\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01687.html#acb630a2b334ad1a9be042a9ceda0df49\"> 274</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01687.html#acb630a2b334ad1a9be042a9ceda0df49\">FiniteElementMap</a> = <span class=\"keyword\">typename</span> Impl::Nedelec1stKindLocalFiniteElementMap<GV, dim, Range, order>;</div>\n-<div class=\"line\"><a id=\"l00275\" name=\"l00275\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01687.html#a42789dd1900a54215f4d0bfef9c76e12\"> 275</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01687.html#a42789dd1900a54215f4d0bfef9c76e12\">FiniteElement</a> = Impl::GlobalValuedLocalFiniteElement<Impl::CovariantPiolaTransformator,</div>\n-<div class=\"line\"><a id=\"l00276\" name=\"l00276\"></a><span class=\"lineno\"> 276</span> <span class=\"keyword\">typename</span> FiniteElementMap::FiniteElement,</div>\n-<div class=\"line\"><a id=\"l00277\" name=\"l00277\"></a><span class=\"lineno\"> 277</span> <a class=\"code hl_typedef\" href=\"a01687.html#a71f7ac9c203201db021a4e1d7d9c15da\">Element</a>>;</div>\n+<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span> Imp::LocalInterpolateVisitor<B, Tree, NTRE, <span class=\"keyword\">decltype</span>(vector), <span class=\"keyword\">decltype</span>(localF), <span class=\"keyword\">decltype</span>(bitVector)> localInterpolateVisitor(basis, vector, bitVector, localF, localView, nodeToRangeEntry);</div>\n+<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"> 253</span> TypeTree::applyToTree(localView.tree(),localInterpolateVisitor);</div>\n+<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"> 254</span> }</div>\n+<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span>}</div>\n+<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"> 256</span> </div>\n+<div class=\"line\"><a id=\"l00273\" name=\"l00273\"></a><span class=\"lineno\"> 273</span><span class=\"keyword\">template</span> <<span class=\"keyword\">class</span> B, <span class=\"keyword\">class</span> C, <span class=\"keyword\">class</span> F, <span class=\"keyword\">class</span> BV></div>\n+<div class=\"line\"><a id=\"l00274\" name=\"l00274\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#ae167dc7b5ace0ff9617a3205b05744b5\"> 274</a></span><span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a00219.html#a13b0c6bf02d744e7b2078d1a535b5211\">interpolate</a>(<span class=\"keyword\">const</span> B& basis, C&& coeff, <span class=\"keyword\">const</span> F& f, <span class=\"keyword\">const</span> BV& bitVector)</div>\n+<div class=\"line\"><a id=\"l00275\" name=\"l00275\"></a><span class=\"lineno\"> 275</span>{</div>\n+<div class=\"line\"><a id=\"l00276\" name=\"l00276\"></a><span class=\"lineno\"> 276</span> <a class=\"code hl_function\" href=\"a00219.html#a13b0c6bf02d744e7b2078d1a535b5211\">interpolate</a>(basis, coeff, f, bitVector, <a class=\"code hl_struct\" href=\"a01627.html\">HierarchicNodeToRangeMap</a>());</div>\n+<div class=\"line\"><a id=\"l00277\" name=\"l00277\"></a><span class=\"lineno\"> 277</span>}</div>\n <div class=\"line\"><a id=\"l00278\" name=\"l00278\"></a><span class=\"lineno\"> 278</span> </div>\n-<div class=\"line\"><a id=\"l00279\" name=\"l00279\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01687.html#ac51f523763d2bb13d60847cb63b1da49\"> 279</a></span> <a class=\"code hl_function\" href=\"a01687.html#ac51f523763d2bb13d60847cb63b1da49\">NedelecNode</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01687.html#acb630a2b334ad1a9be042a9ceda0df49\">FiniteElementMap</a>* finiteElementMap) :</div>\n-<div class=\"line\"><a id=\"l00280\" name=\"l00280\"></a><span class=\"lineno\"> 280</span> <a class=\"code hl_variable\" href=\"a01687.html#ad41e422719270dbd0a3cbc1c6024b441\">element_</a>(nullptr),</div>\n-<div class=\"line\"><a id=\"l00281\" name=\"l00281\"></a><span class=\"lineno\"> 281</span> <a class=\"code hl_variable\" href=\"a01687.html#a124185f876b964841212a0eda240dbd4\">finiteElementMap_</a>(finiteElementMap)</div>\n-<div class=\"line\"><a id=\"l00282\" name=\"l00282\"></a><span class=\"lineno\"> 282</span> { }</div>\n-<div class=\"line\"><a id=\"l00283\" name=\"l00283\"></a><span class=\"lineno\"> 283</span> </div>\n-<div class=\"line\"><a id=\"l00285\" name=\"l00285\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01687.html#a61628ce23ca5cac05850c3d47081955a\"> 285</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01687.html#a71f7ac9c203201db021a4e1d7d9c15da\">Element</a>& <a class=\"code hl_function\" href=\"a01687.html#a61628ce23ca5cac05850c3d47081955a\">element</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00286\" name=\"l00286\"></a><span class=\"lineno\"> 286</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00287\" name=\"l00287\"></a><span class=\"lineno\"> 287</span> <span class=\"keywordflow\">return</span> *<a class=\"code hl_variable\" href=\"a01687.html#ad41e422719270dbd0a3cbc1c6024b441\">element_</a>;</div>\n-<div class=\"line\"><a id=\"l00288\" name=\"l00288\"></a><span class=\"lineno\"> 288</span> }</div>\n-<div class=\"line\"><a id=\"l00289\" name=\"l00289\"></a><span class=\"lineno\"> 289</span> </div>\n-<div class=\"line\"><a id=\"l00294\" name=\"l00294\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01687.html#a7af9ddb25575c6d15b5053b6645c4b4c\"> 294</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01687.html#a42789dd1900a54215f4d0bfef9c76e12\">FiniteElement</a>& <a class=\"code hl_function\" href=\"a01687.html#a7af9ddb25575c6d15b5053b6645c4b4c\">finiteElement</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00295\" name=\"l00295\"></a><span class=\"lineno\"> 295</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00296\" name=\"l00296\"></a><span class=\"lineno\"> 296</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01687.html#a19f7b4d797ee8eaa9b34b80e1a1e8049\">finiteElement_</a>;</div>\n-<div class=\"line\"><a id=\"l00297\" name=\"l00297\"></a><span class=\"lineno\"> 297</span> }</div>\n+<div class=\"line\"><a id=\"l00293\" name=\"l00293\"></a><span class=\"lineno\"> 293</span><span class=\"keyword\">template</span> <<span class=\"keyword\">class</span> B, <span class=\"keyword\">class</span> C, <span class=\"keyword\">class</span> F></div>\n+<div class=\"line\"><a id=\"l00294\" name=\"l00294\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a2e34859322800ae26a292903910ef9f7\"> 294</a></span><span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a00219.html#a13b0c6bf02d744e7b2078d1a535b5211\">interpolate</a>(<span class=\"keyword\">const</span> B& basis, C&& coeff, <span class=\"keyword\">const</span> F& f)</div>\n+<div class=\"line\"><a id=\"l00295\" name=\"l00295\"></a><span class=\"lineno\"> 295</span>{</div>\n+<div class=\"line\"><a id=\"l00296\" name=\"l00296\"></a><span class=\"lineno\"> 296</span> <a class=\"code hl_function\" href=\"a00219.html#a13b0c6bf02d744e7b2078d1a535b5211\">interpolate</a> (basis, coeff, f, Imp::AllTrueBitSetVector(), <a class=\"code hl_struct\" href=\"a01627.html\">HierarchicNodeToRangeMap</a>());</div>\n+<div class=\"line\"><a id=\"l00297\" name=\"l00297\"></a><span class=\"lineno\"> 297</span>}</div>\n <div class=\"line\"><a id=\"l00298\" name=\"l00298\"></a><span class=\"lineno\"> 298</span> </div>\n-<div class=\"line\"><a id=\"l00300\" name=\"l00300\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01687.html#a49c53f555c5c73e9934b175e4e851992\"> 300</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01687.html#a49c53f555c5c73e9934b175e4e851992\">bind</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01687.html#a71f7ac9c203201db021a4e1d7d9c15da\">Element</a>& e)</div>\n-<div class=\"line\"><a id=\"l00301\" name=\"l00301\"></a><span class=\"lineno\"> 301</span> {</div>\n-<div class=\"line\"><a id=\"l00302\" name=\"l00302\"></a><span class=\"lineno\"> 302</span> <a class=\"code hl_variable\" href=\"a01687.html#ad41e422719270dbd0a3cbc1c6024b441\">element_</a> = &e;</div>\n-<div class=\"line\"><a id=\"l00303\" name=\"l00303\"></a><span class=\"lineno\"> 303</span> <a class=\"code hl_variable\" href=\"a01687.html#a19f7b4d797ee8eaa9b34b80e1a1e8049\">finiteElement_</a>.bind((<a class=\"code hl_variable\" href=\"a01687.html#a124185f876b964841212a0eda240dbd4\">finiteElementMap_</a>->find(*<a class=\"code hl_variable\" href=\"a01687.html#ad41e422719270dbd0a3cbc1c6024b441\">element_</a>)), e);</div>\n-<div class=\"line\"><a id=\"l00304\" name=\"l00304\"></a><span class=\"lineno\"> 304</span> this-><a class=\"code hl_function\" href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\">setSize</a>(<a class=\"code hl_variable\" href=\"a01687.html#a19f7b4d797ee8eaa9b34b80e1a1e8049\">finiteElement_</a>.size());</div>\n-<div class=\"line\"><a id=\"l00305\" name=\"l00305\"></a><span class=\"lineno\"> 305</span> }</div>\n-<div class=\"line\"><a id=\"l00306\" name=\"l00306\"></a><span class=\"lineno\"> 306</span> </div>\n-<div class=\"line\"><a id=\"l00307\" name=\"l00307\"></a><span class=\"lineno\"> 307</span><span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00308\" name=\"l00308\"></a><span class=\"lineno\"> 308</span> </div>\n-<div class=\"line\"><a id=\"l00309\" name=\"l00309\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01687.html#a19f7b4d797ee8eaa9b34b80e1a1e8049\"> 309</a></span> <a class=\"code hl_typedef\" href=\"a01687.html#a42789dd1900a54215f4d0bfef9c76e12\">FiniteElement</a> <a class=\"code hl_variable\" href=\"a01687.html#a19f7b4d797ee8eaa9b34b80e1a1e8049\">finiteElement_</a>;</div>\n-<div class=\"line\"><a id=\"l00310\" name=\"l00310\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01687.html#ad41e422719270dbd0a3cbc1c6024b441\"> 310</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01687.html#a71f7ac9c203201db021a4e1d7d9c15da\">Element</a>* <a class=\"code hl_variable\" href=\"a01687.html#ad41e422719270dbd0a3cbc1c6024b441\">element_</a>;</div>\n-<div class=\"line\"><a id=\"l00311\" name=\"l00311\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01687.html#a124185f876b964841212a0eda240dbd4\"> 311</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01687.html#acb630a2b334ad1a9be042a9ceda0df49\">FiniteElementMap</a>* <a class=\"code hl_variable\" href=\"a01687.html#a124185f876b964841212a0eda240dbd4\">finiteElementMap_</a>;</div>\n-<div class=\"line\"><a id=\"l00312\" name=\"l00312\"></a><span class=\"lineno\"> 312</span>};</div>\n-<div class=\"line\"><a id=\"l00313\" name=\"l00313\"></a><span class=\"lineno\"> 313</span> </div>\n-<div class=\"line\"><a id=\"l00314\" name=\"l00314\"></a><span class=\"lineno\"> 314</span> </div>\n-<div class=\"line\"><a id=\"l00315\" name=\"l00315\"></a><span class=\"lineno\"> 315</span> </div>\n-<div class=\"line\"><a id=\"l00316\" name=\"l00316\"></a><span class=\"lineno\"> 316</span><span class=\"keyword\">namespace </span>BasisFactory {</div>\n-<div class=\"line\"><a id=\"l00317\" name=\"l00317\"></a><span class=\"lineno\"> 317</span> </div>\n-<div class=\"line\"><a id=\"l00327\" name=\"l00327\"></a><span class=\"lineno\"> 327</span><span class=\"keyword\">template</span><std::<span class=\"keywordtype\">size_t</span> kind, std::<span class=\"keywordtype\">size_t</span> order, <span class=\"keyword\">typename</span> Range=<span class=\"keywordtype\">double</span>></div>\n-<div class=\"line\"><a id=\"l00328\" name=\"l00328\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#gafe0fe439067c288f197101b8686223e8\"> 328</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00213.html#gafe0fe439067c288f197101b8686223e8\">nedelec</a>()</div>\n-<div class=\"line\"><a id=\"l00329\" name=\"l00329\"></a><span class=\"lineno\"> 329</span>{</div>\n-<div class=\"line\"><a id=\"l00330\" name=\"l00330\"></a><span class=\"lineno\"> 330</span> <span class=\"keywordflow\">return</span> [](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridView) {</div>\n-<div class=\"line\"><a id=\"l00331\" name=\"l00331\"></a><span class=\"lineno\"> 331</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01691.html\">NedelecPreBasis</a><std::decay_t<<span class=\"keyword\">decltype</span>(gridView)>, Range, kind, order>(gridView);</div>\n-<div class=\"line\"><a id=\"l00332\" name=\"l00332\"></a><span class=\"lineno\"> 332</span> };</div>\n-<div class=\"line\"><a id=\"l00333\" name=\"l00333\"></a><span class=\"lineno\"> 333</span>}</div>\n-<div class=\"line\"><a id=\"l00334\" name=\"l00334\"></a><span class=\"lineno\"> 334</span> </div>\n-<div class=\"line\"><a id=\"l00335\" name=\"l00335\"></a><span class=\"lineno\"> 335</span>} <span class=\"comment\">// end namespace BasisFactory</span></div>\n-<div class=\"line\"><a id=\"l00336\" name=\"l00336\"></a><span class=\"lineno\"> 336</span> </div>\n-<div class=\"line\"><a id=\"l00337\" name=\"l00337\"></a><span class=\"lineno\"> 337</span> </div>\n-<div class=\"line\"><a id=\"l00338\" name=\"l00338\"></a><span class=\"lineno\"> 338</span> </div>\n-<div class=\"line\"><a id=\"l00339\" name=\"l00339\"></a><span class=\"lineno\"> 339</span><span class=\"comment\">// *****************************************************************************</span></div>\n-<div class=\"line\"><a id=\"l00340\" name=\"l00340\"></a><span class=\"lineno\"> 340</span><span class=\"comment\">// This is the actual global basis implementation based on the reusable parts.</span></div>\n-<div class=\"line\"><a id=\"l00341\" name=\"l00341\"></a><span class=\"lineno\"> 341</span><span class=\"comment\">// *****************************************************************************</span></div>\n-<div class=\"line\"><a id=\"l00342\" name=\"l00342\"></a><span class=\"lineno\"> 342</span> </div>\n-<div class=\"line\"><a id=\"l00350\" name=\"l00350\"></a><span class=\"lineno\"> 350</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, std::<span class=\"keywordtype\">size_t</span> kind, std::<span class=\"keywordtype\">size_t</span> order, <span class=\"keyword\">typename</span> Range=<span class=\"keywordtype\">double</span>></div>\n-<div class=\"line\"><a id=\"l00351\" name=\"l00351\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a744da0623cd512fc478d47bd2f7908eb\"> 351</a></span><span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01555.html\">NedelecBasis</a> = <a class=\"code hl_class\" href=\"a01555.html\">DefaultGlobalBasis<NedelecPreBasis<GV, Range, kind, order ></a> >;</div>\n-<div class=\"line\"><a id=\"l00352\" name=\"l00352\"></a><span class=\"lineno\"> 352</span> </div>\n-<div class=\"line\"><a id=\"l00353\" name=\"l00353\"></a><span class=\"lineno\"> 353</span>} <span class=\"comment\">// end namespace Dune::Functions</span></div>\n-<div class=\"line\"><a id=\"l00354\" name=\"l00354\"></a><span class=\"lineno\"> 354</span> </div>\n-<div class=\"line\"><a id=\"l00355\" name=\"l00355\"></a><span class=\"lineno\"> 355</span> </div>\n-<div class=\"line\"><a id=\"l00356\" name=\"l00356\"></a><span class=\"lineno\"> 356</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH</span></div>\n-<div class=\"ttc\" id=\"aa00119_html\"><div class=\"ttname\"><a href=\"a00119.html\">defaultglobalbasis.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00134_html\"><div class=\"ttname\"><a href=\"a00134.html\">globalvaluedlocalfiniteelement.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00191_html\"><div class=\"ttname\"><a href=\"a00191.html\">nodes.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00213_html_ga0d8eb549af76bc2563ab189e63668ee5\"><div class=\"ttname\"><a href=\"a00213.html#ga0d8eb549af76bc2563ab189e63668ee5\">Dune::Functions::BasisFactory::power</a></div><div class=\"ttdeci\">auto power(ChildPreBasisFactory &&childPreBasisFactory, const IndexMergingStrategy &)</div><div class=\"ttdoc\">Create a pre-basis factory that can build a PowerPreBasis.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:369</div></div>\n-<div class=\"ttc\" id=\"aa00213_html_gafe0fe439067c288f197101b8686223e8\"><div class=\"ttname\"><a href=\"a00213.html#gafe0fe439067c288f197101b8686223e8\">Dune::Functions::BasisFactory::nedelec</a></div><div class=\"ttdeci\">auto nedelec()</div><div class=\"ttdoc\">Create a pre-basis factory that can create a N\u00e9d\u00e9lec pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:328</div></div>\n-<div class=\"ttc\" id=\"aa00219_html\"><div class=\"ttname\"><a href=\"a00219.html\">Dune::Functions</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:11</div></div>\n-<div class=\"ttc\" id=\"aa01555_html\"><div class=\"ttname\"><a href=\"a01555.html\">Dune::Functions::DefaultGlobalBasis</a></div><div class=\"ttdoc\">Global basis for given pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:46</div></div>\n-<div class=\"ttc\" id=\"aa01687_html\"><div class=\"ttname\"><a href=\"a01687.html\">Dune::Functions::NedelecNode</a></div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:266</div></div>\n-<div class=\"ttc\" id=\"aa01687_html_a124185f876b964841212a0eda240dbd4\"><div class=\"ttname\"><a href=\"a01687.html#a124185f876b964841212a0eda240dbd4\">Dune::Functions::NedelecNode::finiteElementMap_</a></div><div class=\"ttdeci\">const FiniteElementMap * finiteElementMap_</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:311</div></div>\n-<div class=\"ttc\" id=\"aa01687_html_a19f7b4d797ee8eaa9b34b80e1a1e8049\"><div class=\"ttname\"><a href=\"a01687.html#a19f7b4d797ee8eaa9b34b80e1a1e8049\">Dune::Functions::NedelecNode::finiteElement_</a></div><div class=\"ttdeci\">FiniteElement finiteElement_</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:309</div></div>\n-<div class=\"ttc\" id=\"aa01687_html_a42789dd1900a54215f4d0bfef9c76e12\"><div class=\"ttname\"><a href=\"a01687.html#a42789dd1900a54215f4d0bfef9c76e12\">Dune::Functions::NedelecNode::FiniteElement</a></div><div class=\"ttdeci\">Impl::GlobalValuedLocalFiniteElement< Impl::CovariantPiolaTransformator, typename FiniteElementMap::FiniteElement, Element > FiniteElement</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:277</div></div>\n-<div class=\"ttc\" id=\"aa01687_html_a49c53f555c5c73e9934b175e4e851992\"><div class=\"ttname\"><a href=\"a01687.html#a49c53f555c5c73e9934b175e4e851992\">Dune::Functions::NedelecNode::bind</a></div><div class=\"ttdeci\">void bind(const Element &e)</div><div class=\"ttdoc\">Bind to element.</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:300</div></div>\n-<div class=\"ttc\" id=\"aa01687_html_a61628ce23ca5cac05850c3d47081955a\"><div class=\"ttname\"><a href=\"a01687.html#a61628ce23ca5cac05850c3d47081955a\">Dune::Functions::NedelecNode::element</a></div><div class=\"ttdeci\">const Element & element() const</div><div class=\"ttdoc\">Return current element, throw if unbound.</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:285</div></div>\n-<div class=\"ttc\" id=\"aa01687_html_a71f7ac9c203201db021a4e1d7d9c15da\"><div class=\"ttname\"><a href=\"a01687.html#a71f7ac9c203201db021a4e1d7d9c15da\">Dune::Functions::NedelecNode::Element</a></div><div class=\"ttdeci\">typename GV::template Codim< 0 >::Entity Element</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:272</div></div>\n-<div class=\"ttc\" id=\"aa01687_html_a7af9ddb25575c6d15b5053b6645c4b4c\"><div class=\"ttname\"><a href=\"a01687.html#a7af9ddb25575c6d15b5053b6645c4b4c\">Dune::Functions::NedelecNode::finiteElement</a></div><div class=\"ttdeci\">const FiniteElement & finiteElement() const</div><div class=\"ttdoc\">Return the LocalFiniteElement for the element we are bound to.</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:294</div></div>\n-<div class=\"ttc\" id=\"aa01687_html_ac51f523763d2bb13d60847cb63b1da49\"><div class=\"ttname\"><a href=\"a01687.html#ac51f523763d2bb13d60847cb63b1da49\">Dune::Functions::NedelecNode::NedelecNode</a></div><div class=\"ttdeci\">NedelecNode(const FiniteElementMap *finiteElementMap)</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:279</div></div>\n-<div class=\"ttc\" id=\"aa01687_html_acb630a2b334ad1a9be042a9ceda0df49\"><div class=\"ttname\"><a href=\"a01687.html#acb630a2b334ad1a9be042a9ceda0df49\">Dune::Functions::NedelecNode::FiniteElementMap</a></div><div class=\"ttdeci\">typename Impl::Nedelec1stKindLocalFiniteElementMap< GV, dim, Range, order > FiniteElementMap</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:274</div></div>\n-<div class=\"ttc\" id=\"aa01687_html_ad41e422719270dbd0a3cbc1c6024b441\"><div class=\"ttname\"><a href=\"a01687.html#ad41e422719270dbd0a3cbc1c6024b441\">Dune::Functions::NedelecNode::element_</a></div><div class=\"ttdeci\">const Element * element_</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:310</div></div>\n-<div class=\"ttc\" id=\"aa01687_html_af23a2827c1532d33944367e067f2d249\"><div class=\"ttname\"><a href=\"a01687.html#af23a2827c1532d33944367e067f2d249\">Dune::Functions::NedelecNode::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:271</div></div>\n-<div class=\"ttc\" id=\"aa01691_html\"><div class=\"ttname\"><a href=\"a01691.html\">Dune::Functions::NedelecPreBasis</a></div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:136</div></div>\n-<div class=\"ttc\" id=\"aa01691_html_a0ec65692ba465323c3aae1deb95bd98b\"><div class=\"ttname\"><a href=\"a01691.html#a0ec65692ba465323c3aae1deb95bd98b\">Dune::Functions::NedelecPreBasis::indices</a></div><div class=\"ttdeci\">It indices(const Node &node, It it) const</div><div class=\"ttdoc\">Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:238</div></div>\n-<div class=\"ttc\" id=\"aa01691_html_a185c22a27f1499d80a1c3ff4d4640ff8\"><div class=\"ttname\"><a href=\"a01691.html#a185c22a27f1499d80a1c3ff4d4640ff8\">Dune::Functions::NedelecPreBasis::size</a></div><div class=\"ttdeci\">size_type size(const SizePrefix &prefix) const</div><div class=\"ttdoc\">Return number possible values for next position in multi index.</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:211</div></div>\n-<div class=\"ttc\" id=\"aa01691_html_a1ed8686000377d0557455ef973bc5e12\"><div class=\"ttname\"><a href=\"a01691.html#a1ed8686000377d0557455ef973bc5e12\">Dune::Functions::NedelecPreBasis::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:146</div></div>\n-<div class=\"ttc\" id=\"aa01691_html_a2591944cb29062fb7efcbcfb0a4363a5\"><div class=\"ttname\"><a href=\"a01691.html#a2591944cb29062fb7efcbcfb0a4363a5\">Dune::Functions::NedelecPreBasis::NedelecPreBasis</a></div><div class=\"ttdeci\">NedelecPreBasis(const GridView &gv)</div><div class=\"ttdoc\">Constructor for a given grid view object.</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:155</div></div>\n-<div class=\"ttc\" id=\"aa01691_html_a4c8d0ac657c0dd2ecc6ecc826cb996a4\"><div class=\"ttname\"><a href=\"a01691.html#a4c8d0ac657c0dd2ecc6ecc826cb996a4\">Dune::Functions::NedelecPreBasis::GridView</a></div><div class=\"ttdeci\">GV GridView</div><div class=\"ttdoc\">The grid view that the FE space is defined on.</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:145</div></div>\n-<div class=\"ttc\" id=\"aa01691_html_a4d2833397c8b6ee3c761ce62d40eaad5\"><div class=\"ttname\"><a href=\"a01691.html#a4d2833397c8b6ee3c761ce62d40eaad5\">Dune::Functions::NedelecPreBasis::dimension</a></div><div class=\"ttdeci\">size_type dimension() const</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:217</div></div>\n-<div class=\"ttc\" id=\"aa01691_html_a4de124caaadb756727f51db481bb0805\"><div class=\"ttname\"><a href=\"a01691.html#a4de124caaadb756727f51db481bb0805\">Dune::Functions::NedelecPreBasis::maxMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type maxMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:150</div></div>\n-<div class=\"ttc\" id=\"aa01691_html_a60ebf4bfd1fa2b95eff282f3e813f528\"><div class=\"ttname\"><a href=\"a01691.html#a60ebf4bfd1fa2b95eff282f3e813f528\">Dune::Functions::NedelecPreBasis::multiIndexBufferSize</a></div><div class=\"ttdeci\">static constexpr size_type multiIndexBufferSize</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:152</div></div>\n-<div class=\"ttc\" id=\"aa01691_html_a642b89d420e83f45643e63e567767bec\"><div class=\"ttname\"><a href=\"a01691.html#a642b89d420e83f45643e63e567767bec\">Dune::Functions::NedelecPreBasis::gridView_</a></div><div class=\"ttdeci\">GridView gridView_</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:256</div></div>\n-<div class=\"ttc\" id=\"aa01691_html_a8069227fa8227b40007a976855c169f0\"><div class=\"ttname\"><a href=\"a01691.html#a8069227fa8227b40007a976855c169f0\">Dune::Functions::NedelecPreBasis::finiteElementMap_</a></div><div class=\"ttdeci\">FiniteElementMap finiteElementMap_</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:257</div></div>\n-<div class=\"ttc\" id=\"aa01691_html_a9b75a17cf69d14b337838115fa346f3d\"><div class=\"ttname\"><a href=\"a01691.html#a9b75a17cf69d14b337838115fa346f3d\">Dune::Functions::NedelecPreBasis::minMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type minMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:151</div></div>\n-<div class=\"ttc\" id=\"aa01691_html_aaa3ff181601337d43c072813cc060b90\"><div class=\"ttname\"><a href=\"a01691.html#aaa3ff181601337d43c072813cc060b90\">Dune::Functions::NedelecPreBasis::initializeIndices</a></div><div class=\"ttdeci\">void initializeIndices()</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:179</div></div>\n-<div class=\"ttc\" id=\"aa01691_html_abfad7bccc671799c5ed406a16510e8a1\"><div class=\"ttname\"><a href=\"a01691.html#abfad7bccc671799c5ed406a16510e8a1\">Dune::Functions::NedelecPreBasis::update</a></div><div class=\"ttdeci\">void update(const GridView &gv)</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:190</div></div>\n-<div class=\"ttc\" id=\"aa01691_html_ac7a7c76bab36e858497aa265fab90d76\"><div class=\"ttname\"><a href=\"a01691.html#ac7a7c76bab36e858497aa265fab90d76\">Dune::Functions::NedelecPreBasis::maxNodeSize</a></div><div class=\"ttdeci\">size_type maxNodeSize() const</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:222</div></div>\n-<div class=\"ttc\" id=\"aa01691_html_aca814fbd069b0e979707d925c1338a44\"><div class=\"ttname\"><a href=\"a01691.html#aca814fbd069b0e979707d925c1338a44\">Dune::Functions::NedelecPreBasis::gridView</a></div><div class=\"ttdeci\">const GridView & gridView() const</div><div class=\"ttdoc\">Obtain the grid view that the basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:184</div></div>\n-<div class=\"ttc\" id=\"aa01691_html_ad5124fec497b3042e767d265807cc63a\"><div class=\"ttname\"><a href=\"a01691.html#ad5124fec497b3042e767d265807cc63a\">Dune::Functions::NedelecPreBasis::makeNode</a></div><div class=\"ttdeci\">Node makeNode() const</div><div class=\"ttdoc\">Create tree node.</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:199</div></div>\n-<div class=\"ttc\" id=\"aa01691_html_ada93cc4c9448c413a3aa9bebce67ab29\"><div class=\"ttname\"><a href=\"a01691.html#ada93cc4c9448c413a3aa9bebce67ab29\">Dune::Functions::NedelecPreBasis::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:204</div></div>\n-<div class=\"ttc\" id=\"aa01691_html_af701774f82071f15fc8990d00c315e2b\"><div class=\"ttname\"><a href=\"a01691.html#af701774f82071f15fc8990d00c315e2b\">Dune::Functions::NedelecPreBasis::mapper_</a></div><div class=\"ttdeci\">Mapper mapper_</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:258</div></div>\n-<div class=\"ttc\" id=\"aa01707_html_a859d50513645ef2ea0188d0779c1df30\"><div class=\"ttname\"><a href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">Dune::Functions::BasisNodeMixin::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:142</div></div>\n-<div class=\"ttc\" id=\"aa01707_html_ae93815e5c4012f7be5d11786f40d267a\"><div class=\"ttname\"><a href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\">Dune::Functions::BasisNodeMixin::setSize</a></div><div class=\"ttdeci\">void setSize(const size_type size)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:164</div></div>\n-<div class=\"ttc\" id=\"aa01711_html\"><div class=\"ttname\"><a href=\"a01711.html\">Dune::Functions::LeafBasisNode</a></div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:186</div></div>\n+<div class=\"line\"><a id=\"l00299\" name=\"l00299\"></a><span class=\"lineno\"> 299</span>} <span class=\"comment\">// namespace Functions</span></div>\n+<div class=\"line\"><a id=\"l00300\" name=\"l00300\"></a><span class=\"lineno\"> 300</span>} <span class=\"comment\">// namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00301\" name=\"l00301\"></a><span class=\"lineno\"> 301</span> </div>\n+<div class=\"line\"><a id=\"l00302\" name=\"l00302\"></a><span class=\"lineno\"> 302</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH</span></div>\n+<div class=\"ttc\" id=\"aa00020_html\"><div class=\"ttname\"><a href=\"a00020.html\">functionconcepts.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00086_html\"><div class=\"ttname\"><a href=\"a00086.html\">gridviewfunction.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00110_html\"><div class=\"ttname\"><a href=\"a00110.html\">sizeinfo.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00155_html\"><div class=\"ttname\"><a href=\"a00155.html\">flatvectorview.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00170_html\"><div class=\"ttname\"><a href=\"a00170.html\">hierarchicnodetorangemap.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00191_html\"><div class=\"ttname\"><a href=\"a00191.html\">istlvectorbackend.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00214_html_gae5b9f62f85e3d638423142695a74d056\"><div class=\"ttname\"><a href=\"a00214.html#gae5b9f62f85e3d638423142695a74d056\">Dune::Functions::istlVectorBackend</a></div><div class=\"ttdeci\">auto istlVectorBackend(Vector &v)</div><div class=\"ttdoc\">Return a vector backend wrapping non-const ISTL like containers.</div><div class=\"ttdef\"><b>Definition:</b> istlvectorbackend.hh:346</div></div>\n+<div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n+<div class=\"ttc\" id=\"aa00219_html_a13b0c6bf02d744e7b2078d1a535b5211\"><div class=\"ttname\"><a href=\"a00219.html#a13b0c6bf02d744e7b2078d1a535b5211\">Dune::Functions::interpolate</a></div><div class=\"ttdeci\">void interpolate(const B &basis, C &&coeff, const F &f, const BV &bv, const NTRE &nodeToRangeEntry)</div><div class=\"ttdoc\">Interpolate given function in discrete function space.</div><div class=\"ttdef\"><b>Definition:</b> interpolate.hh:202</div></div>\n+<div class=\"ttc\" id=\"aa00219_html_ab31121faf1c753f425b7360cedeb9a6a\"><div class=\"ttname\"><a href=\"a00219.html#ab31121faf1c753f425b7360cedeb9a6a\">Dune::Functions::makeGridViewFunction</a></div><div class=\"ttdeci\">std::decay< F >::type makeGridViewFunction(F &&f, const GridView &gridView)</div><div class=\"ttdoc\">Construct a function modeling GridViewFunction from function and grid view.</div><div class=\"ttdef\"><b>Definition:</b> gridviewfunction.hh:68</div></div>\n+<div class=\"ttc\" id=\"aa00219_html_abd7e25a89325dbe2232b17308dae45f2\"><div class=\"ttname\"><a href=\"a00219.html#abd7e25a89325dbe2232b17308dae45f2\">Dune::Functions::sizeInfo</a></div><div class=\"ttdeci\">SizeInfo< Basis > sizeInfo(const Basis &basis)</div><div class=\"ttdef\"><b>Definition:</b> sizeinfo.hh:69</div></div>\n+<div class=\"ttc\" id=\"aa00219_html_ad98b265d97ebd619e7732df6a8d1f7da\"><div class=\"ttname\"><a href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\">Dune::Functions::flatVectorView</a></div><div class=\"ttdeci\">auto flatVectorView(T &t)</div><div class=\"ttdoc\">Create flat vector view of passed mutable container.</div><div class=\"ttdef\"><b>Definition:</b> flatvectorview.hh:179</div></div>\n+<div class=\"ttc\" id=\"aa01627_html\"><div class=\"ttname\"><a href=\"a01627.html\">Dune::Functions::HierarchicNodeToRangeMap</a></div><div class=\"ttdoc\">A simple node to range map using the nested tree indices.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicnodetorangemap.hh:30</div></div>\n+<div class=\"ttc\" id=\"aa02873_html\"><div class=\"ttname\"><a href=\"a02873.html\">concepts.hh</a></div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-utf-8\n+us-ascii\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,502 +5,315 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-nedelecbasis.hh\n+interpolate.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH\n- 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH\n+ 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH\n+ 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH\n 5\n- 6#include <array>\n- 7#include <dune/common/exceptions.hh>\n+ 6#include <memory>\n+ 7#include <vector>\n 8\n- 9#include <dune/grid/common/capabilities.hh>\n- 10#include <dune/grid/common/mcmgmapper.hh>\n+ 9#include <dune/common/exceptions.hh>\n+ 10#include <dune/common/bitsetvector.hh>\n 11\n- 12#include <dune/localfunctions/common/localfiniteelementvariant.hh>\n- 13#include <dune/localfunctions/nedelec.hh>\n- 14\n- 15#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n- 16#include <dune/functions/functionspacebases/\n-globalvaluedlocalfiniteelement.hh>\n- 17#include <dune/functions/functionspacebases/nodes.hh>\n- 18\n- 19namespace Dune::Functions\n- 20{\n- 21\n- 22namespace Impl\n- 23{\n- 24 template<typename GV, int dim, typename R, std::size_t order>\n- 25 class Nedelec1stKindLocalFiniteElementMap\n- 26 {\n- 27 using D = typename GV::ctype;\n- 28 constexpr static bool hasFixedElementType = Capabilities::\n-hasSingleGeometryType<typename GV::Grid>::v;\n- 29\n- 30 using CubeFiniteElement =\n-Nedelec1stKindCubeLocalFiniteElement<D,R,dim,order>;\n- 31 using SimplexFiniteElement =\n-Nedelec1stKindSimplexLocalFiniteElement<D,R,dim,order>;\n- 32\n- 33 public:\n- 34\n- 35 using T = LocalBasisTraits<D, dim, FieldVector<D,dim>, R, dim,\n-FieldVector<R,dim>, FieldMatrix<D,dim,dim> >;\n- 36\n- 37 constexpr static unsigned int topologyId = Capabilities::\n-hasSingleGeometryType<typename GV::Grid>::topologyId; // meaningless if\n-hasFixedElementType is false\n- 38 constexpr static GeometryType type = GeometryType(topologyId, GV::\n-dimension);\n- 39\n- 40 using FiniteElement = std::conditional_t<hasFixedElementType,\n- 41 std::conditional_t<type.isCube(),CubeFiniteElement,SimplexFiniteElement>,\n- 42 LocalFiniteElementVariant<CubeFiniteElement, SimplexFiniteElement> >;\n- 43\n- 44 static std::size_t numVariants(GeometryType type)\n+ 12#include <dune/typetree/childextraction.hh>\n+ 13\n+ 14#include <dune/functions/gridfunctions/gridviewfunction.hh>\n+ 15#include <dune/functions/common/functionconcepts.hh>\n+ 16\n+ 17#include <dune/functions/backends/concepts.hh>\n+ 18#include <dune/functions/backends/istlvectorbackend.hh>\n+ 19#include <dune/functions/functionspacebases/sizeinfo.hh>\n+ 20#include <dune/functions/functionspacebases/flatvectorview.hh>\n+ 21#include <dune/functions/functionspacebases/hierarchicnodetorangemap.hh>\n+ 22\n+ 23#include <dune/typetree/traversal.hh>\n+ 24#include <dune/typetree/visitor.hh>\n+ 25\n+ 26namespace Dune {\n+ 27namespace Functions {\n+ 28\n+ 29namespace Imp {\n+ 30\n+ 31struct AllTrueBitSetVector\n+ 32{\n+ 33 struct AllTrueBitSet\n+ 34 {\n+ 35 bool test(int) const { return true; }\n+ 36 } allTrue_;\n+ 37\n+ 38 operator bool() const\n+ 39 {\n+ 40 return true;\n+ 41 }\n+ 42\n+ 43 template<class I>\n+ 44 const AllTrueBitSetVector& operator[](const I&) const\n 45 {\n- 46 if (order!=1) // I am not sure whether the formula below is correct for all\n-orders.\n- 47 DUNE_THROW(NotImplemented, \"Only Nedelec elements of order 1 are\n-implemented!\");\n+ 46 return *this;\n+ 47 }\n 48\n- 49 auto numEdges = referenceElement<D,dim>(type).size(dim-1);\n- 50 return power(2,numEdges);\n- 51 }\n+ 49 template<class SP>\n+ 50 void resize(const SP&) const\n+ 51 {}\n 52\n- 53 Nedelec1stKindLocalFiniteElementMap(const GV& gv)\n- 54 : elementMapper_(gv, mcmgElementLayout()),\n- 55 orientation_(gv.size(0))\n- 56 {\n- 57 // create all variants\n- 58 if constexpr (hasFixedElementType)\n- 59 {\n- 60 variants_.resize(numVariants(type));\n- 61 for (size_t i = 0; i < numVariants(type); i++)\n- 62 variants_[i] = FiniteElement(i);\n- 63 }\n- 64 else\n- 65 {\n- 66 // for mixed grids add offset for cubes\n- 67 variants_.resize(numVariants(GeometryTypes::simplex(dim)) + numVariants\n-(GeometryTypes::cube(dim)));\n- 68 for (size_t i = 0; i < numVariants(GeometryTypes::simplex(dim)); i++)\n- 69 variants_[i] = SimplexFiniteElement(i);\n- 70 for (size_t i = 0; i < numVariants(GeometryTypes::cube(dim)); i++)\n- 71 variants_[i + numVariants(GeometryTypes::simplex(dim))] = CubeFiniteElement\n-(i);\n- 72 }\n- 73\n- 74\n- 75 // compute orientation for all elements\n- 76 const auto& indexSet = gv.indexSet();\n+ 53};\n+ 54\n+ 55\n+ 56\n+ 57template <class B, class T, class NTRE, class HV, class LF, class HBV>\n+ 58class LocalInterpolateVisitor\n+ 59 : public TypeTree::TreeVisitor\n+ 60 , public TypeTree::DynamicTraversal\n+ 61{\n+ 62\n+ 63public:\n+ 64\n+ 65 using Basis = B;\n+ 66 using LocalView = typename B::LocalView;\n+ 67 using MultiIndex = typename LocalView::MultiIndex;\n+ 68\n+ 69 using LocalFunction = LF;\n+ 70\n+ 71 using Tree = T;\n+ 72\n+ 73 using VectorBackend = HV;\n+ 74 using BitVectorBackend = HBV;\n+ 75\n+ 76 using NodeToRangeEntry = NTRE;\n 77\n- 78 for(const auto& element : elements(gv))\n- 79 {\n- 80 const auto& refElement = referenceElement(element);\n- 81 auto elementIndex = elementMapper_.index(element);\n- 82 orientation_[elementIndex] = 0;\n- 83\n- 84 for (std::size_t i=0; i<element.subEntities(dim-1); i++)\n- 85 {\n- 86 // Local vertex indices within the element\n- 87 auto localV0 = refElement.subEntity(i,dim-1, 0,dim);\n- 88 auto localV1 = refElement.subEntity(i,dim-1, 1,dim);\n- 89\n- 90 // Global vertex indices within the grid\n- 91 auto globalV0 = indexSet.subIndex(element,localV0,dim);\n- 92 auto globalV1 = indexSet.subIndex(element,localV1,dim);\n- 93\n- 94 if ( (localV0<localV1 && globalV0>globalV1) || (localV0>localV1 &&\n-globalV0<globalV1) )\n- 95 orientation_[elementIndex] |= (1 << i);\n- 96 }\n- 97 // for mixed grids add offset for cubes\n- 98 if constexpr (!hasFixedElementType)\n- 99 if (element.type().isCube())\n- 100 orientation_[elementIndex] += numVariants(GeometryTypes::simplex(dim));\n- 101 }\n- 102 }\n- 103\n- 104 template<class Element>\n- 105 const auto& find(const Element& element) const\n- 106 {\n- 107 return variants_[orientation_[elementMapper_.index(element)]];\n- 108 }\n+ 78 using GridView = typename Basis::GridView;\n+ 79 using Element = typename GridView::template Codim<0>::Entity;\n+ 80\n+ 81 using LocalDomain = typename Element::Geometry::LocalCoordinate;\n+ 82\n+ 83 using GlobalDomain = typename Element::Geometry::GlobalCoordinate;\n+ 84\n+ 85 LocalInterpolateVisitor(const B& /*basis*/, HV& coeff, const HBV&\n+bitVector, const LF& localF, const LocalView& localView, const\n+NodeToRangeEntry& nodeToRangeEntry) :\n+ 86 vector_(coeff),\n+ 87 localF_(localF),\n+ 88 bitVector_(bitVector),\n+ 89 localView_(localView),\n+ 90 nodeToRangeEntry_(nodeToRangeEntry)\n+ 91 {\n+ 92 static_assert(Dune::Functions::Concept::isCallable<LocalFunction,\n+LocalDomain>(), \"Function passed to LocalInterpolateVisitor does not model the\n+Callable<LocalCoordinate> concept\");\n+ 93 }\n+ 94\n+ 95 template<typename Node, typename TreePath>\n+ 96 void pre(Node&, TreePath)\n+ 97 {}\n+ 98\n+ 99 template<typename Node, typename TreePath>\n+ 100 void post(Node&, TreePath)\n+ 101 {}\n+ 102\n+ 103 template<typename Node, typename TreePath>\n+ 104 void leaf(Node& node, TreePath treePath)\n+ 105 {\n+ 106 using FiniteElement = typename Node::FiniteElement;\n+ 107 using FiniteElementRange = typename FiniteElement::Traits::\n+LocalBasisType::Traits::RangeType;\n+ 108 using FiniteElementRangeField = typename FiniteElement::Traits::\n+LocalBasisType::Traits::RangeFieldType;\n 109\n- 110 private:\n- 111 std::vector<FiniteElement> variants_;\n- 112 const Dune::MultipleCodimMultipleGeomTypeMapper<GV> elementMapper_;\n- 113 std::vector<unsigned short> orientation_;\n- 114 };\n- 115\n- 116\n- 117} // namespace Impl\n- 118\n- 119\n- 120/\n-/ *****************************************************************************\n- 121// This is the reusable part of the basis. It contains\n- 122//\n- 123// NedelecPreBasis\n- 124// NedelecNode\n- 125//\n- 126// The pre-basis allows to create the others and is the owner of possible\n-shared\n- 127// state. These components do _not_ depend on the global basis and local\n-view\n- 128// and can be used without a global basis.\n- 129/\n-/ *****************************************************************************\n+ 110 auto interpolationCoefficients = std::vector<FiniteElementRangeField>();\n+ 111 auto&& fe = node.finiteElement();\n+ 112\n+ 113 // backward compatibility: for scalar basis functions and possibly vector\n+valued coefficients\n+ 114 // (like used in dune-fufem for power bases) loop over the components\n+ 115 // of the coefficients\n+ 116 if constexpr ( FiniteElement::Traits::LocalBasisType::Traits::dimRange ==\n+1 )\n+ 117 {\n+ 118 // Note that we capture j by reference. Hence we can switch\n+ 119 // the selected component later on by modifying j. Maybe we\n+ 120 // should avoid this naughty statefull lambda hack in favor\n+ 121 // of a separate helper class.\n+ 122 std::size_t j=0;\n+ 123 auto localFj = [&](const LocalDomain& x){\n+ 124 const auto& y = localF_(x);\n+ 125 return FiniteElementRange(flatVectorView(nodeToRangeEntry_(node, treePath,\n+y))[j]);\n+ 126 };\n+ 127\n+ 128 // We loop over j defined above and thus over the components of the\n+ 129 // range type of localF_.\n 130\n- 131template<typename GV, typename Range, std::size_t kind, int order>\n- 132class NedelecNode;\n- 133\n- 134template<typename GV, typename Range, std::size_t kind, int order>\n-135class NedelecPreBasis\n- 136{\n- 137 static const int dim = GV::dimension;\n- 138 static_assert(kind==1, \"Only the Nedelec basis of the first kind is\n-currently implemented!\");\n- 139 using FiniteElementMap = typename Impl::\n-Nedelec1stKindLocalFiniteElementMap<GV, dim, Range, order>;\n- 140\n- 141 using Mapper = Dune::MultipleCodimMultipleGeomTypeMapper<GV>;\n- 142public:\n- 143\n-145 using GridView = GV;\n-146 using size_type = std::size_t;\n- 147\n-148 using Node = NedelecNode<GV,_Range,_kind,_order>;\n- 149\n-150 static constexpr size_type maxMultiIndexSize = 1;\n-151 static constexpr size_type minMultiIndexSize = 1;\n-152 static constexpr size_type multiIndexBufferSize = 1;\n- 153\n-155 NedelecPreBasis(const GridView& gv) :\n- 156 gridView_(gv),\n- 157 finiteElementMap_(gv),\n- 158 mapper_(gridView_, mcmgLayout(Dim<1>{}))\n- 159 {\n- 160 if (kind!=1)\n- 161 DUNE_THROW(NotImplemented, \"Only Nedelec elements of the first kind are\n-implemented!\");\n- 162\n- 163 // There is no inherent reason why the basis shouldn't work for grids with\n-more than two\n- 164 // element types. Somebody simply has to sit down and implement the\n-missing bits.\n- 165 if (gv.indexSet().types(0).size() > 2)\n- 166 DUNE_THROW(NotImplemented, \"N\u00e9d\u00e9lec basis is only implemented for grids\n-with simplex and cube elements\");\n+ 131 auto blockSize = flatVectorView(vector_[localView_.index(0)]).size();\n+ 132\n+ 133 for(j=0; j<blockSize; ++j)\n+ 134 {\n+ 135 fe.localInterpolation().interpolate(localFj, interpolationCoefficients);\n+ 136 for (size_t i=0; i<fe.localBasis().size(); ++i)\n+ 137 {\n+ 138 auto multiIndex = localView_.index(node.localIndex(i));\n+ 139 auto bitVectorBlock = flatVectorView(bitVector_[multiIndex]);\n+ 140 if (bitVectorBlock[j])\n+ 141 {\n+ 142 auto vectorBlock = flatVectorView(vector_[multiIndex]);\n+ 143 vectorBlock[j] = interpolationCoefficients[i];\n+ 144 }\n+ 145 }\n+ 146 }\n+ 147 }\n+ 148 else // ( FiniteElement::Traits::LocalBasisType::Traits::dimRange != 1 )\n+ 149 {\n+ 150 // for all other finite elements: use the FiniteElementRange directly for\n+the interpolation\n+ 151 auto localF = [&](const LocalDomain& x){\n+ 152 const auto& y = localF_(x);\n+ 153 return FiniteElementRange(nodeToRangeEntry_(node, treePath, y));\n+ 154 };\n+ 155\n+ 156 fe.localInterpolation().interpolate(localF, interpolationCoefficients);\n+ 157 for (size_t i=0; i<fe.localBasis().size(); ++i)\n+ 158 {\n+ 159 auto multiIndex = localView_.index(node.localIndex(i));\n+ 160 if ( bitVector_[multiIndex] )\n+ 161 {\n+ 162 vector_[multiIndex] = interpolationCoefficients[i];\n+ 163 }\n+ 164 }\n+ 165 }\n+ 166 }\n 167\n- 168 for(auto type : gv.indexSet().types(0))\n- 169 if (!type.isSimplex() && !type.isCube())\n- 170 DUNE_THROW(NotImplemented, \"N\u00e9d\u00e9lec basis is only implemented for grids\n-with simplex or cube elements.\");\n- 171\n- 172 if (order>1)\n- 173 DUNE_THROW(NotImplemented, \"Only first-order elements are implemented\");\n- 174\n- 175 if (dim!=2 && dim!=3)\n- 176 DUNE_THROW(NotImplemented, \"Only 2d and 3d N\u00e9d\u00e9lec elements are\n-implemented\");\n- 177 }\n+ 168\n+ 169protected:\n+ 170\n+ 171 VectorBackend& vector_;\n+ 172 const LocalFunction& localF_;\n+ 173 const BitVectorBackend& bitVector_;\n+ 174 const LocalView& localView_;\n+ 175 const NodeToRangeEntry& nodeToRangeEntry_;\n+ 176};\n+ 177\n 178\n-179 void initializeIndices()\n- 180 {}\n+ 179} // namespace Imp\n+ 180\n 181\n-184 const GridView& gridView() const\n- 185 {\n- 186 return gridView_;\n- 187 }\n- 188\n- 189 /* \\brief Update the stored grid view, to be called if the grid has\n-changed */\n-190 void update (const GridView& gv)\n- 191 {\n- 192 gridView_ = gv;\n- 193 mapper_.update(gridView_);\n- 194 }\n- 195\n-199 Node makeNode() const\n- 200 {\n- 201 return Node{&finiteElementMap_};\n- 202 }\n- 203\n-204 size_type size() const\n- 205 {\n- 206 return mapper_.size();\n- 207 }\n+ 182\n+ 183\n+ 201template <class B, class C, class F, class BV, class NTRE>\n+202void interpolate(const B& basis, C&& coeff, const F& f, const BV& bv, const\n+NTRE& nodeToRangeEntry)\n+ 203{\n+ 204 using GridView = typename B::GridView;\n+ 205 using Element = typename GridView::template Codim<0>::Entity;\n+ 206\n+ 207 using Tree = typename B::LocalView::Tree;\n 208\n- 210 template<class SizePrefix>\n-211 size_type size(const SizePrefix& prefix) const\n- 212 {\n- 213 assert(prefix.size() == 0 || prefix.size() == 1);\n- 214 return (prefix.size() == 0) ? size() : 0;\n- 215 }\n- 216\n-217 size_type dimension() const\n- 218 {\n- 219 return size();\n- 220 }\n- 221\n-222 size_type maxNodeSize() const\n- 223 {\n- 224 size_type result = 0;\n- 225 for (auto&& type : gridView_.indexSet().types(0))\n- 226 {\n- 227 size_type numEdges = referenceElement<typename GV::ctype,dim>(type).size\n-(dim-1);\n- 228 result = std::max(result, numEdges);\n- 229 }\n- 230\n- 231 return result;\n- 232 }\n- 233\n- 237 template<typename It>\n-238 It indices(const Node& node, It it) const\n- 239 {\n- 240 const auto& element = node.element();\n+ 209 using GlobalDomain = typename Element::Geometry::GlobalCoordinate;\n+ 210\n+ 211 static_assert(Dune::Functions::Concept::isCallable<F, GlobalDomain>(),\n+\"Function passed to interpolate does not model the Callable<GlobalCoordinate>\n+concept\");\n+ 212\n+ 213 auto&& gridView = basis.gridView();\n+ 214\n+ 215 // Small helper functions to wrap vectors using istlVectorBackend\n+ 216 // if they do not already satisfy the VectorBackend interface.\n+ 217 auto toVectorBackend = [&](auto& v) -> decltype(auto) {\n+ 218 if constexpr (models<Concept::VectorBackend<B>, decltype(v)>()) {\n+ 219 return v;\n+ 220 } else {\n+ 221 return istlVectorBackend(v);\n+ 222 }\n+ 223 };\n+ 224\n+ 225 auto toConstVectorBackend = [&](auto& v) -> decltype(auto) {\n+ 226 if constexpr (models<Concept::ConstVectorBackend<B>, decltype(v)>()) {\n+ 227 return v;\n+ 228 } else {\n+ 229 return istlVectorBackend(v);\n+ 230 }\n+ 231 };\n+ 232\n+ 233 auto&& bitVector = toConstVectorBackend(bv);\n+ 234 auto&& vector = toVectorBackend(coeff);\n+ 235 vector.resize(sizeInfo(basis));\n+ 236\n+ 237\n+ 238\n+ 239 // Make a grid function supporting local evaluation out of f\n+ 240 auto gf = makeGridViewFunction(f, gridView);\n 241\n- 242 // throw if Element is not of predefined type\n- 243 if (not(element.type().isCube()) and not(element.type().isSimplex()))\n- 244 DUNE_THROW(NotImplemented, \"NedelecBasis only implemented for cube and\n-simplex elements.\");\n- 245\n- 246 for(std::size_t i=0, end=node.size(); i<end; ++i, ++it)\n- 247 {\n- 248 Dune::LocalKey localKey = node.finiteElement().localCoefficients\n-().localKey(i);\n- 249 *it = { mapper_.subIndex(element, localKey.subEntity(), localKey.codim())\n-+ localKey.index() };\n- 250 }\n+ 242 // Obtain a local view of f\n+ 243 auto localF = localFunction(gf);\n+ 244\n+ 245 auto localView = basis.localView();\n+ 246\n+ 247 for (const auto& e : elements(gridView))\n+ 248 {\n+ 249 localView.bind(e);\n+ 250 localF.bind(e);\n 251\n- 252 return it;\n- 253 }\n- 254\n- 255protected:\n-256 GridView gridView_;\n-257 FiniteElementMap finiteElementMap_;\n-258 Mapper mapper_;\n- 259};\n- 260\n- 261\n- 262\n- 263template<typename GV, typename Range, size_t kind, int order>\n-264class NedelecNode :\n- 265 public LeafBasisNode\n- 266{\n- 267 static const int dim = GV::dimension;\n- 268\n- 269public:\n- 270\n-271 using size_type = std::size_t;\n-272 using Element = typename GV::template Codim<0>::Entity;\n- 273 static_assert(kind==1, \"Only Nedelec elements of the first kind are\n-implemented!\");\n-274 using FiniteElementMap = typename Impl::\n-Nedelec1stKindLocalFiniteElementMap<GV, dim, Range, order>;\n-275 using FiniteElement = Impl::GlobalValuedLocalFiniteElement<Impl::\n-CovariantPiolaTransformator,\n- 276 typename FiniteElementMap::FiniteElement,\n- 277 Element>;\n+ 252 Imp::LocalInterpolateVisitor<B, Tree, NTRE, decltype(vector), decltype\n+(localF), decltype(bitVector)> localInterpolateVisitor(basis, vector,\n+bitVector, localF, localView, nodeToRangeEntry);\n+ 253 TypeTree::applyToTree(localView.tree(),localInterpolateVisitor);\n+ 254 }\n+ 255}\n+ 256\n+ 273template <class B, class C, class F, class BV>\n+274void interpolate(const B& basis, C&& coeff, const F& f, const BV& bitVector)\n+ 275{\n+ 276 interpolate(basis, coeff, f, bitVector, HierarchicNodeToRangeMap());\n+ 277}\n 278\n-279 NedelecNode(const FiniteElementMap* finiteElementMap) :\n- 280 element_(nullptr),\n- 281 finiteElementMap_(finiteElementMap)\n- 282 { }\n- 283\n-285 const Element& element() const\n- 286 {\n- 287 return *element_;\n- 288 }\n- 289\n-294 const FiniteElement& finiteElement() const\n- 295 {\n- 296 return finiteElement_;\n- 297 }\n+ 293template <class B, class C, class F>\n+294void interpolate(const B& basis, C&& coeff, const F& f)\n+ 295{\n+ 296 interpolate (basis, coeff, f, Imp::AllTrueBitSetVector(),\n+HierarchicNodeToRangeMap());\n+ 297}\n 298\n-300 void bind(const Element& e)\n- 301 {\n- 302 element_ = &e;\n- 303 finiteElement_.bind((finiteElementMap_->find(*element_)), e);\n- 304 this->setSize(finiteElement_.size());\n- 305 }\n- 306\n- 307protected:\n- 308\n-309 FiniteElement finiteElement_;\n-310 const Element* element_;\n-311 const FiniteElementMap* finiteElementMap_;\n- 312};\n- 313\n- 314\n- 315\n- 316namespace BasisFactory {\n- 317\n- 327template<std::size_t kind, std::size_t order, typename Range=double>\n-328auto nedelec()\n- 329{\n- 330 return [](const auto& gridView) {\n- 331 return NedelecPreBasis<std::decay_t<decltype(gridView)>, Range, kind,\n-order>(gridView);\n- 332 };\n- 333}\n- 334\n- 335} // end namespace BasisFactory\n- 336\n- 337\n- 338\n- 339/\n-/ *****************************************************************************\n- 340// This is the actual global basis implementation based on the reusable\n-parts.\n- 341/\n-/ *****************************************************************************\n- 342\n- 350template<typename GV, std::size_t kind, std::size_t order, typename\n-Range=double>\n-351using NedelecBasis = DefaultGlobalBasis<NedelecPreBasis<GV,_Range,_kind,\n-order_> >;\n- 352\n- 353} // end namespace Dune::Functions\n- 354\n- 355\n- 356#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH\n-defaultglobalbasis.hh\n-globalvaluedlocalfiniteelement.hh\n-nodes.hh\n-Dune::Functions::BasisFactory::power\n-auto power(ChildPreBasisFactory &&childPreBasisFactory, const\n-IndexMergingStrategy &)\n-Create a pre-basis factory that can build a PowerPreBasis.\n-Definition: powerbasis.hh:369\n-Dune::Functions::BasisFactory::nedelec\n-auto nedelec()\n-Create a pre-basis factory that can create a N\u00e9d\u00e9lec pre-basis.\n-Definition: nedelecbasis.hh:328\n-Dune::Functions\n-Definition: polynomial.hh:11\n-Dune::Functions::DefaultGlobalBasis\n-Global basis for given pre-basis.\n-Definition: defaultglobalbasis.hh:46\n-Dune::Functions::NedelecNode\n-Definition: nedelecbasis.hh:266\n-Dune::Functions::NedelecNode::finiteElementMap_\n-const FiniteElementMap * finiteElementMap_\n-Definition: nedelecbasis.hh:311\n-Dune::Functions::NedelecNode::finiteElement_\n-FiniteElement finiteElement_\n-Definition: nedelecbasis.hh:309\n-Dune::Functions::NedelecNode::FiniteElement\n-Impl::GlobalValuedLocalFiniteElement< Impl::CovariantPiolaTransformator,\n-typename FiniteElementMap::FiniteElement, Element > FiniteElement\n-Definition: nedelecbasis.hh:277\n-Dune::Functions::NedelecNode::bind\n-void bind(const Element &e)\n-Bind to element.\n-Definition: nedelecbasis.hh:300\n-Dune::Functions::NedelecNode::element\n-const Element & element() const\n-Return current element, throw if unbound.\n-Definition: nedelecbasis.hh:285\n-Dune::Functions::NedelecNode::Element\n-typename GV::template Codim< 0 >::Entity Element\n-Definition: nedelecbasis.hh:272\n-Dune::Functions::NedelecNode::finiteElement\n-const FiniteElement & finiteElement() const\n-Return the LocalFiniteElement for the element we are bound to.\n-Definition: nedelecbasis.hh:294\n-Dune::Functions::NedelecNode::NedelecNode\n-NedelecNode(const FiniteElementMap *finiteElementMap)\n-Definition: nedelecbasis.hh:279\n-Dune::Functions::NedelecNode::FiniteElementMap\n-typename Impl::Nedelec1stKindLocalFiniteElementMap< GV, dim, Range, order >\n-FiniteElementMap\n-Definition: nedelecbasis.hh:274\n-Dune::Functions::NedelecNode::element_\n-const Element * element_\n-Definition: nedelecbasis.hh:310\n-Dune::Functions::NedelecNode::size_type\n-std::size_t size_type\n-Definition: nedelecbasis.hh:271\n-Dune::Functions::NedelecPreBasis\n-Definition: nedelecbasis.hh:136\n-Dune::Functions::NedelecPreBasis::indices\n-It indices(const Node &node, It it) const\n-Maps from subtree index set [0..size-1] to a globally unique multi index in\n-global basis.\n-Definition: nedelecbasis.hh:238\n-Dune::Functions::NedelecPreBasis::size\n-size_type size(const SizePrefix &prefix) const\n-Return number possible values for next position in multi index.\n-Definition: nedelecbasis.hh:211\n-Dune::Functions::NedelecPreBasis::size_type\n-std::size_t size_type\n-Definition: nedelecbasis.hh:146\n-Dune::Functions::NedelecPreBasis::NedelecPreBasis\n-NedelecPreBasis(const GridView &gv)\n-Constructor for a given grid view object.\n-Definition: nedelecbasis.hh:155\n-Dune::Functions::NedelecPreBasis::GridView\n-GV GridView\n-The grid view that the FE space is defined on.\n-Definition: nedelecbasis.hh:145\n-Dune::Functions::NedelecPreBasis::dimension\n-size_type dimension() const\n-Definition: nedelecbasis.hh:217\n-Dune::Functions::NedelecPreBasis::maxMultiIndexSize\n-static constexpr size_type maxMultiIndexSize\n-Definition: nedelecbasis.hh:150\n-Dune::Functions::NedelecPreBasis::multiIndexBufferSize\n-static constexpr size_type multiIndexBufferSize\n-Definition: nedelecbasis.hh:152\n-Dune::Functions::NedelecPreBasis::gridView_\n-GridView gridView_\n-Definition: nedelecbasis.hh:256\n-Dune::Functions::NedelecPreBasis::finiteElementMap_\n-FiniteElementMap finiteElementMap_\n-Definition: nedelecbasis.hh:257\n-Dune::Functions::NedelecPreBasis::minMultiIndexSize\n-static constexpr size_type minMultiIndexSize\n-Definition: nedelecbasis.hh:151\n-Dune::Functions::NedelecPreBasis::initializeIndices\n-void initializeIndices()\n-Definition: nedelecbasis.hh:179\n-Dune::Functions::NedelecPreBasis::update\n-void update(const GridView &gv)\n-Definition: nedelecbasis.hh:190\n-Dune::Functions::NedelecPreBasis::maxNodeSize\n-size_type maxNodeSize() const\n-Definition: nedelecbasis.hh:222\n-Dune::Functions::NedelecPreBasis::gridView\n-const GridView & gridView() const\n-Obtain the grid view that the basis is defined on.\n-Definition: nedelecbasis.hh:184\n-Dune::Functions::NedelecPreBasis::makeNode\n-Node makeNode() const\n-Create tree node.\n-Definition: nedelecbasis.hh:199\n-Dune::Functions::NedelecPreBasis::size\n-size_type size() const\n-Definition: nedelecbasis.hh:204\n-Dune::Functions::NedelecPreBasis::mapper_\n-Mapper mapper_\n-Definition: nedelecbasis.hh:258\n-Dune::Functions::BasisNodeMixin::size\n-size_type size() const\n-Definition: nodes.hh:142\n-Dune::Functions::BasisNodeMixin::setSize\n-void setSize(const size_type size)\n-Definition: nodes.hh:164\n-Dune::Functions::LeafBasisNode\n-Definition: nodes.hh:186\n+ 299} // namespace Functions\n+ 300} // namespace Dune\n+ 301\n+ 302#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH\n+functionconcepts.hh\n+gridviewfunction.hh\n+sizeinfo.hh\n+flatvectorview.hh\n+hierarchicnodetorangemap.hh\n+istlvectorbackend.hh\n+Dune::Functions::istlVectorBackend\n+auto istlVectorBackend(Vector &v)\n+Return a vector backend wrapping non-const ISTL like containers.\n+Definition: istlvectorbackend.hh:346\n+Dune\n+Definition: polynomial.hh:10\n+Dune::Functions::interpolate\n+void interpolate(const B &basis, C &&coeff, const F &f, const BV &bv, const\n+NTRE &nodeToRangeEntry)\n+Interpolate given function in discrete function space.\n+Definition: interpolate.hh:202\n+Dune::Functions::makeGridViewFunction\n+std::decay< F >::type makeGridViewFunction(F &&f, const GridView &gridView)\n+Construct a function modeling GridViewFunction from function and grid view.\n+Definition: gridviewfunction.hh:68\n+Dune::Functions::sizeInfo\n+SizeInfo< Basis > sizeInfo(const Basis &basis)\n+Definition: sizeinfo.hh:69\n+Dune::Functions::flatVectorView\n+auto flatVectorView(T &t)\n+Create flat vector view of passed mutable container.\n+Definition: flatvectorview.hh:179\n+Dune::Functions::HierarchicNodeToRangeMap\n+A simple node to range map using the nested tree indices.\n+Definition: hierarchicnodetorangemap.hh:30\n+concepts.hh\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00134.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00134.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: globalvaluedlocalfiniteelement.hh File Reference</title>\n+<title>dune-functions: nedelecbasis.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -63,37 +63,62 @@\n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n-<a href=\"#namespaces\">Namespaces</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">globalvaluedlocalfiniteelement.hh File Reference</div></div>\n+<a href=\"#nested-classes\">Classes</a> |\n+<a href=\"#namespaces\">Namespaces</a> |\n+<a href=\"#typedef-members\">Typedefs</a> |\n+<a href=\"#func-members\">Functions</a> </div>\n+ <div class=\"headertitle\"><div class=\"title\">nedelecbasis.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <div class=\"textblock\"><code>#include <array></code><br />\n-<code>#include <numeric></code><br />\n-<code>#include <dune/common/fmatrix.hh></code><br />\n-<code>#include <dune/common/fvector.hh></code><br />\n-<code>#include <dune/common/math.hh></code><br />\n-<code>#include <dune/common/rangeutilities.hh></code><br />\n-<code>#include <dune/geometry/referenceelements.hh></code><br />\n-<code>#include <dune/localfunctions/common/localbasis.hh></code><br />\n-<code>#include <dune/localfunctions/common/localfiniteelementtraits.hh></code><br />\n-<code>#include <dune/localfunctions/common/localinterpolation.hh></code><br />\n+<code>#include <dune/common/exceptions.hh></code><br />\n+<code>#include <dune/grid/common/capabilities.hh></code><br />\n+<code>#include <dune/grid/common/mcmgmapper.hh></code><br />\n+<code>#include <dune/localfunctions/common/localfiniteelementvariant.hh></code><br />\n+<code>#include <dune/localfunctions/nedelec.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00152_source.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00137_source.html\">dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00179_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code><br />\n </div>\n <p><a href=\"a00134_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n+Classes</h2></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01691.html\">Dune::Functions::NedelecPreBasis< GV, Range, kind, order ></a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01687.html\">Dune::Functions::NedelecNode< GV, Range, kind, order ></a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+</table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a00224\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00224.html\">Dune::Functions::BasisFactory</a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+</table><table class=\"memberdecls\">\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"typedef-members\" name=\"typedef-members\"></a>\n+Typedefs</h2></td></tr>\n+<tr class=\"memitem:a744da0623cd512fc478d47bd2f7908eb\"><td class=\"memTemplParams\" colspan=\"2\">template<typename GV , std::size_t kind, std::size_t order, typename Range = double> </td></tr>\n+<tr class=\"memitem:a744da0623cd512fc478d47bd2f7908eb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a744da0623cd512fc478d47bd2f7908eb\">Dune::Functions::NedelecBasis</a> = DefaultGlobalBasis< NedelecPreBasis< GV, Range, kind, order > ></td></tr>\n+<tr class=\"memdesc:a744da0623cd512fc478d47bd2f7908eb\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Basis of a k-th-order N\u00e9d\u00e9lec finite element space. <a href=\"a00219.html#a744da0623cd512fc478d47bd2f7908eb\">More...</a><br /></td></tr>\n+<tr class=\"separator:a744da0623cd512fc478d47bd2f7908eb\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+</table><table class=\"memberdecls\">\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n+Functions</h2></td></tr>\n+<tr class=\"memitem:gafe0fe439067c288f197101b8686223e8\"><td class=\"memTemplParams\" colspan=\"2\">template<std::size_t kind, std::size_t order, typename Range = double> </td></tr>\n+<tr class=\"memitem:gafe0fe439067c288f197101b8686223e8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#gafe0fe439067c288f197101b8686223e8\">Dune::Functions::BasisFactory::nedelec</a> ()</td></tr>\n+<tr class=\"memdesc:gafe0fe439067c288f197101b8686223e8\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a pre-basis factory that can create a N\u00e9d\u00e9lec pre-basis. <a href=\"a00213.html#gafe0fe439067c288f197101b8686223e8\">More...</a><br /></td></tr>\n+<tr class=\"separator:gafe0fe439067c288f197101b8686223e8\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-us-ascii\n+utf-8\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,28 +5,46 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-Namespaces\n-globalvaluedlocalfiniteelement.hh File Reference\n+Classes | Namespaces | Typedefs | Functions\n+nedelecbasis.hh File Reference\n #include <array>\n-#include <numeric>\n-#include <dune/common/fmatrix.hh>\n-#include <dune/common/fvector.hh>\n-#include <dune/common/math.hh>\n-#include <dune/common/rangeutilities.hh>\n-#include <dune/geometry/referenceelements.hh>\n-#include <dune/localfunctions/common/localbasis.hh>\n-#include <dune/localfunctions/common/localfiniteelementtraits.hh>\n-#include <dune/localfunctions/common/localinterpolation.hh>\n+#include <dune/common/exceptions.hh>\n+#include <dune/grid/common/capabilities.hh>\n+#include <dune/grid/common/mcmgmapper.hh>\n+#include <dune/localfunctions/common/localfiniteelementvariant.hh>\n+#include <dune/localfunctions/nedelec.hh>\n+#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n+#include <dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh>\n+#include <dune/functions/functionspacebases/nodes.hh>\n Go_to_the_source_code_of_this_file.\n+ Classes\n+class \u00a0Dune::Functions::NedelecPreBasis<_GV,_Range,_kind,_order_>\n+\u00a0\n+class \u00a0Dune::Functions::NedelecNode<_GV,_Range,_kind,_order_>\n+\u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n+namespace \u00a0Dune::Functions::BasisFactory\n+\u00a0\n+ Typedefs\n+template<typename GV , std::size_t kind, std::size_t order, typename Range =\n+double>\n+using\u00a0Dune::Functions::NedelecBasis = DefaultGlobalBasis< NedelecPreBasis< GV,\n+ Range, kind, order > >\n+\u00a0 Basis of a k-th-order N\u00e9d\u00e9lec finite element space. More...\n+\u00a0\n+ Functions\n+template<std::size_t kind, std::size_t order, typename Range = double>\n+auto\u00a0Dune::Functions::BasisFactory::nedelec ()\n+\u00a0 Create a pre-basis factory that can create a N\u00e9d\u00e9lec pre-basis. More...\n+\u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00134_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00134_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: globalvaluedlocalfiniteelement.hh Source File</title>\n+<title>dune-functions: nedelecbasis.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,324 +62,381 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">globalvaluedlocalfiniteelement.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">nedelecbasis.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00134.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n <div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <array></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <numeric></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <dune/common/exceptions.hh></span></div>\n <div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/common/fmatrix.hh></span></div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/fvector.hh></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/common/math.hh></span></div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <dune/common/rangeutilities.hh></span></div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <dune/geometry/referenceelements.hh></span></div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"preprocessor\">#include <dune/localfunctions/common/localbasis.hh></span></div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"preprocessor\">#include <dune/localfunctions/common/localfiniteelementtraits.hh></span></div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"preprocessor\">#include <dune/localfunctions/common/localinterpolation.hh></span></div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"keyword\">namespace </span>Dune::Functions::Impl</div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span>{</div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> </div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> <span class=\"keyword\">struct </span>ContravariantPiolaTransformator</div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> {</div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Values, <span class=\"keyword\">typename</span> LocalCoordinate, <span class=\"keyword\">typename</span> Geometry></div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> <span class=\"keyword\">static</span> <span class=\"keyword\">auto</span> apply(Values& values,</div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> <span class=\"keyword\">const</span> LocalCoordinate& xi,</div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> <span class=\"keyword\">const</span> Geometry& geometry)</div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> {</div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> <span class=\"keyword\">auto</span> jacobianTransposed = geometry.jacobianTransposed(xi);</div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> <span class=\"keyword\">auto</span> integrationElement = geometry.integrationElement(xi);</div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> </div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> <span class=\"keywordflow\">for</span> (<span class=\"keyword\">auto</span>& value : values)</div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> {</div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> <span class=\"keyword\">auto</span> tmp = value;</div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> jacobianTransposed.mtv(tmp, value);</div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> value /= integrationElement;</div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> }</div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> }</div>\n-<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> </div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Gradients, <span class=\"keyword\">typename</span> LocalCoordinate, <span class=\"keyword\">typename</span> Geometry></div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> <span class=\"keyword\">static</span> <span class=\"keyword\">auto</span> applyJacobian(Gradients& gradients,</div>\n-<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> <span class=\"keyword\">const</span> LocalCoordinate& xi,</div>\n-<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> <span class=\"keyword\">const</span> Geometry& geometry)</div>\n-<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> {</div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> <span class=\"keyword\">auto</span> jacobianTransposed = geometry.jacobianTransposed(xi);</div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> <span class=\"keyword\">auto</span> integrationElement = geometry.integrationElement(xi);</div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> <span class=\"keywordflow\">for</span> (<span class=\"keyword\">auto</span>& gradient : gradients)</div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> {</div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> <span class=\"keyword\">auto</span> tmp = gradient;</div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> gradient = 0;</div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> k=0; k<gradient.M(); k++)</div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> l=0; l<tmp.N(); l++)</div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> <span class=\"comment\">// Use sparseRange because jacobianTransposed may be a sparse DiagonalMatrix</span></div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">auto</span>&& [jacobianTransposed_l_j, j] : sparseRange(jacobianTransposed[l]))</div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> gradient[j][k] += jacobianTransposed_l_j * tmp[l][k];</div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> gradient /= integrationElement;</div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> }</div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> }</div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> </div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Function, <span class=\"keyword\">class</span> LocalCoordinate, <span class=\"keyword\">class</span> Element></div>\n-<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> <span class=\"keyword\">class </span>LocalValuedFunction</div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> {</div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> <span class=\"keyword\">const</span> Function& f_;</div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> <span class=\"keyword\">const</span> Element& element_;</div>\n-<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> </div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> <span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> </div>\n-<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> LocalValuedFunction(<span class=\"keyword\">const</span> Function& f, <span class=\"keyword\">const</span> Element& element)</div>\n-<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> : f_(f), element_(element)</div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> {}</div>\n-<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> </div>\n-<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> <span class=\"keyword\">auto</span> operator()(<span class=\"keyword\">const</span> LocalCoordinate& xi)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> <span class=\"keyword\">auto</span>&& f = Dune::Impl::makeFunctionWithCallOperator<LocalCoordinate>(f_);</div>\n-<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> <span class=\"keyword\">auto</span> globalValue = f(xi);</div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> </div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> <span class=\"comment\">// Apply the inverse Piola transform</span></div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> <span class=\"keyword\">auto</span> jacobianInverseTransposed = element_.geometry().jacobianInverseTransposed(xi);</div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> <span class=\"keyword\">auto</span> integrationElement = element_.geometry().integrationElement(xi);</div>\n-<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> </div>\n-<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> <span class=\"keyword\">auto</span> localValue = globalValue;</div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> jacobianInverseTransposed.mtv(globalValue, localValue);</div>\n-<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> localValue *= integrationElement;</div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/grid/common/capabilities.hh></span></div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/grid/common/mcmgmapper.hh></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <dune/localfunctions/common/localfiniteelementvariant.hh></span></div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <dune/localfunctions/nedelec.hh></span></div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00152.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00137.html\">dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00179.html\">dune/functions/functionspacebases/nodes.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00219.html\">Dune::Functions</a></div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span>{</div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> </div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"keyword\">namespace </span>Impl</div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span>{</div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> dim, <span class=\"keyword\">typename</span> R, std::<span class=\"keywordtype\">size_t</span> order></div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> <span class=\"keyword\">class </span>Nedelec1stKindLocalFiniteElementMap</div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> {</div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> <span class=\"keyword\">using </span>D = <span class=\"keyword\">typename</span> GV::ctype;</div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> hasFixedElementType = Capabilities::hasSingleGeometryType<typename GV::Grid>::v;</div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span> </div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> <span class=\"keyword\">using </span>CubeFiniteElement = Nedelec1stKindCubeLocalFiniteElement<D,R,dim,order>;</div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> <span class=\"keyword\">using </span>SimplexFiniteElement = Nedelec1stKindSimplexLocalFiniteElement<D,R,dim,order>;</div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> </div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> <span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> </div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> <span class=\"keyword\">using </span>T = LocalBasisTraits<D, dim, FieldVector<D,dim>, R, dim, FieldVector<R,dim>, FieldMatrix<D,dim,dim> >;</div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> </div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> topologyId = Capabilities::hasSingleGeometryType<typename GV::Grid>::topologyId; <span class=\"comment\">// meaningless if hasFixedElementType is false</span></div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">static</span> GeometryType type = GeometryType(topologyId, GV::dimension);</div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> </div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> <span class=\"keyword\">using </span>FiniteElement = std::conditional_t<hasFixedElementType,</div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> std::conditional_t<type.isCube(),CubeFiniteElement,SimplexFiniteElement>,</div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> LocalFiniteElementVariant<CubeFiniteElement, SimplexFiniteElement> >;</div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> </div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> <span class=\"keyword\">static</span> std::size_t numVariants(GeometryType type)</div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> {</div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> <span class=\"keywordflow\">if</span> (order!=1) <span class=\"comment\">// I am not sure whether the formula below is correct for all orders.</span></div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> DUNE_THROW(NotImplemented, <span class=\"stringliteral\">"Only Nedelec elements of order 1 are implemented!"</span>);</div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> </div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> <span class=\"keyword\">auto</span> numEdges = referenceElement<D,dim>(type).size(dim-1);</div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00213.html#ga0d8eb549af76bc2563ab189e63668ee5\">power</a>(2,numEdges);</div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> }</div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> </div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> Nedelec1stKindLocalFiniteElementMap(<span class=\"keyword\">const</span> GV& gv)</div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> : elementMapper_(gv, mcmgElementLayout()),</div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> orientation_(gv.size(0))</div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> {</div>\n+<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> <span class=\"comment\">// create all variants</span></div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> (hasFixedElementType)</div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> {</div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> variants_.resize(numVariants(type));</div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i = 0; i < numVariants(type); i++)</div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> variants_[i] = FiniteElement(i);</div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> }</div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> <span class=\"keywordflow\">else</span></div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> {</div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> <span class=\"comment\">// for mixed grids add offset for cubes</span></div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> variants_.resize(numVariants(GeometryTypes::simplex(dim)) + numVariants(GeometryTypes::cube(dim)));</div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i = 0; i < numVariants(GeometryTypes::simplex(dim)); i++)</div>\n+<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> variants_[i] = SimplexFiniteElement(i);</div>\n+<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i = 0; i < numVariants(GeometryTypes::cube(dim)); i++)</div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> variants_[i + numVariants(GeometryTypes::simplex(dim))] = CubeFiniteElement(i);</div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> }</div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> </div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> </div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> <span class=\"comment\">// compute orientation for all elements</span></div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& indexSet = gv.indexSet();</div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> </div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& element : elements(gv))</div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> {</div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& refElement = referenceElement(element);</div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> <span class=\"keyword\">auto</span> elementIndex = elementMapper_.index(element);</div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> orientation_[elementIndex] = 0;</div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> </div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> <span class=\"keywordflow\">for</span> (std::size_t i=0; i<element.subEntities(dim-1); i++)</div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> {</div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> <span class=\"comment\">// Local vertex indices within the element</span></div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> <span class=\"keyword\">auto</span> localV0 = refElement.subEntity(i,dim-1, 0,dim);</div>\n+<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> <span class=\"keyword\">auto</span> localV1 = refElement.subEntity(i,dim-1, 1,dim);</div>\n+<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> </div>\n+<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> <span class=\"comment\">// Global vertex indices within the grid</span></div>\n+<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> <span class=\"keyword\">auto</span> globalV0 = indexSet.subIndex(element,localV0,dim);</div>\n+<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> <span class=\"keyword\">auto</span> globalV1 = indexSet.subIndex(element,localV1,dim);</div>\n+<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> </div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> <span class=\"keywordflow\">if</span> ( (localV0<localV1 && globalV0>globalV1) || (localV0>localV1 && globalV0<globalV1) )</div>\n+<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> orientation_[elementIndex] |= (1 << i);</div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> }</div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> <span class=\"comment\">// for mixed grids add offset for cubes</span></div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> (!hasFixedElementType)</div>\n+<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> <span class=\"keywordflow\">if</span> (element.type().isCube())</div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> orientation_[elementIndex] += numVariants(GeometryTypes::simplex(dim));</div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> }</div>\n+<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> }</div>\n+<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> </div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Element></div>\n+<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& find(<span class=\"keyword\">const</span> Element& element)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> <span class=\"keywordflow\">return</span> variants_[orientation_[elementMapper_.index(element)]];</div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> }</div>\n+<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> </div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> <span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> std::vector<FiniteElement> variants_;</div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> <span class=\"keyword\">const</span> Dune::MultipleCodimMultipleGeomTypeMapper<GV> elementMapper_;</div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> std::vector<unsigned short> orientation_;</div>\n+<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> };</div>\n+<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> </div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> </div>\n+<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span>} <span class=\"comment\">// namespace Impl</span></div>\n <div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> </div>\n-<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> <span class=\"keywordflow\">return</span> localValue;</div>\n-<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> }</div>\n-<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> };</div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> };</div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> </div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> <span class=\"keyword\">struct </span>CovariantPiolaTransformator</div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> {</div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Values, <span class=\"keyword\">typename</span> LocalCoordinate, <span class=\"keyword\">typename</span> Geometry></div>\n-<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> <span class=\"keyword\">static</span> <span class=\"keyword\">auto</span> apply(Values& values,</div>\n-<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> <span class=\"keyword\">const</span> LocalCoordinate& xi,</div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> <span class=\"keyword\">const</span> Geometry& geometry)</div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> {</div>\n-<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> <span class=\"keyword\">auto</span> jacobianInverseTransposed = geometry.jacobianInverseTransposed(xi);</div>\n+<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> </div>\n+<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span><span class=\"comment\">// This is the reusable part of the basis. It contains</span></div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span><span class=\"comment\">//</span></div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span><span class=\"comment\">// NedelecPreBasis</span></div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span><span class=\"comment\">// NedelecNode</span></div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span><span class=\"comment\">//</span></div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span><span class=\"comment\">// The pre-basis allows to create the others and is the owner of possible shared</span></div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span><span class=\"comment\">// state. These components do _not_ depend on the global basis and local view</span></div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span><span class=\"comment\">// and can be used without a global basis.</span></div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> </div>\n+<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keyword\">typename</span> Range, std::<span class=\"keywordtype\">size_t</span> kind, <span class=\"keywordtype\">int</span> order></div>\n+<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span><span class=\"keyword\">class </span>NedelecNode;</div>\n+<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> </div>\n+<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keyword\">typename</span> Range, std::<span class=\"keywordtype\">size_t</span> kind, <span class=\"keywordtype\">int</span> order></div>\n+<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html\"> 135</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01691.html\">NedelecPreBasis</a></div>\n+<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span>{</div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dim = GV::dimension;</div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> <span class=\"keyword\">static_assert</span>(kind==1, <span class=\"stringliteral\">"Only the Nedelec basis of the first kind is currently implemented!"</span>);</div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> <span class=\"keyword\">using </span>FiniteElementMap = <span class=\"keyword\">typename</span> Impl::Nedelec1stKindLocalFiniteElementMap<GV, dim, Range, order>;</div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> </div>\n+<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> <span class=\"keyword\">using </span>Mapper = Dune::MultipleCodimMultipleGeomTypeMapper<GV>;</div>\n+<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> </div>\n+<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#a4c8d0ac657c0dd2ecc6ecc826cb996a4\"> 145</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01691.html#a4c8d0ac657c0dd2ecc6ecc826cb996a4\">GridView</a> = GV;</div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#a1ed8686000377d0557455ef973bc5e12\"> 146</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01691.html#a1ed8686000377d0557455ef973bc5e12\">size_type</a> = std::size_t;</div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> </div>\n+<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#a9e12525dff004cd004c660e0fd9059c9\"> 148</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01687.html\">Node</a> = <a class=\"code hl_class\" href=\"a01687.html\">NedelecNode<GV, Range, kind, order></a>;</div>\n <div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> </div>\n-<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> <span class=\"keywordflow\">for</span> (<span class=\"keyword\">auto</span>& value : values)</div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> {</div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> <span class=\"keyword\">auto</span> tmp = value;</div>\n-<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> jacobianInverseTransposed.mv(tmp, value);</div>\n-<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> }</div>\n-<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> }</div>\n-<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> </div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Gradients, <span class=\"keyword\">typename</span> LocalCoordinate, <span class=\"keyword\">typename</span> Geometry></div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> <span class=\"keyword\">static</span> <span class=\"keyword\">auto</span> applyJacobian(Gradients& gradients,</div>\n-<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> <span class=\"keyword\">const</span> LocalCoordinate& xi,</div>\n-<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> <span class=\"keyword\">const</span> Geometry& geometry)</div>\n-<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> {</div>\n-<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> <span class=\"keyword\">auto</span> jacobianInverseTransposed = geometry.jacobianInverseTransposed(xi);</div>\n-<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> </div>\n-<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> <span class=\"keywordflow\">for</span> (<span class=\"keyword\">auto</span>& gradient : gradients)</div>\n-<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> {</div>\n-<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> <span class=\"keyword\">auto</span> tmp = gradient;</div>\n-<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> gradient = 0;</div>\n-<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> j=0; j<gradient.N(); j++)</div>\n-<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> k=0; k<gradient.M(); k++)</div>\n-<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> <span class=\"comment\">// Use sparseRange because jacobianTransposed may be a sparse DiagonalMatrix</span></div>\n-<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">auto</span>&& [jacobianInverseTransposed_j_l, l] : sparseRange(jacobianInverseTransposed[j]))</div>\n-<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> gradient[j][k] += jacobianInverseTransposed_j_l * tmp[l][k];</div>\n-<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> }</div>\n-<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span> }</div>\n-<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span> </div>\n-<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Function, <span class=\"keyword\">class</span> LocalCoordinate, <span class=\"keyword\">class</span> Element></div>\n-<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> <span class=\"keyword\">class </span>LocalValuedFunction</div>\n-<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> {</div>\n-<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> <span class=\"keyword\">const</span> Function& f_;</div>\n-<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> <span class=\"keyword\">const</span> Element& element_;</div>\n-<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> </div>\n-<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> <span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> </div>\n-<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> LocalValuedFunction(<span class=\"keyword\">const</span> Function& f, <span class=\"keyword\">const</span> Element& element)</div>\n-<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> : f_(f), element_(element)</div>\n-<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> {}</div>\n+<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#a4de124caaadb756727f51db481bb0805\"> 150</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01691.html#a1ed8686000377d0557455ef973bc5e12\">size_type</a> <a class=\"code hl_variable\" href=\"a01691.html#a4de124caaadb756727f51db481bb0805\">maxMultiIndexSize</a> = 1;</div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#a9b75a17cf69d14b337838115fa346f3d\"> 151</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01691.html#a1ed8686000377d0557455ef973bc5e12\">size_type</a> <a class=\"code hl_variable\" href=\"a01691.html#a9b75a17cf69d14b337838115fa346f3d\">minMultiIndexSize</a> = 1;</div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#a60ebf4bfd1fa2b95eff282f3e813f528\"> 152</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01691.html#a1ed8686000377d0557455ef973bc5e12\">size_type</a> <a class=\"code hl_variable\" href=\"a01691.html#a60ebf4bfd1fa2b95eff282f3e813f528\">multiIndexBufferSize</a> = 1;</div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> </div>\n+<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#a2591944cb29062fb7efcbcfb0a4363a5\"> 155</a></span> <a class=\"code hl_function\" href=\"a01691.html#a2591944cb29062fb7efcbcfb0a4363a5\">NedelecPreBasis</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01691.html#a4c8d0ac657c0dd2ecc6ecc826cb996a4\">GridView</a>& gv) :</div>\n+<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> <a class=\"code hl_variable\" href=\"a01691.html#a642b89d420e83f45643e63e567767bec\">gridView_</a>(gv),</div>\n+<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> <a class=\"code hl_variable\" href=\"a01691.html#a8069227fa8227b40007a976855c169f0\">finiteElementMap_</a>(gv),</div>\n+<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> <a class=\"code hl_variable\" href=\"a01691.html#af701774f82071f15fc8990d00c315e2b\">mapper_</a>(<a class=\"code hl_variable\" href=\"a01691.html#a642b89d420e83f45643e63e567767bec\">gridView_</a>, mcmgLayout(Dim<1>{}))</div>\n+<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> {</div>\n+<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> <span class=\"keywordflow\">if</span> (kind!=1)</div>\n+<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> DUNE_THROW(NotImplemented, <span class=\"stringliteral\">"Only Nedelec elements of the first kind are implemented!"</span>);</div>\n+<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> </div>\n+<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> <span class=\"comment\">// There is no inherent reason why the basis shouldn't work for grids with more than two</span></div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> <span class=\"comment\">// element types. Somebody simply has to sit down and implement the missing bits.</span></div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> <span class=\"keywordflow\">if</span> (gv.indexSet().types(0).size() > 2)</div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> DUNE_THROW(NotImplemented, <span class=\"stringliteral\">"N\u00e9d\u00e9lec basis is only implemented for grids with simplex and cube elements"</span>);</div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> </div>\n+<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">auto</span> type : gv.indexSet().types(0))</div>\n+<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> <span class=\"keywordflow\">if</span> (!type.isSimplex() && !type.isCube())</div>\n+<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> DUNE_THROW(NotImplemented, <span class=\"stringliteral\">"N\u00e9d\u00e9lec basis is only implemented for grids with simplex or cube elements."</span>);</div>\n+<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> </div>\n+<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> <span class=\"keywordflow\">if</span> (order>1)</div>\n+<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> DUNE_THROW(NotImplemented, <span class=\"stringliteral\">"Only first-order elements are implemented"</span>);</div>\n+<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> </div>\n+<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> <span class=\"keywordflow\">if</span> (dim!=2 && dim!=3)</div>\n+<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> DUNE_THROW(NotImplemented, <span class=\"stringliteral\">"Only 2d and 3d N\u00e9d\u00e9lec elements are implemented"</span>);</div>\n+<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> }</div>\n+<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> </div>\n+<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#aaa3ff181601337d43c072813cc060b90\"> 179</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01691.html#aaa3ff181601337d43c072813cc060b90\">initializeIndices</a>()</div>\n+<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> {}</div>\n+<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> </div>\n+<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#aca814fbd069b0e979707d925c1338a44\"> 184</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01691.html#a4c8d0ac657c0dd2ecc6ecc826cb996a4\">GridView</a>& <a class=\"code hl_function\" href=\"a01691.html#aca814fbd069b0e979707d925c1338a44\">gridView</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01691.html#a642b89d420e83f45643e63e567767bec\">gridView_</a>;</div>\n+<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> }</div>\n+<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> </div>\n+<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> <span class=\"comment\">/* \\brief Update the stored grid view, to be called if the grid has changed */</span></div>\n+<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#abfad7bccc671799c5ed406a16510e8a1\"> 190</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01691.html#abfad7bccc671799c5ed406a16510e8a1\">update</a> (<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01691.html#a4c8d0ac657c0dd2ecc6ecc826cb996a4\">GridView</a>& gv)</div>\n+<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> {</div>\n+<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> <a class=\"code hl_variable\" href=\"a01691.html#a642b89d420e83f45643e63e567767bec\">gridView_</a> = gv;</div>\n+<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> <a class=\"code hl_variable\" href=\"a01691.html#af701774f82071f15fc8990d00c315e2b\">mapper_</a>.update(<a class=\"code hl_variable\" href=\"a01691.html#a642b89d420e83f45643e63e567767bec\">gridView_</a>);</div>\n+<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> }</div>\n+<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> </div>\n+<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#ad5124fec497b3042e767d265807cc63a\"> 199</a></span> <a class=\"code hl_class\" href=\"a01687.html\">Node</a> <a class=\"code hl_function\" href=\"a01691.html#ad5124fec497b3042e767d265807cc63a\">makeNode</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01687.html\">Node</a>{&<a class=\"code hl_variable\" href=\"a01691.html#a8069227fa8227b40007a976855c169f0\">finiteElementMap_</a>};</div>\n+<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> }</div>\n <div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> </div>\n-<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> <span class=\"keyword\">auto</span> operator()(<span class=\"keyword\">const</span> LocalCoordinate& xi)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> <span class=\"keyword\">auto</span>&& f = Dune::Impl::makeFunctionWithCallOperator<LocalCoordinate>(f_);</div>\n-<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> <span class=\"keyword\">auto</span> globalValue = f(xi);</div>\n+<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#ada93cc4c9448c413a3aa9bebce67ab29\"> 204</a></span> <a class=\"code hl_typedef\" href=\"a01691.html#a1ed8686000377d0557455ef973bc5e12\">size_type</a> <a class=\"code hl_function\" href=\"a01691.html#ada93cc4c9448c413a3aa9bebce67ab29\">size</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01691.html#af701774f82071f15fc8990d00c315e2b\">mapper_</a>.size();</div>\n+<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> }</div>\n <div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span> </div>\n-<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> <span class=\"comment\">// Apply the inverse Piola transform</span></div>\n-<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> <span class=\"keyword\">auto</span> jacobianTransposed = element_.geometry().jacobianTransposed(xi);</div>\n-<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> </div>\n-<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"> 212</span> <span class=\"keyword\">auto</span> localValue = globalValue;</div>\n-<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span> jacobianTransposed.mv(globalValue, localValue);</div>\n-<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> </div>\n-<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> <span class=\"keywordflow\">return</span> localValue;</div>\n-<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span> }</div>\n-<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> };</div>\n-<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> };</div>\n-<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> </div>\n-<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Transformator, <span class=\"keyword\">class</span> LocalValuedLocalBasis, <span class=\"keyword\">class</span> Element></div>\n-<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> <span class=\"keyword\">class </span>GlobalValuedLocalBasis</div>\n-<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> {</div>\n-<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> <span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span> <span class=\"keyword\">using </span>Traits = <span class=\"keyword\">typename</span> LocalValuedLocalBasis::Traits;</div>\n-<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span> </div>\n-<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> <span class=\"keywordtype\">void</span> bind(<span class=\"keyword\">const</span> LocalValuedLocalBasis& localValuedLocalBasis, <span class=\"keyword\">const</span> Element& element)</div>\n-<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> {</div>\n-<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span> localValuedLocalBasis_ = &localValuedLocalBasis;</div>\n-<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span> element_ = &element;</div>\n-<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span> }</div>\n-<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span> </div>\n-<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span> <span class=\"keyword\">auto</span> size()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> <span class=\"keywordflow\">return</span> localValuedLocalBasis_->size();</div>\n-<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> }</div>\n-<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span> </div>\n-<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"> 248</span> <span class=\"keywordtype\">void</span> evaluateFunction(<span class=\"keyword\">const</span> <span class=\"keyword\">typename</span> Traits::DomainType& x,</div>\n-<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span> std::vector<typename Traits::RangeType>& out)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span> localValuedLocalBasis_->evaluateFunction(x,out);</div>\n-<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span> </div>\n-<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"> 253</span> Transformator::apply(out, x, element_->geometry());</div>\n-<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"> 254</span> }</div>\n-<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span> </div>\n-<div class=\"line\"><a id=\"l00261\" name=\"l00261\"></a><span class=\"lineno\"> 261</span> <span class=\"keywordtype\">void</span> evaluateJacobian(<span class=\"keyword\">const</span> <span class=\"keyword\">typename</span> Traits::DomainType& x,</div>\n-<div class=\"line\"><a id=\"l00262\" name=\"l00262\"></a><span class=\"lineno\"> 262</span> std::vector<typename Traits::JacobianType>& out)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00263\" name=\"l00263\"></a><span class=\"lineno\"> 263</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00264\" name=\"l00264\"></a><span class=\"lineno\"> 264</span> localValuedLocalBasis_->evaluateJacobian(x,out);</div>\n-<div class=\"line\"><a id=\"l00265\" name=\"l00265\"></a><span class=\"lineno\"> 265</span> </div>\n-<div class=\"line\"><a id=\"l00266\" name=\"l00266\"></a><span class=\"lineno\"> 266</span> Transformator::applyJacobian(out, x, element_->geometry());</div>\n-<div class=\"line\"><a id=\"l00267\" name=\"l00267\"></a><span class=\"lineno\"> 267</span> }</div>\n+<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n+<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#a185c22a27f1499d80a1c3ff4d4640ff8\"> 211</a></span> <a class=\"code hl_typedef\" href=\"a01691.html#a1ed8686000377d0557455ef973bc5e12\">size_type</a> <a class=\"code hl_function\" href=\"a01691.html#a185c22a27f1499d80a1c3ff4d4640ff8\">size</a>(<span class=\"keyword\">const</span> SizePrefix& prefix)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"> 212</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span> assert(prefix.size() == 0 || prefix.size() == 1);</div>\n+<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> <span class=\"keywordflow\">return</span> (prefix.size() == 0) ? <a class=\"code hl_function\" href=\"a01691.html#ada93cc4c9448c413a3aa9bebce67ab29\">size</a>() : 0;</div>\n+<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> }</div>\n+<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span> </div>\n+<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#a4d2833397c8b6ee3c761ce62d40eaad5\"> 217</a></span> <a class=\"code hl_typedef\" href=\"a01691.html#a1ed8686000377d0557455ef973bc5e12\">size_type</a> <a class=\"code hl_function\" href=\"a01691.html#a4d2833397c8b6ee3c761ce62d40eaad5\">dimension</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01691.html#ada93cc4c9448c413a3aa9bebce67ab29\">size</a>();</div>\n+<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span> }</div>\n+<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> </div>\n+<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#ac7a7c76bab36e858497aa265fab90d76\"> 222</a></span> <a class=\"code hl_typedef\" href=\"a01691.html#a1ed8686000377d0557455ef973bc5e12\">size_type</a> <a class=\"code hl_function\" href=\"a01691.html#ac7a7c76bab36e858497aa265fab90d76\">maxNodeSize</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> <a class=\"code hl_typedef\" href=\"a01691.html#a1ed8686000377d0557455ef973bc5e12\">size_type</a> result = 0;</div>\n+<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span> <span class=\"keywordflow\">for</span> (<span class=\"keyword\">auto</span>&& type : <a class=\"code hl_variable\" href=\"a01691.html#a642b89d420e83f45643e63e567767bec\">gridView_</a>.indexSet().types(0))</div>\n+<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> {</div>\n+<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> <a class=\"code hl_typedef\" href=\"a01691.html#a1ed8686000377d0557455ef973bc5e12\">size_type</a> numEdges = referenceElement<typename GV::ctype,dim>(type).size(dim-1);</div>\n+<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> result = std::max(result, numEdges);</div>\n+<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> }</div>\n+<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span> </div>\n+<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span> <span class=\"keywordflow\">return</span> result;</div>\n+<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> }</div>\n+<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> </div>\n+<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n+<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#a0ec65692ba465323c3aae1deb95bd98b\"> 238</a></span> It <a class=\"code hl_function\" href=\"a01691.html#a0ec65692ba465323c3aae1deb95bd98b\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01687.html\">Node</a>& node, It it)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"> 240</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& element = node.<a class=\"code hl_function\" href=\"a01687.html#a61628ce23ca5cac05850c3d47081955a\">element</a>();</div>\n+<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span> </div>\n+<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span> <span class=\"comment\">// throw if Element is not of predefined type</span></div>\n+<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> <span class=\"keywordflow\">if</span> (not(element.type().isCube()) and not(element.type().isSimplex()))</div>\n+<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> DUNE_THROW(NotImplemented, <span class=\"stringliteral\">"NedelecBasis only implemented for cube and simplex elements."</span>);</div>\n+<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> </div>\n+<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span> <span class=\"keywordflow\">for</span>(std::size_t i=0, end=node.<a class=\"code hl_function\" href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">size</a>(); i<end; ++i, ++it)</div>\n+<div class=\"line\"><a id=\"l00247\" name=\"l00247\"></a><span class=\"lineno\"> 247</span> {</div>\n+<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"> 248</span> Dune::LocalKey localKey = node.<a class=\"code hl_function\" href=\"a01687.html#a7af9ddb25575c6d15b5053b6645c4b4c\">finiteElement</a>().localCoefficients().localKey(i);</div>\n+<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span> *it = { <a class=\"code hl_variable\" href=\"a01691.html#af701774f82071f15fc8990d00c315e2b\">mapper_</a>.subIndex(element, localKey.subEntity(), localKey.codim()) + localKey.index() };</div>\n+<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span> }</div>\n+<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span> </div>\n+<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span> <span class=\"keywordflow\">return</span> it;</div>\n+<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"> 253</span> }</div>\n+<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"> 254</span> </div>\n+<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span><span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#a642b89d420e83f45643e63e567767bec\"> 256</a></span> <a class=\"code hl_typedef\" href=\"a01691.html#a4c8d0ac657c0dd2ecc6ecc826cb996a4\">GridView</a> <a class=\"code hl_variable\" href=\"a01691.html#a642b89d420e83f45643e63e567767bec\">gridView_</a>;</div>\n+<div class=\"line\"><a id=\"l00257\" name=\"l00257\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#a8069227fa8227b40007a976855c169f0\"> 257</a></span> FiniteElementMap <a class=\"code hl_variable\" href=\"a01691.html#a8069227fa8227b40007a976855c169f0\">finiteElementMap_</a>;</div>\n+<div class=\"line\"><a id=\"l00258\" name=\"l00258\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01691.html#af701774f82071f15fc8990d00c315e2b\"> 258</a></span> Mapper <a class=\"code hl_variable\" href=\"a01691.html#af701774f82071f15fc8990d00c315e2b\">mapper_</a>;</div>\n+<div class=\"line\"><a id=\"l00259\" name=\"l00259\"></a><span class=\"lineno\"> 259</span>};</div>\n+<div class=\"line\"><a id=\"l00260\" name=\"l00260\"></a><span class=\"lineno\"> 260</span> </div>\n+<div class=\"line\"><a id=\"l00261\" name=\"l00261\"></a><span class=\"lineno\"> 261</span> </div>\n+<div class=\"line\"><a id=\"l00262\" name=\"l00262\"></a><span class=\"lineno\"> 262</span> </div>\n+<div class=\"line\"><a id=\"l00263\" name=\"l00263\"></a><span class=\"lineno\"> 263</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keyword\">typename</span> Range, <span class=\"keywordtype\">size_t</span> kind, <span class=\"keywordtype\">int</span> order></div>\n+<div class=\"line\"><a id=\"l00264\" name=\"l00264\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01687.html\"> 264</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01687.html\">NedelecNode</a> :</div>\n+<div class=\"line\"><a id=\"l00265\" name=\"l00265\"></a><span class=\"lineno\"> 265</span> <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01711.html\">LeafBasisNode</a></div>\n+<div class=\"line\"><a id=\"l00266\" name=\"l00266\"></a><span class=\"lineno\"> 266</span>{</div>\n+<div class=\"line\"><a id=\"l00267\" name=\"l00267\"></a><span class=\"lineno\"> 267</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dim = GV::dimension;</div>\n <div class=\"line\"><a id=\"l00268\" name=\"l00268\"></a><span class=\"lineno\"> 268</span> </div>\n-<div class=\"line\"><a id=\"l00275\" name=\"l00275\"></a><span class=\"lineno\"> 275</span> <span class=\"keywordtype\">void</span> partial(<span class=\"keyword\">const</span> std::array<unsigned int,2>& order,</div>\n-<div class=\"line\"><a id=\"l00276\" name=\"l00276\"></a><span class=\"lineno\"> 276</span> <span class=\"keyword\">const</span> <span class=\"keyword\">typename</span> Traits::DomainType& x,</div>\n-<div class=\"line\"><a id=\"l00277\" name=\"l00277\"></a><span class=\"lineno\"> 277</span> std::vector<typename Traits::RangeType>& out)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00278\" name=\"l00278\"></a><span class=\"lineno\"> 278</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00279\" name=\"l00279\"></a><span class=\"lineno\"> 279</span> <span class=\"keyword\">auto</span> totalOrder = std::accumulate(order.begin(), order.end(), 0);</div>\n-<div class=\"line\"><a id=\"l00280\" name=\"l00280\"></a><span class=\"lineno\"> 280</span> <span class=\"keywordflow\">if</span> (totalOrder == 0) {</div>\n-<div class=\"line\"><a id=\"l00281\" name=\"l00281\"></a><span class=\"lineno\"> 281</span> evaluateFunction(x, out);</div>\n-<div class=\"line\"><a id=\"l00282\" name=\"l00282\"></a><span class=\"lineno\"> 282</span> } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (totalOrder == 1) {</div>\n-<div class=\"line\"><a id=\"l00283\" name=\"l00283\"></a><span class=\"lineno\"> 283</span> <span class=\"keyword\">auto</span> <span class=\"keyword\">const</span> direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));</div>\n-<div class=\"line\"><a id=\"l00284\" name=\"l00284\"></a><span class=\"lineno\"> 284</span> out.resize(size());</div>\n-<div class=\"line\"><a id=\"l00285\" name=\"l00285\"></a><span class=\"lineno\"> 285</span> </div>\n-<div class=\"line\"><a id=\"l00286\" name=\"l00286\"></a><span class=\"lineno\"> 286</span> <span class=\"comment\">// TODO: The following is wasteful: We compute the full Jacobian and then return</span></div>\n-<div class=\"line\"><a id=\"l00287\" name=\"l00287\"></a><span class=\"lineno\"> 287</span> <span class=\"comment\">// only a part of it. While we need the full Jacobian of the underlying local-valued LFE,</span></div>\n-<div class=\"line\"><a id=\"l00288\" name=\"l00288\"></a><span class=\"lineno\"> 288</span> <span class=\"comment\">// it should be possible to compute only a partial Piola transform for the requested</span></div>\n-<div class=\"line\"><a id=\"l00289\" name=\"l00289\"></a><span class=\"lineno\"> 289</span> <span class=\"comment\">// partial derivatives.</span></div>\n-<div class=\"line\"><a id=\"l00290\" name=\"l00290\"></a><span class=\"lineno\"> 290</span> std::vector<typename Traits::JacobianType> fullJacobian;</div>\n-<div class=\"line\"><a id=\"l00291\" name=\"l00291\"></a><span class=\"lineno\"> 291</span> localValuedLocalBasis_->evaluateJacobian(x,fullJacobian);</div>\n-<div class=\"line\"><a id=\"l00292\" name=\"l00292\"></a><span class=\"lineno\"> 292</span> </div>\n-<div class=\"line\"><a id=\"l00293\" name=\"l00293\"></a><span class=\"lineno\"> 293</span> Transformator::applyJacobian(fullJacobian, x, element_->geometry());</div>\n-<div class=\"line\"><a id=\"l00294\" name=\"l00294\"></a><span class=\"lineno\"> 294</span> </div>\n-<div class=\"line\"><a id=\"l00295\" name=\"l00295\"></a><span class=\"lineno\"> 295</span> <span class=\"keywordflow\">for</span> (std::size_t i=0; i<out.size(); i++)</div>\n-<div class=\"line\"><a id=\"l00296\" name=\"l00296\"></a><span class=\"lineno\"> 296</span> <span class=\"keywordflow\">for</span> (std::size_t j=0; j<out[i].size(); j++)</div>\n-<div class=\"line\"><a id=\"l00297\" name=\"l00297\"></a><span class=\"lineno\"> 297</span> out[i][j] = fullJacobian[i][j][direction];</div>\n+<div class=\"line\"><a id=\"l00269\" name=\"l00269\"></a><span class=\"lineno\"> 269</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00270\" name=\"l00270\"></a><span class=\"lineno\"> 270</span> </div>\n+<div class=\"line\"><a id=\"l00271\" name=\"l00271\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01687.html#af23a2827c1532d33944367e067f2d249\"> 271</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01687.html#af23a2827c1532d33944367e067f2d249\">size_type</a> = std::size_t;</div>\n+<div class=\"line\"><a id=\"l00272\" name=\"l00272\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01687.html#a71f7ac9c203201db021a4e1d7d9c15da\"> 272</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01687.html#a71f7ac9c203201db021a4e1d7d9c15da\">Element</a> = <span class=\"keyword\">typename</span> GV::template Codim<0>::Entity;</div>\n+<div class=\"line\"><a id=\"l00273\" name=\"l00273\"></a><span class=\"lineno\"> 273</span> <span class=\"keyword\">static_assert</span>(kind==1, <span class=\"stringliteral\">"Only Nedelec elements of the first kind are implemented!"</span>);</div>\n+<div class=\"line\"><a id=\"l00274\" name=\"l00274\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01687.html#acb630a2b334ad1a9be042a9ceda0df49\"> 274</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01687.html#acb630a2b334ad1a9be042a9ceda0df49\">FiniteElementMap</a> = <span class=\"keyword\">typename</span> Impl::Nedelec1stKindLocalFiniteElementMap<GV, dim, Range, order>;</div>\n+<div class=\"line\"><a id=\"l00275\" name=\"l00275\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01687.html#a42789dd1900a54215f4d0bfef9c76e12\"> 275</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01687.html#a42789dd1900a54215f4d0bfef9c76e12\">FiniteElement</a> = Impl::GlobalValuedLocalFiniteElement<Impl::CovariantPiolaTransformator,</div>\n+<div class=\"line\"><a id=\"l00276\" name=\"l00276\"></a><span class=\"lineno\"> 276</span> <span class=\"keyword\">typename</span> FiniteElementMap::FiniteElement,</div>\n+<div class=\"line\"><a id=\"l00277\" name=\"l00277\"></a><span class=\"lineno\"> 277</span> <a class=\"code hl_typedef\" href=\"a01687.html#a71f7ac9c203201db021a4e1d7d9c15da\">Element</a>>;</div>\n+<div class=\"line\"><a id=\"l00278\" name=\"l00278\"></a><span class=\"lineno\"> 278</span> </div>\n+<div class=\"line\"><a id=\"l00279\" name=\"l00279\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01687.html#ac51f523763d2bb13d60847cb63b1da49\"> 279</a></span> <a class=\"code hl_function\" href=\"a01687.html#ac51f523763d2bb13d60847cb63b1da49\">NedelecNode</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01687.html#acb630a2b334ad1a9be042a9ceda0df49\">FiniteElementMap</a>* finiteElementMap) :</div>\n+<div class=\"line\"><a id=\"l00280\" name=\"l00280\"></a><span class=\"lineno\"> 280</span> <a class=\"code hl_variable\" href=\"a01687.html#ad41e422719270dbd0a3cbc1c6024b441\">element_</a>(nullptr),</div>\n+<div class=\"line\"><a id=\"l00281\" name=\"l00281\"></a><span class=\"lineno\"> 281</span> <a class=\"code hl_variable\" href=\"a01687.html#a124185f876b964841212a0eda240dbd4\">finiteElementMap_</a>(finiteElementMap)</div>\n+<div class=\"line\"><a id=\"l00282\" name=\"l00282\"></a><span class=\"lineno\"> 282</span> { }</div>\n+<div class=\"line\"><a id=\"l00283\" name=\"l00283\"></a><span class=\"lineno\"> 283</span> </div>\n+<div class=\"line\"><a id=\"l00285\" name=\"l00285\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01687.html#a61628ce23ca5cac05850c3d47081955a\"> 285</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01687.html#a71f7ac9c203201db021a4e1d7d9c15da\">Element</a>& <a class=\"code hl_function\" href=\"a01687.html#a61628ce23ca5cac05850c3d47081955a\">element</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00286\" name=\"l00286\"></a><span class=\"lineno\"> 286</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00287\" name=\"l00287\"></a><span class=\"lineno\"> 287</span> <span class=\"keywordflow\">return</span> *<a class=\"code hl_variable\" href=\"a01687.html#ad41e422719270dbd0a3cbc1c6024b441\">element_</a>;</div>\n+<div class=\"line\"><a id=\"l00288\" name=\"l00288\"></a><span class=\"lineno\"> 288</span> }</div>\n+<div class=\"line\"><a id=\"l00289\" name=\"l00289\"></a><span class=\"lineno\"> 289</span> </div>\n+<div class=\"line\"><a id=\"l00294\" name=\"l00294\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01687.html#a7af9ddb25575c6d15b5053b6645c4b4c\"> 294</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01687.html#a42789dd1900a54215f4d0bfef9c76e12\">FiniteElement</a>& <a class=\"code hl_function\" href=\"a01687.html#a7af9ddb25575c6d15b5053b6645c4b4c\">finiteElement</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00295\" name=\"l00295\"></a><span class=\"lineno\"> 295</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00296\" name=\"l00296\"></a><span class=\"lineno\"> 296</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01687.html#a19f7b4d797ee8eaa9b34b80e1a1e8049\">finiteElement_</a>;</div>\n+<div class=\"line\"><a id=\"l00297\" name=\"l00297\"></a><span class=\"lineno\"> 297</span> }</div>\n <div class=\"line\"><a id=\"l00298\" name=\"l00298\"></a><span class=\"lineno\"> 298</span> </div>\n-<div class=\"line\"><a id=\"l00299\" name=\"l00299\"></a><span class=\"lineno\"> 299</span> } <span class=\"keywordflow\">else</span></div>\n-<div class=\"line\"><a id=\"l00300\" name=\"l00300\"></a><span class=\"lineno\"> 300</span> DUNE_THROW(NotImplemented, <span class=\"stringliteral\">"Partial derivatives of order 2 or higher"</span>);</div>\n-<div class=\"line\"><a id=\"l00301\" name=\"l00301\"></a><span class=\"lineno\"> 301</span> }</div>\n-<div class=\"line\"><a id=\"l00302\" name=\"l00302\"></a><span class=\"lineno\"> 302</span> </div>\n-<div class=\"line\"><a id=\"l00304\" name=\"l00304\"></a><span class=\"lineno\"> 304</span> <span class=\"keyword\">auto</span> order()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00305\" name=\"l00305\"></a><span class=\"lineno\"> 305</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00306\" name=\"l00306\"></a><span class=\"lineno\"> 306</span> <span class=\"keywordflow\">return</span> localValuedLocalBasis_->order();</div>\n-<div class=\"line\"><a id=\"l00307\" name=\"l00307\"></a><span class=\"lineno\"> 307</span> }</div>\n+<div class=\"line\"><a id=\"l00300\" name=\"l00300\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01687.html#a49c53f555c5c73e9934b175e4e851992\"> 300</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01687.html#a49c53f555c5c73e9934b175e4e851992\">bind</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01687.html#a71f7ac9c203201db021a4e1d7d9c15da\">Element</a>& e)</div>\n+<div class=\"line\"><a id=\"l00301\" name=\"l00301\"></a><span class=\"lineno\"> 301</span> {</div>\n+<div class=\"line\"><a id=\"l00302\" name=\"l00302\"></a><span class=\"lineno\"> 302</span> <a class=\"code hl_variable\" href=\"a01687.html#ad41e422719270dbd0a3cbc1c6024b441\">element_</a> = &e;</div>\n+<div class=\"line\"><a id=\"l00303\" name=\"l00303\"></a><span class=\"lineno\"> 303</span> <a class=\"code hl_variable\" href=\"a01687.html#a19f7b4d797ee8eaa9b34b80e1a1e8049\">finiteElement_</a>.bind((<a class=\"code hl_variable\" href=\"a01687.html#a124185f876b964841212a0eda240dbd4\">finiteElementMap_</a>->find(*<a class=\"code hl_variable\" href=\"a01687.html#ad41e422719270dbd0a3cbc1c6024b441\">element_</a>)), e);</div>\n+<div class=\"line\"><a id=\"l00304\" name=\"l00304\"></a><span class=\"lineno\"> 304</span> this-><a class=\"code hl_function\" href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\">setSize</a>(<a class=\"code hl_variable\" href=\"a01687.html#a19f7b4d797ee8eaa9b34b80e1a1e8049\">finiteElement_</a>.size());</div>\n+<div class=\"line\"><a id=\"l00305\" name=\"l00305\"></a><span class=\"lineno\"> 305</span> }</div>\n+<div class=\"line\"><a id=\"l00306\" name=\"l00306\"></a><span class=\"lineno\"> 306</span> </div>\n+<div class=\"line\"><a id=\"l00307\" name=\"l00307\"></a><span class=\"lineno\"> 307</span><span class=\"keyword\">protected</span>:</div>\n <div class=\"line\"><a id=\"l00308\" name=\"l00308\"></a><span class=\"lineno\"> 308</span> </div>\n-<div class=\"line\"><a id=\"l00309\" name=\"l00309\"></a><span class=\"lineno\"> 309</span> <span class=\"keyword\">const</span> LocalValuedLocalBasis* localValuedLocalBasis_;</div>\n-<div class=\"line\"><a id=\"l00310\" name=\"l00310\"></a><span class=\"lineno\"> 310</span> <span class=\"keyword\">const</span> Element* element_;</div>\n-<div class=\"line\"><a id=\"l00311\" name=\"l00311\"></a><span class=\"lineno\"> 311</span> };</div>\n-<div class=\"line\"><a id=\"l00312\" name=\"l00312\"></a><span class=\"lineno\"> 312</span> </div>\n-<div class=\"line\"><a id=\"l00321\" name=\"l00321\"></a><span class=\"lineno\"> 321</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Transformator, <span class=\"keyword\">class</span> LocalValuedLocalInterpolation, <span class=\"keyword\">class</span> Element></div>\n-<div class=\"line\"><a id=\"l00322\" name=\"l00322\"></a><span class=\"lineno\"> 322</span> <span class=\"keyword\">class </span>GlobalValuedLocalInterpolation</div>\n-<div class=\"line\"><a id=\"l00323\" name=\"l00323\"></a><span class=\"lineno\"> 323</span> {</div>\n-<div class=\"line\"><a id=\"l00324\" name=\"l00324\"></a><span class=\"lineno\"> 324</span> <span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00327\" name=\"l00327\"></a><span class=\"lineno\"> 327</span> <span class=\"keywordtype\">void</span> bind(<span class=\"keyword\">const</span> LocalValuedLocalInterpolation& localValuedLocalInterpolation, <span class=\"keyword\">const</span> Element& element)</div>\n-<div class=\"line\"><a id=\"l00328\" name=\"l00328\"></a><span class=\"lineno\"> 328</span> {</div>\n-<div class=\"line\"><a id=\"l00329\" name=\"l00329\"></a><span class=\"lineno\"> 329</span> localValuedLocalInterpolation_ = &localValuedLocalInterpolation;</div>\n-<div class=\"line\"><a id=\"l00330\" name=\"l00330\"></a><span class=\"lineno\"> 330</span> element_ = &element;</div>\n-<div class=\"line\"><a id=\"l00331\" name=\"l00331\"></a><span class=\"lineno\"> 331</span> }</div>\n-<div class=\"line\"><a id=\"l00332\" name=\"l00332\"></a><span class=\"lineno\"> 332</span> </div>\n-<div class=\"line\"><a id=\"l00333\" name=\"l00333\"></a><span class=\"lineno\"> 333</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> F, <span class=\"keyword\">typename</span> C></div>\n-<div class=\"line\"><a id=\"l00334\" name=\"l00334\"></a><span class=\"lineno\"> 334</span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a00219.html#a13b0c6bf02d744e7b2078d1a535b5211\">interpolate</a> (<span class=\"keyword\">const</span> F& f, std::vector<C>& out)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00335\" name=\"l00335\"></a><span class=\"lineno\"> 335</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00336\" name=\"l00336\"></a><span class=\"lineno\"> 336</span> <span class=\"keyword\">using </span>LocalCoordinate = <span class=\"keyword\">typename</span> Element::Geometry::LocalCoordinate;</div>\n-<div class=\"line\"><a id=\"l00337\" name=\"l00337\"></a><span class=\"lineno\"> 337</span> <span class=\"keyword\">typename</span> Transformator::template LocalValuedFunction<F,LocalCoordinate,Element> localValuedFunction(f, *element_);</div>\n-<div class=\"line\"><a id=\"l00338\" name=\"l00338\"></a><span class=\"lineno\"> 338</span> localValuedLocalInterpolation_->interpolate(localValuedFunction, out);</div>\n-<div class=\"line\"><a id=\"l00339\" name=\"l00339\"></a><span class=\"lineno\"> 339</span> }</div>\n-<div class=\"line\"><a id=\"l00340\" name=\"l00340\"></a><span class=\"lineno\"> 340</span> </div>\n-<div class=\"line\"><a id=\"l00341\" name=\"l00341\"></a><span class=\"lineno\"> 341</span> <span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00342\" name=\"l00342\"></a><span class=\"lineno\"> 342</span> <span class=\"keyword\">const</span> LocalValuedLocalInterpolation* localValuedLocalInterpolation_;</div>\n-<div class=\"line\"><a id=\"l00343\" name=\"l00343\"></a><span class=\"lineno\"> 343</span> <span class=\"keyword\">const</span> Element* element_;</div>\n-<div class=\"line\"><a id=\"l00344\" name=\"l00344\"></a><span class=\"lineno\"> 344</span> };</div>\n-<div class=\"line\"><a id=\"l00345\" name=\"l00345\"></a><span class=\"lineno\"> 345</span> </div>\n-<div class=\"line\"><a id=\"l00346\" name=\"l00346\"></a><span class=\"lineno\"> 346</span> </div>\n-<div class=\"line\"><a id=\"l00353\" name=\"l00353\"></a><span class=\"lineno\"> 353</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Transformator, <span class=\"keyword\">class</span> LocalValuedLFE, <span class=\"keyword\">class</span> Element></div>\n-<div class=\"line\"><a id=\"l00354\" name=\"l00354\"></a><span class=\"lineno\"> 354</span> <span class=\"keyword\">class </span>GlobalValuedLocalFiniteElement</div>\n-<div class=\"line\"><a id=\"l00355\" name=\"l00355\"></a><span class=\"lineno\"> 355</span> {</div>\n-<div class=\"line\"><a id=\"l00356\" name=\"l00356\"></a><span class=\"lineno\"> 356</span> <span class=\"keyword\">using </span>LocalBasis = GlobalValuedLocalBasis<Transformator,</div>\n-<div class=\"line\"><a id=\"l00357\" name=\"l00357\"></a><span class=\"lineno\"> 357</span> <span class=\"keyword\">typename</span> LocalValuedLFE::Traits::LocalBasisType,</div>\n-<div class=\"line\"><a id=\"l00358\" name=\"l00358\"></a><span class=\"lineno\"> 358</span> Element>;</div>\n-<div class=\"line\"><a id=\"l00359\" name=\"l00359\"></a><span class=\"lineno\"> 359</span> <span class=\"keyword\">using </span>LocalInterpolation = GlobalValuedLocalInterpolation<Transformator,</div>\n-<div class=\"line\"><a id=\"l00360\" name=\"l00360\"></a><span class=\"lineno\"> 360</span> <span class=\"keyword\">typename</span> LocalValuedLFE::Traits::LocalInterpolationType,</div>\n-<div class=\"line\"><a id=\"l00361\" name=\"l00361\"></a><span class=\"lineno\"> 361</span> Element>;</div>\n-<div class=\"line\"><a id=\"l00362\" name=\"l00362\"></a><span class=\"lineno\"> 362</span> </div>\n-<div class=\"line\"><a id=\"l00363\" name=\"l00363\"></a><span class=\"lineno\"> 363</span> <span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00366\" name=\"l00366\"></a><span class=\"lineno\"> 366</span> <span class=\"keyword\">using </span>Traits = LocalFiniteElementTraits<LocalBasis,</div>\n-<div class=\"line\"><a id=\"l00367\" name=\"l00367\"></a><span class=\"lineno\"> 367</span> <span class=\"keyword\">typename</span> LocalValuedLFE::Traits::LocalCoefficientsType,</div>\n-<div class=\"line\"><a id=\"l00368\" name=\"l00368\"></a><span class=\"lineno\"> 368</span> LocalInterpolation>;</div>\n-<div class=\"line\"><a id=\"l00369\" name=\"l00369\"></a><span class=\"lineno\"> 369</span> </div>\n-<div class=\"line\"><a id=\"l00370\" name=\"l00370\"></a><span class=\"lineno\"> 370</span> GlobalValuedLocalFiniteElement() {}</div>\n-<div class=\"line\"><a id=\"l00371\" name=\"l00371\"></a><span class=\"lineno\"> 371</span> </div>\n-<div class=\"line\"><a id=\"l00372\" name=\"l00372\"></a><span class=\"lineno\"> 372</span> <span class=\"keywordtype\">void</span> bind(<span class=\"keyword\">const</span> LocalValuedLFE& localValuedLFE, <span class=\"keyword\">const</span> Element& element)</div>\n-<div class=\"line\"><a id=\"l00373\" name=\"l00373\"></a><span class=\"lineno\"> 373</span> {</div>\n-<div class=\"line\"><a id=\"l00374\" name=\"l00374\"></a><span class=\"lineno\"> 374</span> globalValuedLocalBasis_.bind(localValuedLFE.localBasis(), element);</div>\n-<div class=\"line\"><a id=\"l00375\" name=\"l00375\"></a><span class=\"lineno\"> 375</span> globalValuedLocalInterpolation_.bind(localValuedLFE.localInterpolation(), element);</div>\n-<div class=\"line\"><a id=\"l00376\" name=\"l00376\"></a><span class=\"lineno\"> 376</span> localValuedLFE_ = &localValuedLFE;</div>\n-<div class=\"line\"><a id=\"l00377\" name=\"l00377\"></a><span class=\"lineno\"> 377</span> }</div>\n-<div class=\"line\"><a id=\"l00378\" name=\"l00378\"></a><span class=\"lineno\"> 378</span> </div>\n-<div class=\"line\"><a id=\"l00381\" name=\"l00381\"></a><span class=\"lineno\"> 381</span> <span class=\"keyword\">const</span> <span class=\"keyword\">typename</span> Traits::LocalBasisType& localBasis()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00382\" name=\"l00382\"></a><span class=\"lineno\"> 382</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00383\" name=\"l00383\"></a><span class=\"lineno\"> 383</span> <span class=\"keywordflow\">return</span> globalValuedLocalBasis_;</div>\n-<div class=\"line\"><a id=\"l00384\" name=\"l00384\"></a><span class=\"lineno\"> 384</span> }</div>\n-<div class=\"line\"><a id=\"l00385\" name=\"l00385\"></a><span class=\"lineno\"> 385</span> </div>\n-<div class=\"line\"><a id=\"l00388\" name=\"l00388\"></a><span class=\"lineno\"> 388</span> <span class=\"keyword\">const</span> <span class=\"keyword\">typename</span> Traits::LocalCoefficientsType& localCoefficients()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00389\" name=\"l00389\"></a><span class=\"lineno\"> 389</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00390\" name=\"l00390\"></a><span class=\"lineno\"> 390</span> <span class=\"keywordflow\">return</span> localValuedLFE_->localCoefficients();</div>\n-<div class=\"line\"><a id=\"l00391\" name=\"l00391\"></a><span class=\"lineno\"> 391</span> }</div>\n-<div class=\"line\"><a id=\"l00392\" name=\"l00392\"></a><span class=\"lineno\"> 392</span> </div>\n-<div class=\"line\"><a id=\"l00395\" name=\"l00395\"></a><span class=\"lineno\"> 395</span> <span class=\"keyword\">const</span> <span class=\"keyword\">typename</span> Traits::LocalInterpolationType& localInterpolation()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00396\" name=\"l00396\"></a><span class=\"lineno\"> 396</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00397\" name=\"l00397\"></a><span class=\"lineno\"> 397</span> <span class=\"keywordflow\">return</span> globalValuedLocalInterpolation_;</div>\n-<div class=\"line\"><a id=\"l00398\" name=\"l00398\"></a><span class=\"lineno\"> 398</span> }</div>\n-<div class=\"line\"><a id=\"l00399\" name=\"l00399\"></a><span class=\"lineno\"> 399</span> </div>\n-<div class=\"line\"><a id=\"l00401\" name=\"l00401\"></a><span class=\"lineno\"> 401</span> std::size_t size()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00402\" name=\"l00402\"></a><span class=\"lineno\"> 402</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00403\" name=\"l00403\"></a><span class=\"lineno\"> 403</span> <span class=\"keywordflow\">return</span> localValuedLFE_->size();</div>\n-<div class=\"line\"><a id=\"l00404\" name=\"l00404\"></a><span class=\"lineno\"> 404</span> }</div>\n-<div class=\"line\"><a id=\"l00405\" name=\"l00405\"></a><span class=\"lineno\"> 405</span> </div>\n-<div class=\"line\"><a id=\"l00408\" name=\"l00408\"></a><span class=\"lineno\"> 408</span> GeometryType type()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00409\" name=\"l00409\"></a><span class=\"lineno\"> 409</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00410\" name=\"l00410\"></a><span class=\"lineno\"> 410</span> <span class=\"keywordflow\">return</span> localValuedLFE_->type();</div>\n-<div class=\"line\"><a id=\"l00411\" name=\"l00411\"></a><span class=\"lineno\"> 411</span> }</div>\n-<div class=\"line\"><a id=\"l00412\" name=\"l00412\"></a><span class=\"lineno\"> 412</span> </div>\n-<div class=\"line\"><a id=\"l00413\" name=\"l00413\"></a><span class=\"lineno\"> 413</span> <span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00414\" name=\"l00414\"></a><span class=\"lineno\"> 414</span> </div>\n-<div class=\"line\"><a id=\"l00415\" name=\"l00415\"></a><span class=\"lineno\"> 415</span> <span class=\"keyword\">typename</span> Traits::LocalBasisType globalValuedLocalBasis_;</div>\n-<div class=\"line\"><a id=\"l00416\" name=\"l00416\"></a><span class=\"lineno\"> 416</span> <span class=\"keyword\">typename</span> Traits::LocalInterpolationType globalValuedLocalInterpolation_;</div>\n-<div class=\"line\"><a id=\"l00417\" name=\"l00417\"></a><span class=\"lineno\"> 417</span> <span class=\"keyword\">const</span> LocalValuedLFE* localValuedLFE_;</div>\n-<div class=\"line\"><a id=\"l00418\" name=\"l00418\"></a><span class=\"lineno\"> 418</span> };</div>\n-<div class=\"line\"><a id=\"l00419\" name=\"l00419\"></a><span class=\"lineno\"> 419</span> </div>\n-<div class=\"line\"><a id=\"l00420\" name=\"l00420\"></a><span class=\"lineno\"> 420</span>} <span class=\"comment\">// namespace Dune::Functions::Impl</span></div>\n-<div class=\"line\"><a id=\"l00421\" name=\"l00421\"></a><span class=\"lineno\"> 421</span> </div>\n-<div class=\"line\"><a id=\"l00422\" name=\"l00422\"></a><span class=\"lineno\"> 422</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH</span></div>\n-<div class=\"ttc\" id=\"aa00219_html_a13b0c6bf02d744e7b2078d1a535b5211\"><div class=\"ttname\"><a href=\"a00219.html#a13b0c6bf02d744e7b2078d1a535b5211\">Dune::Functions::interpolate</a></div><div class=\"ttdeci\">void interpolate(const B &basis, C &&coeff, const F &f, const BV &bv, const NTRE &nodeToRangeEntry)</div><div class=\"ttdoc\">Interpolate given function in discrete function space.</div><div class=\"ttdef\"><b>Definition:</b> interpolate.hh:202</div></div>\n+<div class=\"line\"><a id=\"l00309\" name=\"l00309\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01687.html#a19f7b4d797ee8eaa9b34b80e1a1e8049\"> 309</a></span> <a class=\"code hl_typedef\" href=\"a01687.html#a42789dd1900a54215f4d0bfef9c76e12\">FiniteElement</a> <a class=\"code hl_variable\" href=\"a01687.html#a19f7b4d797ee8eaa9b34b80e1a1e8049\">finiteElement_</a>;</div>\n+<div class=\"line\"><a id=\"l00310\" name=\"l00310\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01687.html#ad41e422719270dbd0a3cbc1c6024b441\"> 310</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01687.html#a71f7ac9c203201db021a4e1d7d9c15da\">Element</a>* <a class=\"code hl_variable\" href=\"a01687.html#ad41e422719270dbd0a3cbc1c6024b441\">element_</a>;</div>\n+<div class=\"line\"><a id=\"l00311\" name=\"l00311\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01687.html#a124185f876b964841212a0eda240dbd4\"> 311</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01687.html#acb630a2b334ad1a9be042a9ceda0df49\">FiniteElementMap</a>* <a class=\"code hl_variable\" href=\"a01687.html#a124185f876b964841212a0eda240dbd4\">finiteElementMap_</a>;</div>\n+<div class=\"line\"><a id=\"l00312\" name=\"l00312\"></a><span class=\"lineno\"> 312</span>};</div>\n+<div class=\"line\"><a id=\"l00313\" name=\"l00313\"></a><span class=\"lineno\"> 313</span> </div>\n+<div class=\"line\"><a id=\"l00314\" name=\"l00314\"></a><span class=\"lineno\"> 314</span> </div>\n+<div class=\"line\"><a id=\"l00315\" name=\"l00315\"></a><span class=\"lineno\"> 315</span> </div>\n+<div class=\"line\"><a id=\"l00316\" name=\"l00316\"></a><span class=\"lineno\"> 316</span><span class=\"keyword\">namespace </span>BasisFactory {</div>\n+<div class=\"line\"><a id=\"l00317\" name=\"l00317\"></a><span class=\"lineno\"> 317</span> </div>\n+<div class=\"line\"><a id=\"l00327\" name=\"l00327\"></a><span class=\"lineno\"> 327</span><span class=\"keyword\">template</span><std::<span class=\"keywordtype\">size_t</span> kind, std::<span class=\"keywordtype\">size_t</span> order, <span class=\"keyword\">typename</span> Range=<span class=\"keywordtype\">double</span>></div>\n+<div class=\"line\"><a id=\"l00328\" name=\"l00328\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#gafe0fe439067c288f197101b8686223e8\"> 328</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00213.html#gafe0fe439067c288f197101b8686223e8\">nedelec</a>()</div>\n+<div class=\"line\"><a id=\"l00329\" name=\"l00329\"></a><span class=\"lineno\"> 329</span>{</div>\n+<div class=\"line\"><a id=\"l00330\" name=\"l00330\"></a><span class=\"lineno\"> 330</span> <span class=\"keywordflow\">return</span> [](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridView) {</div>\n+<div class=\"line\"><a id=\"l00331\" name=\"l00331\"></a><span class=\"lineno\"> 331</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01691.html\">NedelecPreBasis</a><std::decay_t<<span class=\"keyword\">decltype</span>(gridView)>, Range, kind, order>(gridView);</div>\n+<div class=\"line\"><a id=\"l00332\" name=\"l00332\"></a><span class=\"lineno\"> 332</span> };</div>\n+<div class=\"line\"><a id=\"l00333\" name=\"l00333\"></a><span class=\"lineno\"> 333</span>}</div>\n+<div class=\"line\"><a id=\"l00334\" name=\"l00334\"></a><span class=\"lineno\"> 334</span> </div>\n+<div class=\"line\"><a id=\"l00335\" name=\"l00335\"></a><span class=\"lineno\"> 335</span>} <span class=\"comment\">// end namespace BasisFactory</span></div>\n+<div class=\"line\"><a id=\"l00336\" name=\"l00336\"></a><span class=\"lineno\"> 336</span> </div>\n+<div class=\"line\"><a id=\"l00337\" name=\"l00337\"></a><span class=\"lineno\"> 337</span> </div>\n+<div class=\"line\"><a id=\"l00338\" name=\"l00338\"></a><span class=\"lineno\"> 338</span> </div>\n+<div class=\"line\"><a id=\"l00339\" name=\"l00339\"></a><span class=\"lineno\"> 339</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00340\" name=\"l00340\"></a><span class=\"lineno\"> 340</span><span class=\"comment\">// This is the actual global basis implementation based on the reusable parts.</span></div>\n+<div class=\"line\"><a id=\"l00341\" name=\"l00341\"></a><span class=\"lineno\"> 341</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00342\" name=\"l00342\"></a><span class=\"lineno\"> 342</span> </div>\n+<div class=\"line\"><a id=\"l00350\" name=\"l00350\"></a><span class=\"lineno\"> 350</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, std::<span class=\"keywordtype\">size_t</span> kind, std::<span class=\"keywordtype\">size_t</span> order, <span class=\"keyword\">typename</span> Range=<span class=\"keywordtype\">double</span>></div>\n+<div class=\"line\"><a id=\"l00351\" name=\"l00351\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a744da0623cd512fc478d47bd2f7908eb\"> 351</a></span><span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01555.html\">NedelecBasis</a> = <a class=\"code hl_class\" href=\"a01555.html\">DefaultGlobalBasis<NedelecPreBasis<GV, Range, kind, order ></a> >;</div>\n+<div class=\"line\"><a id=\"l00352\" name=\"l00352\"></a><span class=\"lineno\"> 352</span> </div>\n+<div class=\"line\"><a id=\"l00353\" name=\"l00353\"></a><span class=\"lineno\"> 353</span>} <span class=\"comment\">// end namespace Dune::Functions</span></div>\n+<div class=\"line\"><a id=\"l00354\" name=\"l00354\"></a><span class=\"lineno\"> 354</span> </div>\n+<div class=\"line\"><a id=\"l00355\" name=\"l00355\"></a><span class=\"lineno\"> 355</span> </div>\n+<div class=\"line\"><a id=\"l00356\" name=\"l00356\"></a><span class=\"lineno\"> 356</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH</span></div>\n+<div class=\"ttc\" id=\"aa00137_html\"><div class=\"ttname\"><a href=\"a00137.html\">globalvaluedlocalfiniteelement.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00152_html\"><div class=\"ttname\"><a href=\"a00152.html\">defaultglobalbasis.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00179_html\"><div class=\"ttname\"><a href=\"a00179.html\">nodes.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00213_html_ga0d8eb549af76bc2563ab189e63668ee5\"><div class=\"ttname\"><a href=\"a00213.html#ga0d8eb549af76bc2563ab189e63668ee5\">Dune::Functions::BasisFactory::power</a></div><div class=\"ttdeci\">auto power(ChildPreBasisFactory &&childPreBasisFactory, const IndexMergingStrategy &)</div><div class=\"ttdoc\">Create a pre-basis factory that can build a PowerPreBasis.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:369</div></div>\n+<div class=\"ttc\" id=\"aa00213_html_gafe0fe439067c288f197101b8686223e8\"><div class=\"ttname\"><a href=\"a00213.html#gafe0fe439067c288f197101b8686223e8\">Dune::Functions::BasisFactory::nedelec</a></div><div class=\"ttdeci\">auto nedelec()</div><div class=\"ttdoc\">Create a pre-basis factory that can create a N\u00e9d\u00e9lec pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:328</div></div>\n+<div class=\"ttc\" id=\"aa00219_html\"><div class=\"ttname\"><a href=\"a00219.html\">Dune::Functions</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:11</div></div>\n+<div class=\"ttc\" id=\"aa01555_html\"><div class=\"ttname\"><a href=\"a01555.html\">Dune::Functions::DefaultGlobalBasis</a></div><div class=\"ttdoc\">Global basis for given pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:46</div></div>\n+<div class=\"ttc\" id=\"aa01687_html\"><div class=\"ttname\"><a href=\"a01687.html\">Dune::Functions::NedelecNode</a></div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:266</div></div>\n+<div class=\"ttc\" id=\"aa01687_html_a124185f876b964841212a0eda240dbd4\"><div class=\"ttname\"><a href=\"a01687.html#a124185f876b964841212a0eda240dbd4\">Dune::Functions::NedelecNode::finiteElementMap_</a></div><div class=\"ttdeci\">const FiniteElementMap * finiteElementMap_</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:311</div></div>\n+<div class=\"ttc\" id=\"aa01687_html_a19f7b4d797ee8eaa9b34b80e1a1e8049\"><div class=\"ttname\"><a href=\"a01687.html#a19f7b4d797ee8eaa9b34b80e1a1e8049\">Dune::Functions::NedelecNode::finiteElement_</a></div><div class=\"ttdeci\">FiniteElement finiteElement_</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:309</div></div>\n+<div class=\"ttc\" id=\"aa01687_html_a42789dd1900a54215f4d0bfef9c76e12\"><div class=\"ttname\"><a href=\"a01687.html#a42789dd1900a54215f4d0bfef9c76e12\">Dune::Functions::NedelecNode::FiniteElement</a></div><div class=\"ttdeci\">Impl::GlobalValuedLocalFiniteElement< Impl::CovariantPiolaTransformator, typename FiniteElementMap::FiniteElement, Element > FiniteElement</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:277</div></div>\n+<div class=\"ttc\" id=\"aa01687_html_a49c53f555c5c73e9934b175e4e851992\"><div class=\"ttname\"><a href=\"a01687.html#a49c53f555c5c73e9934b175e4e851992\">Dune::Functions::NedelecNode::bind</a></div><div class=\"ttdeci\">void bind(const Element &e)</div><div class=\"ttdoc\">Bind to element.</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:300</div></div>\n+<div class=\"ttc\" id=\"aa01687_html_a61628ce23ca5cac05850c3d47081955a\"><div class=\"ttname\"><a href=\"a01687.html#a61628ce23ca5cac05850c3d47081955a\">Dune::Functions::NedelecNode::element</a></div><div class=\"ttdeci\">const Element & element() const</div><div class=\"ttdoc\">Return current element, throw if unbound.</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:285</div></div>\n+<div class=\"ttc\" id=\"aa01687_html_a71f7ac9c203201db021a4e1d7d9c15da\"><div class=\"ttname\"><a href=\"a01687.html#a71f7ac9c203201db021a4e1d7d9c15da\">Dune::Functions::NedelecNode::Element</a></div><div class=\"ttdeci\">typename GV::template Codim< 0 >::Entity Element</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:272</div></div>\n+<div class=\"ttc\" id=\"aa01687_html_a7af9ddb25575c6d15b5053b6645c4b4c\"><div class=\"ttname\"><a href=\"a01687.html#a7af9ddb25575c6d15b5053b6645c4b4c\">Dune::Functions::NedelecNode::finiteElement</a></div><div class=\"ttdeci\">const FiniteElement & finiteElement() const</div><div class=\"ttdoc\">Return the LocalFiniteElement for the element we are bound to.</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:294</div></div>\n+<div class=\"ttc\" id=\"aa01687_html_ac51f523763d2bb13d60847cb63b1da49\"><div class=\"ttname\"><a href=\"a01687.html#ac51f523763d2bb13d60847cb63b1da49\">Dune::Functions::NedelecNode::NedelecNode</a></div><div class=\"ttdeci\">NedelecNode(const FiniteElementMap *finiteElementMap)</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:279</div></div>\n+<div class=\"ttc\" id=\"aa01687_html_acb630a2b334ad1a9be042a9ceda0df49\"><div class=\"ttname\"><a href=\"a01687.html#acb630a2b334ad1a9be042a9ceda0df49\">Dune::Functions::NedelecNode::FiniteElementMap</a></div><div class=\"ttdeci\">typename Impl::Nedelec1stKindLocalFiniteElementMap< GV, dim, Range, order > FiniteElementMap</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:274</div></div>\n+<div class=\"ttc\" id=\"aa01687_html_ad41e422719270dbd0a3cbc1c6024b441\"><div class=\"ttname\"><a href=\"a01687.html#ad41e422719270dbd0a3cbc1c6024b441\">Dune::Functions::NedelecNode::element_</a></div><div class=\"ttdeci\">const Element * element_</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:310</div></div>\n+<div class=\"ttc\" id=\"aa01687_html_af23a2827c1532d33944367e067f2d249\"><div class=\"ttname\"><a href=\"a01687.html#af23a2827c1532d33944367e067f2d249\">Dune::Functions::NedelecNode::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:271</div></div>\n+<div class=\"ttc\" id=\"aa01691_html\"><div class=\"ttname\"><a href=\"a01691.html\">Dune::Functions::NedelecPreBasis</a></div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:136</div></div>\n+<div class=\"ttc\" id=\"aa01691_html_a0ec65692ba465323c3aae1deb95bd98b\"><div class=\"ttname\"><a href=\"a01691.html#a0ec65692ba465323c3aae1deb95bd98b\">Dune::Functions::NedelecPreBasis::indices</a></div><div class=\"ttdeci\">It indices(const Node &node, It it) const</div><div class=\"ttdoc\">Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:238</div></div>\n+<div class=\"ttc\" id=\"aa01691_html_a185c22a27f1499d80a1c3ff4d4640ff8\"><div class=\"ttname\"><a href=\"a01691.html#a185c22a27f1499d80a1c3ff4d4640ff8\">Dune::Functions::NedelecPreBasis::size</a></div><div class=\"ttdeci\">size_type size(const SizePrefix &prefix) const</div><div class=\"ttdoc\">Return number possible values for next position in multi index.</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:211</div></div>\n+<div class=\"ttc\" id=\"aa01691_html_a1ed8686000377d0557455ef973bc5e12\"><div class=\"ttname\"><a href=\"a01691.html#a1ed8686000377d0557455ef973bc5e12\">Dune::Functions::NedelecPreBasis::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:146</div></div>\n+<div class=\"ttc\" id=\"aa01691_html_a2591944cb29062fb7efcbcfb0a4363a5\"><div class=\"ttname\"><a href=\"a01691.html#a2591944cb29062fb7efcbcfb0a4363a5\">Dune::Functions::NedelecPreBasis::NedelecPreBasis</a></div><div class=\"ttdeci\">NedelecPreBasis(const GridView &gv)</div><div class=\"ttdoc\">Constructor for a given grid view object.</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:155</div></div>\n+<div class=\"ttc\" id=\"aa01691_html_a4c8d0ac657c0dd2ecc6ecc826cb996a4\"><div class=\"ttname\"><a href=\"a01691.html#a4c8d0ac657c0dd2ecc6ecc826cb996a4\">Dune::Functions::NedelecPreBasis::GridView</a></div><div class=\"ttdeci\">GV GridView</div><div class=\"ttdoc\">The grid view that the FE space is defined on.</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:145</div></div>\n+<div class=\"ttc\" id=\"aa01691_html_a4d2833397c8b6ee3c761ce62d40eaad5\"><div class=\"ttname\"><a href=\"a01691.html#a4d2833397c8b6ee3c761ce62d40eaad5\">Dune::Functions::NedelecPreBasis::dimension</a></div><div class=\"ttdeci\">size_type dimension() const</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:217</div></div>\n+<div class=\"ttc\" id=\"aa01691_html_a4de124caaadb756727f51db481bb0805\"><div class=\"ttname\"><a href=\"a01691.html#a4de124caaadb756727f51db481bb0805\">Dune::Functions::NedelecPreBasis::maxMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type maxMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:150</div></div>\n+<div class=\"ttc\" id=\"aa01691_html_a60ebf4bfd1fa2b95eff282f3e813f528\"><div class=\"ttname\"><a href=\"a01691.html#a60ebf4bfd1fa2b95eff282f3e813f528\">Dune::Functions::NedelecPreBasis::multiIndexBufferSize</a></div><div class=\"ttdeci\">static constexpr size_type multiIndexBufferSize</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:152</div></div>\n+<div class=\"ttc\" id=\"aa01691_html_a642b89d420e83f45643e63e567767bec\"><div class=\"ttname\"><a href=\"a01691.html#a642b89d420e83f45643e63e567767bec\">Dune::Functions::NedelecPreBasis::gridView_</a></div><div class=\"ttdeci\">GridView gridView_</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:256</div></div>\n+<div class=\"ttc\" id=\"aa01691_html_a8069227fa8227b40007a976855c169f0\"><div class=\"ttname\"><a href=\"a01691.html#a8069227fa8227b40007a976855c169f0\">Dune::Functions::NedelecPreBasis::finiteElementMap_</a></div><div class=\"ttdeci\">FiniteElementMap finiteElementMap_</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:257</div></div>\n+<div class=\"ttc\" id=\"aa01691_html_a9b75a17cf69d14b337838115fa346f3d\"><div class=\"ttname\"><a href=\"a01691.html#a9b75a17cf69d14b337838115fa346f3d\">Dune::Functions::NedelecPreBasis::minMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type minMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:151</div></div>\n+<div class=\"ttc\" id=\"aa01691_html_aaa3ff181601337d43c072813cc060b90\"><div class=\"ttname\"><a href=\"a01691.html#aaa3ff181601337d43c072813cc060b90\">Dune::Functions::NedelecPreBasis::initializeIndices</a></div><div class=\"ttdeci\">void initializeIndices()</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:179</div></div>\n+<div class=\"ttc\" id=\"aa01691_html_abfad7bccc671799c5ed406a16510e8a1\"><div class=\"ttname\"><a href=\"a01691.html#abfad7bccc671799c5ed406a16510e8a1\">Dune::Functions::NedelecPreBasis::update</a></div><div class=\"ttdeci\">void update(const GridView &gv)</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:190</div></div>\n+<div class=\"ttc\" id=\"aa01691_html_ac7a7c76bab36e858497aa265fab90d76\"><div class=\"ttname\"><a href=\"a01691.html#ac7a7c76bab36e858497aa265fab90d76\">Dune::Functions::NedelecPreBasis::maxNodeSize</a></div><div class=\"ttdeci\">size_type maxNodeSize() const</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:222</div></div>\n+<div class=\"ttc\" id=\"aa01691_html_aca814fbd069b0e979707d925c1338a44\"><div class=\"ttname\"><a href=\"a01691.html#aca814fbd069b0e979707d925c1338a44\">Dune::Functions::NedelecPreBasis::gridView</a></div><div class=\"ttdeci\">const GridView & gridView() const</div><div class=\"ttdoc\">Obtain the grid view that the basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:184</div></div>\n+<div class=\"ttc\" id=\"aa01691_html_ad5124fec497b3042e767d265807cc63a\"><div class=\"ttname\"><a href=\"a01691.html#ad5124fec497b3042e767d265807cc63a\">Dune::Functions::NedelecPreBasis::makeNode</a></div><div class=\"ttdeci\">Node makeNode() const</div><div class=\"ttdoc\">Create tree node.</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:199</div></div>\n+<div class=\"ttc\" id=\"aa01691_html_ada93cc4c9448c413a3aa9bebce67ab29\"><div class=\"ttname\"><a href=\"a01691.html#ada93cc4c9448c413a3aa9bebce67ab29\">Dune::Functions::NedelecPreBasis::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:204</div></div>\n+<div class=\"ttc\" id=\"aa01691_html_af701774f82071f15fc8990d00c315e2b\"><div class=\"ttname\"><a href=\"a01691.html#af701774f82071f15fc8990d00c315e2b\">Dune::Functions::NedelecPreBasis::mapper_</a></div><div class=\"ttdeci\">Mapper mapper_</div><div class=\"ttdef\"><b>Definition:</b> nedelecbasis.hh:258</div></div>\n+<div class=\"ttc\" id=\"aa01707_html_a859d50513645ef2ea0188d0779c1df30\"><div class=\"ttname\"><a href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">Dune::Functions::BasisNodeMixin::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:142</div></div>\n+<div class=\"ttc\" id=\"aa01707_html_ae93815e5c4012f7be5d11786f40d267a\"><div class=\"ttname\"><a href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\">Dune::Functions::BasisNodeMixin::setSize</a></div><div class=\"ttdeci\">void setSize(const size_type size)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:164</div></div>\n+<div class=\"ttc\" id=\"aa01711_html\"><div class=\"ttname\"><a href=\"a01711.html\">Dune::Functions::LeafBasisNode</a></div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:186</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-us-ascii\n+utf-8\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,339 +5,502 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-globalvaluedlocalfiniteelement.hh\n+nedelecbasis.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH\n- 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH\n+ 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH\n+ 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH\n 5\n 6#include <array>\n- 7#include <numeric>\n+ 7#include <dune/common/exceptions.hh>\n 8\n- 9#include <dune/common/fmatrix.hh>\n- 10#include <dune/common/fvector.hh>\n- 11#include <dune/common/math.hh>\n- 12#include <dune/common/rangeutilities.hh>\n- 13\n- 14#include <dune/geometry/referenceelements.hh>\n- 15\n- 16#include <dune/localfunctions/common/localbasis.hh>\n- 17#include <dune/localfunctions/common/localfiniteelementtraits.hh>\n- 18#include <dune/localfunctions/common/localinterpolation.hh>\n- 19\n- 20namespace Dune::Functions::Impl\n- 21{\n- 22\n- 36 struct ContravariantPiolaTransformator\n- 37 {\n- 42 template<typename Values, typename LocalCoordinate, typename Geometry>\n- 43 static auto apply(Values& values,\n- 44 const LocalCoordinate& xi,\n- 45 const Geometry& geometry)\n- 46 {\n- 47 auto jacobianTransposed = geometry.jacobianTransposed(xi);\n- 48 auto integrationElement = geometry.integrationElement(xi);\n- 49\n- 50 for (auto& value : values)\n- 51 {\n- 52 auto tmp = value;\n- 53 jacobianTransposed.mtv(tmp, value);\n- 54 value /= integrationElement;\n- 55 }\n- 56 }\n- 57\n- 67 template<typename Gradients, typename LocalCoordinate, typename Geometry>\n- 68 static auto applyJacobian(Gradients& gradients,\n- 69 const LocalCoordinate& xi,\n- 70 const Geometry& geometry)\n- 71 {\n- 72 auto jacobianTransposed = geometry.jacobianTransposed(xi);\n- 73 auto integrationElement = geometry.integrationElement(xi);\n- 74 for (auto& gradient : gradients)\n- 75 {\n- 76 auto tmp = gradient;\n- 77 gradient = 0;\n- 78 for (size_t k=0; k<gradient.M(); k++)\n- 79 for (size_t l=0; l<tmp.N(); l++)\n- 80 // Use sparseRange because jacobianTransposed may be a sparse\n-DiagonalMatrix\n- 81 for(auto&& [jacobianTransposed_l_j, j] : sparseRange(jacobianTransposed\n-[l]))\n- 82 gradient[j][k] += jacobianTransposed_l_j * tmp[l][k];\n- 83 gradient /= integrationElement;\n- 84 }\n- 85 }\n- 86\n- 94 template<class Function, class LocalCoordinate, class Element>\n- 95 class LocalValuedFunction\n- 96 {\n- 97 const Function& f_;\n- 98 const Element& element_;\n- 99\n- 100 public:\n- 101\n- 102 LocalValuedFunction(const Function& f, const Element& element)\n- 103 : f_(f), element_(element)\n- 104 {}\n- 105\n- 106 auto operator()(const LocalCoordinate& xi) const\n- 107 {\n- 108 auto&& f = Dune::Impl::makeFunctionWithCallOperator<LocalCoordinate>(f_);\n- 109 auto globalValue = f(xi);\n- 110\n- 111 // Apply the inverse Piola transform\n- 112 auto jacobianInverseTransposed = element_.geometry\n-().jacobianInverseTransposed(xi);\n- 113 auto integrationElement = element_.geometry().integrationElement(xi);\n- 114\n- 115 auto localValue = globalValue;\n- 116 jacobianInverseTransposed.mtv(globalValue, localValue);\n- 117 localValue *= integrationElement;\n+ 9#include <dune/grid/common/capabilities.hh>\n+ 10#include <dune/grid/common/mcmgmapper.hh>\n+ 11\n+ 12#include <dune/localfunctions/common/localfiniteelementvariant.hh>\n+ 13#include <dune/localfunctions/nedelec.hh>\n+ 14\n+ 15#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n+ 16#include <dune/functions/functionspacebases/\n+globalvaluedlocalfiniteelement.hh>\n+ 17#include <dune/functions/functionspacebases/nodes.hh>\n+ 18\n+ 19namespace Dune::Functions\n+ 20{\n+ 21\n+ 22namespace Impl\n+ 23{\n+ 24 template<typename GV, int dim, typename R, std::size_t order>\n+ 25 class Nedelec1stKindLocalFiniteElementMap\n+ 26 {\n+ 27 using D = typename GV::ctype;\n+ 28 constexpr static bool hasFixedElementType = Capabilities::\n+hasSingleGeometryType<typename GV::Grid>::v;\n+ 29\n+ 30 using CubeFiniteElement =\n+Nedelec1stKindCubeLocalFiniteElement<D,R,dim,order>;\n+ 31 using SimplexFiniteElement =\n+Nedelec1stKindSimplexLocalFiniteElement<D,R,dim,order>;\n+ 32\n+ 33 public:\n+ 34\n+ 35 using T = LocalBasisTraits<D, dim, FieldVector<D,dim>, R, dim,\n+FieldVector<R,dim>, FieldMatrix<D,dim,dim> >;\n+ 36\n+ 37 constexpr static unsigned int topologyId = Capabilities::\n+hasSingleGeometryType<typename GV::Grid>::topologyId; // meaningless if\n+hasFixedElementType is false\n+ 38 constexpr static GeometryType type = GeometryType(topologyId, GV::\n+dimension);\n+ 39\n+ 40 using FiniteElement = std::conditional_t<hasFixedElementType,\n+ 41 std::conditional_t<type.isCube(),CubeFiniteElement,SimplexFiniteElement>,\n+ 42 LocalFiniteElementVariant<CubeFiniteElement, SimplexFiniteElement> >;\n+ 43\n+ 44 static std::size_t numVariants(GeometryType type)\n+ 45 {\n+ 46 if (order!=1) // I am not sure whether the formula below is correct for all\n+orders.\n+ 47 DUNE_THROW(NotImplemented, \"Only Nedelec elements of order 1 are\n+implemented!\");\n+ 48\n+ 49 auto numEdges = referenceElement<D,dim>(type).size(dim-1);\n+ 50 return power(2,numEdges);\n+ 51 }\n+ 52\n+ 53 Nedelec1stKindLocalFiniteElementMap(const GV& gv)\n+ 54 : elementMapper_(gv, mcmgElementLayout()),\n+ 55 orientation_(gv.size(0))\n+ 56 {\n+ 57 // create all variants\n+ 58 if constexpr (hasFixedElementType)\n+ 59 {\n+ 60 variants_.resize(numVariants(type));\n+ 61 for (size_t i = 0; i < numVariants(type); i++)\n+ 62 variants_[i] = FiniteElement(i);\n+ 63 }\n+ 64 else\n+ 65 {\n+ 66 // for mixed grids add offset for cubes\n+ 67 variants_.resize(numVariants(GeometryTypes::simplex(dim)) + numVariants\n+(GeometryTypes::cube(dim)));\n+ 68 for (size_t i = 0; i < numVariants(GeometryTypes::simplex(dim)); i++)\n+ 69 variants_[i] = SimplexFiniteElement(i);\n+ 70 for (size_t i = 0; i < numVariants(GeometryTypes::cube(dim)); i++)\n+ 71 variants_[i + numVariants(GeometryTypes::simplex(dim))] = CubeFiniteElement\n+(i);\n+ 72 }\n+ 73\n+ 74\n+ 75 // compute orientation for all elements\n+ 76 const auto& indexSet = gv.indexSet();\n+ 77\n+ 78 for(const auto& element : elements(gv))\n+ 79 {\n+ 80 const auto& refElement = referenceElement(element);\n+ 81 auto elementIndex = elementMapper_.index(element);\n+ 82 orientation_[elementIndex] = 0;\n+ 83\n+ 84 for (std::size_t i=0; i<element.subEntities(dim-1); i++)\n+ 85 {\n+ 86 // Local vertex indices within the element\n+ 87 auto localV0 = refElement.subEntity(i,dim-1, 0,dim);\n+ 88 auto localV1 = refElement.subEntity(i,dim-1, 1,dim);\n+ 89\n+ 90 // Global vertex indices within the grid\n+ 91 auto globalV0 = indexSet.subIndex(element,localV0,dim);\n+ 92 auto globalV1 = indexSet.subIndex(element,localV1,dim);\n+ 93\n+ 94 if ( (localV0<localV1 && globalV0>globalV1) || (localV0>localV1 &&\n+globalV0<globalV1) )\n+ 95 orientation_[elementIndex] |= (1 << i);\n+ 96 }\n+ 97 // for mixed grids add offset for cubes\n+ 98 if constexpr (!hasFixedElementType)\n+ 99 if (element.type().isCube())\n+ 100 orientation_[elementIndex] += numVariants(GeometryTypes::simplex(dim));\n+ 101 }\n+ 102 }\n+ 103\n+ 104 template<class Element>\n+ 105 const auto& find(const Element& element) const\n+ 106 {\n+ 107 return variants_[orientation_[elementMapper_.index(element)]];\n+ 108 }\n+ 109\n+ 110 private:\n+ 111 std::vector<FiniteElement> variants_;\n+ 112 const Dune::MultipleCodimMultipleGeomTypeMapper<GV> elementMapper_;\n+ 113 std::vector<unsigned short> orientation_;\n+ 114 };\n+ 115\n+ 116\n+ 117} // namespace Impl\n 118\n- 119 return localValue;\n- 120 }\n- 121 };\n- 122 };\n- 123\n- 137 struct CovariantPiolaTransformator\n- 138 {\n- 143 template<typename Values, typename LocalCoordinate, typename Geometry>\n- 144 static auto apply(Values& values,\n- 145 const LocalCoordinate& xi,\n- 146 const Geometry& geometry)\n- 147 {\n- 148 auto jacobianInverseTransposed = geometry.jacobianInverseTransposed(xi);\n+ 119\n+ 120/\n+/ *****************************************************************************\n+ 121// This is the reusable part of the basis. It contains\n+ 122//\n+ 123// NedelecPreBasis\n+ 124// NedelecNode\n+ 125//\n+ 126// The pre-basis allows to create the others and is the owner of possible\n+shared\n+ 127// state. These components do _not_ depend on the global basis and local\n+view\n+ 128// and can be used without a global basis.\n+ 129/\n+/ *****************************************************************************\n+ 130\n+ 131template<typename GV, typename Range, std::size_t kind, int order>\n+ 132class NedelecNode;\n+ 133\n+ 134template<typename GV, typename Range, std::size_t kind, int order>\n+135class NedelecPreBasis\n+ 136{\n+ 137 static const int dim = GV::dimension;\n+ 138 static_assert(kind==1, \"Only the Nedelec basis of the first kind is\n+currently implemented!\");\n+ 139 using FiniteElementMap = typename Impl::\n+Nedelec1stKindLocalFiniteElementMap<GV, dim, Range, order>;\n+ 140\n+ 141 using Mapper = Dune::MultipleCodimMultipleGeomTypeMapper<GV>;\n+ 142public:\n+ 143\n+145 using GridView = GV;\n+146 using size_type = std::size_t;\n+ 147\n+148 using Node = NedelecNode<GV,_Range,_kind,_order>;\n 149\n- 150 for (auto& value : values)\n- 151 {\n- 152 auto tmp = value;\n- 153 jacobianInverseTransposed.mv(tmp, value);\n- 154 }\n- 155 }\n- 156\n- 166 template<typename Gradients, typename LocalCoordinate, typename Geometry>\n- 167 static auto applyJacobian(Gradients& gradients,\n- 168 const LocalCoordinate& xi,\n- 169 const Geometry& geometry)\n- 170 {\n- 171 auto jacobianInverseTransposed = geometry.jacobianInverseTransposed(xi);\n- 172\n- 173 for (auto& gradient : gradients)\n- 174 {\n- 175 auto tmp = gradient;\n- 176 gradient = 0;\n- 177 for (size_t j=0; j<gradient.N(); j++)\n- 178 for (size_t k=0; k<gradient.M(); k++)\n- 179 // Use sparseRange because jacobianTransposed may be a sparse\n-DiagonalMatrix\n- 180 for(auto&& [jacobianInverseTransposed_j_l, l] : sparseRange\n-(jacobianInverseTransposed[j]))\n- 181 gradient[j][k] += jacobianInverseTransposed_j_l * tmp[l][k];\n- 182 }\n- 183 }\n- 184\n- 192 template<class Function, class LocalCoordinate, class Element>\n- 193 class LocalValuedFunction\n- 194 {\n- 195 const Function& f_;\n- 196 const Element& element_;\n- 197\n- 198 public:\n- 199\n- 200 LocalValuedFunction(const Function& f, const Element& element)\n- 201 : f_(f), element_(element)\n- 202 {}\n+150 static constexpr size_type maxMultiIndexSize = 1;\n+151 static constexpr size_type minMultiIndexSize = 1;\n+152 static constexpr size_type multiIndexBufferSize = 1;\n+ 153\n+155 NedelecPreBasis(const GridView& gv) :\n+ 156 gridView_(gv),\n+ 157 finiteElementMap_(gv),\n+ 158 mapper_(gridView_, mcmgLayout(Dim<1>{}))\n+ 159 {\n+ 160 if (kind!=1)\n+ 161 DUNE_THROW(NotImplemented, \"Only Nedelec elements of the first kind are\n+implemented!\");\n+ 162\n+ 163 // There is no inherent reason why the basis shouldn't work for grids with\n+more than two\n+ 164 // element types. Somebody simply has to sit down and implement the\n+missing bits.\n+ 165 if (gv.indexSet().types(0).size() > 2)\n+ 166 DUNE_THROW(NotImplemented, \"N\u00e9d\u00e9lec basis is only implemented for grids\n+with simplex and cube elements\");\n+ 167\n+ 168 for(auto type : gv.indexSet().types(0))\n+ 169 if (!type.isSimplex() && !type.isCube())\n+ 170 DUNE_THROW(NotImplemented, \"N\u00e9d\u00e9lec basis is only implemented for grids\n+with simplex or cube elements.\");\n+ 171\n+ 172 if (order>1)\n+ 173 DUNE_THROW(NotImplemented, \"Only first-order elements are implemented\");\n+ 174\n+ 175 if (dim!=2 && dim!=3)\n+ 176 DUNE_THROW(NotImplemented, \"Only 2d and 3d N\u00e9d\u00e9lec elements are\n+implemented\");\n+ 177 }\n+ 178\n+179 void initializeIndices()\n+ 180 {}\n+ 181\n+184 const GridView& gridView() const\n+ 185 {\n+ 186 return gridView_;\n+ 187 }\n+ 188\n+ 189 /* \\brief Update the stored grid view, to be called if the grid has\n+changed */\n+190 void update (const GridView& gv)\n+ 191 {\n+ 192 gridView_ = gv;\n+ 193 mapper_.update(gridView_);\n+ 194 }\n+ 195\n+199 Node makeNode() const\n+ 200 {\n+ 201 return Node{&finiteElementMap_};\n+ 202 }\n 203\n- 204 auto operator()(const LocalCoordinate& xi) const\n+204 size_type size() const\n 205 {\n- 206 auto&& f = Dune::Impl::makeFunctionWithCallOperator<LocalCoordinate>(f_);\n- 207 auto globalValue = f(xi);\n+ 206 return mapper_.size();\n+ 207 }\n 208\n- 209 // Apply the inverse Piola transform\n- 210 auto jacobianTransposed = element_.geometry().jacobianTransposed(xi);\n- 211\n- 212 auto localValue = globalValue;\n- 213 jacobianTransposed.mv(globalValue, localValue);\n- 214\n- 215 return localValue;\n- 216 }\n- 217 };\n- 218 };\n- 219\n- 226 template<class Transformator, class LocalValuedLocalBasis, class Element>\n- 227 class GlobalValuedLocalBasis\n- 228 {\n- 229 public:\n- 230 using Traits = typename LocalValuedLocalBasis::Traits;\n- 231\n- 234 void bind(const LocalValuedLocalBasis& localValuedLocalBasis, const\n-Element& element)\n- 235 {\n- 236 localValuedLocalBasis_ = &localValuedLocalBasis;\n- 237 element_ = &element;\n- 238 }\n- 239\n- 242 auto size() const\n- 243 {\n- 244 return localValuedLocalBasis_->size();\n- 245 }\n- 246\n- 248 void evaluateFunction(const typename Traits::DomainType& x,\n- 249 std::vector<typename Traits::RangeType>& out) const\n- 250 {\n- 251 localValuedLocalBasis_->evaluateFunction(x,out);\n- 252\n- 253 Transformator::apply(out, x, element_->geometry());\n- 254 }\n- 255\n- 261 void evaluateJacobian(const typename Traits::DomainType& x,\n- 262 std::vector<typename Traits::JacobianType>& out) const\n- 263 {\n- 264 localValuedLocalBasis_->evaluateJacobian(x,out);\n- 265\n- 266 Transformator::applyJacobian(out, x, element_->geometry());\n- 267 }\n+ 210 template<class SizePrefix>\n+211 size_type size(const SizePrefix& prefix) const\n+ 212 {\n+ 213 assert(prefix.size() == 0 || prefix.size() == 1);\n+ 214 return (prefix.size() == 0) ? size() : 0;\n+ 215 }\n+ 216\n+217 size_type dimension() const\n+ 218 {\n+ 219 return size();\n+ 220 }\n+ 221\n+222 size_type maxNodeSize() const\n+ 223 {\n+ 224 size_type result = 0;\n+ 225 for (auto&& type : gridView_.indexSet().types(0))\n+ 226 {\n+ 227 size_type numEdges = referenceElement<typename GV::ctype,dim>(type).size\n+(dim-1);\n+ 228 result = std::max(result, numEdges);\n+ 229 }\n+ 230\n+ 231 return result;\n+ 232 }\n+ 233\n+ 237 template<typename It>\n+238 It indices(const Node& node, It it) const\n+ 239 {\n+ 240 const auto& element = node.element();\n+ 241\n+ 242 // throw if Element is not of predefined type\n+ 243 if (not(element.type().isCube()) and not(element.type().isSimplex()))\n+ 244 DUNE_THROW(NotImplemented, \"NedelecBasis only implemented for cube and\n+simplex elements.\");\n+ 245\n+ 246 for(std::size_t i=0, end=node.size(); i<end; ++i, ++it)\n+ 247 {\n+ 248 Dune::LocalKey localKey = node.finiteElement().localCoefficients\n+().localKey(i);\n+ 249 *it = { mapper_.subIndex(element, localKey.subEntity(), localKey.codim())\n++ localKey.index() };\n+ 250 }\n+ 251\n+ 252 return it;\n+ 253 }\n+ 254\n+ 255protected:\n+256 GridView gridView_;\n+257 FiniteElementMap finiteElementMap_;\n+258 Mapper mapper_;\n+ 259};\n+ 260\n+ 261\n+ 262\n+ 263template<typename GV, typename Range, size_t kind, int order>\n+264class NedelecNode :\n+ 265 public LeafBasisNode\n+ 266{\n+ 267 static const int dim = GV::dimension;\n 268\n- 275 void partial(const std::array<unsigned int,2>& order,\n- 276 const typename Traits::DomainType& x,\n- 277 std::vector<typename Traits::RangeType>& out) const\n- 278 {\n- 279 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);\n- 280 if (totalOrder == 0) {\n- 281 evaluateFunction(x, out);\n- 282 } else if (totalOrder == 1) {\n- 283 auto const direction = std::distance(order.begin(), std::find(order.begin\n-(), order.end(), 1));\n- 284 out.resize(size());\n- 285\n- 286 // TODO: The following is wasteful: We compute the full Jacobian and then\n-return\n- 287 // only a part of it. While we need the full Jacobian of the underlying\n-local-valued LFE,\n- 288 // it should be possible to compute only a partial Piola transform for the\n-requested\n- 289 // partial derivatives.\n- 290 std::vector<typename Traits::JacobianType> fullJacobian;\n- 291 localValuedLocalBasis_->evaluateJacobian(x,fullJacobian);\n- 292\n- 293 Transformator::applyJacobian(fullJacobian, x, element_->geometry());\n- 294\n- 295 for (std::size_t i=0; i<out.size(); i++)\n- 296 for (std::size_t j=0; j<out[i].size(); j++)\n- 297 out[i][j] = fullJacobian[i][j][direction];\n+ 269public:\n+ 270\n+271 using size_type = std::size_t;\n+272 using Element = typename GV::template Codim<0>::Entity;\n+ 273 static_assert(kind==1, \"Only Nedelec elements of the first kind are\n+implemented!\");\n+274 using FiniteElementMap = typename Impl::\n+Nedelec1stKindLocalFiniteElementMap<GV, dim, Range, order>;\n+275 using FiniteElement = Impl::GlobalValuedLocalFiniteElement<Impl::\n+CovariantPiolaTransformator,\n+ 276 typename FiniteElementMap::FiniteElement,\n+ 277 Element>;\n+ 278\n+279 NedelecNode(const FiniteElementMap* finiteElementMap) :\n+ 280 element_(nullptr),\n+ 281 finiteElementMap_(finiteElementMap)\n+ 282 { }\n+ 283\n+285 const Element& element() const\n+ 286 {\n+ 287 return *element_;\n+ 288 }\n+ 289\n+294 const FiniteElement& finiteElement() const\n+ 295 {\n+ 296 return finiteElement_;\n+ 297 }\n 298\n- 299 } else\n- 300 DUNE_THROW(NotImplemented, \"Partial derivatives of order 2 or higher\");\n- 301 }\n- 302\n- 304 auto order() const\n- 305 {\n- 306 return localValuedLocalBasis_->order();\n- 307 }\n+300 void bind(const Element& e)\n+ 301 {\n+ 302 element_ = &e;\n+ 303 finiteElement_.bind((finiteElementMap_->find(*element_)), e);\n+ 304 this->setSize(finiteElement_.size());\n+ 305 }\n+ 306\n+ 307protected:\n 308\n- 309 const LocalValuedLocalBasis* localValuedLocalBasis_;\n- 310 const Element* element_;\n- 311 };\n- 312\n- 321 template<class Transformator, class LocalValuedLocalInterpolation, class\n-Element>\n- 322 class GlobalValuedLocalInterpolation\n- 323 {\n- 324 public:\n- 327 void bind(const LocalValuedLocalInterpolation&\n-localValuedLocalInterpolation, const Element& element)\n- 328 {\n- 329 localValuedLocalInterpolation_ = &localValuedLocalInterpolation;\n- 330 element_ = &element;\n- 331 }\n- 332\n- 333 template<typename F, typename C>\n- 334 void interpolate (const F& f, std::vector<C>& out) const\n- 335 {\n- 336 using LocalCoordinate = typename Element::Geometry::LocalCoordinate;\n- 337 typename Transformator::template\n-LocalValuedFunction<F,LocalCoordinate,Element> localValuedFunction(f,\n-*element_);\n- 338 localValuedLocalInterpolation_->interpolate(localValuedFunction, out);\n- 339 }\n- 340\n- 341 private:\n- 342 const LocalValuedLocalInterpolation* localValuedLocalInterpolation_;\n- 343 const Element* element_;\n- 344 };\n- 345\n- 346\n- 353 template<class Transformator, class LocalValuedLFE, class Element>\n- 354 class GlobalValuedLocalFiniteElement\n- 355 {\n- 356 using LocalBasis = GlobalValuedLocalBasis<Transformator,\n- 357 typename LocalValuedLFE::Traits::LocalBasisType,\n- 358 Element>;\n- 359 using LocalInterpolation = GlobalValuedLocalInterpolation<Transformator,\n- 360 typename LocalValuedLFE::Traits::LocalInterpolationType,\n- 361 Element>;\n- 362\n- 363 public:\n- 366 using Traits = LocalFiniteElementTraits<LocalBasis,\n- 367 typename LocalValuedLFE::Traits::LocalCoefficientsType,\n- 368 LocalInterpolation>;\n- 369\n- 370 GlobalValuedLocalFiniteElement() {}\n- 371\n- 372 void bind(const LocalValuedLFE& localValuedLFE, const Element& element)\n- 373 {\n- 374 globalValuedLocalBasis_.bind(localValuedLFE.localBasis(), element);\n- 375 globalValuedLocalInterpolation_.bind(localValuedLFE.localInterpolation(),\n-element);\n- 376 localValuedLFE_ = &localValuedLFE;\n- 377 }\n- 378\n- 381 const typename Traits::LocalBasisType& localBasis() const\n- 382 {\n- 383 return globalValuedLocalBasis_;\n- 384 }\n- 385\n- 388 const typename Traits::LocalCoefficientsType& localCoefficients() const\n- 389 {\n- 390 return localValuedLFE_->localCoefficients();\n- 391 }\n- 392\n- 395 const typename Traits::LocalInterpolationType& localInterpolation() const\n- 396 {\n- 397 return globalValuedLocalInterpolation_;\n- 398 }\n- 399\n- 401 std::size_t size() const\n- 402 {\n- 403 return localValuedLFE_->size();\n- 404 }\n- 405\n- 408 GeometryType type() const\n- 409 {\n- 410 return localValuedLFE_->type();\n- 411 }\n- 412\n- 413 private:\n- 414\n- 415 typename Traits::LocalBasisType globalValuedLocalBasis_;\n- 416 typename Traits::LocalInterpolationType globalValuedLocalInterpolation_;\n- 417 const LocalValuedLFE* localValuedLFE_;\n- 418 };\n- 419\n- 420} // namespace Dune::Functions::Impl\n- 421\n- 422#endif /\n-/ DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH\n-Dune::Functions::interpolate\n-void interpolate(const B &basis, C &&coeff, const F &f, const BV &bv, const\n-NTRE &nodeToRangeEntry)\n-Interpolate given function in discrete function space.\n-Definition: interpolate.hh:202\n+309 FiniteElement finiteElement_;\n+310 const Element* element_;\n+311 const FiniteElementMap* finiteElementMap_;\n+ 312};\n+ 313\n+ 314\n+ 315\n+ 316namespace BasisFactory {\n+ 317\n+ 327template<std::size_t kind, std::size_t order, typename Range=double>\n+328auto nedelec()\n+ 329{\n+ 330 return [](const auto& gridView) {\n+ 331 return NedelecPreBasis<std::decay_t<decltype(gridView)>, Range, kind,\n+order>(gridView);\n+ 332 };\n+ 333}\n+ 334\n+ 335} // end namespace BasisFactory\n+ 336\n+ 337\n+ 338\n+ 339/\n+/ *****************************************************************************\n+ 340// This is the actual global basis implementation based on the reusable\n+parts.\n+ 341/\n+/ *****************************************************************************\n+ 342\n+ 350template<typename GV, std::size_t kind, std::size_t order, typename\n+Range=double>\n+351using NedelecBasis = DefaultGlobalBasis<NedelecPreBasis<GV,_Range,_kind,\n+order_> >;\n+ 352\n+ 353} // end namespace Dune::Functions\n+ 354\n+ 355\n+ 356#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NEDELECBASIS_HH\n+globalvaluedlocalfiniteelement.hh\n+defaultglobalbasis.hh\n+nodes.hh\n+Dune::Functions::BasisFactory::power\n+auto power(ChildPreBasisFactory &&childPreBasisFactory, const\n+IndexMergingStrategy &)\n+Create a pre-basis factory that can build a PowerPreBasis.\n+Definition: powerbasis.hh:369\n+Dune::Functions::BasisFactory::nedelec\n+auto nedelec()\n+Create a pre-basis factory that can create a N\u00e9d\u00e9lec pre-basis.\n+Definition: nedelecbasis.hh:328\n+Dune::Functions\n+Definition: polynomial.hh:11\n+Dune::Functions::DefaultGlobalBasis\n+Global basis for given pre-basis.\n+Definition: defaultglobalbasis.hh:46\n+Dune::Functions::NedelecNode\n+Definition: nedelecbasis.hh:266\n+Dune::Functions::NedelecNode::finiteElementMap_\n+const FiniteElementMap * finiteElementMap_\n+Definition: nedelecbasis.hh:311\n+Dune::Functions::NedelecNode::finiteElement_\n+FiniteElement finiteElement_\n+Definition: nedelecbasis.hh:309\n+Dune::Functions::NedelecNode::FiniteElement\n+Impl::GlobalValuedLocalFiniteElement< Impl::CovariantPiolaTransformator,\n+typename FiniteElementMap::FiniteElement, Element > FiniteElement\n+Definition: nedelecbasis.hh:277\n+Dune::Functions::NedelecNode::bind\n+void bind(const Element &e)\n+Bind to element.\n+Definition: nedelecbasis.hh:300\n+Dune::Functions::NedelecNode::element\n+const Element & element() const\n+Return current element, throw if unbound.\n+Definition: nedelecbasis.hh:285\n+Dune::Functions::NedelecNode::Element\n+typename GV::template Codim< 0 >::Entity Element\n+Definition: nedelecbasis.hh:272\n+Dune::Functions::NedelecNode::finiteElement\n+const FiniteElement & finiteElement() const\n+Return the LocalFiniteElement for the element we are bound to.\n+Definition: nedelecbasis.hh:294\n+Dune::Functions::NedelecNode::NedelecNode\n+NedelecNode(const FiniteElementMap *finiteElementMap)\n+Definition: nedelecbasis.hh:279\n+Dune::Functions::NedelecNode::FiniteElementMap\n+typename Impl::Nedelec1stKindLocalFiniteElementMap< GV, dim, Range, order >\n+FiniteElementMap\n+Definition: nedelecbasis.hh:274\n+Dune::Functions::NedelecNode::element_\n+const Element * element_\n+Definition: nedelecbasis.hh:310\n+Dune::Functions::NedelecNode::size_type\n+std::size_t size_type\n+Definition: nedelecbasis.hh:271\n+Dune::Functions::NedelecPreBasis\n+Definition: nedelecbasis.hh:136\n+Dune::Functions::NedelecPreBasis::indices\n+It indices(const Node &node, It it) const\n+Maps from subtree index set [0..size-1] to a globally unique multi index in\n+global basis.\n+Definition: nedelecbasis.hh:238\n+Dune::Functions::NedelecPreBasis::size\n+size_type size(const SizePrefix &prefix) const\n+Return number possible values for next position in multi index.\n+Definition: nedelecbasis.hh:211\n+Dune::Functions::NedelecPreBasis::size_type\n+std::size_t size_type\n+Definition: nedelecbasis.hh:146\n+Dune::Functions::NedelecPreBasis::NedelecPreBasis\n+NedelecPreBasis(const GridView &gv)\n+Constructor for a given grid view object.\n+Definition: nedelecbasis.hh:155\n+Dune::Functions::NedelecPreBasis::GridView\n+GV GridView\n+The grid view that the FE space is defined on.\n+Definition: nedelecbasis.hh:145\n+Dune::Functions::NedelecPreBasis::dimension\n+size_type dimension() const\n+Definition: nedelecbasis.hh:217\n+Dune::Functions::NedelecPreBasis::maxMultiIndexSize\n+static constexpr size_type maxMultiIndexSize\n+Definition: nedelecbasis.hh:150\n+Dune::Functions::NedelecPreBasis::multiIndexBufferSize\n+static constexpr size_type multiIndexBufferSize\n+Definition: nedelecbasis.hh:152\n+Dune::Functions::NedelecPreBasis::gridView_\n+GridView gridView_\n+Definition: nedelecbasis.hh:256\n+Dune::Functions::NedelecPreBasis::finiteElementMap_\n+FiniteElementMap finiteElementMap_\n+Definition: nedelecbasis.hh:257\n+Dune::Functions::NedelecPreBasis::minMultiIndexSize\n+static constexpr size_type minMultiIndexSize\n+Definition: nedelecbasis.hh:151\n+Dune::Functions::NedelecPreBasis::initializeIndices\n+void initializeIndices()\n+Definition: nedelecbasis.hh:179\n+Dune::Functions::NedelecPreBasis::update\n+void update(const GridView &gv)\n+Definition: nedelecbasis.hh:190\n+Dune::Functions::NedelecPreBasis::maxNodeSize\n+size_type maxNodeSize() const\n+Definition: nedelecbasis.hh:222\n+Dune::Functions::NedelecPreBasis::gridView\n+const GridView & gridView() const\n+Obtain the grid view that the basis is defined on.\n+Definition: nedelecbasis.hh:184\n+Dune::Functions::NedelecPreBasis::makeNode\n+Node makeNode() const\n+Create tree node.\n+Definition: nedelecbasis.hh:199\n+Dune::Functions::NedelecPreBasis::size\n+size_type size() const\n+Definition: nedelecbasis.hh:204\n+Dune::Functions::NedelecPreBasis::mapper_\n+Mapper mapper_\n+Definition: nedelecbasis.hh:258\n+Dune::Functions::BasisNodeMixin::size\n+size_type size() const\n+Definition: nodes.hh:142\n+Dune::Functions::BasisNodeMixin::setSize\n+void setSize(const size_type size)\n+Definition: nodes.hh:164\n+Dune::Functions::LeafBasisNode\n+Definition: nodes.hh:186\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00137.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00137.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: raviartthomasbasis.hh File Reference</title>\n+<title>dune-functions: globalvaluedlocalfiniteelement.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -63,70 +63,37 @@\n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n-<a href=\"#nested-classes\">Classes</a> |\n-<a href=\"#namespaces\">Namespaces</a> |\n-<a href=\"#typedef-members\">Typedefs</a> |\n-<a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">raviartthomasbasis.hh File Reference</div></div>\n+<a href=\"#namespaces\">Namespaces</a> </div>\n+ <div class=\"headertitle\"><div class=\"title\">globalvaluedlocalfiniteelement.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <div class=\"textblock\"><code>#include <array></code><br />\n-<code>#include <dune/common/exceptions.hh></code><br />\n-<code>#include <dune/grid/common/capabilities.hh></code><br />\n-<code>#include <dune/grid/common/mcmgmapper.hh></code><br />\n-<code>#include <dune/localfunctions/common/localfiniteelementvariant.hh></code><br />\n-<code>#include <dune/localfunctions/raviartthomas.hh></code><br />\n-<code>#include <dune/localfunctions/raviartthomas/raviartthomas0cube2d.hh></code><br />\n-<code>#include <dune/localfunctions/raviartthomas/raviartthomas0cube3d.hh></code><br />\n-<code>#include <dune/localfunctions/raviartthomas/raviartthomas02d.hh></code><br />\n-<code>#include <dune/localfunctions/raviartthomas/raviartthomas03d.hh></code><br />\n-<code>#include <dune/localfunctions/raviartthomas/raviartthomas1cube2d.hh></code><br />\n-<code>#include <dune/localfunctions/raviartthomas/raviartthomas1cube3d.hh></code><br />\n-<code>#include <dune/localfunctions/raviartthomas/raviartthomas12d.hh></code><br />\n-<code>#include <dune/localfunctions/raviartthomas/raviartthomas2cube2d.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00134_source.html\">dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00191_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00119_source.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></code><br />\n+<code>#include <numeric></code><br />\n+<code>#include <dune/common/fmatrix.hh></code><br />\n+<code>#include <dune/common/fvector.hh></code><br />\n+<code>#include <dune/common/math.hh></code><br />\n+<code>#include <dune/common/rangeutilities.hh></code><br />\n+<code>#include <dune/geometry/referenceelements.hh></code><br />\n+<code>#include <dune/localfunctions/common/localbasis.hh></code><br />\n+<code>#include <dune/localfunctions/common/localfiniteelementtraits.hh></code><br />\n+<code>#include <dune/localfunctions/common/localinterpolation.hh></code><br />\n </div>\n <p><a href=\"a00137_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n-Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01795.html\">Dune::Functions::RaviartThomasPreBasis< GV, k ></a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01791.html\">Dune::Functions::RaviartThomasNode< GV, k ></a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-</table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a00224\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00224.html\">Dune::Functions::BasisFactory</a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-</table><table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"typedef-members\" name=\"typedef-members\"></a>\n-Typedefs</h2></td></tr>\n-<tr class=\"memitem:a79a7c0c6e2a4ba12c82164fcbbae6c63\"><td class=\"memTemplParams\" colspan=\"2\">template<typename GV , int k> </td></tr>\n-<tr class=\"memitem:a79a7c0c6e2a4ba12c82164fcbbae6c63\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a79a7c0c6e2a4ba12c82164fcbbae6c63\">Dune::Functions::RaviartThomasBasis</a> = DefaultGlobalBasis< RaviartThomasPreBasis< GV, k > ></td></tr>\n-<tr class=\"memdesc:a79a7c0c6e2a4ba12c82164fcbbae6c63\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Basis of a k-th-order Raviart Thomas finite element space. <a href=\"a00219.html#a79a7c0c6e2a4ba12c82164fcbbae6c63\">More...</a><br /></td></tr>\n-<tr class=\"separator:a79a7c0c6e2a4ba12c82164fcbbae6c63\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-</table><table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n-Functions</h2></td></tr>\n-<tr class=\"memitem:gac7c656af99728aa385381f5d78ae0b98\"><td class=\"memTemplParams\" colspan=\"2\">template<std::size_t k> </td></tr>\n-<tr class=\"memitem:gac7c656af99728aa385381f5d78ae0b98\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#gac7c656af99728aa385381f5d78ae0b98\">Dune::Functions::BasisFactory::raviartThomas</a> ()</td></tr>\n-<tr class=\"memdesc:gac7c656af99728aa385381f5d78ae0b98\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a pre-basis factory that can create a Raviart-Thomas pre-basis. <a href=\"a00213.html#gac7c656af99728aa385381f5d78ae0b98\">More...</a><br /></td></tr>\n-<tr class=\"separator:gac7c656af99728aa385381f5d78ae0b98\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,54 +5,28 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-Classes | Namespaces | Typedefs | Functions\n-raviartthomasbasis.hh File Reference\n+Namespaces\n+globalvaluedlocalfiniteelement.hh File Reference\n #include <array>\n-#include <dune/common/exceptions.hh>\n-#include <dune/grid/common/capabilities.hh>\n-#include <dune/grid/common/mcmgmapper.hh>\n-#include <dune/localfunctions/common/localfiniteelementvariant.hh>\n-#include <dune/localfunctions/raviartthomas.hh>\n-#include <dune/localfunctions/raviartthomas/raviartthomas0cube2d.hh>\n-#include <dune/localfunctions/raviartthomas/raviartthomas0cube3d.hh>\n-#include <dune/localfunctions/raviartthomas/raviartthomas02d.hh>\n-#include <dune/localfunctions/raviartthomas/raviartthomas03d.hh>\n-#include <dune/localfunctions/raviartthomas/raviartthomas1cube2d.hh>\n-#include <dune/localfunctions/raviartthomas/raviartthomas1cube3d.hh>\n-#include <dune/localfunctions/raviartthomas/raviartthomas12d.hh>\n-#include <dune/localfunctions/raviartthomas/raviartthomas2cube2d.hh>\n-#include <dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh>\n-#include <dune/functions/functionspacebases/nodes.hh>\n-#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n+#include <numeric>\n+#include <dune/common/fmatrix.hh>\n+#include <dune/common/fvector.hh>\n+#include <dune/common/math.hh>\n+#include <dune/common/rangeutilities.hh>\n+#include <dune/geometry/referenceelements.hh>\n+#include <dune/localfunctions/common/localbasis.hh>\n+#include <dune/localfunctions/common/localfiniteelementtraits.hh>\n+#include <dune/localfunctions/common/localinterpolation.hh>\n Go_to_the_source_code_of_this_file.\n- Classes\n-class \u00a0Dune::Functions::RaviartThomasPreBasis<_GV,_k_>\n-\u00a0\n-class \u00a0Dune::Functions::RaviartThomasNode<_GV,_k_>\n-\u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n-namespace \u00a0Dune::Functions::BasisFactory\n-\u00a0\n- Typedefs\n-template<typename GV , int k>\n-using\u00a0Dune::Functions::RaviartThomasBasis = DefaultGlobalBasis<\n- RaviartThomasPreBasis< GV, k > >\n-\u00a0 Basis of a k-th-order Raviart Thomas finite element space. More...\n-\u00a0\n- Functions\n-template<std::size_t k>\n-auto\u00a0Dune::Functions::BasisFactory::raviartThomas ()\n-\u00a0 Create a pre-basis factory that can create a Raviart-Thomas pre-basis.\n- More...\n-\u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00137_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00137_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: raviartthomasbasis.hh Source File</title>\n+<title>dune-functions: globalvaluedlocalfiniteelement.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,445 +62,324 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">raviartthomasbasis.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">globalvaluedlocalfiniteelement.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00137.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n <div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <array></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <dune/common/exceptions.hh></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <numeric></span></div>\n <div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/grid/common/capabilities.hh></span></div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/grid/common/mcmgmapper.hh></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <dune/localfunctions/common/localfiniteelementvariant.hh></span></div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <dune/localfunctions/raviartthomas.hh></span></div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <dune/localfunctions/raviartthomas/raviartthomas0cube2d.hh></span></div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <dune/localfunctions/raviartthomas/raviartthomas0cube3d.hh></span></div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"preprocessor\">#include <dune/localfunctions/raviartthomas/raviartthomas02d.hh></span></div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"preprocessor\">#include <dune/localfunctions/raviartthomas/raviartthomas03d.hh></span></div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"preprocessor\">#include <dune/localfunctions/raviartthomas/raviartthomas1cube2d.hh></span></div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"preprocessor\">#include <dune/localfunctions/raviartthomas/raviartthomas1cube3d.hh></span></div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"preprocessor\">#include <dune/localfunctions/raviartthomas/raviartthomas12d.hh></span></div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"preprocessor\">#include <dune/localfunctions/raviartthomas/raviartthomas2cube2d.hh></span></div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/common/fmatrix.hh></span></div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/fvector.hh></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/common/math.hh></span></div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <dune/common/rangeutilities.hh></span></div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <dune/geometry/referenceelements.hh></span></div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"preprocessor\">#include <dune/localfunctions/common/localbasis.hh></span></div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"preprocessor\">#include <dune/localfunctions/common/localfiniteelementtraits.hh></span></div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"preprocessor\">#include <dune/localfunctions/common/localinterpolation.hh></span></div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"keyword\">namespace </span>Dune::Functions::Impl</div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span>{</div>\n <div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> </div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00134.html\">dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00191.html\">dune/functions/functionspacebases/nodes.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00119.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> </div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span> </div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span><span class=\"keyword\">namespace </span>Impl {</div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> </div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> <span class=\"keyword\">template</span><<span class=\"keywordtype\">int</span> dim, <span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R, std::<span class=\"keywordtype\">size_t</span> k></div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> <span class=\"keyword\">struct </span>RaviartThomasSimplexLocalInfo</div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> {</div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> <span class=\"comment\">// Dummy type, must be something that we can have a std::unique_ptr to</span></div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> <span class=\"keyword\">using </span>FiniteElement = <span class=\"keywordtype\">void</span>*;</div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> };</div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> </div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R></div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> <span class=\"keyword\">struct </span>RaviartThomasSimplexLocalInfo<2,D,R,0></div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> {</div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> <span class=\"keyword\">using </span>FiniteElement = RT02DLocalFiniteElement<D,R>;</div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> };</div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> </div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R></div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> <span class=\"keyword\">struct </span>RaviartThomasSimplexLocalInfo<2,D,R,1></div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> {</div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> <span class=\"keyword\">using </span>FiniteElement = RT12DLocalFiniteElement<D,R>;</div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> };</div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> </div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R></div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> <span class=\"keyword\">struct </span>RaviartThomasSimplexLocalInfo<3,D,R,0></div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> {</div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> <span class=\"keyword\">using </span>FiniteElement = RT03DLocalFiniteElement<D,R>;</div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> };</div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> </div>\n-<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> <span class=\"keyword\">template</span><<span class=\"keywordtype\">int</span> dim, <span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R, std::<span class=\"keywordtype\">size_t</span> k></div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> <span class=\"keyword\">struct </span>RaviartThomasCubeLocalInfo</div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> {</div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> <span class=\"comment\">// Dummy type, must be something that we can have a std::unique_ptr to</span></div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> <span class=\"keyword\">using </span>FiniteElement = <span class=\"keywordtype\">void</span>*;</div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> };</div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> </div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R></div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> <span class=\"keyword\">struct </span>RaviartThomasCubeLocalInfo<2,D,R,0></div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> {</div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> <span class=\"keyword\">using </span>FiniteElement = RT0Cube2DLocalFiniteElement<D,R>;</div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> };</div>\n-<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> </div>\n-<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R></div>\n-<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> <span class=\"keyword\">struct </span>RaviartThomasCubeLocalInfo<2,D,R,1></div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> {</div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> <span class=\"keyword\">using </span>FiniteElement = RT1Cube2DLocalFiniteElement<D,R>;</div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> };</div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> </div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R></div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> <span class=\"keyword\">struct </span>RaviartThomasCubeLocalInfo<2,D,R,2></div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> {</div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> <span class=\"keyword\">using </span>FiniteElement = RT2Cube2DLocalFiniteElement<D,R>;</div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> };</div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> </div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R></div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> <span class=\"keyword\">struct </span>RaviartThomasCubeLocalInfo<3,D,R,0></div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> {</div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> <span class=\"keyword\">using </span>FiniteElement = RT0Cube3DLocalFiniteElement<D,R>;</div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> };</div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> </div>\n-<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R></div>\n-<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> <span class=\"keyword\">struct </span>RaviartThomasCubeLocalInfo<3,D,R,1></div>\n-<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> {</div>\n-<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> <span class=\"keyword\">using </span>FiniteElement = RT1Cube3DLocalFiniteElement<D,R>;</div>\n-<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> };</div>\n-<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> </div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> dim, <span class=\"keyword\">typename</span> R, std::<span class=\"keywordtype\">size_t</span> k></div>\n-<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> <span class=\"keyword\">class </span>RaviartThomasLocalFiniteElementMap</div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> {</div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> <span class=\"keyword\">using </span>D = <span class=\"keyword\">typename</span> GV::ctype;</div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> hasFixedElementType = Capabilities::hasSingleGeometryType<typename GV::Grid>::v;</div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> <span class=\"keyword\">struct </span>ContravariantPiolaTransformator</div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> {</div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Values, <span class=\"keyword\">typename</span> LocalCoordinate, <span class=\"keyword\">typename</span> Geometry></div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> <span class=\"keyword\">static</span> <span class=\"keyword\">auto</span> apply(Values& values,</div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> <span class=\"keyword\">const</span> LocalCoordinate& xi,</div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> <span class=\"keyword\">const</span> Geometry& geometry)</div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> {</div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> <span class=\"keyword\">auto</span> jacobianTransposed = geometry.jacobianTransposed(xi);</div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> <span class=\"keyword\">auto</span> integrationElement = geometry.integrationElement(xi);</div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> </div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> <span class=\"keywordflow\">for</span> (<span class=\"keyword\">auto</span>& value : values)</div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> {</div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> <span class=\"keyword\">auto</span> tmp = value;</div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> jacobianTransposed.mtv(tmp, value);</div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> value /= integrationElement;</div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> }</div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> }</div>\n+<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> </div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Gradients, <span class=\"keyword\">typename</span> LocalCoordinate, <span class=\"keyword\">typename</span> Geometry></div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> <span class=\"keyword\">static</span> <span class=\"keyword\">auto</span> applyJacobian(Gradients& gradients,</div>\n+<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> <span class=\"keyword\">const</span> LocalCoordinate& xi,</div>\n+<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> <span class=\"keyword\">const</span> Geometry& geometry)</div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> {</div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> <span class=\"keyword\">auto</span> jacobianTransposed = geometry.jacobianTransposed(xi);</div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> <span class=\"keyword\">auto</span> integrationElement = geometry.integrationElement(xi);</div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> <span class=\"keywordflow\">for</span> (<span class=\"keyword\">auto</span>& gradient : gradients)</div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> {</div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> <span class=\"keyword\">auto</span> tmp = gradient;</div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> gradient = 0;</div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> k=0; k<gradient.M(); k++)</div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> l=0; l<tmp.N(); l++)</div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> <span class=\"comment\">// Use sparseRange because jacobianTransposed may be a sparse DiagonalMatrix</span></div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">auto</span>&& [jacobianTransposed_l_j, j] : sparseRange(jacobianTransposed[l]))</div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> gradient[j][k] += jacobianTransposed_l_j * tmp[l][k];</div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> gradient /= integrationElement;</div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> }</div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> }</div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> </div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Function, <span class=\"keyword\">class</span> LocalCoordinate, <span class=\"keyword\">class</span> Element></div>\n+<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> <span class=\"keyword\">class </span>LocalValuedFunction</div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> {</div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> <span class=\"keyword\">const</span> Function& f_;</div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> <span class=\"keyword\">const</span> Element& element_;</div>\n <div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> </div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> <span class=\"keyword\">using </span>CubeFiniteElement = <span class=\"keyword\">typename</span> RaviartThomasCubeLocalInfo<dim, D, R, k>::FiniteElement;</div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> <span class=\"keyword\">using </span>SimplexFiniteElement = <span class=\"keyword\">typename</span> RaviartThomasSimplexLocalInfo<dim, D, R, k>::FiniteElement;</div>\n-<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> </div>\n-<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> <span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> </div>\n-<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> <span class=\"keyword\">using </span>T = LocalBasisTraits<D, dim, FieldVector<D,dim>, R, dim, FieldVector<R,dim>, FieldMatrix<D,dim,dim> >;</div>\n-<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> </div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> topologyId = Capabilities::hasSingleGeometryType<typename GV::Grid>::topologyId; <span class=\"comment\">// meaningless if hasFixedElementType is false</span></div>\n-<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">static</span> GeometryType type = GeometryType(topologyId, GV::dimension);</div>\n-<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> </div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> <span class=\"keyword\">using </span>FiniteElement = std::conditional_t<hasFixedElementType,</div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> std::conditional_t<type.isCube(),CubeFiniteElement,SimplexFiniteElement>,</div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> LocalFiniteElementVariant<CubeFiniteElement, SimplexFiniteElement> >;</div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> </div>\n-<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> <span class=\"comment\">// Each element facet can have its orientation reversed, hence there are</span></div>\n-<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> <span class=\"comment\">// 2^#facets different variants.</span></div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> <span class=\"keyword\">static</span> std::size_t numVariants(GeometryType type)</div>\n-<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> {</div>\n-<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> <span class=\"keyword\">auto</span> numFacets = referenceElement<D,dim>(type).size(1);</div>\n-<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00213.html#ga0d8eb549af76bc2563ab189e63668ee5\">power</a>(2,numFacets);</div>\n-<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> }</div>\n-<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> </div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> RaviartThomasLocalFiniteElementMap(<span class=\"keyword\">const</span> GV& gv)</div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> : elementMapper_(gv, mcmgElementLayout()),</div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> orient_(gv.size(0))</div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> {</div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> (hasFixedElementType)</div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> {</div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> variants_.resize(numVariants(type));</div>\n-<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i = 0; i < numVariants(type); i++)</div>\n-<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> variants_[i] = FiniteElement(i);</div>\n-<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> }</div>\n-<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> <span class=\"keywordflow\">else</span></div>\n-<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> {</div>\n-<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> <span class=\"comment\">// for mixed grids add offset for cubes</span></div>\n-<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> variants_.resize(numVariants(GeometryTypes::simplex(dim)) + numVariants(GeometryTypes::cube(dim)));</div>\n-<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i = 0; i < numVariants(GeometryTypes::simplex(dim)); i++)</div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> variants_[i] = SimplexFiniteElement(i);</div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i = 0; i < numVariants(GeometryTypes::cube(dim)); i++)</div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> variants_[i + numVariants(GeometryTypes::simplex(dim))] = CubeFiniteElement(i);</div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> }</div>\n-<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> </div>\n-<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& cell : elements(gv))</div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> {</div>\n-<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> myId = elementMapper_.index(cell);</div>\n-<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> orient_[myId] = 0;</div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> </div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> <span class=\"keywordflow\">for</span> (<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& intersection : intersections(gv,cell))</div>\n-<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> {</div>\n-<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> <span class=\"keywordflow\">if</span> (intersection.neighbor() && (elementMapper_.index(intersection.outside()) > myId))</div>\n-<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> orient_[myId] |= (1 << intersection.indexInInside());</div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> }</div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> </div>\n-<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> <span class=\"comment\">// for mixed grids add offset for cubes</span></div>\n-<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> (!hasFixedElementType)</div>\n-<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> <span class=\"keywordflow\">if</span> (cell.type().isCube())</div>\n-<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> orient_[myId] += numVariants(GeometryTypes::simplex(dim));</div>\n-<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> }</div>\n-<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> }</div>\n-<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> </div>\n-<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> EntityType></div>\n-<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> <span class=\"keyword\">const</span> FiniteElement& find(<span class=\"keyword\">const</span> EntityType& e)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> <span class=\"keywordflow\">return</span> variants_[orient_[elementMapper_.index(e)]];</div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> }</div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> </div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> <span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> std::vector<FiniteElement> variants_;</div>\n-<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> <span class=\"keyword\">const</span> Dune::MultipleCodimMultipleGeomTypeMapper<GV> elementMapper_;</div>\n-<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> std::vector<unsigned char> orient_;</div>\n-<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> };</div>\n-<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> </div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> <span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> </div>\n+<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> LocalValuedFunction(<span class=\"keyword\">const</span> Function& f, <span class=\"keyword\">const</span> Element& element)</div>\n+<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> : f_(f), element_(element)</div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> {}</div>\n+<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> </div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> <span class=\"keyword\">auto</span> operator()(<span class=\"keyword\">const</span> LocalCoordinate& xi)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> <span class=\"keyword\">auto</span>&& f = Dune::Impl::makeFunctionWithCallOperator<LocalCoordinate>(f_);</div>\n+<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> <span class=\"keyword\">auto</span> globalValue = f(xi);</div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> </div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> <span class=\"comment\">// Apply the inverse Piola transform</span></div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> <span class=\"keyword\">auto</span> jacobianInverseTransposed = element_.geometry().jacobianInverseTransposed(xi);</div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> <span class=\"keyword\">auto</span> integrationElement = element_.geometry().integrationElement(xi);</div>\n+<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> </div>\n+<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> <span class=\"keyword\">auto</span> localValue = globalValue;</div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> jacobianInverseTransposed.mtv(globalValue, localValue);</div>\n+<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> localValue *= integrationElement;</div>\n+<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> </div>\n+<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> <span class=\"keywordflow\">return</span> localValue;</div>\n+<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> }</div>\n+<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> };</div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> };</div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> </div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> <span class=\"keyword\">struct </span>CovariantPiolaTransformator</div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> {</div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Values, <span class=\"keyword\">typename</span> LocalCoordinate, <span class=\"keyword\">typename</span> Geometry></div>\n+<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> <span class=\"keyword\">static</span> <span class=\"keyword\">auto</span> apply(Values& values,</div>\n+<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> <span class=\"keyword\">const</span> LocalCoordinate& xi,</div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> <span class=\"keyword\">const</span> Geometry& geometry)</div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> {</div>\n+<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> <span class=\"keyword\">auto</span> jacobianInverseTransposed = geometry.jacobianInverseTransposed(xi);</div>\n+<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> </div>\n+<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> <span class=\"keywordflow\">for</span> (<span class=\"keyword\">auto</span>& value : values)</div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> {</div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> <span class=\"keyword\">auto</span> tmp = value;</div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> jacobianInverseTransposed.mv(tmp, value);</div>\n+<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> }</div>\n+<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> }</div>\n+<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> </div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Gradients, <span class=\"keyword\">typename</span> LocalCoordinate, <span class=\"keyword\">typename</span> Geometry></div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> <span class=\"keyword\">static</span> <span class=\"keyword\">auto</span> applyJacobian(Gradients& gradients,</div>\n+<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> <span class=\"keyword\">const</span> LocalCoordinate& xi,</div>\n+<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> <span class=\"keyword\">const</span> Geometry& geometry)</div>\n+<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> {</div>\n+<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> <span class=\"keyword\">auto</span> jacobianInverseTransposed = geometry.jacobianInverseTransposed(xi);</div>\n <div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> </div>\n-<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span>} <span class=\"comment\">// namespace Impl</span></div>\n-<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> </div>\n-<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> </div>\n-<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span><span class=\"comment\">// *****************************************************************************</span></div>\n-<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span><span class=\"comment\">// This is the reusable part of the basis. It contains</span></div>\n-<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span><span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span><span class=\"comment\">// RaviartThomasPreBasis</span></div>\n-<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span><span class=\"comment\">// RaviartThomasNode</span></div>\n-<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span><span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span><span class=\"comment\">// The pre-basis allows to create the others and is the owner of possible shared</span></div>\n-<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span><span class=\"comment\">// state. These components do _not_ depend on the global basis and local view</span></div>\n-<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span><span class=\"comment\">// and can be used without a global basis.</span></div>\n-<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span><span class=\"comment\">// *****************************************************************************</span></div>\n-<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> </div>\n-<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k></div>\n-<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span><span class=\"keyword\">class </span>RaviartThomasNode;</div>\n-<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> </div>\n-<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k></div>\n-<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html\"> 191</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01795.html\">RaviartThomasPreBasis</a></div>\n-<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span>{</div>\n-<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dim = GV::dimension;</div>\n-<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> <span class=\"keyword\">using </span>FiniteElementMap = <span class=\"keyword\">typename</span> Impl::RaviartThomasLocalFiniteElementMap<GV, dim, double, k>;</div>\n-<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> </div>\n-<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> <span class=\"keywordflow\">for</span> (<span class=\"keyword\">auto</span>& gradient : gradients)</div>\n+<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> {</div>\n+<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> <span class=\"keyword\">auto</span> tmp = gradient;</div>\n+<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> gradient = 0;</div>\n+<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> j=0; j<gradient.N(); j++)</div>\n+<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> k=0; k<gradient.M(); k++)</div>\n+<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> <span class=\"comment\">// Use sparseRange because jacobianTransposed may be a sparse DiagonalMatrix</span></div>\n+<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">auto</span>&& [jacobianInverseTransposed_j_l, l] : sparseRange(jacobianInverseTransposed[j]))</div>\n+<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> gradient[j][k] += jacobianInverseTransposed_j_l * tmp[l][k];</div>\n+<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> }</div>\n+<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span> }</div>\n+<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span> </div>\n+<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Function, <span class=\"keyword\">class</span> LocalCoordinate, <span class=\"keyword\">class</span> Element></div>\n+<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> <span class=\"keyword\">class </span>LocalValuedFunction</div>\n+<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> {</div>\n+<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> <span class=\"keyword\">const</span> Function& f_;</div>\n+<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> <span class=\"keyword\">const</span> Element& element_;</div>\n <div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> </div>\n-<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#ab389963ad645a85730a68ba538962d68\"> 199</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01795.html#ab389963ad645a85730a68ba538962d68\">GridView</a> = GV;</div>\n-<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#a3e54e4eb73680c37e4fc32475f49bd46\"> 200</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01795.html#a3e54e4eb73680c37e4fc32475f49bd46\">size_type</a> = std::size_t;</div>\n-<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> </div>\n-<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#a7ef89609261b6f013058db2d757c8265\"> 202</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01791.html\">Node</a> = <a class=\"code hl_class\" href=\"a01791.html\">RaviartThomasNode<GV, k></a>;</div>\n+<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> <span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> </div>\n+<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> LocalValuedFunction(<span class=\"keyword\">const</span> Function& f, <span class=\"keyword\">const</span> Element& element)</div>\n+<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> : f_(f), element_(element)</div>\n+<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> {}</div>\n <div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> </div>\n-<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#a05de07d386bbf54c0b153c89c49168c7\"> 204</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01795.html#a3e54e4eb73680c37e4fc32475f49bd46\">size_type</a> <a class=\"code hl_variable\" href=\"a01795.html#a05de07d386bbf54c0b153c89c49168c7\">maxMultiIndexSize</a> = 1;</div>\n-<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#a000fee05b7887b6c7afaa7ad923651b2\"> 205</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01795.html#a3e54e4eb73680c37e4fc32475f49bd46\">size_type</a> <a class=\"code hl_variable\" href=\"a01795.html#a000fee05b7887b6c7afaa7ad923651b2\">minMultiIndexSize</a> = 1;</div>\n-<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#a5e51525127f5d27020a411c75c6dc3dc\"> 206</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01795.html#a3e54e4eb73680c37e4fc32475f49bd46\">size_type</a> <a class=\"code hl_variable\" href=\"a01795.html#a5e51525127f5d27020a411c75c6dc3dc\">multiIndexBufferSize</a> = 1;</div>\n-<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> </div>\n-<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#a3de5fb4d0f0ba9161f7eb874e038fa75\"> 209</a></span> <a class=\"code hl_function\" href=\"a01795.html#a3de5fb4d0f0ba9161f7eb874e038fa75\">RaviartThomasPreBasis</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01795.html#ab389963ad645a85730a68ba538962d68\">GridView</a>& gv) :</div>\n-<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> <a class=\"code hl_variable\" href=\"a01795.html#ac775393c2fa528f96a183c71e19fb7c4\">gridView_</a>(gv),</div>\n-<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> <a class=\"code hl_variable\" href=\"a01795.html#a6b79ac0c794d5c74cb5a547116b02515\">finiteElementMap_</a>(gv)</div>\n-<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"> 212</span> {</div>\n-<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span> <span class=\"comment\">// Currently there are some unresolved bugs with hybrid grids and higher order Raviart-Thomas elements</span></div>\n-<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> <span class=\"keywordflow\">if</span> (gv.indexSet().types(0).size() > 1 and k>0)</div>\n-<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"Raviart-Thomas basis with index k>0 is only implemented for grids with a single element type"</span>);</div>\n-<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span> </div>\n-<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">auto</span> type : gv.indexSet().types(0))</div>\n-<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> <span class=\"keywordflow\">if</span> (!type.isSimplex() && !type.isCube())</div>\n-<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"Raviart-Thomas elements are only implemented for grids with simplex or cube elements."</span>);</div>\n-<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span> </div>\n-<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> GeometryType type = gv.template begin<0>()->type();</div>\n-<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span> <span class=\"keyword\">const</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">int</span> dofsPerElement = type.isCube() ? ((dim == 2) ? k*(k+1)*dim : k*(k+1)*(k+1)*dim) : k*dim;</div>\n-<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> <span class=\"keyword\">const</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">int</span> dofsPerFace = type.isCube() ? (dim-2)*2*k+k+1 : (dim-1)*k+1 ;</div>\n-<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> </div>\n-<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span> <a class=\"code hl_variable\" href=\"a01795.html#a26fbdcf76c8e3839b40affdb2413f062\">dofsPerCodim_</a> = {{dofsPerElement, dofsPerFace}};</div>\n-<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> }</div>\n-<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> </div>\n-<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#afcd506e3ce47347b5f72c9b7a05207fc\"> 228</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01795.html#afcd506e3ce47347b5f72c9b7a05207fc\">initializeIndices</a>()</div>\n-<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> {</div>\n-<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span> <a class=\"code hl_variable\" href=\"a01795.html#afcd58520d4ca4871df729b8423aa78be\">codimOffset_</a>[0] = 0;</div>\n-<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span> <a class=\"code hl_variable\" href=\"a01795.html#afcd58520d4ca4871df729b8423aa78be\">codimOffset_</a>[1] = <a class=\"code hl_variable\" href=\"a01795.html#afcd58520d4ca4871df729b8423aa78be\">codimOffset_</a>[0] + <a class=\"code hl_variable\" href=\"a01795.html#a26fbdcf76c8e3839b40affdb2413f062\">dofsPerCodim_</a>[0] * <a class=\"code hl_variable\" href=\"a01795.html#ac775393c2fa528f96a183c71e19fb7c4\">gridView_</a>.size(0);</div>\n-<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> }</div>\n-<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> </div>\n-<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#a54aad1415b27afc80c12c87e4a5d595b\"> 236</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01795.html#ab389963ad645a85730a68ba538962d68\">GridView</a>& <a class=\"code hl_function\" href=\"a01795.html#a54aad1415b27afc80c12c87e4a5d595b\">gridView</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01795.html#ac775393c2fa528f96a183c71e19fb7c4\">gridView_</a>;</div>\n-<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span> }</div>\n-<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"> 240</span> </div>\n-<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span> <span class=\"comment\">/* \\brief Update the stored grid view, to be called if the grid has changed */</span></div>\n-<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#a3a7f6bee36aa3fa028b12ed7d7d6323c\"> 242</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01795.html#a3a7f6bee36aa3fa028b12ed7d7d6323c\">update</a> (<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01795.html#ab389963ad645a85730a68ba538962d68\">GridView</a>& gv)</div>\n-<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> {</div>\n-<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> <a class=\"code hl_variable\" href=\"a01795.html#ac775393c2fa528f96a183c71e19fb7c4\">gridView_</a> = gv;</div>\n-<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> }</div>\n+<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> <span class=\"keyword\">auto</span> operator()(<span class=\"keyword\">const</span> LocalCoordinate& xi)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> <span class=\"keyword\">auto</span>&& f = Dune::Impl::makeFunctionWithCallOperator<LocalCoordinate>(f_);</div>\n+<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> <span class=\"keyword\">auto</span> globalValue = f(xi);</div>\n+<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span> </div>\n+<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> <span class=\"comment\">// Apply the inverse Piola transform</span></div>\n+<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> <span class=\"keyword\">auto</span> jacobianTransposed = element_.geometry().jacobianTransposed(xi);</div>\n+<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> </div>\n+<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"> 212</span> <span class=\"keyword\">auto</span> localValue = globalValue;</div>\n+<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span> jacobianTransposed.mv(globalValue, localValue);</div>\n+<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> </div>\n+<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> <span class=\"keywordflow\">return</span> localValue;</div>\n+<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span> }</div>\n+<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> };</div>\n+<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> };</div>\n+<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> </div>\n+<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Transformator, <span class=\"keyword\">class</span> LocalValuedLocalBasis, <span class=\"keyword\">class</span> Element></div>\n+<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> <span class=\"keyword\">class </span>GlobalValuedLocalBasis</div>\n+<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> {</div>\n+<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> <span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span> <span class=\"keyword\">using </span>Traits = <span class=\"keyword\">typename</span> LocalValuedLocalBasis::Traits;</div>\n+<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span> </div>\n+<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> <span class=\"keywordtype\">void</span> bind(<span class=\"keyword\">const</span> LocalValuedLocalBasis& localValuedLocalBasis, <span class=\"keyword\">const</span> Element& element)</div>\n+<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> {</div>\n+<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span> localValuedLocalBasis_ = &localValuedLocalBasis;</div>\n+<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span> element_ = &element;</div>\n+<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span> }</div>\n+<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span> </div>\n+<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span> <span class=\"keyword\">auto</span> size()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> <span class=\"keywordflow\">return</span> localValuedLocalBasis_->size();</div>\n+<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> }</div>\n <div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span> </div>\n-<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#a14a96e80dbb53e4afadfda189f81c4b0\"> 250</a></span> <a class=\"code hl_class\" href=\"a01791.html\">Node</a> <a class=\"code hl_function\" href=\"a01795.html#a14a96e80dbb53e4afadfda189f81c4b0\">makeNode</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01791.html\">Node</a>{&<a class=\"code hl_variable\" href=\"a01795.html#a6b79ac0c794d5c74cb5a547116b02515\">finiteElementMap_</a>};</div>\n-<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"> 253</span> }</div>\n-<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"> 254</span> </div>\n-<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#a89e848a1463225369fad477023293a5e\"> 255</a></span> <a class=\"code hl_typedef\" href=\"a01795.html#a3e54e4eb73680c37e4fc32475f49bd46\">size_type</a> <a class=\"code hl_function\" href=\"a01795.html#a89e848a1463225369fad477023293a5e\">size</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"> 256</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00257\" name=\"l00257\"></a><span class=\"lineno\"> 257</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01795.html#a26fbdcf76c8e3839b40affdb2413f062\">dofsPerCodim_</a>[0] * <a class=\"code hl_variable\" href=\"a01795.html#ac775393c2fa528f96a183c71e19fb7c4\">gridView_</a>.size(0) + <a class=\"code hl_variable\" href=\"a01795.html#a26fbdcf76c8e3839b40affdb2413f062\">dofsPerCodim_</a>[1] * <a class=\"code hl_variable\" href=\"a01795.html#ac775393c2fa528f96a183c71e19fb7c4\">gridView_</a>.size(1);</div>\n-<div class=\"line\"><a id=\"l00258\" name=\"l00258\"></a><span class=\"lineno\"> 258</span> }</div>\n-<div class=\"line\"><a id=\"l00259\" name=\"l00259\"></a><span class=\"lineno\"> 259</span> </div>\n-<div class=\"line\"><a id=\"l00261\" name=\"l00261\"></a><span class=\"lineno\"> 261</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n-<div class=\"line\"><a id=\"l00262\" name=\"l00262\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#ae92217c29c5ca4f9cf42c15a0805428a\"> 262</a></span> <a class=\"code hl_typedef\" href=\"a01795.html#a3e54e4eb73680c37e4fc32475f49bd46\">size_type</a> <a class=\"code hl_function\" href=\"a01795.html#ae92217c29c5ca4f9cf42c15a0805428a\">size</a>(<span class=\"keyword\">const</span> SizePrefix& prefix)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00263\" name=\"l00263\"></a><span class=\"lineno\"> 263</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00264\" name=\"l00264\"></a><span class=\"lineno\"> 264</span> assert(prefix.size() == 0 || prefix.size() == 1);</div>\n-<div class=\"line\"><a id=\"l00265\" name=\"l00265\"></a><span class=\"lineno\"> 265</span> <span class=\"keywordflow\">return</span> (prefix.size() == 0) ? <a class=\"code hl_function\" href=\"a01795.html#a89e848a1463225369fad477023293a5e\">size</a>() : 0;</div>\n-<div class=\"line\"><a id=\"l00266\" name=\"l00266\"></a><span class=\"lineno\"> 266</span> }</div>\n-<div class=\"line\"><a id=\"l00267\" name=\"l00267\"></a><span class=\"lineno\"> 267</span> </div>\n-<div class=\"line\"><a id=\"l00269\" name=\"l00269\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#a90d5d6569b24f1f109d09cb67aa7cde6\"> 269</a></span> <a class=\"code hl_typedef\" href=\"a01795.html#a3e54e4eb73680c37e4fc32475f49bd46\">size_type</a> <a class=\"code hl_function\" href=\"a01795.html#a90d5d6569b24f1f109d09cb67aa7cde6\">dimension</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00270\" name=\"l00270\"></a><span class=\"lineno\"> 270</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00271\" name=\"l00271\"></a><span class=\"lineno\"> 271</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01795.html#a89e848a1463225369fad477023293a5e\">size</a>();</div>\n-<div class=\"line\"><a id=\"l00272\" name=\"l00272\"></a><span class=\"lineno\"> 272</span> }</div>\n-<div class=\"line\"><a id=\"l00273\" name=\"l00273\"></a><span class=\"lineno\"> 273</span> </div>\n-<div class=\"line\"><a id=\"l00274\" name=\"l00274\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#ac364e0f8b7bf60bb69156385f1f02405\"> 274</a></span> <a class=\"code hl_typedef\" href=\"a01795.html#a3e54e4eb73680c37e4fc32475f49bd46\">size_type</a> <a class=\"code hl_function\" href=\"a01795.html#ac364e0f8b7bf60bb69156385f1f02405\">maxNodeSize</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00275\" name=\"l00275\"></a><span class=\"lineno\"> 275</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00276\" name=\"l00276\"></a><span class=\"lineno\"> 276</span> <a class=\"code hl_typedef\" href=\"a01795.html#a3e54e4eb73680c37e4fc32475f49bd46\">size_type</a> result = 0;</div>\n-<div class=\"line\"><a id=\"l00277\" name=\"l00277\"></a><span class=\"lineno\"> 277</span> <span class=\"keywordflow\">for</span> (<span class=\"keyword\">auto</span>&& type : <a class=\"code hl_variable\" href=\"a01795.html#ac775393c2fa528f96a183c71e19fb7c4\">gridView_</a>.indexSet().types(0))</div>\n-<div class=\"line\"><a id=\"l00278\" name=\"l00278\"></a><span class=\"lineno\"> 278</span> {</div>\n-<div class=\"line\"><a id=\"l00279\" name=\"l00279\"></a><span class=\"lineno\"> 279</span> <span class=\"keywordtype\">size_t</span> numFaces = ReferenceElements<double,dim>::general(type).size(1);</div>\n-<div class=\"line\"><a id=\"l00280\" name=\"l00280\"></a><span class=\"lineno\"> 280</span> <span class=\"keyword\">const</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">int</span> dofsPerElement = type.isCube() ? ((dim == 2) ? k*(k+1)*dim : k*(k+1)*(k+1)*dim) : k*dim;</div>\n-<div class=\"line\"><a id=\"l00281\" name=\"l00281\"></a><span class=\"lineno\"> 281</span> <span class=\"keyword\">const</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">int</span> dofsPerFace = type.isCube() ? (dim-2)*2*k+k+1 : (dim-1)*k+1 ;</div>\n-<div class=\"line\"><a id=\"l00282\" name=\"l00282\"></a><span class=\"lineno\"> 282</span> result = std::max(result, dofsPerElement + dofsPerFace * numFaces);</div>\n-<div class=\"line\"><a id=\"l00283\" name=\"l00283\"></a><span class=\"lineno\"> 283</span> }</div>\n-<div class=\"line\"><a id=\"l00284\" name=\"l00284\"></a><span class=\"lineno\"> 284</span> </div>\n-<div class=\"line\"><a id=\"l00285\" name=\"l00285\"></a><span class=\"lineno\"> 285</span> <span class=\"keywordflow\">return</span> result;</div>\n-<div class=\"line\"><a id=\"l00286\" name=\"l00286\"></a><span class=\"lineno\"> 286</span> }</div>\n-<div class=\"line\"><a id=\"l00287\" name=\"l00287\"></a><span class=\"lineno\"> 287</span> </div>\n-<div class=\"line\"><a id=\"l00293\" name=\"l00293\"></a><span class=\"lineno\"> 293</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n-<div class=\"line\"><a id=\"l00294\" name=\"l00294\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#a5c0fd8965f5d1ccdf8c064908a4cf019\"> 294</a></span> It <a class=\"code hl_function\" href=\"a01795.html#a5c0fd8965f5d1ccdf8c064908a4cf019\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01791.html\">Node</a>& node, It it)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00295\" name=\"l00295\"></a><span class=\"lineno\"> 295</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00296\" name=\"l00296\"></a><span class=\"lineno\"> 296</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridIndexSet = <a class=\"code hl_function\" href=\"a01795.html#a54aad1415b27afc80c12c87e4a5d595b\">gridView</a>().indexSet();</div>\n-<div class=\"line\"><a id=\"l00297\" name=\"l00297\"></a><span class=\"lineno\"> 297</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& element = node.<a class=\"code hl_function\" href=\"a01791.html#ab809e1789eaddc127bbf6912728da54a\">element</a>();</div>\n+<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"> 248</span> <span class=\"keywordtype\">void</span> evaluateFunction(<span class=\"keyword\">const</span> <span class=\"keyword\">typename</span> Traits::DomainType& x,</div>\n+<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span> std::vector<typename Traits::RangeType>& out)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span> localValuedLocalBasis_->evaluateFunction(x,out);</div>\n+<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span> </div>\n+<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"> 253</span> Transformator::apply(out, x, element_->geometry());</div>\n+<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"> 254</span> }</div>\n+<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span> </div>\n+<div class=\"line\"><a id=\"l00261\" name=\"l00261\"></a><span class=\"lineno\"> 261</span> <span class=\"keywordtype\">void</span> evaluateJacobian(<span class=\"keyword\">const</span> <span class=\"keyword\">typename</span> Traits::DomainType& x,</div>\n+<div class=\"line\"><a id=\"l00262\" name=\"l00262\"></a><span class=\"lineno\"> 262</span> std::vector<typename Traits::JacobianType>& out)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00263\" name=\"l00263\"></a><span class=\"lineno\"> 263</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00264\" name=\"l00264\"></a><span class=\"lineno\"> 264</span> localValuedLocalBasis_->evaluateJacobian(x,out);</div>\n+<div class=\"line\"><a id=\"l00265\" name=\"l00265\"></a><span class=\"lineno\"> 265</span> </div>\n+<div class=\"line\"><a id=\"l00266\" name=\"l00266\"></a><span class=\"lineno\"> 266</span> Transformator::applyJacobian(out, x, element_->geometry());</div>\n+<div class=\"line\"><a id=\"l00267\" name=\"l00267\"></a><span class=\"lineno\"> 267</span> }</div>\n+<div class=\"line\"><a id=\"l00268\" name=\"l00268\"></a><span class=\"lineno\"> 268</span> </div>\n+<div class=\"line\"><a id=\"l00275\" name=\"l00275\"></a><span class=\"lineno\"> 275</span> <span class=\"keywordtype\">void</span> partial(<span class=\"keyword\">const</span> std::array<unsigned int,2>& order,</div>\n+<div class=\"line\"><a id=\"l00276\" name=\"l00276\"></a><span class=\"lineno\"> 276</span> <span class=\"keyword\">const</span> <span class=\"keyword\">typename</span> Traits::DomainType& x,</div>\n+<div class=\"line\"><a id=\"l00277\" name=\"l00277\"></a><span class=\"lineno\"> 277</span> std::vector<typename Traits::RangeType>& out)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00278\" name=\"l00278\"></a><span class=\"lineno\"> 278</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00279\" name=\"l00279\"></a><span class=\"lineno\"> 279</span> <span class=\"keyword\">auto</span> totalOrder = std::accumulate(order.begin(), order.end(), 0);</div>\n+<div class=\"line\"><a id=\"l00280\" name=\"l00280\"></a><span class=\"lineno\"> 280</span> <span class=\"keywordflow\">if</span> (totalOrder == 0) {</div>\n+<div class=\"line\"><a id=\"l00281\" name=\"l00281\"></a><span class=\"lineno\"> 281</span> evaluateFunction(x, out);</div>\n+<div class=\"line\"><a id=\"l00282\" name=\"l00282\"></a><span class=\"lineno\"> 282</span> } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (totalOrder == 1) {</div>\n+<div class=\"line\"><a id=\"l00283\" name=\"l00283\"></a><span class=\"lineno\"> 283</span> <span class=\"keyword\">auto</span> <span class=\"keyword\">const</span> direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));</div>\n+<div class=\"line\"><a id=\"l00284\" name=\"l00284\"></a><span class=\"lineno\"> 284</span> out.resize(size());</div>\n+<div class=\"line\"><a id=\"l00285\" name=\"l00285\"></a><span class=\"lineno\"> 285</span> </div>\n+<div class=\"line\"><a id=\"l00286\" name=\"l00286\"></a><span class=\"lineno\"> 286</span> <span class=\"comment\">// TODO: The following is wasteful: We compute the full Jacobian and then return</span></div>\n+<div class=\"line\"><a id=\"l00287\" name=\"l00287\"></a><span class=\"lineno\"> 287</span> <span class=\"comment\">// only a part of it. While we need the full Jacobian of the underlying local-valued LFE,</span></div>\n+<div class=\"line\"><a id=\"l00288\" name=\"l00288\"></a><span class=\"lineno\"> 288</span> <span class=\"comment\">// it should be possible to compute only a partial Piola transform for the requested</span></div>\n+<div class=\"line\"><a id=\"l00289\" name=\"l00289\"></a><span class=\"lineno\"> 289</span> <span class=\"comment\">// partial derivatives.</span></div>\n+<div class=\"line\"><a id=\"l00290\" name=\"l00290\"></a><span class=\"lineno\"> 290</span> std::vector<typename Traits::JacobianType> fullJacobian;</div>\n+<div class=\"line\"><a id=\"l00291\" name=\"l00291\"></a><span class=\"lineno\"> 291</span> localValuedLocalBasis_->evaluateJacobian(x,fullJacobian);</div>\n+<div class=\"line\"><a id=\"l00292\" name=\"l00292\"></a><span class=\"lineno\"> 292</span> </div>\n+<div class=\"line\"><a id=\"l00293\" name=\"l00293\"></a><span class=\"lineno\"> 293</span> Transformator::applyJacobian(fullJacobian, x, element_->geometry());</div>\n+<div class=\"line\"><a id=\"l00294\" name=\"l00294\"></a><span class=\"lineno\"> 294</span> </div>\n+<div class=\"line\"><a id=\"l00295\" name=\"l00295\"></a><span class=\"lineno\"> 295</span> <span class=\"keywordflow\">for</span> (std::size_t i=0; i<out.size(); i++)</div>\n+<div class=\"line\"><a id=\"l00296\" name=\"l00296\"></a><span class=\"lineno\"> 296</span> <span class=\"keywordflow\">for</span> (std::size_t j=0; j<out[i].size(); j++)</div>\n+<div class=\"line\"><a id=\"l00297\" name=\"l00297\"></a><span class=\"lineno\"> 297</span> out[i][j] = fullJacobian[i][j][direction];</div>\n <div class=\"line\"><a id=\"l00298\" name=\"l00298\"></a><span class=\"lineno\"> 298</span> </div>\n-<div class=\"line\"><a id=\"l00299\" name=\"l00299\"></a><span class=\"lineno\"> 299</span> <span class=\"comment\">// throw if Element is not of predefined type</span></div>\n-<div class=\"line\"><a id=\"l00300\" name=\"l00300\"></a><span class=\"lineno\"> 300</span> <span class=\"keywordflow\">if</span> (not(element.type().isCube()) and not(element.type().isSimplex()))</div>\n-<div class=\"line\"><a id=\"l00301\" name=\"l00301\"></a><span class=\"lineno\"> 301</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"RaviartThomasBasis only implemented for cube and simplex elements."</span>);</div>\n+<div class=\"line\"><a id=\"l00299\" name=\"l00299\"></a><span class=\"lineno\"> 299</span> } <span class=\"keywordflow\">else</span></div>\n+<div class=\"line\"><a id=\"l00300\" name=\"l00300\"></a><span class=\"lineno\"> 300</span> DUNE_THROW(NotImplemented, <span class=\"stringliteral\">"Partial derivatives of order 2 or higher"</span>);</div>\n+<div class=\"line\"><a id=\"l00301\" name=\"l00301\"></a><span class=\"lineno\"> 301</span> }</div>\n <div class=\"line\"><a id=\"l00302\" name=\"l00302\"></a><span class=\"lineno\"> 302</span> </div>\n-<div class=\"line\"><a id=\"l00303\" name=\"l00303\"></a><span class=\"lineno\"> 303</span> <span class=\"keywordflow\">for</span>(std::size_t i=0, end=node.<a class=\"code hl_function\" href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">size</a>(); i<end; ++i, ++it)</div>\n-<div class=\"line\"><a id=\"l00304\" name=\"l00304\"></a><span class=\"lineno\"> 304</span> {</div>\n-<div class=\"line\"><a id=\"l00305\" name=\"l00305\"></a><span class=\"lineno\"> 305</span> Dune::LocalKey localKey = node.<a class=\"code hl_function\" href=\"a01791.html#a5e34559e17159d8e217a3f101fdb330b\">finiteElement</a>().localCoefficients().localKey(i);</div>\n-<div class=\"line\"><a id=\"l00306\" name=\"l00306\"></a><span class=\"lineno\"> 306</span> </div>\n-<div class=\"line\"><a id=\"l00307\" name=\"l00307\"></a><span class=\"lineno\"> 307</span> <span class=\"comment\">// The dimension of the entity that the current dof is related to</span></div>\n-<div class=\"line\"><a id=\"l00308\" name=\"l00308\"></a><span class=\"lineno\"> 308</span> <span class=\"keywordtype\">size_t</span> subentity = localKey.subEntity();</div>\n-<div class=\"line\"><a id=\"l00309\" name=\"l00309\"></a><span class=\"lineno\"> 309</span> <span class=\"keywordtype\">size_t</span> codim = localKey.codim();</div>\n-<div class=\"line\"><a id=\"l00310\" name=\"l00310\"></a><span class=\"lineno\"> 310</span> </div>\n-<div class=\"line\"><a id=\"l00311\" name=\"l00311\"></a><span class=\"lineno\"> 311</span> <span class=\"keywordflow\">if</span> (not(codim==0 or codim==1))</div>\n-<div class=\"line\"><a id=\"l00312\" name=\"l00312\"></a><span class=\"lineno\"> 312</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"Grid contains elements not supported for the RaviartThomasBasis"</span>);</div>\n-<div class=\"line\"><a id=\"l00313\" name=\"l00313\"></a><span class=\"lineno\"> 313</span> </div>\n-<div class=\"line\"><a id=\"l00314\" name=\"l00314\"></a><span class=\"lineno\"> 314</span> *it = { <a class=\"code hl_variable\" href=\"a01795.html#afcd58520d4ca4871df729b8423aa78be\">codimOffset_</a>[codim] +</div>\n-<div class=\"line\"><a id=\"l00315\" name=\"l00315\"></a><span class=\"lineno\"> 315</span> <a class=\"code hl_variable\" href=\"a01795.html#a26fbdcf76c8e3839b40affdb2413f062\">dofsPerCodim_</a>[codim] * gridIndexSet.subIndex(element, subentity, codim) + localKey.index() };</div>\n-<div class=\"line\"><a id=\"l00316\" name=\"l00316\"></a><span class=\"lineno\"> 316</span> }</div>\n-<div class=\"line\"><a id=\"l00317\" name=\"l00317\"></a><span class=\"lineno\"> 317</span> </div>\n-<div class=\"line\"><a id=\"l00318\" name=\"l00318\"></a><span class=\"lineno\"> 318</span> <span class=\"keywordflow\">return</span> it;</div>\n-<div class=\"line\"><a id=\"l00319\" name=\"l00319\"></a><span class=\"lineno\"> 319</span> }</div>\n-<div class=\"line\"><a id=\"l00320\" name=\"l00320\"></a><span class=\"lineno\"> 320</span> </div>\n-<div class=\"line\"><a id=\"l00321\" name=\"l00321\"></a><span class=\"lineno\"> 321</span><span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00322\" name=\"l00322\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#ac775393c2fa528f96a183c71e19fb7c4\"> 322</a></span> <a class=\"code hl_typedef\" href=\"a01795.html#ab389963ad645a85730a68ba538962d68\">GridView</a> <a class=\"code hl_variable\" href=\"a01795.html#ac775393c2fa528f96a183c71e19fb7c4\">gridView_</a>;</div>\n-<div class=\"line\"><a id=\"l00323\" name=\"l00323\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#afcd58520d4ca4871df729b8423aa78be\"> 323</a></span> std::array<size_t,dim+1> <a class=\"code hl_variable\" href=\"a01795.html#afcd58520d4ca4871df729b8423aa78be\">codimOffset_</a>;</div>\n-<div class=\"line\"><a id=\"l00324\" name=\"l00324\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#a6b79ac0c794d5c74cb5a547116b02515\"> 324</a></span> FiniteElementMap <a class=\"code hl_variable\" href=\"a01795.html#a6b79ac0c794d5c74cb5a547116b02515\">finiteElementMap_</a>;</div>\n-<div class=\"line\"><a id=\"l00325\" name=\"l00325\"></a><span class=\"lineno\"> 325</span> <span class=\"comment\">// Number of dofs per entity type depending on the entity's codimension and type</span></div>\n-<div class=\"line\"><a id=\"l00326\" name=\"l00326\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#a26fbdcf76c8e3839b40affdb2413f062\"> 326</a></span> std::array<int,dim+1> <a class=\"code hl_variable\" href=\"a01795.html#a26fbdcf76c8e3839b40affdb2413f062\">dofsPerCodim_</a>;</div>\n-<div class=\"line\"><a id=\"l00327\" name=\"l00327\"></a><span class=\"lineno\"> 327</span>};</div>\n-<div class=\"line\"><a id=\"l00328\" name=\"l00328\"></a><span class=\"lineno\"> 328</span> </div>\n-<div class=\"line\"><a id=\"l00329\" name=\"l00329\"></a><span class=\"lineno\"> 329</span> </div>\n-<div class=\"line\"><a id=\"l00330\" name=\"l00330\"></a><span class=\"lineno\"> 330</span> </div>\n-<div class=\"line\"><a id=\"l00331\" name=\"l00331\"></a><span class=\"lineno\"> 331</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k></div>\n-<div class=\"line\"><a id=\"l00332\" name=\"l00332\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01791.html\"> 332</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01791.html\">RaviartThomasNode</a> :</div>\n-<div class=\"line\"><a id=\"l00333\" name=\"l00333\"></a><span class=\"lineno\"> 333</span> <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01711.html\">LeafBasisNode</a></div>\n-<div class=\"line\"><a id=\"l00334\" name=\"l00334\"></a><span class=\"lineno\"> 334</span>{</div>\n-<div class=\"line\"><a id=\"l00335\" name=\"l00335\"></a><span class=\"lineno\"> 335</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dim = GV::dimension;</div>\n-<div class=\"line\"><a id=\"l00336\" name=\"l00336\"></a><span class=\"lineno\"> 336</span> </div>\n-<div class=\"line\"><a id=\"l00337\" name=\"l00337\"></a><span class=\"lineno\"> 337</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00338\" name=\"l00338\"></a><span class=\"lineno\"> 338</span> </div>\n-<div class=\"line\"><a id=\"l00339\" name=\"l00339\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01791.html#a8b951e77b8017813eff57d47ec841d75\"> 339</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">size_type</a> = std::size_t;</div>\n-<div class=\"line\"><a id=\"l00340\" name=\"l00340\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01791.html#a5508276610b3022011979625761c54f1\"> 340</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01791.html#a5508276610b3022011979625761c54f1\">Element</a> = <span class=\"keyword\">typename</span> GV::template Codim<0>::Entity;</div>\n-<div class=\"line\"><a id=\"l00341\" name=\"l00341\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01791.html#a04da4619b4aa1def1345fbf02d7e3d11\"> 341</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01791.html#a04da4619b4aa1def1345fbf02d7e3d11\">FiniteElementMap</a> = <span class=\"keyword\">typename</span> Impl::RaviartThomasLocalFiniteElementMap<GV, dim, double, k>;</div>\n-<div class=\"line\"><a id=\"l00342\" name=\"l00342\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01791.html#a1f96631de9aa36157ca9f6880d9c3f6b\"> 342</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01791.html#a1f96631de9aa36157ca9f6880d9c3f6b\">FiniteElement</a> = Impl::GlobalValuedLocalFiniteElement<Impl::ContravariantPiolaTransformator,</div>\n-<div class=\"line\"><a id=\"l00343\" name=\"l00343\"></a><span class=\"lineno\"> 343</span> <span class=\"keyword\">typename</span> FiniteElementMap::FiniteElement,</div>\n-<div class=\"line\"><a id=\"l00344\" name=\"l00344\"></a><span class=\"lineno\"> 344</span> <a class=\"code hl_typedef\" href=\"a01791.html#a5508276610b3022011979625761c54f1\">Element</a>>;</div>\n+<div class=\"line\"><a id=\"l00304\" name=\"l00304\"></a><span class=\"lineno\"> 304</span> <span class=\"keyword\">auto</span> order()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00305\" name=\"l00305\"></a><span class=\"lineno\"> 305</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00306\" name=\"l00306\"></a><span class=\"lineno\"> 306</span> <span class=\"keywordflow\">return</span> localValuedLocalBasis_->order();</div>\n+<div class=\"line\"><a id=\"l00307\" name=\"l00307\"></a><span class=\"lineno\"> 307</span> }</div>\n+<div class=\"line\"><a id=\"l00308\" name=\"l00308\"></a><span class=\"lineno\"> 308</span> </div>\n+<div class=\"line\"><a id=\"l00309\" name=\"l00309\"></a><span class=\"lineno\"> 309</span> <span class=\"keyword\">const</span> LocalValuedLocalBasis* localValuedLocalBasis_;</div>\n+<div class=\"line\"><a id=\"l00310\" name=\"l00310\"></a><span class=\"lineno\"> 310</span> <span class=\"keyword\">const</span> Element* element_;</div>\n+<div class=\"line\"><a id=\"l00311\" name=\"l00311\"></a><span class=\"lineno\"> 311</span> };</div>\n+<div class=\"line\"><a id=\"l00312\" name=\"l00312\"></a><span class=\"lineno\"> 312</span> </div>\n+<div class=\"line\"><a id=\"l00321\" name=\"l00321\"></a><span class=\"lineno\"> 321</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Transformator, <span class=\"keyword\">class</span> LocalValuedLocalInterpolation, <span class=\"keyword\">class</span> Element></div>\n+<div class=\"line\"><a id=\"l00322\" name=\"l00322\"></a><span class=\"lineno\"> 322</span> <span class=\"keyword\">class </span>GlobalValuedLocalInterpolation</div>\n+<div class=\"line\"><a id=\"l00323\" name=\"l00323\"></a><span class=\"lineno\"> 323</span> {</div>\n+<div class=\"line\"><a id=\"l00324\" name=\"l00324\"></a><span class=\"lineno\"> 324</span> <span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00327\" name=\"l00327\"></a><span class=\"lineno\"> 327</span> <span class=\"keywordtype\">void</span> bind(<span class=\"keyword\">const</span> LocalValuedLocalInterpolation& localValuedLocalInterpolation, <span class=\"keyword\">const</span> Element& element)</div>\n+<div class=\"line\"><a id=\"l00328\" name=\"l00328\"></a><span class=\"lineno\"> 328</span> {</div>\n+<div class=\"line\"><a id=\"l00329\" name=\"l00329\"></a><span class=\"lineno\"> 329</span> localValuedLocalInterpolation_ = &localValuedLocalInterpolation;</div>\n+<div class=\"line\"><a id=\"l00330\" name=\"l00330\"></a><span class=\"lineno\"> 330</span> element_ = &element;</div>\n+<div class=\"line\"><a id=\"l00331\" name=\"l00331\"></a><span class=\"lineno\"> 331</span> }</div>\n+<div class=\"line\"><a id=\"l00332\" name=\"l00332\"></a><span class=\"lineno\"> 332</span> </div>\n+<div class=\"line\"><a id=\"l00333\" name=\"l00333\"></a><span class=\"lineno\"> 333</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> F, <span class=\"keyword\">typename</span> C></div>\n+<div class=\"line\"><a id=\"l00334\" name=\"l00334\"></a><span class=\"lineno\"> 334</span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a00219.html#a13b0c6bf02d744e7b2078d1a535b5211\">interpolate</a> (<span class=\"keyword\">const</span> F& f, std::vector<C>& out)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00335\" name=\"l00335\"></a><span class=\"lineno\"> 335</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00336\" name=\"l00336\"></a><span class=\"lineno\"> 336</span> <span class=\"keyword\">using </span>LocalCoordinate = <span class=\"keyword\">typename</span> Element::Geometry::LocalCoordinate;</div>\n+<div class=\"line\"><a id=\"l00337\" name=\"l00337\"></a><span class=\"lineno\"> 337</span> <span class=\"keyword\">typename</span> Transformator::template LocalValuedFunction<F,LocalCoordinate,Element> localValuedFunction(f, *element_);</div>\n+<div class=\"line\"><a id=\"l00338\" name=\"l00338\"></a><span class=\"lineno\"> 338</span> localValuedLocalInterpolation_->interpolate(localValuedFunction, out);</div>\n+<div class=\"line\"><a id=\"l00339\" name=\"l00339\"></a><span class=\"lineno\"> 339</span> }</div>\n+<div class=\"line\"><a id=\"l00340\" name=\"l00340\"></a><span class=\"lineno\"> 340</span> </div>\n+<div class=\"line\"><a id=\"l00341\" name=\"l00341\"></a><span class=\"lineno\"> 341</span> <span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00342\" name=\"l00342\"></a><span class=\"lineno\"> 342</span> <span class=\"keyword\">const</span> LocalValuedLocalInterpolation* localValuedLocalInterpolation_;</div>\n+<div class=\"line\"><a id=\"l00343\" name=\"l00343\"></a><span class=\"lineno\"> 343</span> <span class=\"keyword\">const</span> Element* element_;</div>\n+<div class=\"line\"><a id=\"l00344\" name=\"l00344\"></a><span class=\"lineno\"> 344</span> };</div>\n <div class=\"line\"><a id=\"l00345\" name=\"l00345\"></a><span class=\"lineno\"> 345</span> </div>\n-<div class=\"line\"><a id=\"l00346\" name=\"l00346\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01791.html#aac2cef6fa5a69ede4774780a389f32f7\"> 346</a></span> <a class=\"code hl_function\" href=\"a01791.html#aac2cef6fa5a69ede4774780a389f32f7\">RaviartThomasNode</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01791.html#a04da4619b4aa1def1345fbf02d7e3d11\">FiniteElementMap</a>* finiteElementMap) :</div>\n-<div class=\"line\"><a id=\"l00347\" name=\"l00347\"></a><span class=\"lineno\"> 347</span> <a class=\"code hl_variable\" href=\"a01791.html#a55e93eaa2cef54de86d914bbac53a678\">element_</a>(nullptr),</div>\n-<div class=\"line\"><a id=\"l00348\" name=\"l00348\"></a><span class=\"lineno\"> 348</span> <a class=\"code hl_variable\" href=\"a01791.html#ae5551ae5374e41f77b5f474901341c08\">finiteElementMap_</a>(finiteElementMap)</div>\n-<div class=\"line\"><a id=\"l00349\" name=\"l00349\"></a><span class=\"lineno\"> 349</span> { }</div>\n-<div class=\"line\"><a id=\"l00350\" name=\"l00350\"></a><span class=\"lineno\"> 350</span> </div>\n-<div class=\"line\"><a id=\"l00352\" name=\"l00352\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01791.html#ab809e1789eaddc127bbf6912728da54a\"> 352</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01791.html#a5508276610b3022011979625761c54f1\">Element</a>& <a class=\"code hl_function\" href=\"a01791.html#ab809e1789eaddc127bbf6912728da54a\">element</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00353\" name=\"l00353\"></a><span class=\"lineno\"> 353</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00354\" name=\"l00354\"></a><span class=\"lineno\"> 354</span> <span class=\"keywordflow\">return</span> *<a class=\"code hl_variable\" href=\"a01791.html#a55e93eaa2cef54de86d914bbac53a678\">element_</a>;</div>\n-<div class=\"line\"><a id=\"l00355\" name=\"l00355\"></a><span class=\"lineno\"> 355</span> }</div>\n-<div class=\"line\"><a id=\"l00356\" name=\"l00356\"></a><span class=\"lineno\"> 356</span> </div>\n-<div class=\"line\"><a id=\"l00361\" name=\"l00361\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01791.html#a5e34559e17159d8e217a3f101fdb330b\"> 361</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01791.html#a1f96631de9aa36157ca9f6880d9c3f6b\">FiniteElement</a>& <a class=\"code hl_function\" href=\"a01791.html#a5e34559e17159d8e217a3f101fdb330b\">finiteElement</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00362\" name=\"l00362\"></a><span class=\"lineno\"> 362</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00363\" name=\"l00363\"></a><span class=\"lineno\"> 363</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01791.html#ac02b19d7c9fb373fa5cef0866e548a06\">finiteElement_</a>;</div>\n-<div class=\"line\"><a id=\"l00364\" name=\"l00364\"></a><span class=\"lineno\"> 364</span> }</div>\n-<div class=\"line\"><a id=\"l00365\" name=\"l00365\"></a><span class=\"lineno\"> 365</span> </div>\n-<div class=\"line\"><a id=\"l00367\" name=\"l00367\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01791.html#a0924826eab72f86aad18127083df89ab\"> 367</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01791.html#a0924826eab72f86aad18127083df89ab\">bind</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01791.html#a5508276610b3022011979625761c54f1\">Element</a>& e)</div>\n-<div class=\"line\"><a id=\"l00368\" name=\"l00368\"></a><span class=\"lineno\"> 368</span> {</div>\n-<div class=\"line\"><a id=\"l00369\" name=\"l00369\"></a><span class=\"lineno\"> 369</span> <a class=\"code hl_variable\" href=\"a01791.html#a55e93eaa2cef54de86d914bbac53a678\">element_</a> = &e;</div>\n-<div class=\"line\"><a id=\"l00370\" name=\"l00370\"></a><span class=\"lineno\"> 370</span> <a class=\"code hl_variable\" href=\"a01791.html#ac02b19d7c9fb373fa5cef0866e548a06\">finiteElement_</a>.bind((<a class=\"code hl_variable\" href=\"a01791.html#ae5551ae5374e41f77b5f474901341c08\">finiteElementMap_</a>->find(*<a class=\"code hl_variable\" href=\"a01791.html#a55e93eaa2cef54de86d914bbac53a678\">element_</a>)), e);</div>\n-<div class=\"line\"><a id=\"l00371\" name=\"l00371\"></a><span class=\"lineno\"> 371</span> this-><a class=\"code hl_function\" href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\">setSize</a>(<a class=\"code hl_variable\" href=\"a01791.html#ac02b19d7c9fb373fa5cef0866e548a06\">finiteElement_</a>.size());</div>\n-<div class=\"line\"><a id=\"l00372\" name=\"l00372\"></a><span class=\"lineno\"> 372</span> }</div>\n-<div class=\"line\"><a id=\"l00373\" name=\"l00373\"></a><span class=\"lineno\"> 373</span> </div>\n-<div class=\"line\"><a id=\"l00374\" name=\"l00374\"></a><span class=\"lineno\"> 374</span><span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00375\" name=\"l00375\"></a><span class=\"lineno\"> 375</span> </div>\n-<div class=\"line\"><a id=\"l00376\" name=\"l00376\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01791.html#ac02b19d7c9fb373fa5cef0866e548a06\"> 376</a></span> <a class=\"code hl_typedef\" href=\"a01791.html#a1f96631de9aa36157ca9f6880d9c3f6b\">FiniteElement</a> <a class=\"code hl_variable\" href=\"a01791.html#ac02b19d7c9fb373fa5cef0866e548a06\">finiteElement_</a>;</div>\n-<div class=\"line\"><a id=\"l00377\" name=\"l00377\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01791.html#a55e93eaa2cef54de86d914bbac53a678\"> 377</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01791.html#a5508276610b3022011979625761c54f1\">Element</a>* <a class=\"code hl_variable\" href=\"a01791.html#a55e93eaa2cef54de86d914bbac53a678\">element_</a>;</div>\n-<div class=\"line\"><a id=\"l00378\" name=\"l00378\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01791.html#ae5551ae5374e41f77b5f474901341c08\"> 378</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01791.html#a04da4619b4aa1def1345fbf02d7e3d11\">FiniteElementMap</a>* <a class=\"code hl_variable\" href=\"a01791.html#ae5551ae5374e41f77b5f474901341c08\">finiteElementMap_</a>;</div>\n-<div class=\"line\"><a id=\"l00379\" name=\"l00379\"></a><span class=\"lineno\"> 379</span>};</div>\n-<div class=\"line\"><a id=\"l00380\" name=\"l00380\"></a><span class=\"lineno\"> 380</span> </div>\n-<div class=\"line\"><a id=\"l00381\" name=\"l00381\"></a><span class=\"lineno\"> 381</span><span class=\"keyword\">namespace </span>BasisFactory {</div>\n-<div class=\"line\"><a id=\"l00382\" name=\"l00382\"></a><span class=\"lineno\"> 382</span> </div>\n-<div class=\"line\"><a id=\"l00390\" name=\"l00390\"></a><span class=\"lineno\"> 390</span><span class=\"keyword\">template</span><std::<span class=\"keywordtype\">size_t</span> k></div>\n-<div class=\"line\"><a id=\"l00391\" name=\"l00391\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#gac7c656af99728aa385381f5d78ae0b98\"> 391</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00213.html#gac7c656af99728aa385381f5d78ae0b98\">raviartThomas</a>()</div>\n-<div class=\"line\"><a id=\"l00392\" name=\"l00392\"></a><span class=\"lineno\"> 392</span>{</div>\n-<div class=\"line\"><a id=\"l00393\" name=\"l00393\"></a><span class=\"lineno\"> 393</span> <span class=\"keywordflow\">return</span> [](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridView) {</div>\n-<div class=\"line\"><a id=\"l00394\" name=\"l00394\"></a><span class=\"lineno\"> 394</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01795.html\">RaviartThomasPreBasis</a><std::decay_t<<span class=\"keyword\">decltype</span>(gridView)>, k>(gridView);</div>\n-<div class=\"line\"><a id=\"l00395\" name=\"l00395\"></a><span class=\"lineno\"> 395</span> };</div>\n-<div class=\"line\"><a id=\"l00396\" name=\"l00396\"></a><span class=\"lineno\"> 396</span>}</div>\n-<div class=\"line\"><a id=\"l00397\" name=\"l00397\"></a><span class=\"lineno\"> 397</span> </div>\n-<div class=\"line\"><a id=\"l00398\" name=\"l00398\"></a><span class=\"lineno\"> 398</span>} <span class=\"comment\">// end namespace BasisFactory</span></div>\n+<div class=\"line\"><a id=\"l00346\" name=\"l00346\"></a><span class=\"lineno\"> 346</span> </div>\n+<div class=\"line\"><a id=\"l00353\" name=\"l00353\"></a><span class=\"lineno\"> 353</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Transformator, <span class=\"keyword\">class</span> LocalValuedLFE, <span class=\"keyword\">class</span> Element></div>\n+<div class=\"line\"><a id=\"l00354\" name=\"l00354\"></a><span class=\"lineno\"> 354</span> <span class=\"keyword\">class </span>GlobalValuedLocalFiniteElement</div>\n+<div class=\"line\"><a id=\"l00355\" name=\"l00355\"></a><span class=\"lineno\"> 355</span> {</div>\n+<div class=\"line\"><a id=\"l00356\" name=\"l00356\"></a><span class=\"lineno\"> 356</span> <span class=\"keyword\">using </span>LocalBasis = GlobalValuedLocalBasis<Transformator,</div>\n+<div class=\"line\"><a id=\"l00357\" name=\"l00357\"></a><span class=\"lineno\"> 357</span> <span class=\"keyword\">typename</span> LocalValuedLFE::Traits::LocalBasisType,</div>\n+<div class=\"line\"><a id=\"l00358\" name=\"l00358\"></a><span class=\"lineno\"> 358</span> Element>;</div>\n+<div class=\"line\"><a id=\"l00359\" name=\"l00359\"></a><span class=\"lineno\"> 359</span> <span class=\"keyword\">using </span>LocalInterpolation = GlobalValuedLocalInterpolation<Transformator,</div>\n+<div class=\"line\"><a id=\"l00360\" name=\"l00360\"></a><span class=\"lineno\"> 360</span> <span class=\"keyword\">typename</span> LocalValuedLFE::Traits::LocalInterpolationType,</div>\n+<div class=\"line\"><a id=\"l00361\" name=\"l00361\"></a><span class=\"lineno\"> 361</span> Element>;</div>\n+<div class=\"line\"><a id=\"l00362\" name=\"l00362\"></a><span class=\"lineno\"> 362</span> </div>\n+<div class=\"line\"><a id=\"l00363\" name=\"l00363\"></a><span class=\"lineno\"> 363</span> <span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00366\" name=\"l00366\"></a><span class=\"lineno\"> 366</span> <span class=\"keyword\">using </span>Traits = LocalFiniteElementTraits<LocalBasis,</div>\n+<div class=\"line\"><a id=\"l00367\" name=\"l00367\"></a><span class=\"lineno\"> 367</span> <span class=\"keyword\">typename</span> LocalValuedLFE::Traits::LocalCoefficientsType,</div>\n+<div class=\"line\"><a id=\"l00368\" name=\"l00368\"></a><span class=\"lineno\"> 368</span> LocalInterpolation>;</div>\n+<div class=\"line\"><a id=\"l00369\" name=\"l00369\"></a><span class=\"lineno\"> 369</span> </div>\n+<div class=\"line\"><a id=\"l00370\" name=\"l00370\"></a><span class=\"lineno\"> 370</span> GlobalValuedLocalFiniteElement() {}</div>\n+<div class=\"line\"><a id=\"l00371\" name=\"l00371\"></a><span class=\"lineno\"> 371</span> </div>\n+<div class=\"line\"><a id=\"l00372\" name=\"l00372\"></a><span class=\"lineno\"> 372</span> <span class=\"keywordtype\">void</span> bind(<span class=\"keyword\">const</span> LocalValuedLFE& localValuedLFE, <span class=\"keyword\">const</span> Element& element)</div>\n+<div class=\"line\"><a id=\"l00373\" name=\"l00373\"></a><span class=\"lineno\"> 373</span> {</div>\n+<div class=\"line\"><a id=\"l00374\" name=\"l00374\"></a><span class=\"lineno\"> 374</span> globalValuedLocalBasis_.bind(localValuedLFE.localBasis(), element);</div>\n+<div class=\"line\"><a id=\"l00375\" name=\"l00375\"></a><span class=\"lineno\"> 375</span> globalValuedLocalInterpolation_.bind(localValuedLFE.localInterpolation(), element);</div>\n+<div class=\"line\"><a id=\"l00376\" name=\"l00376\"></a><span class=\"lineno\"> 376</span> localValuedLFE_ = &localValuedLFE;</div>\n+<div class=\"line\"><a id=\"l00377\" name=\"l00377\"></a><span class=\"lineno\"> 377</span> }</div>\n+<div class=\"line\"><a id=\"l00378\" name=\"l00378\"></a><span class=\"lineno\"> 378</span> </div>\n+<div class=\"line\"><a id=\"l00381\" name=\"l00381\"></a><span class=\"lineno\"> 381</span> <span class=\"keyword\">const</span> <span class=\"keyword\">typename</span> Traits::LocalBasisType& localBasis()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00382\" name=\"l00382\"></a><span class=\"lineno\"> 382</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00383\" name=\"l00383\"></a><span class=\"lineno\"> 383</span> <span class=\"keywordflow\">return</span> globalValuedLocalBasis_;</div>\n+<div class=\"line\"><a id=\"l00384\" name=\"l00384\"></a><span class=\"lineno\"> 384</span> }</div>\n+<div class=\"line\"><a id=\"l00385\" name=\"l00385\"></a><span class=\"lineno\"> 385</span> </div>\n+<div class=\"line\"><a id=\"l00388\" name=\"l00388\"></a><span class=\"lineno\"> 388</span> <span class=\"keyword\">const</span> <span class=\"keyword\">typename</span> Traits::LocalCoefficientsType& localCoefficients()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00389\" name=\"l00389\"></a><span class=\"lineno\"> 389</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00390\" name=\"l00390\"></a><span class=\"lineno\"> 390</span> <span class=\"keywordflow\">return</span> localValuedLFE_->localCoefficients();</div>\n+<div class=\"line\"><a id=\"l00391\" name=\"l00391\"></a><span class=\"lineno\"> 391</span> }</div>\n+<div class=\"line\"><a id=\"l00392\" name=\"l00392\"></a><span class=\"lineno\"> 392</span> </div>\n+<div class=\"line\"><a id=\"l00395\" name=\"l00395\"></a><span class=\"lineno\"> 395</span> <span class=\"keyword\">const</span> <span class=\"keyword\">typename</span> Traits::LocalInterpolationType& localInterpolation()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00396\" name=\"l00396\"></a><span class=\"lineno\"> 396</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00397\" name=\"l00397\"></a><span class=\"lineno\"> 397</span> <span class=\"keywordflow\">return</span> globalValuedLocalInterpolation_;</div>\n+<div class=\"line\"><a id=\"l00398\" name=\"l00398\"></a><span class=\"lineno\"> 398</span> }</div>\n <div class=\"line\"><a id=\"l00399\" name=\"l00399\"></a><span class=\"lineno\"> 399</span> </div>\n-<div class=\"line\"><a id=\"l00400\" name=\"l00400\"></a><span class=\"lineno\"> 400</span> </div>\n-<div class=\"line\"><a id=\"l00401\" name=\"l00401\"></a><span class=\"lineno\"> 401</span> </div>\n-<div class=\"line\"><a id=\"l00402\" name=\"l00402\"></a><span class=\"lineno\"> 402</span><span class=\"comment\">// *****************************************************************************</span></div>\n-<div class=\"line\"><a id=\"l00403\" name=\"l00403\"></a><span class=\"lineno\"> 403</span><span class=\"comment\">// This is the actual global basis implementation based on the reusable parts.</span></div>\n-<div class=\"line\"><a id=\"l00404\" name=\"l00404\"></a><span class=\"lineno\"> 404</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00401\" name=\"l00401\"></a><span class=\"lineno\"> 401</span> std::size_t size()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00402\" name=\"l00402\"></a><span class=\"lineno\"> 402</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00403\" name=\"l00403\"></a><span class=\"lineno\"> 403</span> <span class=\"keywordflow\">return</span> localValuedLFE_->size();</div>\n+<div class=\"line\"><a id=\"l00404\" name=\"l00404\"></a><span class=\"lineno\"> 404</span> }</div>\n <div class=\"line\"><a id=\"l00405\" name=\"l00405\"></a><span class=\"lineno\"> 405</span> </div>\n-<div class=\"line\"><a id=\"l00413\" name=\"l00413\"></a><span class=\"lineno\"> 413</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k></div>\n-<div class=\"line\"><a id=\"l00414\" name=\"l00414\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a79a7c0c6e2a4ba12c82164fcbbae6c63\"> 414</a></span><span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01555.html\">RaviartThomasBasis</a> = <a class=\"code hl_class\" href=\"a01555.html\">DefaultGlobalBasis<RaviartThomasPreBasis<GV, k></a> >;</div>\n-<div class=\"line\"><a id=\"l00415\" name=\"l00415\"></a><span class=\"lineno\"> 415</span> </div>\n-<div class=\"line\"><a id=\"l00416\" name=\"l00416\"></a><span class=\"lineno\"> 416</span>} <span class=\"comment\">// end namespace Functions</span></div>\n-<div class=\"line\"><a id=\"l00417\" name=\"l00417\"></a><span class=\"lineno\"> 417</span>} <span class=\"comment\">// end namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00418\" name=\"l00418\"></a><span class=\"lineno\"> 418</span> </div>\n+<div class=\"line\"><a id=\"l00408\" name=\"l00408\"></a><span class=\"lineno\"> 408</span> GeometryType type()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00409\" name=\"l00409\"></a><span class=\"lineno\"> 409</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00410\" name=\"l00410\"></a><span class=\"lineno\"> 410</span> <span class=\"keywordflow\">return</span> localValuedLFE_->type();</div>\n+<div class=\"line\"><a id=\"l00411\" name=\"l00411\"></a><span class=\"lineno\"> 411</span> }</div>\n+<div class=\"line\"><a id=\"l00412\" name=\"l00412\"></a><span class=\"lineno\"> 412</span> </div>\n+<div class=\"line\"><a id=\"l00413\" name=\"l00413\"></a><span class=\"lineno\"> 413</span> <span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00414\" name=\"l00414\"></a><span class=\"lineno\"> 414</span> </div>\n+<div class=\"line\"><a id=\"l00415\" name=\"l00415\"></a><span class=\"lineno\"> 415</span> <span class=\"keyword\">typename</span> Traits::LocalBasisType globalValuedLocalBasis_;</div>\n+<div class=\"line\"><a id=\"l00416\" name=\"l00416\"></a><span class=\"lineno\"> 416</span> <span class=\"keyword\">typename</span> Traits::LocalInterpolationType globalValuedLocalInterpolation_;</div>\n+<div class=\"line\"><a id=\"l00417\" name=\"l00417\"></a><span class=\"lineno\"> 417</span> <span class=\"keyword\">const</span> LocalValuedLFE* localValuedLFE_;</div>\n+<div class=\"line\"><a id=\"l00418\" name=\"l00418\"></a><span class=\"lineno\"> 418</span> };</div>\n <div class=\"line\"><a id=\"l00419\" name=\"l00419\"></a><span class=\"lineno\"> 419</span> </div>\n-<div class=\"line\"><a id=\"l00420\" name=\"l00420\"></a><span class=\"lineno\"> 420</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH</span></div>\n-<div class=\"ttc\" id=\"aa00119_html\"><div class=\"ttname\"><a href=\"a00119.html\">defaultglobalbasis.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00134_html\"><div class=\"ttname\"><a href=\"a00134.html\">globalvaluedlocalfiniteelement.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00191_html\"><div class=\"ttname\"><a href=\"a00191.html\">nodes.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00213_html_ga0d8eb549af76bc2563ab189e63668ee5\"><div class=\"ttname\"><a href=\"a00213.html#ga0d8eb549af76bc2563ab189e63668ee5\">Dune::Functions::BasisFactory::power</a></div><div class=\"ttdeci\">auto power(ChildPreBasisFactory &&childPreBasisFactory, const IndexMergingStrategy &)</div><div class=\"ttdoc\">Create a pre-basis factory that can build a PowerPreBasis.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:369</div></div>\n-<div class=\"ttc\" id=\"aa00213_html_gac7c656af99728aa385381f5d78ae0b98\"><div class=\"ttname\"><a href=\"a00213.html#gac7c656af99728aa385381f5d78ae0b98\">Dune::Functions::BasisFactory::raviartThomas</a></div><div class=\"ttdeci\">auto raviartThomas()</div><div class=\"ttdoc\">Create a pre-basis factory that can create a Raviart-Thomas pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:391</div></div>\n-<div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa01555_html\"><div class=\"ttname\"><a href=\"a01555.html\">Dune::Functions::DefaultGlobalBasis</a></div><div class=\"ttdoc\">Global basis for given pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:46</div></div>\n-<div class=\"ttc\" id=\"aa01707_html_a859d50513645ef2ea0188d0779c1df30\"><div class=\"ttname\"><a href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">Dune::Functions::BasisNodeMixin::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:142</div></div>\n-<div class=\"ttc\" id=\"aa01707_html_aa8a0b9332c5d9fd44b680acc810502cd\"><div class=\"ttname\"><a href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">Dune::Functions::BasisNodeMixin::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:128</div></div>\n-<div class=\"ttc\" id=\"aa01707_html_ae93815e5c4012f7be5d11786f40d267a\"><div class=\"ttname\"><a href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\">Dune::Functions::BasisNodeMixin::setSize</a></div><div class=\"ttdeci\">void setSize(const size_type size)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:164</div></div>\n-<div class=\"ttc\" id=\"aa01711_html\"><div class=\"ttname\"><a href=\"a01711.html\">Dune::Functions::LeafBasisNode</a></div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:186</div></div>\n-<div class=\"ttc\" id=\"aa01791_html\"><div class=\"ttname\"><a href=\"a01791.html\">Dune::Functions::RaviartThomasNode</a></div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:334</div></div>\n-<div class=\"ttc\" id=\"aa01791_html_a04da4619b4aa1def1345fbf02d7e3d11\"><div class=\"ttname\"><a href=\"a01791.html#a04da4619b4aa1def1345fbf02d7e3d11\">Dune::Functions::RaviartThomasNode::FiniteElementMap</a></div><div class=\"ttdeci\">typename Impl::RaviartThomasLocalFiniteElementMap< GV, dim, double, k > FiniteElementMap</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:341</div></div>\n-<div class=\"ttc\" id=\"aa01791_html_a0924826eab72f86aad18127083df89ab\"><div class=\"ttname\"><a href=\"a01791.html#a0924826eab72f86aad18127083df89ab\">Dune::Functions::RaviartThomasNode::bind</a></div><div class=\"ttdeci\">void bind(const Element &e)</div><div class=\"ttdoc\">Bind to element.</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:367</div></div>\n-<div class=\"ttc\" id=\"aa01791_html_a1f96631de9aa36157ca9f6880d9c3f6b\"><div class=\"ttname\"><a href=\"a01791.html#a1f96631de9aa36157ca9f6880d9c3f6b\">Dune::Functions::RaviartThomasNode::FiniteElement</a></div><div class=\"ttdeci\">Impl::GlobalValuedLocalFiniteElement< Impl::ContravariantPiolaTransformator, typename FiniteElementMap::FiniteElement, Element > FiniteElement</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:344</div></div>\n-<div class=\"ttc\" id=\"aa01791_html_a5508276610b3022011979625761c54f1\"><div class=\"ttname\"><a href=\"a01791.html#a5508276610b3022011979625761c54f1\">Dune::Functions::RaviartThomasNode::Element</a></div><div class=\"ttdeci\">typename GV::template Codim< 0 >::Entity Element</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:340</div></div>\n-<div class=\"ttc\" id=\"aa01791_html_a55e93eaa2cef54de86d914bbac53a678\"><div class=\"ttname\"><a href=\"a01791.html#a55e93eaa2cef54de86d914bbac53a678\">Dune::Functions::RaviartThomasNode::element_</a></div><div class=\"ttdeci\">const Element * element_</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:377</div></div>\n-<div class=\"ttc\" id=\"aa01791_html_a5e34559e17159d8e217a3f101fdb330b\"><div class=\"ttname\"><a href=\"a01791.html#a5e34559e17159d8e217a3f101fdb330b\">Dune::Functions::RaviartThomasNode::finiteElement</a></div><div class=\"ttdeci\">const FiniteElement & finiteElement() const</div><div class=\"ttdoc\">Return the LocalFiniteElement for the element we are bound to.</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:361</div></div>\n-<div class=\"ttc\" id=\"aa01791_html_aac2cef6fa5a69ede4774780a389f32f7\"><div class=\"ttname\"><a href=\"a01791.html#aac2cef6fa5a69ede4774780a389f32f7\">Dune::Functions::RaviartThomasNode::RaviartThomasNode</a></div><div class=\"ttdeci\">RaviartThomasNode(const FiniteElementMap *finiteElementMap)</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:346</div></div>\n-<div class=\"ttc\" id=\"aa01791_html_ab809e1789eaddc127bbf6912728da54a\"><div class=\"ttname\"><a href=\"a01791.html#ab809e1789eaddc127bbf6912728da54a\">Dune::Functions::RaviartThomasNode::element</a></div><div class=\"ttdeci\">const Element & element() const</div><div class=\"ttdoc\">Return current element, throw if unbound.</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:352</div></div>\n-<div class=\"ttc\" id=\"aa01791_html_ac02b19d7c9fb373fa5cef0866e548a06\"><div class=\"ttname\"><a href=\"a01791.html#ac02b19d7c9fb373fa5cef0866e548a06\">Dune::Functions::RaviartThomasNode::finiteElement_</a></div><div class=\"ttdeci\">FiniteElement finiteElement_</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:376</div></div>\n-<div class=\"ttc\" id=\"aa01791_html_ae5551ae5374e41f77b5f474901341c08\"><div class=\"ttname\"><a href=\"a01791.html#ae5551ae5374e41f77b5f474901341c08\">Dune::Functions::RaviartThomasNode::finiteElementMap_</a></div><div class=\"ttdeci\">const FiniteElementMap * finiteElementMap_</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:378</div></div>\n-<div class=\"ttc\" id=\"aa01795_html\"><div class=\"ttname\"><a href=\"a01795.html\">Dune::Functions::RaviartThomasPreBasis</a></div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:192</div></div>\n-<div class=\"ttc\" id=\"aa01795_html_a000fee05b7887b6c7afaa7ad923651b2\"><div class=\"ttname\"><a href=\"a01795.html#a000fee05b7887b6c7afaa7ad923651b2\">Dune::Functions::RaviartThomasPreBasis::minMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type minMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:205</div></div>\n-<div class=\"ttc\" id=\"aa01795_html_a05de07d386bbf54c0b153c89c49168c7\"><div class=\"ttname\"><a href=\"a01795.html#a05de07d386bbf54c0b153c89c49168c7\">Dune::Functions::RaviartThomasPreBasis::maxMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type maxMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:204</div></div>\n-<div class=\"ttc\" id=\"aa01795_html_a14a96e80dbb53e4afadfda189f81c4b0\"><div class=\"ttname\"><a href=\"a01795.html#a14a96e80dbb53e4afadfda189f81c4b0\">Dune::Functions::RaviartThomasPreBasis::makeNode</a></div><div class=\"ttdeci\">Node makeNode() const</div><div class=\"ttdoc\">Create tree node.</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:250</div></div>\n-<div class=\"ttc\" id=\"aa01795_html_a26fbdcf76c8e3839b40affdb2413f062\"><div class=\"ttname\"><a href=\"a01795.html#a26fbdcf76c8e3839b40affdb2413f062\">Dune::Functions::RaviartThomasPreBasis::dofsPerCodim_</a></div><div class=\"ttdeci\">std::array< int, dim+1 > dofsPerCodim_</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:326</div></div>\n-<div class=\"ttc\" id=\"aa01795_html_a3a7f6bee36aa3fa028b12ed7d7d6323c\"><div class=\"ttname\"><a href=\"a01795.html#a3a7f6bee36aa3fa028b12ed7d7d6323c\">Dune::Functions::RaviartThomasPreBasis::update</a></div><div class=\"ttdeci\">void update(const GridView &gv)</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:242</div></div>\n-<div class=\"ttc\" id=\"aa01795_html_a3de5fb4d0f0ba9161f7eb874e038fa75\"><div class=\"ttname\"><a href=\"a01795.html#a3de5fb4d0f0ba9161f7eb874e038fa75\">Dune::Functions::RaviartThomasPreBasis::RaviartThomasPreBasis</a></div><div class=\"ttdeci\">RaviartThomasPreBasis(const GridView &gv)</div><div class=\"ttdoc\">Constructor for a given grid view object.</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:209</div></div>\n-<div class=\"ttc\" id=\"aa01795_html_a3e54e4eb73680c37e4fc32475f49bd46\"><div class=\"ttname\"><a href=\"a01795.html#a3e54e4eb73680c37e4fc32475f49bd46\">Dune::Functions::RaviartThomasPreBasis::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:200</div></div>\n-<div class=\"ttc\" id=\"aa01795_html_a54aad1415b27afc80c12c87e4a5d595b\"><div class=\"ttname\"><a href=\"a01795.html#a54aad1415b27afc80c12c87e4a5d595b\">Dune::Functions::RaviartThomasPreBasis::gridView</a></div><div class=\"ttdeci\">const GridView & gridView() const</div><div class=\"ttdoc\">Obtain the grid view that the basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:236</div></div>\n-<div class=\"ttc\" id=\"aa01795_html_a5c0fd8965f5d1ccdf8c064908a4cf019\"><div class=\"ttname\"><a href=\"a01795.html#a5c0fd8965f5d1ccdf8c064908a4cf019\">Dune::Functions::RaviartThomasPreBasis::indices</a></div><div class=\"ttdeci\">It indices(const Node &node, It it) const</div><div class=\"ttdoc\">Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:294</div></div>\n-<div class=\"ttc\" id=\"aa01795_html_a5e51525127f5d27020a411c75c6dc3dc\"><div class=\"ttname\"><a href=\"a01795.html#a5e51525127f5d27020a411c75c6dc3dc\">Dune::Functions::RaviartThomasPreBasis::multiIndexBufferSize</a></div><div class=\"ttdeci\">static constexpr size_type multiIndexBufferSize</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:206</div></div>\n-<div class=\"ttc\" id=\"aa01795_html_a6b79ac0c794d5c74cb5a547116b02515\"><div class=\"ttname\"><a href=\"a01795.html#a6b79ac0c794d5c74cb5a547116b02515\">Dune::Functions::RaviartThomasPreBasis::finiteElementMap_</a></div><div class=\"ttdeci\">FiniteElementMap finiteElementMap_</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:324</div></div>\n-<div class=\"ttc\" id=\"aa01795_html_a89e848a1463225369fad477023293a5e\"><div class=\"ttname\"><a href=\"a01795.html#a89e848a1463225369fad477023293a5e\">Dune::Functions::RaviartThomasPreBasis::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:255</div></div>\n-<div class=\"ttc\" id=\"aa01795_html_a90d5d6569b24f1f109d09cb67aa7cde6\"><div class=\"ttname\"><a href=\"a01795.html#a90d5d6569b24f1f109d09cb67aa7cde6\">Dune::Functions::RaviartThomasPreBasis::dimension</a></div><div class=\"ttdeci\">size_type dimension() const</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:269</div></div>\n-<div class=\"ttc\" id=\"aa01795_html_ab389963ad645a85730a68ba538962d68\"><div class=\"ttname\"><a href=\"a01795.html#ab389963ad645a85730a68ba538962d68\">Dune::Functions::RaviartThomasPreBasis::GridView</a></div><div class=\"ttdeci\">GV GridView</div><div class=\"ttdoc\">The grid view that the FE space is defined on.</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:199</div></div>\n-<div class=\"ttc\" id=\"aa01795_html_ac364e0f8b7bf60bb69156385f1f02405\"><div class=\"ttname\"><a href=\"a01795.html#ac364e0f8b7bf60bb69156385f1f02405\">Dune::Functions::RaviartThomasPreBasis::maxNodeSize</a></div><div class=\"ttdeci\">size_type maxNodeSize() const</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:274</div></div>\n-<div class=\"ttc\" id=\"aa01795_html_ac775393c2fa528f96a183c71e19fb7c4\"><div class=\"ttname\"><a href=\"a01795.html#ac775393c2fa528f96a183c71e19fb7c4\">Dune::Functions::RaviartThomasPreBasis::gridView_</a></div><div class=\"ttdeci\">GridView gridView_</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:322</div></div>\n-<div class=\"ttc\" id=\"aa01795_html_ae92217c29c5ca4f9cf42c15a0805428a\"><div class=\"ttname\"><a href=\"a01795.html#ae92217c29c5ca4f9cf42c15a0805428a\">Dune::Functions::RaviartThomasPreBasis::size</a></div><div class=\"ttdeci\">size_type size(const SizePrefix &prefix) const</div><div class=\"ttdoc\">Return number possible values for next position in multi index.</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:262</div></div>\n-<div class=\"ttc\" id=\"aa01795_html_afcd506e3ce47347b5f72c9b7a05207fc\"><div class=\"ttname\"><a href=\"a01795.html#afcd506e3ce47347b5f72c9b7a05207fc\">Dune::Functions::RaviartThomasPreBasis::initializeIndices</a></div><div class=\"ttdeci\">void initializeIndices()</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:228</div></div>\n-<div class=\"ttc\" id=\"aa01795_html_afcd58520d4ca4871df729b8423aa78be\"><div class=\"ttname\"><a href=\"a01795.html#afcd58520d4ca4871df729b8423aa78be\">Dune::Functions::RaviartThomasPreBasis::codimOffset_</a></div><div class=\"ttdeci\">std::array< size_t, dim+1 > codimOffset_</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:323</div></div>\n+<div class=\"line\"><a id=\"l00420\" name=\"l00420\"></a><span class=\"lineno\"> 420</span>} <span class=\"comment\">// namespace Dune::Functions::Impl</span></div>\n+<div class=\"line\"><a id=\"l00421\" name=\"l00421\"></a><span class=\"lineno\"> 421</span> </div>\n+<div class=\"line\"><a id=\"l00422\" name=\"l00422\"></a><span class=\"lineno\"> 422</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH</span></div>\n+<div class=\"ttc\" id=\"aa00219_html_a13b0c6bf02d744e7b2078d1a535b5211\"><div class=\"ttname\"><a href=\"a00219.html#a13b0c6bf02d744e7b2078d1a535b5211\">Dune::Functions::interpolate</a></div><div class=\"ttdeci\">void interpolate(const B &basis, C &&coeff, const F &f, const BV &bv, const NTRE &nodeToRangeEntry)</div><div class=\"ttdoc\">Interpolate given function in discrete function space.</div><div class=\"ttdef\"><b>Definition:</b> interpolate.hh:202</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,566 +5,339 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-raviartthomasbasis.hh\n+globalvaluedlocalfiniteelement.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH\n- 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH\n+ 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH\n+ 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH\n 5\n 6#include <array>\n- 7#include <dune/common/exceptions.hh>\n+ 7#include <numeric>\n 8\n- 9#include <dune/grid/common/capabilities.hh>\n- 10#include <dune/grid/common/mcmgmapper.hh>\n- 11\n- 12#include <dune/localfunctions/common/localfiniteelementvariant.hh>\n- 13#include <dune/localfunctions/raviartthomas.hh>\n- 14#include <dune/localfunctions/raviartthomas/raviartthomas0cube2d.hh>\n- 15#include <dune/localfunctions/raviartthomas/raviartthomas0cube3d.hh>\n- 16#include <dune/localfunctions/raviartthomas/raviartthomas02d.hh>\n- 17#include <dune/localfunctions/raviartthomas/raviartthomas03d.hh>\n- 18#include <dune/localfunctions/raviartthomas/raviartthomas1cube2d.hh>\n- 19#include <dune/localfunctions/raviartthomas/raviartthomas1cube3d.hh>\n- 20#include <dune/localfunctions/raviartthomas/raviartthomas12d.hh>\n- 21#include <dune/localfunctions/raviartthomas/raviartthomas2cube2d.hh>\n+ 9#include <dune/common/fmatrix.hh>\n+ 10#include <dune/common/fvector.hh>\n+ 11#include <dune/common/math.hh>\n+ 12#include <dune/common/rangeutilities.hh>\n+ 13\n+ 14#include <dune/geometry/referenceelements.hh>\n+ 15\n+ 16#include <dune/localfunctions/common/localbasis.hh>\n+ 17#include <dune/localfunctions/common/localfiniteelementtraits.hh>\n+ 18#include <dune/localfunctions/common/localinterpolation.hh>\n+ 19\n+ 20namespace Dune::Functions::Impl\n+ 21{\n 22\n- 23#include <dune/functions/functionspacebases/\n-globalvaluedlocalfiniteelement.hh>\n- 24#include <dune/functions/functionspacebases/nodes.hh>\n- 25#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n- 26\n- 27namespace Dune {\n- 28namespace Functions {\n- 29\n- 30namespace Impl {\n- 31\n- 32 template<int dim, typename D, typename R, std::size_t k>\n- 33 struct RaviartThomasSimplexLocalInfo\n- 34 {\n- 35 // Dummy type, must be something that we can have a std::unique_ptr to\n- 36 using FiniteElement = void*;\n- 37 };\n- 38\n- 39 template<typename D, typename R>\n- 40 struct RaviartThomasSimplexLocalInfo<2,D,R,0>\n- 41 {\n- 42 using FiniteElement = RT02DLocalFiniteElement<D,R>;\n- 43 };\n- 44\n- 45 template<typename D, typename R>\n- 46 struct RaviartThomasSimplexLocalInfo<2,D,R,1>\n- 47 {\n- 48 using FiniteElement = RT12DLocalFiniteElement<D,R>;\n- 49 };\n- 50\n- 51 template<typename D, typename R>\n- 52 struct RaviartThomasSimplexLocalInfo<3,D,R,0>\n- 53 {\n- 54 using FiniteElement = RT03DLocalFiniteElement<D,R>;\n- 55 };\n- 56\n- 57 template<int dim, typename D, typename R, std::size_t k>\n- 58 struct RaviartThomasCubeLocalInfo\n- 59 {\n- 60 // Dummy type, must be something that we can have a std::unique_ptr to\n- 61 using FiniteElement = void*;\n- 62 };\n- 63\n- 64 template<typename D, typename R>\n- 65 struct RaviartThomasCubeLocalInfo<2,D,R,0>\n- 66 {\n- 67 using FiniteElement = RT0Cube2DLocalFiniteElement<D,R>;\n- 68 };\n- 69\n- 70 template<typename D, typename R>\n- 71 struct RaviartThomasCubeLocalInfo<2,D,R,1>\n- 72 {\n- 73 using FiniteElement = RT1Cube2DLocalFiniteElement<D,R>;\n- 74 };\n- 75\n- 76 template<typename D, typename R>\n- 77 struct RaviartThomasCubeLocalInfo<2,D,R,2>\n- 78 {\n- 79 using FiniteElement = RT2Cube2DLocalFiniteElement<D,R>;\n- 80 };\n- 81\n- 82 template<typename D, typename R>\n- 83 struct RaviartThomasCubeLocalInfo<3,D,R,0>\n- 84 {\n- 85 using FiniteElement = RT0Cube3DLocalFiniteElement<D,R>;\n- 86 };\n- 87\n- 88 template<typename D, typename R>\n- 89 struct RaviartThomasCubeLocalInfo<3,D,R,1>\n- 90 {\n- 91 using FiniteElement = RT1Cube3DLocalFiniteElement<D,R>;\n- 92 };\n- 93\n- 94 template<typename GV, int dim, typename R, std::size_t k>\n- 95 class RaviartThomasLocalFiniteElementMap\n+ 36 struct ContravariantPiolaTransformator\n+ 37 {\n+ 42 template<typename Values, typename LocalCoordinate, typename Geometry>\n+ 43 static auto apply(Values& values,\n+ 44 const LocalCoordinate& xi,\n+ 45 const Geometry& geometry)\n+ 46 {\n+ 47 auto jacobianTransposed = geometry.jacobianTransposed(xi);\n+ 48 auto integrationElement = geometry.integrationElement(xi);\n+ 49\n+ 50 for (auto& value : values)\n+ 51 {\n+ 52 auto tmp = value;\n+ 53 jacobianTransposed.mtv(tmp, value);\n+ 54 value /= integrationElement;\n+ 55 }\n+ 56 }\n+ 57\n+ 67 template<typename Gradients, typename LocalCoordinate, typename Geometry>\n+ 68 static auto applyJacobian(Gradients& gradients,\n+ 69 const LocalCoordinate& xi,\n+ 70 const Geometry& geometry)\n+ 71 {\n+ 72 auto jacobianTransposed = geometry.jacobianTransposed(xi);\n+ 73 auto integrationElement = geometry.integrationElement(xi);\n+ 74 for (auto& gradient : gradients)\n+ 75 {\n+ 76 auto tmp = gradient;\n+ 77 gradient = 0;\n+ 78 for (size_t k=0; k<gradient.M(); k++)\n+ 79 for (size_t l=0; l<tmp.N(); l++)\n+ 80 // Use sparseRange because jacobianTransposed may be a sparse\n+DiagonalMatrix\n+ 81 for(auto&& [jacobianTransposed_l_j, j] : sparseRange(jacobianTransposed\n+[l]))\n+ 82 gradient[j][k] += jacobianTransposed_l_j * tmp[l][k];\n+ 83 gradient /= integrationElement;\n+ 84 }\n+ 85 }\n+ 86\n+ 94 template<class Function, class LocalCoordinate, class Element>\n+ 95 class LocalValuedFunction\n 96 {\n- 97 using D = typename GV::ctype;\n- 98 constexpr static bool hasFixedElementType = Capabilities::\n-hasSingleGeometryType<typename GV::Grid>::v;\n+ 97 const Function& f_;\n+ 98 const Element& element_;\n 99\n- 100 using CubeFiniteElement = typename RaviartThomasCubeLocalInfo<dim, D, R,\n-k>::FiniteElement;\n- 101 using SimplexFiniteElement = typename RaviartThomasSimplexLocalInfo<dim,\n-D, R, k>::FiniteElement;\n- 102\n- 103 public:\n- 104\n- 105 using T = LocalBasisTraits<D, dim, FieldVector<D,dim>, R, dim,\n-FieldVector<R,dim>, FieldMatrix<D,dim,dim> >;\n- 106\n- 107 constexpr static unsigned int topologyId = Capabilities::\n-hasSingleGeometryType<typename GV::Grid>::topologyId; // meaningless if\n-hasFixedElementType is false\n- 108 constexpr static GeometryType type = GeometryType(topologyId, GV::\n-dimension);\n- 109\n- 110 using FiniteElement = std::conditional_t<hasFixedElementType,\n- 111 std::conditional_t<type.isCube(),CubeFiniteElement,SimplexFiniteElement>,\n- 112 LocalFiniteElementVariant<CubeFiniteElement, SimplexFiniteElement> >;\n- 113\n- 114 // Each element facet can have its orientation reversed, hence there are\n- 115 // 2^#facets different variants.\n- 116 static std::size_t numVariants(GeometryType type)\n- 117 {\n- 118 auto numFacets = referenceElement<D,dim>(type).size(1);\n- 119 return power(2,numFacets);\n+ 100 public:\n+ 101\n+ 102 LocalValuedFunction(const Function& f, const Element& element)\n+ 103 : f_(f), element_(element)\n+ 104 {}\n+ 105\n+ 106 auto operator()(const LocalCoordinate& xi) const\n+ 107 {\n+ 108 auto&& f = Dune::Impl::makeFunctionWithCallOperator<LocalCoordinate>(f_);\n+ 109 auto globalValue = f(xi);\n+ 110\n+ 111 // Apply the inverse Piola transform\n+ 112 auto jacobianInverseTransposed = element_.geometry\n+().jacobianInverseTransposed(xi);\n+ 113 auto integrationElement = element_.geometry().integrationElement(xi);\n+ 114\n+ 115 auto localValue = globalValue;\n+ 116 jacobianInverseTransposed.mtv(globalValue, localValue);\n+ 117 localValue *= integrationElement;\n+ 118\n+ 119 return localValue;\n 120 }\n- 121\n- 122 RaviartThomasLocalFiniteElementMap(const GV& gv)\n- 123 : elementMapper_(gv, mcmgElementLayout()),\n- 124 orient_(gv.size(0))\n- 125 {\n- 126 if constexpr (hasFixedElementType)\n- 127 {\n- 128 variants_.resize(numVariants(type));\n- 129 for (size_t i = 0; i < numVariants(type); i++)\n- 130 variants_[i] = FiniteElement(i);\n- 131 }\n- 132 else\n- 133 {\n- 134 // for mixed grids add offset for cubes\n- 135 variants_.resize(numVariants(GeometryTypes::simplex(dim)) + numVariants\n-(GeometryTypes::cube(dim)));\n- 136 for (size_t i = 0; i < numVariants(GeometryTypes::simplex(dim)); i++)\n- 137 variants_[i] = SimplexFiniteElement(i);\n- 138 for (size_t i = 0; i < numVariants(GeometryTypes::cube(dim)); i++)\n- 139 variants_[i + numVariants(GeometryTypes::simplex(dim))] =\n-CubeFiniteElement(i);\n- 140 }\n- 141\n- 142 for(const auto& cell : elements(gv))\n- 143 {\n- 144 unsigned int myId = elementMapper_.index(cell);\n- 145 orient_[myId] = 0;\n- 146\n- 147 for (const auto& intersection : intersections(gv,cell))\n- 148 {\n- 149 if (intersection.neighbor() && (elementMapper_.index(intersection.outside\n-()) > myId))\n- 150 orient_[myId] |= (1 << intersection.indexInInside());\n- 151 }\n- 152\n- 153 // for mixed grids add offset for cubes\n- 154 if constexpr (!hasFixedElementType)\n- 155 if (cell.type().isCube())\n- 156 orient_[myId] += numVariants(GeometryTypes::simplex(dim));\n- 157 }\n- 158 }\n- 159\n- 160 template<class EntityType>\n- 161 const FiniteElement& find(const EntityType& e) const\n- 162 {\n- 163 return variants_[orient_[elementMapper_.index(e)]];\n- 164 }\n- 165\n- 166 private:\n- 167 std::vector<FiniteElement> variants_;\n- 168 const Dune::MultipleCodimMultipleGeomTypeMapper<GV> elementMapper_;\n- 169 std::vector<unsigned char> orient_;\n- 170 };\n- 171\n+ 121 };\n+ 122 };\n+ 123\n+ 137 struct CovariantPiolaTransformator\n+ 138 {\n+ 143 template<typename Values, typename LocalCoordinate, typename Geometry>\n+ 144 static auto apply(Values& values,\n+ 145 const LocalCoordinate& xi,\n+ 146 const Geometry& geometry)\n+ 147 {\n+ 148 auto jacobianInverseTransposed = geometry.jacobianInverseTransposed(xi);\n+ 149\n+ 150 for (auto& value : values)\n+ 151 {\n+ 152 auto tmp = value;\n+ 153 jacobianInverseTransposed.mv(tmp, value);\n+ 154 }\n+ 155 }\n+ 156\n+ 166 template<typename Gradients, typename LocalCoordinate, typename Geometry>\n+ 167 static auto applyJacobian(Gradients& gradients,\n+ 168 const LocalCoordinate& xi,\n+ 169 const Geometry& geometry)\n+ 170 {\n+ 171 auto jacobianInverseTransposed = geometry.jacobianInverseTransposed(xi);\n 172\n- 173} // namespace Impl\n- 174\n- 175\n- 176/\n-/ *****************************************************************************\n- 177// This is the reusable part of the basis. It contains\n- 178//\n- 179// RaviartThomasPreBasis\n- 180// RaviartThomasNode\n- 181//\n- 182// The pre-basis allows to create the others and is the owner of possible\n-shared\n- 183// state. These components do _not_ depend on the global basis and local\n-view\n- 184// and can be used without a global basis.\n- 185/\n-/ *****************************************************************************\n- 186\n- 187template<typename GV, int k>\n- 188class RaviartThomasNode;\n- 189\n- 190template<typename GV, int k>\n-191class RaviartThomasPreBasis\n- 192{\n- 193 static const int dim = GV::dimension;\n- 194 using FiniteElementMap = typename Impl::\n-RaviartThomasLocalFiniteElementMap<GV, dim, double, k>;\n- 195\n- 196public:\n+ 173 for (auto& gradient : gradients)\n+ 174 {\n+ 175 auto tmp = gradient;\n+ 176 gradient = 0;\n+ 177 for (size_t j=0; j<gradient.N(); j++)\n+ 178 for (size_t k=0; k<gradient.M(); k++)\n+ 179 // Use sparseRange because jacobianTransposed may be a sparse\n+DiagonalMatrix\n+ 180 for(auto&& [jacobianInverseTransposed_j_l, l] : sparseRange\n+(jacobianInverseTransposed[j]))\n+ 181 gradient[j][k] += jacobianInverseTransposed_j_l * tmp[l][k];\n+ 182 }\n+ 183 }\n+ 184\n+ 192 template<class Function, class LocalCoordinate, class Element>\n+ 193 class LocalValuedFunction\n+ 194 {\n+ 195 const Function& f_;\n+ 196 const Element& element_;\n 197\n-199 using GridView = GV;\n-200 using size_type = std::size_t;\n- 201\n-202 using Node = RaviartThomasNode<GV,_k>;\n+ 198 public:\n+ 199\n+ 200 LocalValuedFunction(const Function& f, const Element& element)\n+ 201 : f_(f), element_(element)\n+ 202 {}\n 203\n-204 static constexpr size_type maxMultiIndexSize = 1;\n-205 static constexpr size_type minMultiIndexSize = 1;\n-206 static constexpr size_type multiIndexBufferSize = 1;\n- 207\n-209 RaviartThomasPreBasis(const GridView& gv) :\n- 210 gridView_(gv),\n- 211 finiteElementMap_(gv)\n- 212 {\n- 213 // Currently there are some unresolved bugs with hybrid grids and higher\n-order Raviart-Thomas elements\n- 214 if (gv.indexSet().types(0).size() > 1 and k>0)\n- 215 DUNE_THROW(Dune::NotImplemented, \"Raviart-Thomas basis with index k>0 is\n-only implemented for grids with a single element type\");\n- 216\n- 217 for(auto type : gv.indexSet().types(0))\n- 218 if (!type.isSimplex() && !type.isCube())\n- 219 DUNE_THROW(Dune::NotImplemented, \"Raviart-Thomas elements are only\n-implemented for grids with simplex or cube elements.\");\n- 220\n- 221 GeometryType type = gv.template begin<0>()->type();\n- 222 const static int dofsPerElement = type.isCube() ? ((dim == 2) ? k*\n-(k+1)*dim : k*(k+1)*(k+1)*dim) : k*dim;\n- 223 const static int dofsPerFace = type.isCube() ? (dim-2)*2*k+k+1 : (dim-\n-1)*k+1 ;\n- 224\n- 225 dofsPerCodim_ = {{dofsPerElement, dofsPerFace}};\n- 226 }\n- 227\n-228 void initializeIndices()\n- 229 {\n- 230 codimOffset_[0] = 0;\n- 231 codimOffset_[1] = codimOffset_[0] + dofsPerCodim_[0] * gridView_.size(0);\n- 232 }\n- 233\n-236 const GridView& gridView() const\n- 237 {\n- 238 return gridView_;\n- 239 }\n- 240\n- 241 /* \\brief Update the stored grid view, to be called if the grid has\n-changed */\n-242 void update (const GridView& gv)\n+ 204 auto operator()(const LocalCoordinate& xi) const\n+ 205 {\n+ 206 auto&& f = Dune::Impl::makeFunctionWithCallOperator<LocalCoordinate>(f_);\n+ 207 auto globalValue = f(xi);\n+ 208\n+ 209 // Apply the inverse Piola transform\n+ 210 auto jacobianTransposed = element_.geometry().jacobianTransposed(xi);\n+ 211\n+ 212 auto localValue = globalValue;\n+ 213 jacobianTransposed.mv(globalValue, localValue);\n+ 214\n+ 215 return localValue;\n+ 216 }\n+ 217 };\n+ 218 };\n+ 219\n+ 226 template<class Transformator, class LocalValuedLocalBasis, class Element>\n+ 227 class GlobalValuedLocalBasis\n+ 228 {\n+ 229 public:\n+ 230 using Traits = typename LocalValuedLocalBasis::Traits;\n+ 231\n+ 234 void bind(const LocalValuedLocalBasis& localValuedLocalBasis, const\n+Element& element)\n+ 235 {\n+ 236 localValuedLocalBasis_ = &localValuedLocalBasis;\n+ 237 element_ = &element;\n+ 238 }\n+ 239\n+ 242 auto size() const\n 243 {\n- 244 gridView_ = gv;\n+ 244 return localValuedLocalBasis_->size();\n 245 }\n 246\n-250 Node makeNode() const\n- 251 {\n- 252 return Node{&finiteElementMap_};\n- 253 }\n- 254\n-255 size_type size() const\n- 256 {\n- 257 return dofsPerCodim_[0] * gridView_.size(0) + dofsPerCodim_[1] *\n-gridView_.size(1);\n- 258 }\n- 259\n- 261 template<class SizePrefix>\n-262 size_type size(const SizePrefix& prefix) const\n+ 248 void evaluateFunction(const typename Traits::DomainType& x,\n+ 249 std::vector<typename Traits::RangeType>& out) const\n+ 250 {\n+ 251 localValuedLocalBasis_->evaluateFunction(x,out);\n+ 252\n+ 253 Transformator::apply(out, x, element_->geometry());\n+ 254 }\n+ 255\n+ 261 void evaluateJacobian(const typename Traits::DomainType& x,\n+ 262 std::vector<typename Traits::JacobianType>& out) const\n 263 {\n- 264 assert(prefix.size() == 0 || prefix.size() == 1);\n- 265 return (prefix.size() == 0) ? size() : 0;\n- 266 }\n- 267\n-269 size_type dimension() const\n- 270 {\n- 271 return size();\n- 272 }\n- 273\n-274 size_type maxNodeSize() const\n- 275 {\n- 276 size_type result = 0;\n- 277 for (auto&& type : gridView_.indexSet().types(0))\n+ 264 localValuedLocalBasis_->evaluateJacobian(x,out);\n+ 265\n+ 266 Transformator::applyJacobian(out, x, element_->geometry());\n+ 267 }\n+ 268\n+ 275 void partial(const std::array<unsigned int,2>& order,\n+ 276 const typename Traits::DomainType& x,\n+ 277 std::vector<typename Traits::RangeType>& out) const\n 278 {\n- 279 size_t numFaces = ReferenceElements<double,dim>::general(type).size(1);\n- 280 const static int dofsPerElement = type.isCube() ? ((dim == 2) ? k*\n-(k+1)*dim : k*(k+1)*(k+1)*dim) : k*dim;\n- 281 const static int dofsPerFace = type.isCube() ? (dim-2)*2*k+k+1 : (dim-\n-1)*k+1 ;\n- 282 result = std::max(result, dofsPerElement + dofsPerFace * numFaces);\n- 283 }\n- 284\n- 285 return result;\n- 286 }\n- 287\n- 293 template<typename It>\n-294 It indices(const Node& node, It it) const\n- 295 {\n- 296 const auto& gridIndexSet = gridView().indexSet();\n- 297 const auto& element = node.element();\n+ 279 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);\n+ 280 if (totalOrder == 0) {\n+ 281 evaluateFunction(x, out);\n+ 282 } else if (totalOrder == 1) {\n+ 283 auto const direction = std::distance(order.begin(), std::find(order.begin\n+(), order.end(), 1));\n+ 284 out.resize(size());\n+ 285\n+ 286 // TODO: The following is wasteful: We compute the full Jacobian and then\n+return\n+ 287 // only a part of it. While we need the full Jacobian of the underlying\n+local-valued LFE,\n+ 288 // it should be possible to compute only a partial Piola transform for the\n+requested\n+ 289 // partial derivatives.\n+ 290 std::vector<typename Traits::JacobianType> fullJacobian;\n+ 291 localValuedLocalBasis_->evaluateJacobian(x,fullJacobian);\n+ 292\n+ 293 Transformator::applyJacobian(fullJacobian, x, element_->geometry());\n+ 294\n+ 295 for (std::size_t i=0; i<out.size(); i++)\n+ 296 for (std::size_t j=0; j<out[i].size(); j++)\n+ 297 out[i][j] = fullJacobian[i][j][direction];\n 298\n- 299 // throw if Element is not of predefined type\n- 300 if (not(element.type().isCube()) and not(element.type().isSimplex()))\n- 301 DUNE_THROW(Dune::NotImplemented, \"RaviartThomasBasis only implemented for\n-cube and simplex elements.\");\n+ 299 } else\n+ 300 DUNE_THROW(NotImplemented, \"Partial derivatives of order 2 or higher\");\n+ 301 }\n 302\n- 303 for(std::size_t i=0, end=node.size(); i<end; ++i, ++it)\n- 304 {\n- 305 Dune::LocalKey localKey = node.finiteElement().localCoefficients\n-().localKey(i);\n- 306\n- 307 // The dimension of the entity that the current dof is related to\n- 308 size_t subentity = localKey.subEntity();\n- 309 size_t codim = localKey.codim();\n- 310\n- 311 if (not(codim==0 or codim==1))\n- 312 DUNE_THROW(Dune::NotImplemented, \"Grid contains elements not supported for\n-the RaviartThomasBasis\");\n- 313\n- 314 *it = { codimOffset_[codim] +\n- 315 dofsPerCodim_[codim] * gridIndexSet.subIndex(element, subentity, codim) +\n-localKey.index() };\n- 316 }\n- 317\n- 318 return it;\n- 319 }\n- 320\n- 321protected:\n-322 GridView gridView_;\n-323 std::array<size_t,dim+1> codimOffset_;\n-324 FiniteElementMap finiteElementMap_;\n- 325 // Number of dofs per entity type depending on the entity's codimension\n-and type\n-326 std::array<int,dim+1> dofsPerCodim_;\n- 327};\n- 328\n- 329\n- 330\n- 331template<typename GV, int k>\n-332class RaviartThomasNode :\n- 333 public LeafBasisNode\n- 334{\n- 335 static const int dim = GV::dimension;\n- 336\n- 337public:\n- 338\n-339 using size_type = std::size_t;\n-340 using Element = typename GV::template Codim<0>::Entity;\n-341 using FiniteElementMap = typename Impl::\n-RaviartThomasLocalFiniteElementMap<GV, dim, double, k>;\n-342 using FiniteElement = Impl::GlobalValuedLocalFiniteElement<Impl::\n-ContravariantPiolaTransformator,\n- 343 typename FiniteElementMap::FiniteElement,\n- 344 Element>;\n+ 304 auto order() const\n+ 305 {\n+ 306 return localValuedLocalBasis_->order();\n+ 307 }\n+ 308\n+ 309 const LocalValuedLocalBasis* localValuedLocalBasis_;\n+ 310 const Element* element_;\n+ 311 };\n+ 312\n+ 321 template<class Transformator, class LocalValuedLocalInterpolation, class\n+Element>\n+ 322 class GlobalValuedLocalInterpolation\n+ 323 {\n+ 324 public:\n+ 327 void bind(const LocalValuedLocalInterpolation&\n+localValuedLocalInterpolation, const Element& element)\n+ 328 {\n+ 329 localValuedLocalInterpolation_ = &localValuedLocalInterpolation;\n+ 330 element_ = &element;\n+ 331 }\n+ 332\n+ 333 template<typename F, typename C>\n+ 334 void interpolate (const F& f, std::vector<C>& out) const\n+ 335 {\n+ 336 using LocalCoordinate = typename Element::Geometry::LocalCoordinate;\n+ 337 typename Transformator::template\n+LocalValuedFunction<F,LocalCoordinate,Element> localValuedFunction(f,\n+*element_);\n+ 338 localValuedLocalInterpolation_->interpolate(localValuedFunction, out);\n+ 339 }\n+ 340\n+ 341 private:\n+ 342 const LocalValuedLocalInterpolation* localValuedLocalInterpolation_;\n+ 343 const Element* element_;\n+ 344 };\n 345\n-346 RaviartThomasNode(const FiniteElementMap* finiteElementMap) :\n- 347 element_(nullptr),\n- 348 finiteElementMap_(finiteElementMap)\n- 349 { }\n- 350\n-352 const Element& element() const\n- 353 {\n- 354 return *element_;\n- 355 }\n- 356\n-361 const FiniteElement& finiteElement() const\n- 362 {\n- 363 return finiteElement_;\n- 364 }\n- 365\n-367 void bind(const Element& e)\n- 368 {\n- 369 element_ = &e;\n- 370 finiteElement_.bind((finiteElementMap_->find(*element_)), e);\n- 371 this->setSize(finiteElement_.size());\n- 372 }\n- 373\n- 374protected:\n- 375\n-376 FiniteElement finiteElement_;\n-377 const Element* element_;\n-378 const FiniteElementMap* finiteElementMap_;\n- 379};\n- 380\n- 381namespace BasisFactory {\n- 382\n- 390template<std::size_t k>\n-391auto raviartThomas()\n- 392{\n- 393 return [](const auto& gridView) {\n- 394 return RaviartThomasPreBasis<std::decay_t<decltype(gridView)>, k>\n-(gridView);\n- 395 };\n- 396}\n- 397\n- 398} // end namespace BasisFactory\n+ 346\n+ 353 template<class Transformator, class LocalValuedLFE, class Element>\n+ 354 class GlobalValuedLocalFiniteElement\n+ 355 {\n+ 356 using LocalBasis = GlobalValuedLocalBasis<Transformator,\n+ 357 typename LocalValuedLFE::Traits::LocalBasisType,\n+ 358 Element>;\n+ 359 using LocalInterpolation = GlobalValuedLocalInterpolation<Transformator,\n+ 360 typename LocalValuedLFE::Traits::LocalInterpolationType,\n+ 361 Element>;\n+ 362\n+ 363 public:\n+ 366 using Traits = LocalFiniteElementTraits<LocalBasis,\n+ 367 typename LocalValuedLFE::Traits::LocalCoefficientsType,\n+ 368 LocalInterpolation>;\n+ 369\n+ 370 GlobalValuedLocalFiniteElement() {}\n+ 371\n+ 372 void bind(const LocalValuedLFE& localValuedLFE, const Element& element)\n+ 373 {\n+ 374 globalValuedLocalBasis_.bind(localValuedLFE.localBasis(), element);\n+ 375 globalValuedLocalInterpolation_.bind(localValuedLFE.localInterpolation(),\n+element);\n+ 376 localValuedLFE_ = &localValuedLFE;\n+ 377 }\n+ 378\n+ 381 const typename Traits::LocalBasisType& localBasis() const\n+ 382 {\n+ 383 return globalValuedLocalBasis_;\n+ 384 }\n+ 385\n+ 388 const typename Traits::LocalCoefficientsType& localCoefficients() const\n+ 389 {\n+ 390 return localValuedLFE_->localCoefficients();\n+ 391 }\n+ 392\n+ 395 const typename Traits::LocalInterpolationType& localInterpolation() const\n+ 396 {\n+ 397 return globalValuedLocalInterpolation_;\n+ 398 }\n 399\n- 400\n- 401\n- 402/\n-/ *****************************************************************************\n- 403// This is the actual global basis implementation based on the reusable\n-parts.\n- 404/\n-/ *****************************************************************************\n+ 401 std::size_t size() const\n+ 402 {\n+ 403 return localValuedLFE_->size();\n+ 404 }\n 405\n- 413template<typename GV, int k>\n-414using RaviartThomasBasis = DefaultGlobalBasis<RaviartThomasPreBasis<GV,_k>\n->;\n- 415\n- 416} // end namespace Functions\n- 417} // end namespace Dune\n- 418\n+ 408 GeometryType type() const\n+ 409 {\n+ 410 return localValuedLFE_->type();\n+ 411 }\n+ 412\n+ 413 private:\n+ 414\n+ 415 typename Traits::LocalBasisType globalValuedLocalBasis_;\n+ 416 typename Traits::LocalInterpolationType globalValuedLocalInterpolation_;\n+ 417 const LocalValuedLFE* localValuedLFE_;\n+ 418 };\n 419\n- 420#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH\n-defaultglobalbasis.hh\n-globalvaluedlocalfiniteelement.hh\n-nodes.hh\n-Dune::Functions::BasisFactory::power\n-auto power(ChildPreBasisFactory &&childPreBasisFactory, const\n-IndexMergingStrategy &)\n-Create a pre-basis factory that can build a PowerPreBasis.\n-Definition: powerbasis.hh:369\n-Dune::Functions::BasisFactory::raviartThomas\n-auto raviartThomas()\n-Create a pre-basis factory that can create a Raviart-Thomas pre-basis.\n-Definition: raviartthomasbasis.hh:391\n-Dune\n-Definition: polynomial.hh:10\n-Dune::Functions::DefaultGlobalBasis\n-Global basis for given pre-basis.\n-Definition: defaultglobalbasis.hh:46\n-Dune::Functions::BasisNodeMixin::size\n-size_type size() const\n-Definition: nodes.hh:142\n-Dune::Functions::BasisNodeMixin::size_type\n-std::size_t size_type\n-Definition: nodes.hh:128\n-Dune::Functions::BasisNodeMixin::setSize\n-void setSize(const size_type size)\n-Definition: nodes.hh:164\n-Dune::Functions::LeafBasisNode\n-Definition: nodes.hh:186\n-Dune::Functions::RaviartThomasNode\n-Definition: raviartthomasbasis.hh:334\n-Dune::Functions::RaviartThomasNode::FiniteElementMap\n-typename Impl::RaviartThomasLocalFiniteElementMap< GV, dim, double, k >\n-FiniteElementMap\n-Definition: raviartthomasbasis.hh:341\n-Dune::Functions::RaviartThomasNode::bind\n-void bind(const Element &e)\n-Bind to element.\n-Definition: raviartthomasbasis.hh:367\n-Dune::Functions::RaviartThomasNode::FiniteElement\n-Impl::GlobalValuedLocalFiniteElement< Impl::ContravariantPiolaTransformator,\n-typename FiniteElementMap::FiniteElement, Element > FiniteElement\n-Definition: raviartthomasbasis.hh:344\n-Dune::Functions::RaviartThomasNode::Element\n-typename GV::template Codim< 0 >::Entity Element\n-Definition: raviartthomasbasis.hh:340\n-Dune::Functions::RaviartThomasNode::element_\n-const Element * element_\n-Definition: raviartthomasbasis.hh:377\n-Dune::Functions::RaviartThomasNode::finiteElement\n-const FiniteElement & finiteElement() const\n-Return the LocalFiniteElement for the element we are bound to.\n-Definition: raviartthomasbasis.hh:361\n-Dune::Functions::RaviartThomasNode::RaviartThomasNode\n-RaviartThomasNode(const FiniteElementMap *finiteElementMap)\n-Definition: raviartthomasbasis.hh:346\n-Dune::Functions::RaviartThomasNode::element\n-const Element & element() const\n-Return current element, throw if unbound.\n-Definition: raviartthomasbasis.hh:352\n-Dune::Functions::RaviartThomasNode::finiteElement_\n-FiniteElement finiteElement_\n-Definition: raviartthomasbasis.hh:376\n-Dune::Functions::RaviartThomasNode::finiteElementMap_\n-const FiniteElementMap * finiteElementMap_\n-Definition: raviartthomasbasis.hh:378\n-Dune::Functions::RaviartThomasPreBasis\n-Definition: raviartthomasbasis.hh:192\n-Dune::Functions::RaviartThomasPreBasis::minMultiIndexSize\n-static constexpr size_type minMultiIndexSize\n-Definition: raviartthomasbasis.hh:205\n-Dune::Functions::RaviartThomasPreBasis::maxMultiIndexSize\n-static constexpr size_type maxMultiIndexSize\n-Definition: raviartthomasbasis.hh:204\n-Dune::Functions::RaviartThomasPreBasis::makeNode\n-Node makeNode() const\n-Create tree node.\n-Definition: raviartthomasbasis.hh:250\n-Dune::Functions::RaviartThomasPreBasis::dofsPerCodim_\n-std::array< int, dim+1 > dofsPerCodim_\n-Definition: raviartthomasbasis.hh:326\n-Dune::Functions::RaviartThomasPreBasis::update\n-void update(const GridView &gv)\n-Definition: raviartthomasbasis.hh:242\n-Dune::Functions::RaviartThomasPreBasis::RaviartThomasPreBasis\n-RaviartThomasPreBasis(const GridView &gv)\n-Constructor for a given grid view object.\n-Definition: raviartthomasbasis.hh:209\n-Dune::Functions::RaviartThomasPreBasis::size_type\n-std::size_t size_type\n-Definition: raviartthomasbasis.hh:200\n-Dune::Functions::RaviartThomasPreBasis::gridView\n-const GridView & gridView() const\n-Obtain the grid view that the basis is defined on.\n-Definition: raviartthomasbasis.hh:236\n-Dune::Functions::RaviartThomasPreBasis::indices\n-It indices(const Node &node, It it) const\n-Maps from subtree index set [0..size-1] to a globally unique multi index in\n-global basis.\n-Definition: raviartthomasbasis.hh:294\n-Dune::Functions::RaviartThomasPreBasis::multiIndexBufferSize\n-static constexpr size_type multiIndexBufferSize\n-Definition: raviartthomasbasis.hh:206\n-Dune::Functions::RaviartThomasPreBasis::finiteElementMap_\n-FiniteElementMap finiteElementMap_\n-Definition: raviartthomasbasis.hh:324\n-Dune::Functions::RaviartThomasPreBasis::size\n-size_type size() const\n-Definition: raviartthomasbasis.hh:255\n-Dune::Functions::RaviartThomasPreBasis::dimension\n-size_type dimension() const\n-Definition: raviartthomasbasis.hh:269\n-Dune::Functions::RaviartThomasPreBasis::GridView\n-GV GridView\n-The grid view that the FE space is defined on.\n-Definition: raviartthomasbasis.hh:199\n-Dune::Functions::RaviartThomasPreBasis::maxNodeSize\n-size_type maxNodeSize() const\n-Definition: raviartthomasbasis.hh:274\n-Dune::Functions::RaviartThomasPreBasis::gridView_\n-GridView gridView_\n-Definition: raviartthomasbasis.hh:322\n-Dune::Functions::RaviartThomasPreBasis::size\n-size_type size(const SizePrefix &prefix) const\n-Return number possible values for next position in multi index.\n-Definition: raviartthomasbasis.hh:262\n-Dune::Functions::RaviartThomasPreBasis::initializeIndices\n-void initializeIndices()\n-Definition: raviartthomasbasis.hh:228\n-Dune::Functions::RaviartThomasPreBasis::codimOffset_\n-std::array< size_t, dim+1 > codimOffset_\n-Definition: raviartthomasbasis.hh:323\n+ 420} // namespace Dune::Functions::Impl\n+ 421\n+ 422#endif /\n+/ DUNE_FUNCTIONS_FUNCTIONSPACEBASES_GLOBALVALUEDLOCALFINITEELEMENT_HH\n+Dune::Functions::interpolate\n+void interpolate(const B &basis, C &&coeff, const F &f, const BV &bv, const\n+NTRE &nodeToRangeEntry)\n+Interpolate given function in discrete function space.\n+Definition: interpolate.hh:202\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00140.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00140.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: defaultlocalview.hh File Reference</title>\n+<title>dune-functions: defaultnodetorangemap.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -64,41 +64,49 @@\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n-<a href=\"#namespaces\">Namespaces</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">defaultlocalview.hh File Reference</div></div>\n+<a href=\"#namespaces\">Namespaces</a> |\n+<a href=\"#func-members\">Functions</a> </div>\n+ <div class=\"headertitle\"><div class=\"title\">defaultnodetorangemap.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <tuple></code><br />\n-<code>#include <optional></code><br />\n-<code>#include <dune/common/concept.hh></code><br />\n-<code>#include <dune/common/hybridutilities.hh></code><br />\n-<code>#include <dune/common/reservedvector.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00074_source.html\">dune/functions/common/overflowarray.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00101_source.html\">dune/functions/common/multiindex.hh</a>></code><br />\n+<div class=\"textblock\"><code>#include <dune/common/concept.hh></code><br />\n <code>#include <<a class=\"el\" href=\"a02876_source.html\">dune/functions/functionspacebases/concepts.hh</a>></code><br />\n+<code>#include <dune/typetree/traversal.hh></code><br />\n+<code>#include <dune/typetree/visitor.hh></code><br />\n </div>\n <p><a href=\"a00140_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01559.html\">Dune::Functions::DefaultLocalView< GB ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">The restriction of a finite element basis to a single element. <a href=\"a01559.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01563.html\">Dune::Functions::DefaultNodeToRangeMap< Tree ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A simple node to range map using lexicographic ordering. <a href=\"a01563.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01567.html\">Dune::Functions::DefaultNodeToRangeMap< Tree >::Visitor</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+</table><table class=\"memberdecls\">\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n+Functions</h2></td></tr>\n+<tr class=\"memitem:a37dfd0fc94784b1ffe3050d87b37ad76\"><td class=\"memTemplParams\" colspan=\"2\">template<class Tree > </td></tr>\n+<tr class=\"memitem:a37dfd0fc94784b1ffe3050d87b37ad76\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">DefaultNodeToRangeMap< Tree > </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a37dfd0fc94784b1ffe3050d87b37ad76\">Dune::Functions::makeDefaultNodeToRangeMap</a> (const Tree &tree)</td></tr>\n+<tr class=\"separator:a37dfd0fc94784b1ffe3050d87b37ad76\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ad5971c4cc40d4d8a400ef5fe9e596350\"><td class=\"memTemplParams\" colspan=\"2\">template<class Basis , class TreePath > </td></tr>\n+<tr class=\"memitem:ad5971c4cc40d4d8a400ef5fe9e596350\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#ad5971c4cc40d4d8a400ef5fe9e596350\">Dune::Functions::makeDefaultNodeToRangeMap</a> (const Basis &basis, TreePath &&treePath) -> decltype(makeDefaultNodeToRangeMap(TypeTree::child(basis.localView().tree(), treePath)))</td></tr>\n+<tr class=\"separator:ad5971c4cc40d4d8a400ef5fe9e596350\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,30 +5,39 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-Classes | Namespaces\n-defaultlocalview.hh File Reference\n-#include <tuple>\n-#include <optional>\n+Classes | Namespaces | Functions\n+defaultnodetorangemap.hh File Reference\n #include <dune/common/concept.hh>\n-#include <dune/common/hybridutilities.hh>\n-#include <dune/common/reservedvector.hh>\n-#include <dune/functions/common/overflowarray.hh>\n-#include <dune/functions/common/multiindex.hh>\n #include <dune/functions/functionspacebases/concepts.hh>\n+#include <dune/typetree/traversal.hh>\n+#include <dune/typetree/visitor.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-class \u00a0Dune::Functions::DefaultLocalView<_GB_>\n-\u00a0 The restriction of a finite element basis to a single element. More...\n+struct \u00a0Dune::Functions::DefaultNodeToRangeMap<_Tree_>\n+\u00a0 A simple node to range map using lexicographic ordering. More...\n+\u00a0\n+struct \u00a0Dune::Functions::DefaultNodeToRangeMap<_Tree_>::Visitor\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n+ Functions\n+template<class Tree >\n+DefaultNodeToRangeMap< Tree >\u00a0Dune::Functions::makeDefaultNodeToRangeMap\n+ (const Tree &tree)\n+\u00a0\n+template<class Basis , class TreePath >\n+ auto\u00a0Dune::Functions::makeDefaultNodeToRangeMap\n+ (const Basis &basis, TreePath &&treePath) -\n+ > decltype(makeDefaultNodeToRangeMap(TypeTree::\n+ child(basis.localView().tree(), treePath)))\n+\u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00140_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00140_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: defaultlocalview.hh Source File</title>\n+<title>dune-functions: defaultnodetorangemap.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,189 +62,126 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">defaultlocalview.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">defaultnodetorangemap.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00140.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n <div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span> </div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <tuple></span></div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <optional></span></div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/concept.hh></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/common/hybridutilities.hh></span></div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <dune/common/reservedvector.hh></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <dune/common/concept.hh></span></div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a02876.html\">dune/functions/functionspacebases/concepts.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span> </div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/typetree/traversal.hh></span></div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <dune/typetree/visitor.hh></span></div>\n <div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00074.html\">dune/functions/common/overflowarray.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00101.html\">dune/functions/common/multiindex.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a02876.html\">dune/functions/functionspacebases/concepts.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"keyword\">namespace </span>Functions {</div>\n <div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n <div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n <div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> </div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span> </div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> </div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> GB></div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html\"> 27</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01559.html\">DefaultLocalView</a></div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span>{</div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> </div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#a9523d45b214ee146d2135416d01aceda\"> 32</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01559.html#a9523d45b214ee146d2135416d01aceda\">GlobalBasis</a> = GB;</div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> </div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#a29917f5ca32a2b2df56b1ae72c2a25ca\"> 35</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01559.html#a29917f5ca32a2b2df56b1ae72c2a25ca\">GridView</a> = <span class=\"keyword\">typename</span> GlobalBasis::GridView;</div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> </div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#a5ff210d62e5d3e52189808a8881f1911\"> 38</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01559.html#a5ff210d62e5d3e52189808a8881f1911\">Element</a> = <span class=\"keyword\">typename</span> GridView::template Codim<0>::Entity;</div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> </div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#ab1f301991c77e4923149d845044001bf\"> 41</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01559.html#ab1f301991c77e4923149d845044001bf\">size_type</a> = std::size_t;</div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> </div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#adeb4377aeb75298c38c5516719ab5e09\"> 44</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01559.html#adeb4377aeb75298c38c5516719ab5e09\">Tree</a> = <span class=\"keyword\">typename</span> GlobalBasis::PreBasis::Node;</div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> </div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span><span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#a0fcc00c7b8afe993e08c9fbf9bb9efff\"> 48</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01559.html#a0fcc00c7b8afe993e08c9fbf9bb9efff\">PreBasis</a> = <span class=\"keyword\">typename</span> GlobalBasis::PreBasis;</div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> </div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> <span class=\"comment\">// Type used to store the multi indices of the basis vectors.</span></div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> <span class=\"comment\">// In contrast to MultiIndex this always has dynamic size.</span></div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> <span class=\"comment\">// It's guaranteed, that you can always cast it to MultiIndex</span></div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#acc3dcfbb6962f1023cc1113b07b76102\"> 53</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01559.html#acc3dcfbb6962f1023cc1113b07b76102\">MultiIndexStorage</a> =</div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> std::conditional_t<(PreBasis::minMultiIndexSize == PreBasis::maxMultiIndexSize),</div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> <a class=\"code hl_class\" href=\"a01275.html\">OverflowArray</a><<a class=\"code hl_class\" href=\"a01263.html\">StaticMultiIndex<size_type, PreBasis::maxMultiIndexSize></a>, PreBasis::multiIndexBufferSize>,</div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> Dune::ReservedVector<size_type, PreBasis::multiIndexBufferSize>>;</div>\n-<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> </div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> </div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#acffe4cd37e8a7720e1a3eced31570c5a\"> 61</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01559.html#acffe4cd37e8a7720e1a3eced31570c5a\">MultiIndex</a> =</div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> std::conditional_t<(PreBasis::minMultiIndexSize == PreBasis::maxMultiIndexSize),</div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> <a class=\"code hl_class\" href=\"a01263.html\">StaticMultiIndex<size_type, PreBasis::maxMultiIndexSize></a>,</div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> Dune::ReservedVector<size_type, PreBasis::multiIndexBufferSize>>;</div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> </div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> </div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#ae47ddda96d907628497ded87d44f38d0\"> 68</a></span> <a class=\"code hl_function\" href=\"a01559.html#ae47ddda96d907628497ded87d44f38d0\">DefaultLocalView</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01559.html#a9523d45b214ee146d2135416d01aceda\">GlobalBasis</a>& <a class=\"code hl_function\" href=\"a01559.html#afa30602e3769204e2cfe86f3ffc90817\">globalBasis</a>) :</div>\n-<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> <a class=\"code hl_variable\" href=\"a01559.html#aeedcb16a681bc1d7721351bd7125a951\">globalBasis_</a>(&<a class=\"code hl_function\" href=\"a01559.html#afa30602e3769204e2cfe86f3ffc90817\">globalBasis</a>),</div>\n-<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> <a class=\"code hl_variable\" href=\"a01559.html#aa139b45a7e58c7183d2c38ad71ef4bd3\">tree_</a>(<a class=\"code hl_variable\" href=\"a01559.html#aeedcb16a681bc1d7721351bd7125a951\">globalBasis_</a>->preBasis().makeNode())</div>\n-<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> {</div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> <span class=\"keyword\">static_assert</span>(models<Concept::BasisTree<GridView>, <a class=\"code hl_typedef\" href=\"a01559.html#adeb4377aeb75298c38c5516719ab5e09\">Tree</a>>(), <span class=\"stringliteral\">"Tree type passed to DefaultLocalView does not model the BasisNode concept."</span>);</div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> <a class=\"code hl_function\" href=\"a00219.html#a5e19b913a34ad68144f4fd873c51b977\">initializeTree</a>(<a class=\"code hl_variable\" href=\"a01559.html#aa139b45a7e58c7183d2c38ad71ef4bd3\">tree_</a>);</div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> }</div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> </div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#a89ec09c03236189c4bd9d41cae713cae\"> 81</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01559.html#a89ec09c03236189c4bd9d41cae713cae\">bind</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01559.html#a5ff210d62e5d3e52189808a8881f1911\">Element</a>& e)</div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> {</div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> <a class=\"code hl_variable\" href=\"a01559.html#a47292fa1338b995ad8ab511f4fc66fe5\">element_</a> = e;</div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> <a class=\"code hl_function\" href=\"a00219.html#a4dc892a209e0f55bc65eadaf2c808454\">bindTree</a>(<a class=\"code hl_variable\" href=\"a01559.html#aa139b45a7e58c7183d2c38ad71ef4bd3\">tree_</a>, *<a class=\"code hl_variable\" href=\"a01559.html#a47292fa1338b995ad8ab511f4fc66fe5\">element_</a>);</div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> <a class=\"code hl_variable\" href=\"a01559.html#ad3e344f7adb2d81622de39ae3c80468e\">indices_</a>.resize(<a class=\"code hl_function\" href=\"a01559.html#a943c5bd1c1b92e5a9ff93286ec0ed341\">size</a>());</div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> <a class=\"code hl_variable\" href=\"a01559.html#aeedcb16a681bc1d7721351bd7125a951\">globalBasis_</a>->preBasis().indices(<a class=\"code hl_variable\" href=\"a01559.html#aa139b45a7e58c7183d2c38ad71ef4bd3\">tree_</a>, <a class=\"code hl_variable\" href=\"a01559.html#ad3e344f7adb2d81622de39ae3c80468e\">indices_</a>.begin());</div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> }</div>\n-<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> </div>\n-<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> [[deprecated(<span class=\"stringliteral\">"Use the bound() method instead"</span>)]]</div>\n-<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#ab9794df271c84c6966690560ddaf21e7\"> 92</a></span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a01559.html#ab9794df271c84c6966690560ddaf21e7\">isBound</a>()<span class=\"keyword\"> const </span>{</div>\n-<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> <span class=\"keywordflow\">return</span> <span class=\"keyword\">static_cast<</span><span class=\"keywordtype\">bool</span><span class=\"keyword\">></span>(<a class=\"code hl_variable\" href=\"a01559.html#a47292fa1338b995ad8ab511f4fc66fe5\">element_</a>);</div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> }</div>\n-<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> </div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#a198ccca836349c34a08f75351a1a29b0\"> 98</a></span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a01559.html#a198ccca836349c34a08f75351a1a29b0\">bound</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> <span class=\"keywordflow\">return</span> <span class=\"keyword\">static_cast<</span><span class=\"keywordtype\">bool</span><span class=\"keyword\">></span>(<a class=\"code hl_variable\" href=\"a01559.html#a47292fa1338b995ad8ab511f4fc66fe5\">element_</a>);</div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> }</div>\n-<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> </div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#a8bf835186bb00012f86be12becf03a04\"> 107</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01559.html#a5ff210d62e5d3e52189808a8881f1911\">Element</a>& <a class=\"code hl_function\" href=\"a01559.html#a8bf835186bb00012f86be12becf03a04\">element</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> <span class=\"keywordflow\">return</span> *<a class=\"code hl_variable\" href=\"a01559.html#a47292fa1338b995ad8ab511f4fc66fe5\">element_</a>;</div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> }</div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> </div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#a15b7fa9e24937ca74a8d9329512d6aa0\"> 116</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01559.html#a15b7fa9e24937ca74a8d9329512d6aa0\">unbind</a>()</div>\n-<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> {</div>\n-<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> <a class=\"code hl_variable\" href=\"a01559.html#a47292fa1338b995ad8ab511f4fc66fe5\">element_</a>.reset();</div>\n-<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> }</div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Tree></div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01563.html\"> 38</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01563.html\">DefaultNodeToRangeMap</a></div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span>{</div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> </div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> <span class=\"comment\">// A simple visitor for computing lexicographic</span></div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> <span class=\"comment\">// subtree indices. To identify a leaf node</span></div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> <span class=\"comment\">// we use its treeIndex() which is unique</span></div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> <span class=\"comment\">// wrt the whole tree and store the computed</span></div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> <span class=\"comment\">// index in a vector indexed by the tree indices.</span></div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01567.html\"> 46</a></span> <span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01567.html\">Visitor</a></div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> : <span class=\"keyword\">public</span> TypeTree::TreeVisitor</div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> , <span class=\"keyword\">public</span> TypeTree::DynamicTraversal</div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> {</div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01567.html#a31bda2d0d2a6e6caaad0c4b54833baaa\"> 50</a></span> <a class=\"code hl_function\" href=\"a01567.html#a31bda2d0d2a6e6caaad0c4b54833baaa\">Visitor</a>(std::vector<std::size_t>& indices) :</div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> <a class=\"code hl_variable\" href=\"a01567.html#ad27dd745d2d84fd89675da8e7a706963\">indices_</a>(indices),</div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> <a class=\"code hl_variable\" href=\"a01567.html#a776d43a445def9066a5ad7b7d524d640\">counter_</a>(0)</div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> {}</div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> </div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath></div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01567.html#a6fa6002b8649337f257a1ba63f487638\"> 56</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01567.html#a6fa6002b8649337f257a1ba63f487638\">leaf</a>(Node& node, TreePath treePath)</div>\n+<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> {</div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> <span class=\"keywordflow\">if</span> (<a class=\"code hl_variable\" href=\"a01567.html#ad27dd745d2d84fd89675da8e7a706963\">indices_</a>.size() < node.treeIndex()+1)</div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> <a class=\"code hl_variable\" href=\"a01567.html#ad27dd745d2d84fd89675da8e7a706963\">indices_</a>.resize(node.treeIndex()+1);</div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> <a class=\"code hl_variable\" href=\"a01567.html#ad27dd745d2d84fd89675da8e7a706963\">indices_</a>[node.treeIndex()] = <a class=\"code hl_variable\" href=\"a01567.html#a776d43a445def9066a5ad7b7d524d640\">counter_</a>;</div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> ++<a class=\"code hl_variable\" href=\"a01567.html#a776d43a445def9066a5ad7b7d524d640\">counter_</a>;</div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> }</div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> </div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01567.html#ad27dd745d2d84fd89675da8e7a706963\"> 64</a></span> std::vector<std::size_t>& <a class=\"code hl_variable\" href=\"a01567.html#ad27dd745d2d84fd89675da8e7a706963\">indices_</a>;</div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01567.html#a776d43a445def9066a5ad7b7d524d640\"> 65</a></span> std::size_t <a class=\"code hl_variable\" href=\"a01567.html#a776d43a445def9066a5ad7b7d524d640\">counter_</a>;</div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> };</div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> </div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01563.html#a1f05cfc19a0fd6aeddd0fd441f0e0718\"> 78</a></span> <a class=\"code hl_function\" href=\"a01563.html#a1f05cfc19a0fd6aeddd0fd441f0e0718\">DefaultNodeToRangeMap</a>(<span class=\"keyword\">const</span> Tree& tree)</div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> {</div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> TypeTree::applyToTree(tree, <a class=\"code hl_struct\" href=\"a01567.html\">Visitor</a>(<a class=\"code hl_variable\" href=\"a01563.html#a125d091dadb6d9cd180e65ae5fe93bee\">indices_</a>));</div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> }</div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> </div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>Node, <span class=\"keyword\">class </span>TreePath, <span class=\"keyword\">class </span>Range,</div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> std::enable_if_t<models<Concept::HasIndexAccess, Range, decltype(std::declval<Node>().treeIndex())>() and not Tree::isLeaf, <span class=\"keywordtype\">int</span>> = 0></div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01563.html#aae4c40b619bba5f520878a6288fb702a\"> 85</a></span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <span class=\"keyword\">operator</span>()(<span class=\"keyword\">const</span> Node& node, <span class=\"keyword\">const</span> TreePath& treePath, Range&& y) <span class=\"keyword\">const</span></div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> {</div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> <span class=\"keywordflow\">return</span> y[<a class=\"code hl_variable\" href=\"a01563.html#a125d091dadb6d9cd180e65ae5fe93bee\">indices_</a>[node.treeIndex()]];</div>\n+<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> }</div>\n+<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> </div>\n+<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>Node, <span class=\"keyword\">class </span>TreePath, <span class=\"keyword\">class </span>Range,</div>\n+<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> std::enable_if_t< not models<Concept::HasIndexAccess, Range, decltype(std::declval<Node>().treeIndex())>() or Tree::isLeaf, <span class=\"keywordtype\">int</span>> = 0></div>\n+<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01563.html#aae4c40b619bba5f520878a6288fb702a\"> 92</a></span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <span class=\"keyword\">operator</span>()(<span class=\"keyword\">const</span> Node& node, <span class=\"keyword\">const</span> TreePath& treePath, Range&& y) <span class=\"keyword\">const</span></div>\n+<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> {</div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> <span class=\"keywordflow\">return</span> std::forward<Range>(y);</div>\n+<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> }</div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> </div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01563.html#a125d091dadb6d9cd180e65ae5fe93bee\"> 97</a></span> std::vector<std::size_t> <a class=\"code hl_variable\" href=\"a01563.html#a125d091dadb6d9cd180e65ae5fe93bee\">indices_</a>;</div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span>};</div>\n+<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> </div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> </div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> </div>\n+<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Tree></div>\n+<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a37dfd0fc94784b1ffe3050d87b37ad76\"> 103</a></span><a class=\"code hl_struct\" href=\"a01563.html\">DefaultNodeToRangeMap<Tree></a> <a class=\"code hl_function\" href=\"a00219.html#a37dfd0fc94784b1ffe3050d87b37ad76\">makeDefaultNodeToRangeMap</a>(<span class=\"keyword\">const</span> Tree& tree)</div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span>{</div>\n+<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_struct\" href=\"a01563.html\">DefaultNodeToRangeMap<Tree></a>(tree);</div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span>}</div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> </div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> </div>\n+<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> </div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Basis, <span class=\"keyword\">class</span> TreePath></div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#ad5971c4cc40d4d8a400ef5fe9e596350\"> 111</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00219.html#a37dfd0fc94784b1ffe3050d87b37ad76\">makeDefaultNodeToRangeMap</a>(<span class=\"keyword\">const</span> Basis& basis, TreePath&& treePath)</div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> -> <span class=\"keyword\">decltype</span>(<a class=\"code hl_function\" href=\"a00219.html#a37dfd0fc94784b1ffe3050d87b37ad76\">makeDefaultNodeToRangeMap</a>(TypeTree::child(basis.localView().tree(),treePath)))</div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span>{</div>\n+<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> <span class=\"keyword\">auto</span>&& localView = basis.localView();</div>\n+<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> localView.bind(*basis.gridView().template begin<0>());</div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> <span class=\"keyword\">auto</span>&& tree = TypeTree::child(localView.tree(),treePath);</div>\n+<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00219.html#a37dfd0fc94784b1ffe3050d87b37ad76\">makeDefaultNodeToRangeMap</a>(tree);</div>\n+<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span>}</div>\n+<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> </div>\n <div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> </div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#a6796b00299c502430bea728eee078c50\"> 125</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01559.html#adeb4377aeb75298c38c5516719ab5e09\">Tree</a>& <a class=\"code hl_function\" href=\"a01559.html#a6796b00299c502430bea728eee078c50\">tree</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01559.html#aa139b45a7e58c7183d2c38ad71ef4bd3\">tree_</a>;</div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> }</div>\n-<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> </div>\n-<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#a943c5bd1c1b92e5a9ff93286ec0ed341\"> 132</a></span> <a class=\"code hl_typedef\" href=\"a01559.html#ab1f301991c77e4923149d845044001bf\">size_type</a> <a class=\"code hl_function\" href=\"a01559.html#a943c5bd1c1b92e5a9ff93286ec0ed341\">size</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01559.html#aa139b45a7e58c7183d2c38ad71ef4bd3\">tree_</a>.size();</div>\n-<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> }</div>\n-<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> </div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#aa2ee90c6ad5bfcae29ef9f04df6592c9\"> 143</a></span> <a class=\"code hl_typedef\" href=\"a01559.html#ab1f301991c77e4923149d845044001bf\">size_type</a> <a class=\"code hl_function\" href=\"a01559.html#aa2ee90c6ad5bfcae29ef9f04df6592c9\">maxSize</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01559.html#aeedcb16a681bc1d7721351bd7125a951\">globalBasis_</a>->preBasis().maxNodeSize();</div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> }</div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> </div>\n-<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#a3f13e3fc04ae1fa6d300b8092d84f315\"> 149</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01559.html#acffe4cd37e8a7720e1a3eced31570c5a\">MultiIndex</a>& <a class=\"code hl_function\" href=\"a01559.html#a3f13e3fc04ae1fa6d300b8092d84f315\">index</a>(<a class=\"code hl_typedef\" href=\"a01559.html#ab1f301991c77e4923149d845044001bf\">size_type</a> i)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01559.html#ad3e344f7adb2d81622de39ae3c80468e\">indices_</a>[i];</div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> }</div>\n-<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> </div>\n-<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#afa30602e3769204e2cfe86f3ffc90817\"> 156</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01559.html#a9523d45b214ee146d2135416d01aceda\">GlobalBasis</a>& <a class=\"code hl_function\" href=\"a01559.html#afa30602e3769204e2cfe86f3ffc90817\">globalBasis</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> <span class=\"keywordflow\">return</span> *<a class=\"code hl_variable\" href=\"a01559.html#aeedcb16a681bc1d7721351bd7125a951\">globalBasis_</a>;</div>\n-<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> }</div>\n-<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> </div>\n-<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#ac5d11840fb83d0116cbf9d1da169c5c6\"> 161</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01559.html\">DefaultLocalView</a>& <a class=\"code hl_function\" href=\"a01559.html#ac5d11840fb83d0116cbf9d1da169c5c6\">rootLocalView</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>;</div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> }</div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> </div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span><span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#aeedcb16a681bc1d7721351bd7125a951\"> 167</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01559.html#a9523d45b214ee146d2135416d01aceda\">GlobalBasis</a>* <a class=\"code hl_variable\" href=\"a01559.html#aeedcb16a681bc1d7721351bd7125a951\">globalBasis_</a>;</div>\n-<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#a47292fa1338b995ad8ab511f4fc66fe5\"> 168</a></span> std::optional<Element> <a class=\"code hl_variable\" href=\"a01559.html#a47292fa1338b995ad8ab511f4fc66fe5\">element_</a>;</div>\n-<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#aa139b45a7e58c7183d2c38ad71ef4bd3\"> 169</a></span> <a class=\"code hl_typedef\" href=\"a01559.html#adeb4377aeb75298c38c5516719ab5e09\">Tree</a> <a class=\"code hl_variable\" href=\"a01559.html#aa139b45a7e58c7183d2c38ad71ef4bd3\">tree_</a>;</div>\n-<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01559.html#ad3e344f7adb2d81622de39ae3c80468e\"> 170</a></span> std::vector<MultiIndexStorage> <a class=\"code hl_variable\" href=\"a01559.html#ad3e344f7adb2d81622de39ae3c80468e\">indices_</a>;</div>\n-<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span>};</div>\n-<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> </div>\n-<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> </div>\n-<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> </div>\n-<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span>} <span class=\"comment\">// end namespace Functions</span></div>\n-<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span>} <span class=\"comment\">// end namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> </div>\n-<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> </div>\n-<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> </div>\n-<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH</span></div>\n-<div class=\"ttc\" id=\"aa00074_html\"><div class=\"ttname\"><a href=\"a00074.html\">overflowarray.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00101_html\"><div class=\"ttname\"><a href=\"a00101.html\">multiindex.hh</a></div></div>\n+<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> </div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span>} <span class=\"comment\">// namespace Dune::Functions</span></div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span>} <span class=\"comment\">// namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> </div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> </div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH</span></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa00219_html_a4dc892a209e0f55bc65eadaf2c808454\"><div class=\"ttname\"><a href=\"a00219.html#a4dc892a209e0f55bc65eadaf2c808454\">Dune::Functions::bindTree</a></div><div class=\"ttdeci\">void bindTree(Tree &tree, const Entity &entity, std::size_t offset=0)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:253</div></div>\n-<div class=\"ttc\" id=\"aa00219_html_a5e19b913a34ad68144f4fd873c51b977\"><div class=\"ttname\"><a href=\"a00219.html#a5e19b913a34ad68144f4fd873c51b977\">Dune::Functions::initializeTree</a></div><div class=\"ttdeci\">void initializeTree(Tree &tree, std::size_t treeIndexOffset=0)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:260</div></div>\n-<div class=\"ttc\" id=\"aa01263_html\"><div class=\"ttname\"><a href=\"a01263.html\">Dune::Functions::StaticMultiIndex</a></div><div class=\"ttdoc\">A statically sized MultiIndex type.</div><div class=\"ttdef\"><b>Definition:</b> multiindex.hh:25</div></div>\n-<div class=\"ttc\" id=\"aa01275_html\"><div class=\"ttname\"><a href=\"a01275.html\">Dune::Functions::OverflowArray</a></div><div class=\"ttdoc\">A dynamically sized array-like class with overflow.</div><div class=\"ttdef\"><b>Definition:</b> overflowarray.hh:45</div></div>\n-<div class=\"ttc\" id=\"aa01559_html\"><div class=\"ttname\"><a href=\"a01559.html\">Dune::Functions::DefaultLocalView</a></div><div class=\"ttdoc\">The restriction of a finite element basis to a single element.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:28</div></div>\n-<div class=\"ttc\" id=\"aa01559_html_a0fcc00c7b8afe993e08c9fbf9bb9efff\"><div class=\"ttname\"><a href=\"a01559.html#a0fcc00c7b8afe993e08c9fbf9bb9efff\">Dune::Functions::DefaultLocalView::PreBasis</a></div><div class=\"ttdeci\">typename GlobalBasis::PreBasis PreBasis</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:48</div></div>\n-<div class=\"ttc\" id=\"aa01559_html_a15b7fa9e24937ca74a8d9329512d6aa0\"><div class=\"ttname\"><a href=\"a01559.html#a15b7fa9e24937ca74a8d9329512d6aa0\">Dune::Functions::DefaultLocalView::unbind</a></div><div class=\"ttdeci\">void unbind()</div><div class=\"ttdoc\">Unbind from the current element.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:116</div></div>\n-<div class=\"ttc\" id=\"aa01559_html_a198ccca836349c34a08f75351a1a29b0\"><div class=\"ttname\"><a href=\"a01559.html#a198ccca836349c34a08f75351a1a29b0\">Dune::Functions::DefaultLocalView::bound</a></div><div class=\"ttdeci\">bool bound() const</div><div class=\"ttdoc\">Return if the view is bound to a grid element.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:98</div></div>\n-<div class=\"ttc\" id=\"aa01559_html_a29917f5ca32a2b2df56b1ae72c2a25ca\"><div class=\"ttname\"><a href=\"a01559.html#a29917f5ca32a2b2df56b1ae72c2a25ca\">Dune::Functions::DefaultLocalView::GridView</a></div><div class=\"ttdeci\">typename GlobalBasis::GridView GridView</div><div class=\"ttdoc\">The grid view the global FE basis lives on.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:35</div></div>\n-<div class=\"ttc\" id=\"aa01559_html_a3f13e3fc04ae1fa6d300b8092d84f315\"><div class=\"ttname\"><a href=\"a01559.html#a3f13e3fc04ae1fa6d300b8092d84f315\">Dune::Functions::DefaultLocalView::index</a></div><div class=\"ttdeci\">const MultiIndex & index(size_type i) const</div><div class=\"ttdoc\">Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:149</div></div>\n-<div class=\"ttc\" id=\"aa01559_html_a47292fa1338b995ad8ab511f4fc66fe5\"><div class=\"ttname\"><a href=\"a01559.html#a47292fa1338b995ad8ab511f4fc66fe5\">Dune::Functions::DefaultLocalView::element_</a></div><div class=\"ttdeci\">std::optional< Element > element_</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:168</div></div>\n-<div class=\"ttc\" id=\"aa01559_html_a5ff210d62e5d3e52189808a8881f1911\"><div class=\"ttname\"><a href=\"a01559.html#a5ff210d62e5d3e52189808a8881f1911\">Dune::Functions::DefaultLocalView::Element</a></div><div class=\"ttdeci\">typename GridView::template Codim< 0 >::Entity Element</div><div class=\"ttdoc\">Type of the grid element we are bound to.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:38</div></div>\n-<div class=\"ttc\" id=\"aa01559_html_a6796b00299c502430bea728eee078c50\"><div class=\"ttname\"><a href=\"a01559.html#a6796b00299c502430bea728eee078c50\">Dune::Functions::DefaultLocalView::tree</a></div><div class=\"ttdeci\">const Tree & tree() const</div><div class=\"ttdoc\">Return the local ansatz tree associated to the bound entity.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:125</div></div>\n-<div class=\"ttc\" id=\"aa01559_html_a89ec09c03236189c4bd9d41cae713cae\"><div class=\"ttname\"><a href=\"a01559.html#a89ec09c03236189c4bd9d41cae713cae\">Dune::Functions::DefaultLocalView::bind</a></div><div class=\"ttdeci\">void bind(const Element &e)</div><div class=\"ttdoc\">Bind the view to a grid element.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:81</div></div>\n-<div class=\"ttc\" id=\"aa01559_html_a8bf835186bb00012f86be12becf03a04\"><div class=\"ttname\"><a href=\"a01559.html#a8bf835186bb00012f86be12becf03a04\">Dune::Functions::DefaultLocalView::element</a></div><div class=\"ttdeci\">const Element & element() const</div><div class=\"ttdoc\">Return the grid element that the view is bound to.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:107</div></div>\n-<div class=\"ttc\" id=\"aa01559_html_a943c5bd1c1b92e5a9ff93286ec0ed341\"><div class=\"ttname\"><a href=\"a01559.html#a943c5bd1c1b92e5a9ff93286ec0ed341\">Dune::Functions::DefaultLocalView::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdoc\">Total number of degrees of freedom on this element.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:132</div></div>\n-<div class=\"ttc\" id=\"aa01559_html_a9523d45b214ee146d2135416d01aceda\"><div class=\"ttname\"><a href=\"a01559.html#a9523d45b214ee146d2135416d01aceda\">Dune::Functions::DefaultLocalView::GlobalBasis</a></div><div class=\"ttdeci\">GB GlobalBasis</div><div class=\"ttdoc\">The global FE basis that this is a view on.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:32</div></div>\n-<div class=\"ttc\" id=\"aa01559_html_aa139b45a7e58c7183d2c38ad71ef4bd3\"><div class=\"ttname\"><a href=\"a01559.html#aa139b45a7e58c7183d2c38ad71ef4bd3\">Dune::Functions::DefaultLocalView::tree_</a></div><div class=\"ttdeci\">Tree tree_</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:169</div></div>\n-<div class=\"ttc\" id=\"aa01559_html_aa2ee90c6ad5bfcae29ef9f04df6592c9\"><div class=\"ttname\"><a href=\"a01559.html#aa2ee90c6ad5bfcae29ef9f04df6592c9\">Dune::Functions::DefaultLocalView::maxSize</a></div><div class=\"ttdeci\">size_type maxSize() const</div><div class=\"ttdoc\">Maximum local size for any element on the GridView.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:143</div></div>\n-<div class=\"ttc\" id=\"aa01559_html_ab1f301991c77e4923149d845044001bf\"><div class=\"ttname\"><a href=\"a01559.html#ab1f301991c77e4923149d845044001bf\">Dune::Functions::DefaultLocalView::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdoc\">The type used for sizes.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:41</div></div>\n-<div class=\"ttc\" id=\"aa01559_html_ab9794df271c84c6966690560ddaf21e7\"><div class=\"ttname\"><a href=\"a01559.html#ab9794df271c84c6966690560ddaf21e7\">Dune::Functions::DefaultLocalView::isBound</a></div><div class=\"ttdeci\">bool isBound() const</div><div class=\"ttdoc\">Return if the view is bound to a grid element.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:92</div></div>\n-<div class=\"ttc\" id=\"aa01559_html_ac5d11840fb83d0116cbf9d1da169c5c6\"><div class=\"ttname\"><a href=\"a01559.html#ac5d11840fb83d0116cbf9d1da169c5c6\">Dune::Functions::DefaultLocalView::rootLocalView</a></div><div class=\"ttdeci\">const DefaultLocalView & rootLocalView() const</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:161</div></div>\n-<div class=\"ttc\" id=\"aa01559_html_acc3dcfbb6962f1023cc1113b07b76102\"><div class=\"ttname\"><a href=\"a01559.html#acc3dcfbb6962f1023cc1113b07b76102\">Dune::Functions::DefaultLocalView::MultiIndexStorage</a></div><div class=\"ttdeci\">std::conditional_t<(PreBasis::minMultiIndexSize==PreBasis::maxMultiIndexSize), OverflowArray< StaticMultiIndex< size_type, PreBasis::maxMultiIndexSize >, PreBasis::multiIndexBufferSize >, Dune::ReservedVector< size_type, PreBasis::multiIndexBufferSize > > MultiIndexStorage</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:56</div></div>\n-<div class=\"ttc\" id=\"aa01559_html_acffe4cd37e8a7720e1a3eced31570c5a\"><div class=\"ttname\"><a href=\"a01559.html#acffe4cd37e8a7720e1a3eced31570c5a\">Dune::Functions::DefaultLocalView::MultiIndex</a></div><div class=\"ttdeci\">std::conditional_t<(PreBasis::minMultiIndexSize==PreBasis::maxMultiIndexSize), StaticMultiIndex< size_type, PreBasis::maxMultiIndexSize >, Dune::ReservedVector< size_type, PreBasis::multiIndexBufferSize > > MultiIndex</div><div class=\"ttdoc\">Type used for global numbering of the basis vectors.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:64</div></div>\n-<div class=\"ttc\" id=\"aa01559_html_ad3e344f7adb2d81622de39ae3c80468e\"><div class=\"ttname\"><a href=\"a01559.html#ad3e344f7adb2d81622de39ae3c80468e\">Dune::Functions::DefaultLocalView::indices_</a></div><div class=\"ttdeci\">std::vector< MultiIndexStorage > indices_</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:170</div></div>\n-<div class=\"ttc\" id=\"aa01559_html_adeb4377aeb75298c38c5516719ab5e09\"><div class=\"ttname\"><a href=\"a01559.html#adeb4377aeb75298c38c5516719ab5e09\">Dune::Functions::DefaultLocalView::Tree</a></div><div class=\"ttdeci\">typename GlobalBasis::PreBasis::Node Tree</div><div class=\"ttdoc\">Tree of local finite elements / local shape function sets.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:44</div></div>\n-<div class=\"ttc\" id=\"aa01559_html_ae47ddda96d907628497ded87d44f38d0\"><div class=\"ttname\"><a href=\"a01559.html#ae47ddda96d907628497ded87d44f38d0\">Dune::Functions::DefaultLocalView::DefaultLocalView</a></div><div class=\"ttdeci\">DefaultLocalView(const GlobalBasis &globalBasis)</div><div class=\"ttdoc\">Construct local view for a given global finite element basis.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:68</div></div>\n-<div class=\"ttc\" id=\"aa01559_html_aeedcb16a681bc1d7721351bd7125a951\"><div class=\"ttname\"><a href=\"a01559.html#aeedcb16a681bc1d7721351bd7125a951\">Dune::Functions::DefaultLocalView::globalBasis_</a></div><div class=\"ttdeci\">const GlobalBasis * globalBasis_</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:167</div></div>\n-<div class=\"ttc\" id=\"aa01559_html_afa30602e3769204e2cfe86f3ffc90817\"><div class=\"ttname\"><a href=\"a01559.html#afa30602e3769204e2cfe86f3ffc90817\">Dune::Functions::DefaultLocalView::globalBasis</a></div><div class=\"ttdeci\">const GlobalBasis & globalBasis() const</div><div class=\"ttdoc\">Return the global basis that we are a view on.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:156</div></div>\n+<div class=\"ttc\" id=\"aa00219_html_a37dfd0fc94784b1ffe3050d87b37ad76\"><div class=\"ttname\"><a href=\"a00219.html#a37dfd0fc94784b1ffe3050d87b37ad76\">Dune::Functions::makeDefaultNodeToRangeMap</a></div><div class=\"ttdeci\">DefaultNodeToRangeMap< Tree > makeDefaultNodeToRangeMap(const Tree &tree)</div><div class=\"ttdef\"><b>Definition:</b> defaultnodetorangemap.hh:103</div></div>\n+<div class=\"ttc\" id=\"aa01563_html\"><div class=\"ttname\"><a href=\"a01563.html\">Dune::Functions::DefaultNodeToRangeMap</a></div><div class=\"ttdoc\">A simple node to range map using lexicographic ordering.</div><div class=\"ttdef\"><b>Definition:</b> defaultnodetorangemap.hh:39</div></div>\n+<div class=\"ttc\" id=\"aa01563_html_a125d091dadb6d9cd180e65ae5fe93bee\"><div class=\"ttname\"><a href=\"a01563.html#a125d091dadb6d9cd180e65ae5fe93bee\">Dune::Functions::DefaultNodeToRangeMap::indices_</a></div><div class=\"ttdeci\">std::vector< std::size_t > indices_</div><div class=\"ttdef\"><b>Definition:</b> defaultnodetorangemap.hh:97</div></div>\n+<div class=\"ttc\" id=\"aa01563_html_a1f05cfc19a0fd6aeddd0fd441f0e0718\"><div class=\"ttname\"><a href=\"a01563.html#a1f05cfc19a0fd6aeddd0fd441f0e0718\">Dune::Functions::DefaultNodeToRangeMap::DefaultNodeToRangeMap</a></div><div class=\"ttdeci\">DefaultNodeToRangeMap(const Tree &tree)</div><div class=\"ttdoc\">Construct DefaultNodeToRangeMap.</div><div class=\"ttdef\"><b>Definition:</b> defaultnodetorangemap.hh:78</div></div>\n+<div class=\"ttc\" id=\"aa01567_html\"><div class=\"ttname\"><a href=\"a01567.html\">Dune::Functions::DefaultNodeToRangeMap::Visitor</a></div><div class=\"ttdef\"><b>Definition:</b> defaultnodetorangemap.hh:49</div></div>\n+<div class=\"ttc\" id=\"aa01567_html_a31bda2d0d2a6e6caaad0c4b54833baaa\"><div class=\"ttname\"><a href=\"a01567.html#a31bda2d0d2a6e6caaad0c4b54833baaa\">Dune::Functions::DefaultNodeToRangeMap::Visitor::Visitor</a></div><div class=\"ttdeci\">Visitor(std::vector< std::size_t > &indices)</div><div class=\"ttdef\"><b>Definition:</b> defaultnodetorangemap.hh:50</div></div>\n+<div class=\"ttc\" id=\"aa01567_html_a6fa6002b8649337f257a1ba63f487638\"><div class=\"ttname\"><a href=\"a01567.html#a6fa6002b8649337f257a1ba63f487638\">Dune::Functions::DefaultNodeToRangeMap::Visitor::leaf</a></div><div class=\"ttdeci\">void leaf(Node &node, TreePath treePath)</div><div class=\"ttdef\"><b>Definition:</b> defaultnodetorangemap.hh:56</div></div>\n+<div class=\"ttc\" id=\"aa01567_html_a776d43a445def9066a5ad7b7d524d640\"><div class=\"ttname\"><a href=\"a01567.html#a776d43a445def9066a5ad7b7d524d640\">Dune::Functions::DefaultNodeToRangeMap::Visitor::counter_</a></div><div class=\"ttdeci\">std::size_t counter_</div><div class=\"ttdef\"><b>Definition:</b> defaultnodetorangemap.hh:65</div></div>\n+<div class=\"ttc\" id=\"aa01567_html_ad27dd745d2d84fd89675da8e7a706963\"><div class=\"ttname\"><a href=\"a01567.html#ad27dd745d2d84fd89675da8e7a706963\">Dune::Functions::DefaultNodeToRangeMap::Visitor::indices_</a></div><div class=\"ttdeci\">std::vector< std::size_t > & indices_</div><div class=\"ttdef\"><b>Definition:</b> defaultnodetorangemap.hh:64</div></div>\n <div class=\"ttc\" id=\"aa02876_html\"><div class=\"ttname\"><a href=\"a02876.html\">concepts.hh</a></div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,271 +5,146 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-defaultlocalview.hh\n+defaultnodetorangemap.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH\n- 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH\n+ 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH\n+ 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH\n 5\n 6\n- 7#include <tuple>\n- 8#include <optional>\n- 9\n- 10#include <dune/common/concept.hh>\n- 11#include <dune/common/hybridutilities.hh>\n- 12#include <dune/common/reservedvector.hh>\n+ 7#include <dune/common/concept.hh>\n+ 8\n+ 9#include <dune/functions/functionspacebases/concepts.hh>\n+ 10\n+ 11#include <dune/typetree/traversal.hh>\n+ 12#include <dune/typetree/visitor.hh>\n 13\n- 14#include <dune/functions/common/overflowarray.hh>\n- 15#include <dune/functions/common/multiindex.hh>\n- 16#include <dune/functions/functionspacebases/concepts.hh>\n+ 14\n+ 15namespace Dune {\n+ 16namespace Functions {\n 17\n 18\n 19\n- 20namespace Dune {\n- 21namespace Functions {\n- 22\n- 23\n- 24\n- 26template<class GB>\n-27class DefaultLocalView\n- 28{\n- 29public:\n- 30\n-32 using GlobalBasis = GB;\n- 33\n-35 using GridView = typename GlobalBasis::GridView;\n- 36\n-38 using Element = typename GridView::template Codim<0>::Entity;\n- 39\n-41 using size_type = std::size_t;\n- 42\n-44 using Tree = typename GlobalBasis::PreBasis::Node;\n- 45\n- 46protected:\n- 47\n-48 using PreBasis = typename GlobalBasis::PreBasis;\n- 49\n- 50 // Type used to store the multi indices of the basis vectors.\n- 51 // In contrast to MultiIndex this always has dynamic size.\n- 52 // It's guaranteed, that you can always cast it to MultiIndex\n-53 using MultiIndexStorage =\n- 54 std::conditional_t<(PreBasis::minMultiIndexSize == PreBasis::\n-maxMultiIndexSize),\n- 55 OverflowArray<StaticMultiIndex<size_type,_PreBasis::maxMultiIndexSize>,\n-PreBasis::multiIndexBufferSize>,\n- 56 Dune::ReservedVector<size_type, PreBasis::multiIndexBufferSize>>;\n- 57\n- 58public:\n- 59\n-61 using MultiIndex =\n- 62 std::conditional_t<(PreBasis::minMultiIndexSize == PreBasis::\n-maxMultiIndexSize),\n- 63 StaticMultiIndex<size_type,_PreBasis::maxMultiIndexSize>,\n- 64 Dune::ReservedVector<size_type, PreBasis::multiIndexBufferSize>>;\n- 65\n- 66\n-68 DefaultLocalView(const GlobalBasis& globalBasis) :\n- 69 globalBasis_(&globalBasis),\n- 70 tree_(globalBasis_->preBasis().makeNode())\n- 71 {\n- 72 static_assert(models<Concept::BasisTree<GridView>, Tree>(), \"Tree type\n-passed to DefaultLocalView does not model the BasisNode concept.\");\n- 73 initializeTree(tree_);\n- 74 }\n- 75\n-81 void bind(const Element& e)\n- 82 {\n- 83 element_ = e;\n- 84 bindTree(tree_, *element_);\n- 85 indices_.resize(size());\n- 86 globalBasis_->preBasis().indices(tree_, indices_.begin());\n- 87 }\n- 88\n- 91 [[deprecated(\"Use the bound() method instead\")]]\n-92 bool isBound() const {\n- 93 return static_cast<bool>(element_);\n- 94 }\n- 95\n-98 bool bound() const\n- 99 {\n- 100 return static_cast<bool>(element_);\n- 101 }\n- 102\n-107 const Element& element() const\n- 108 {\n- 109 return *element_;\n- 110 }\n- 111\n-116 void unbind()\n- 117 {\n- 118 element_.reset();\n- 119 }\n+ 37template<class Tree>\n+38struct DefaultNodeToRangeMap\n+ 39{\n+ 40\n+ 41 // A simple visitor for computing lexicographic\n+ 42 // subtree indices. To identify a leaf node\n+ 43 // we use its treeIndex() which is unique\n+ 44 // wrt the whole tree and store the computed\n+ 45 // index in a vector indexed by the tree indices.\n+46 struct Visitor\n+ 47 : public TypeTree::TreeVisitor\n+ 48 , public TypeTree::DynamicTraversal\n+ 49 {\n+50 Visitor(std::vector<std::size_t>& indices) :\n+ 51 indices_(indices),\n+ 52 counter_(0)\n+ 53 {}\n+ 54\n+ 55 template<typename Node, typename TreePath>\n+56 void leaf(Node& node, TreePath treePath)\n+ 57 {\n+ 58 if (indices_.size() < node.treeIndex()+1)\n+ 59 indices_.resize(node.treeIndex()+1);\n+ 60 indices_[node.treeIndex()] = counter_;\n+ 61 ++counter_;\n+ 62 }\n+ 63\n+64 std::vector<std::size_t>& indices_;\n+65 std::size_t counter_;\n+ 66 };\n+ 67\n+78 DefaultNodeToRangeMap(const Tree& tree)\n+ 79 {\n+ 80 TypeTree::applyToTree(tree, Visitor(indices_));\n+ 81 }\n+ 82\n+ 83 template<class Node, class TreePath, class Range,\n+ 84 std::enable_if_t<models<Concept::HasIndexAccess, Range, decltype(std::\n+declval<Node>().treeIndex())>() and not Tree::isLeaf, int> = 0>\n+85 decltype(auto) operator()(const Node& node, const TreePath& treePath,\n+Range&& y) const\n+ 86 {\n+ 87 return y[indices_[node.treeIndex()]];\n+ 88 }\n+ 89\n+ 90 template<class Node, class TreePath, class Range,\n+ 91 std::enable_if_t< not models<Concept::HasIndexAccess, Range, decltype(std::\n+declval<Node>().treeIndex())>() or Tree::isLeaf, int> = 0>\n+92 decltype(auto) operator()(const Node& node, const TreePath& treePath,\n+Range&& y) const\n+ 93 {\n+ 94 return std::forward<Range>(y);\n+ 95 }\n+ 96\n+97 std::vector<std::size_t> indices_;\n+ 98};\n+ 99\n+ 100\n+ 101\n+ 102template<class Tree>\n+103DefaultNodeToRangeMap<Tree> makeDefaultNodeToRangeMap(const Tree& tree)\n+ 104{\n+ 105 return DefaultNodeToRangeMap<Tree>(tree);\n+ 106}\n+ 107\n+ 108\n+ 109\n+ 110template<class Basis, class TreePath>\n+111auto makeDefaultNodeToRangeMap(const Basis& basis, TreePath&& treePath)\n+ 112 -> decltype(makeDefaultNodeToRangeMap(TypeTree::child(basis.localView\n+().tree(),treePath)))\n+ 113{\n+ 114 auto&& localView = basis.localView();\n+ 115 localView.bind(*basis.gridView().template begin<0>());\n+ 116 auto&& tree = TypeTree::child(localView.tree(),treePath);\n+ 117 return makeDefaultNodeToRangeMap(tree);\n+ 118}\n+ 119\n 120\n-125 const Tree& tree() const\n- 126 {\n- 127 return tree_;\n- 128 }\n- 129\n-132 size_type size() const\n- 133 {\n- 134 return tree_.size();\n- 135 }\n- 136\n-143 size_type maxSize() const\n- 144 {\n- 145 return globalBasis_->preBasis().maxNodeSize();\n- 146 }\n- 147\n-149 const MultiIndex& index(size_type i) const\n- 150 {\n- 151 return indices_[i];\n- 152 }\n- 153\n-156 const GlobalBasis& globalBasis() const\n- 157 {\n- 158 return *globalBasis_;\n- 159 }\n- 160\n-161 const DefaultLocalView& rootLocalView() const\n- 162 {\n- 163 return *this;\n- 164 }\n- 165\n- 166protected:\n-167 const GlobalBasis* globalBasis_;\n-168 std::optional<Element> element_;\n-169 Tree tree_;\n-170 std::vector<MultiIndexStorage> indices_;\n- 171};\n- 172\n- 173\n- 174\n- 175} // end namespace Functions\n- 176} // end namespace Dune\n- 177\n- 178\n- 179\n- 180#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTLOCALVIEW_HH\n-overflowarray.hh\n-multiindex.hh\n+ 121\n+ 122} // namespace Dune::Functions\n+ 123} // namespace Dune\n+ 124\n+ 125\n+ 126#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::bindTree\n-void bindTree(Tree &tree, const Entity &entity, std::size_t offset=0)\n-Definition: nodes.hh:253\n-Dune::Functions::initializeTree\n-void initializeTree(Tree &tree, std::size_t treeIndexOffset=0)\n-Definition: nodes.hh:260\n-Dune::Functions::StaticMultiIndex\n-A statically sized MultiIndex type.\n-Definition: multiindex.hh:25\n-Dune::Functions::OverflowArray\n-A dynamically sized array-like class with overflow.\n-Definition: overflowarray.hh:45\n-Dune::Functions::DefaultLocalView\n-The restriction of a finite element basis to a single element.\n-Definition: defaultlocalview.hh:28\n-Dune::Functions::DefaultLocalView::PreBasis\n-typename GlobalBasis::PreBasis PreBasis\n-Definition: defaultlocalview.hh:48\n-Dune::Functions::DefaultLocalView::unbind\n-void unbind()\n-Unbind from the current element.\n-Definition: defaultlocalview.hh:116\n-Dune::Functions::DefaultLocalView::bound\n-bool bound() const\n-Return if the view is bound to a grid element.\n-Definition: defaultlocalview.hh:98\n-Dune::Functions::DefaultLocalView::GridView\n-typename GlobalBasis::GridView GridView\n-The grid view the global FE basis lives on.\n-Definition: defaultlocalview.hh:35\n-Dune::Functions::DefaultLocalView::index\n-const MultiIndex & index(size_type i) const\n-Maps from subtree index set [0..size-1] to a globally unique multi index in\n-global basis.\n-Definition: defaultlocalview.hh:149\n-Dune::Functions::DefaultLocalView::element_\n-std::optional< Element > element_\n-Definition: defaultlocalview.hh:168\n-Dune::Functions::DefaultLocalView::Element\n-typename GridView::template Codim< 0 >::Entity Element\n-Type of the grid element we are bound to.\n-Definition: defaultlocalview.hh:38\n-Dune::Functions::DefaultLocalView::tree\n-const Tree & tree() const\n-Return the local ansatz tree associated to the bound entity.\n-Definition: defaultlocalview.hh:125\n-Dune::Functions::DefaultLocalView::bind\n-void bind(const Element &e)\n-Bind the view to a grid element.\n-Definition: defaultlocalview.hh:81\n-Dune::Functions::DefaultLocalView::element\n-const Element & element() const\n-Return the grid element that the view is bound to.\n-Definition: defaultlocalview.hh:107\n-Dune::Functions::DefaultLocalView::size\n-size_type size() const\n-Total number of degrees of freedom on this element.\n-Definition: defaultlocalview.hh:132\n-Dune::Functions::DefaultLocalView::GlobalBasis\n-GB GlobalBasis\n-The global FE basis that this is a view on.\n-Definition: defaultlocalview.hh:32\n-Dune::Functions::DefaultLocalView::tree_\n-Tree tree_\n-Definition: defaultlocalview.hh:169\n-Dune::Functions::DefaultLocalView::maxSize\n-size_type maxSize() const\n-Maximum local size for any element on the GridView.\n-Definition: defaultlocalview.hh:143\n-Dune::Functions::DefaultLocalView::size_type\n-std::size_t size_type\n-The type used for sizes.\n-Definition: defaultlocalview.hh:41\n-Dune::Functions::DefaultLocalView::isBound\n-bool isBound() const\n-Return if the view is bound to a grid element.\n-Definition: defaultlocalview.hh:92\n-Dune::Functions::DefaultLocalView::rootLocalView\n-const DefaultLocalView & rootLocalView() const\n-Definition: defaultlocalview.hh:161\n-Dune::Functions::DefaultLocalView::MultiIndexStorage\n-std::conditional_t<(PreBasis::minMultiIndexSize==PreBasis::maxMultiIndexSize),\n-OverflowArray< StaticMultiIndex< size_type, PreBasis::maxMultiIndexSize >,\n-PreBasis::multiIndexBufferSize >, Dune::ReservedVector< size_type, PreBasis::\n-multiIndexBufferSize > > MultiIndexStorage\n-Definition: defaultlocalview.hh:56\n-Dune::Functions::DefaultLocalView::MultiIndex\n-std::conditional_t<(PreBasis::minMultiIndexSize==PreBasis::maxMultiIndexSize),\n-StaticMultiIndex< size_type, PreBasis::maxMultiIndexSize >, Dune::\n-ReservedVector< size_type, PreBasis::multiIndexBufferSize > > MultiIndex\n-Type used for global numbering of the basis vectors.\n-Definition: defaultlocalview.hh:64\n-Dune::Functions::DefaultLocalView::indices_\n-std::vector< MultiIndexStorage > indices_\n-Definition: defaultlocalview.hh:170\n-Dune::Functions::DefaultLocalView::Tree\n-typename GlobalBasis::PreBasis::Node Tree\n-Tree of local finite elements / local shape function sets.\n-Definition: defaultlocalview.hh:44\n-Dune::Functions::DefaultLocalView::DefaultLocalView\n-DefaultLocalView(const GlobalBasis &globalBasis)\n-Construct local view for a given global finite element basis.\n-Definition: defaultlocalview.hh:68\n-Dune::Functions::DefaultLocalView::globalBasis_\n-const GlobalBasis * globalBasis_\n-Definition: defaultlocalview.hh:167\n-Dune::Functions::DefaultLocalView::globalBasis\n-const GlobalBasis & globalBasis() const\n-Return the global basis that we are a view on.\n-Definition: defaultlocalview.hh:156\n+Dune::Functions::makeDefaultNodeToRangeMap\n+DefaultNodeToRangeMap< Tree > makeDefaultNodeToRangeMap(const Tree &tree)\n+Definition: defaultnodetorangemap.hh:103\n+Dune::Functions::DefaultNodeToRangeMap\n+A simple node to range map using lexicographic ordering.\n+Definition: defaultnodetorangemap.hh:39\n+Dune::Functions::DefaultNodeToRangeMap::indices_\n+std::vector< std::size_t > indices_\n+Definition: defaultnodetorangemap.hh:97\n+Dune::Functions::DefaultNodeToRangeMap::DefaultNodeToRangeMap\n+DefaultNodeToRangeMap(const Tree &tree)\n+Construct DefaultNodeToRangeMap.\n+Definition: defaultnodetorangemap.hh:78\n+Dune::Functions::DefaultNodeToRangeMap::Visitor\n+Definition: defaultnodetorangemap.hh:49\n+Dune::Functions::DefaultNodeToRangeMap::Visitor::Visitor\n+Visitor(std::vector< std::size_t > &indices)\n+Definition: defaultnodetorangemap.hh:50\n+Dune::Functions::DefaultNodeToRangeMap::Visitor::leaf\n+void leaf(Node &node, TreePath treePath)\n+Definition: defaultnodetorangemap.hh:56\n+Dune::Functions::DefaultNodeToRangeMap::Visitor::counter_\n+std::size_t counter_\n+Definition: defaultnodetorangemap.hh:65\n+Dune::Functions::DefaultNodeToRangeMap::Visitor::indices_\n+std::vector< std::size_t > & indices_\n+Definition: defaultnodetorangemap.hh:64\n concepts.hh\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00143.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00143.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: lagrangedgbasis.hh File Reference</title>\n+<title>dune-functions: flatmultiindex.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -63,60 +63,37 @@\n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n-<a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> |\n-<a href=\"#typedef-members\">Typedefs</a> |\n-<a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">lagrangedgbasis.hh File Reference</div></div>\n+<a href=\"#typedef-members\">Typedefs</a> </div>\n+ <div class=\"headertitle\"><div class=\"title\">flatmultiindex.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <div class=\"textblock\"><code>#include <array></code><br />\n-<code>#include <dune/common/exceptions.hh></code><br />\n-<code>#include <dune/common/math.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00191_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00119_source.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00125_source.html\">dune/functions/functionspacebases/lagrangebasis.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00032_source.html\">dune/functions/common/multiindex.hh</a>></code><br />\n </div>\n <p><a href=\"a00143_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n-Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01679.html\">Dune::Functions::LagrangeDGPreBasis< GV, k ></a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-</table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a00224\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00224.html\">Dune::Functions::BasisFactory</a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"typedef-members\" name=\"typedef-members\"></a>\n Typedefs</h2></td></tr>\n-<tr class=\"memitem:afa871daf79a93a0f0b19e6e480b41c95\"><td class=\"memTemplParams\" colspan=\"2\">template<typename GV , int k> </td></tr>\n-<tr class=\"memitem:afa871daf79a93a0f0b19e6e480b41c95\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#afa871daf79a93a0f0b19e6e480b41c95\">Dune::Functions::LagrangeDGNode</a> = LagrangeNode< GV, k ></td></tr>\n-<tr class=\"separator:afa871daf79a93a0f0b19e6e480b41c95\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:ga5de7b8547ff84158602bfb45a4358c67\"><td class=\"memTemplParams\" colspan=\"2\">template<typename GV , int k> </td></tr>\n-<tr class=\"memitem:ga5de7b8547ff84158602bfb45a4358c67\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#ga5de7b8547ff84158602bfb45a4358c67\">Dune::Functions::LagrangeDGBasis</a> = DefaultGlobalBasis< LagrangeDGPreBasis< GV, k > ></td></tr>\n-<tr class=\"memdesc:ga5de7b8547ff84158602bfb45a4358c67\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Basis of a scalar k-th-order Lagrangean-DG finite element space. <a href=\"a00213.html#ga5de7b8547ff84158602bfb45a4358c67\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga5de7b8547ff84158602bfb45a4358c67\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-</table><table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n-Functions</h2></td></tr>\n-<tr class=\"memitem:gae7dbc0c4e48b9cf3da63d6ef431b3481\"><td class=\"memTemplParams\" colspan=\"2\">template<std::size_t k> </td></tr>\n-<tr class=\"memitem:gae7dbc0c4e48b9cf3da63d6ef431b3481\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#gae7dbc0c4e48b9cf3da63d6ef431b3481\">Dune::Functions::BasisFactory::lagrangeDG</a> ()</td></tr>\n-<tr class=\"memdesc:gae7dbc0c4e48b9cf3da63d6ef431b3481\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a pre-basis factory that can create a LagrangeDG pre-basis. <a href=\"a00213.html#gae7dbc0c4e48b9cf3da63d6ef431b3481\">More...</a><br /></td></tr>\n-<tr class=\"separator:gae7dbc0c4e48b9cf3da63d6ef431b3481\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga6b523ca86bfec2581ea9c173a722f8f3\"><td class=\"memTemplParams\" colspan=\"2\">template<class size_type > </td></tr>\n+<tr class=\"memitem:ga6b523ca86bfec2581ea9c173a722f8f3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00214.html#ga6b523ca86bfec2581ea9c173a722f8f3\">Dune::Functions::FlatMultiIndex</a> = StaticMultiIndex< size_type, 1 ></td></tr>\n+<tr class=\"memdesc:ga6b523ca86bfec2581ea9c173a722f8f3\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A multi-index class with only one level. <a href=\"a00214.html#ga6b523ca86bfec2581ea9c173a722f8f3\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga6b523ca86bfec2581ea9c173a722f8f3\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,44 +5,25 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-Classes | Namespaces | Typedefs | Functions\n-lagrangedgbasis.hh File Reference\n+Namespaces | Typedefs\n+flatmultiindex.hh File Reference\n #include <array>\n-#include <dune/common/exceptions.hh>\n-#include <dune/common/math.hh>\n-#include <dune/functions/functionspacebases/nodes.hh>\n-#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n-#include <dune/functions/functionspacebases/lagrangebasis.hh>\n+#include <dune/functions/common/multiindex.hh>\n Go_to_the_source_code_of_this_file.\n- Classes\n-class \u00a0Dune::Functions::LagrangeDGPreBasis<_GV,_k_>\n-\u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n-namespace \u00a0Dune::Functions::BasisFactory\n-\u00a0\n Typedefs\n-template<typename GV , int k>\n-using\u00a0Dune::Functions::LagrangeDGNode = LagrangeNode< GV, k >\n-\u00a0\n-template<typename GV , int k>\n-using\u00a0Dune::Functions::LagrangeDGBasis = DefaultGlobalBasis<\n- LagrangeDGPreBasis< GV, k > >\n-\u00a0 Basis of a scalar k-th-order Lagrangean-DG finite element space. More...\n-\u00a0\n- Functions\n-template<std::size_t k>\n-auto\u00a0Dune::Functions::BasisFactory::lagrangeDG ()\n-\u00a0 Create a pre-basis factory that can create a LagrangeDG pre-basis.\n- More...\n+template<class size_type >\n+using\u00a0Dune::Functions::FlatMultiIndex = StaticMultiIndex< size_type, 1 >\n+\u00a0 A multi-index class with only one level. More...\n \u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00143_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00143_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: lagrangedgbasis.hh Source File</title>\n+<title>dune-functions: flatmultiindex.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,283 +62,43 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">lagrangedgbasis.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">flatmultiindex.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00143.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n <div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <array></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <dune/common/exceptions.hh></span></div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <dune/common/math.hh></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span> </div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00032.html\">dune/functions/common/multiindex.hh</a>></span></div>\n <div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00191.html\">dune/functions/functionspacebases/nodes.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00119.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00125.html\">dune/functions/functionspacebases/lagrangebasis.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n <div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n <div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span> </div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> </div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"comment\">// *****************************************************************************</span></div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"comment\">// This is the reusable part of the basis. It contains</span></div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span><span class=\"comment\">// LagrangeDGPreBasis</span></div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"comment\">// LagrangeDGNode</span></div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span><span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span><span class=\"comment\">// The pre-basis allows to create the others and is the owner of possible shared</span></div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span><span class=\"comment\">// state. These components do _not_ depend on the global basis and local view</span></div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span><span class=\"comment\">// and can be used without a global basis.</span></div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> <span class=\"keywordtype\">size_t</span>ype></div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00214.html#ga6b523ca86bfec2581ea9c173a722f8f3\"> 31</a></span><span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01267.html\">FlatMultiIndex</a> = <a class=\"code hl_class\" href=\"a01267.html\">StaticMultiIndex<size_type, 1></a>;</div>\n <div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> </div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k></div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#afa871daf79a93a0f0b19e6e480b41c95\"> 34</a></span><span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01667.html\">LagrangeDGNode</a> = <a class=\"code hl_class\" href=\"a01667.html\">LagrangeNode<GV, k></a>;</div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> </div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k></div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html\"> 37</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01679.html\">LagrangeDGPreBasis</a></div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span>{</div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dim = GV::dimension;</div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> </div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> </div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a8af148321780535e5555938ac4590e3c\"> 44</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01679.html#a8af148321780535e5555938ac4590e3c\">GridView</a> = GV;</div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#aef9347d55bd08683c5da3937c9e347bc\"> 45</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01679.html#aef9347d55bd08683c5da3937c9e347bc\">size_type</a> = std::size_t;</div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> </div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> <span class=\"comment\">// Precompute the number of dofs per entity type</span></div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a99e23efcb7d3e14798f723ba9f033afe\"> 49</a></span> <span class=\"keyword\">const</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_variable\" href=\"a01679.html#a99e23efcb7d3e14798f723ba9f033afe\">dofsPerEdge</a> = k+1;</div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#ab9209fa402834b5c9a35d9e987122dce\"> 50</a></span> <span class=\"keyword\">const</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_variable\" href=\"a01679.html#ab9209fa402834b5c9a35d9e987122dce\">dofsPerTriangle</a> = (k+1)*(k+2)/2;</div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#aad680a5b4e4584e3f2d56396af361123\"> 51</a></span> <span class=\"keyword\">const</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_variable\" href=\"a01679.html#aad680a5b4e4584e3f2d56396af361123\">dofsPerQuad</a> = (k+1)*(k+1);</div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a755b7a249dd88abd62ce3be575320572\"> 52</a></span> <span class=\"keyword\">const</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_variable\" href=\"a01679.html#a755b7a249dd88abd62ce3be575320572\">dofsPerTetrahedron</a> = (k+1)*(k+2)*(k+3)/6;</div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#afb53eceb4802d0e888664e0cbe33f843\"> 53</a></span> <span class=\"keyword\">const</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_variable\" href=\"a01679.html#afb53eceb4802d0e888664e0cbe33f843\">dofsPerPrism</a> = (k+1)*(k+1)*(k+2)/2;</div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a64d5d4089862c52124131d75c156facf\"> 54</a></span> <span class=\"keyword\">const</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_variable\" href=\"a01679.html#a64d5d4089862c52124131d75c156facf\">dofsPerHexahedron</a> = (k+1)*(k+1)*(k+1);</div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#ac1406270c17daf802721fae3e90d350f\"> 55</a></span> <span class=\"keyword\">const</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_variable\" href=\"a01679.html#ac1406270c17daf802721fae3e90d350f\">dofsPerPyramid</a> = (k+1)*(k+2)*(2*k+3)/6;</div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> </div>\n-<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> </div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a1358396b2a7d352807195b7e2e855849\"> 58</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01667.html\">Node</a> = <a class=\"code hl_class\" href=\"a01667.html\">LagrangeDGNode<GV, k></a>;</div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> </div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a4ceb8a4c31a5cf55d03f715717c95910\"> 60</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01679.html#aef9347d55bd08683c5da3937c9e347bc\">size_type</a> <a class=\"code hl_variable\" href=\"a01679.html#a4ceb8a4c31a5cf55d03f715717c95910\">maxMultiIndexSize</a> = 1;</div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#ae9cd5968c89433b07b3de6c28e89a368\"> 61</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01679.html#aef9347d55bd08683c5da3937c9e347bc\">size_type</a> <a class=\"code hl_variable\" href=\"a01679.html#ae9cd5968c89433b07b3de6c28e89a368\">minMultiIndexSize</a> = 1;</div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a20f969e87311ae7db719d06e7737d70e\"> 62</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01679.html#aef9347d55bd08683c5da3937c9e347bc\">size_type</a> <a class=\"code hl_variable\" href=\"a01679.html#a20f969e87311ae7db719d06e7737d70e\">multiIndexBufferSize</a> = 1;</div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> </div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a6922ab8ade352184b13dca9d354b663e\"> 65</a></span> <a class=\"code hl_function\" href=\"a01679.html#a6922ab8ade352184b13dca9d354b663e\">LagrangeDGPreBasis</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01679.html#a8af148321780535e5555938ac4590e3c\">GridView</a>& gv) :</div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> <a class=\"code hl_variable\" href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\">gridView_</a>(gv)</div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> {}</div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> </div>\n-<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> </div>\n-<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a8b70bc6aa806e06c8062a69d4287af96\"> 70</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01679.html#a8b70bc6aa806e06c8062a69d4287af96\">initializeIndices</a>()</div>\n-<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> {</div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> <span class=\"keywordflow\">switch</span> (dim)</div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> {</div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> <span class=\"keywordflow\">case</span> 1:</div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> {</div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> <span class=\"keywordflow\">break</span>;</div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> }</div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> <span class=\"keywordflow\">case</span> 2:</div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> {</div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> <a class=\"code hl_variable\" href=\"a01679.html#a8f9bb80599a31e77d8b96522467fa691\">quadrilateralOffset_</a> = <a class=\"code hl_variable\" href=\"a01679.html#ab9209fa402834b5c9a35d9e987122dce\">dofsPerTriangle</a> * <a class=\"code hl_variable\" href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\">gridView_</a>.size(Dune::GeometryTypes::triangle);</div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> <span class=\"keywordflow\">break</span>;</div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> }</div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> <span class=\"keywordflow\">case</span> 3:</div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> {</div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> <a class=\"code hl_variable\" href=\"a01679.html#afb36ed4d135e4755c90307f3a1678f55\">prismOffset_</a> = <a class=\"code hl_variable\" href=\"a01679.html#a755b7a249dd88abd62ce3be575320572\">dofsPerTetrahedron</a> * <a class=\"code hl_variable\" href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\">gridView_</a>.size(Dune::GeometryTypes::tetrahedron);</div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> </div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> <a class=\"code hl_variable\" href=\"a01679.html#a49fc97158b3e4b9851ed636300c718ce\">hexahedronOffset_</a> = <a class=\"code hl_variable\" href=\"a01679.html#afb36ed4d135e4755c90307f3a1678f55\">prismOffset_</a> + <a class=\"code hl_variable\" href=\"a01679.html#afb53eceb4802d0e888664e0cbe33f843\">dofsPerPrism</a> * <a class=\"code hl_variable\" href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\">gridView_</a>.size(Dune::GeometryTypes::prism);</div>\n-<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> </div>\n-<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> <a class=\"code hl_variable\" href=\"a01679.html#a6ad26ab973d39bc12e575d80cd1320d2\">pyramidOffset_</a> = <a class=\"code hl_variable\" href=\"a01679.html#a49fc97158b3e4b9851ed636300c718ce\">hexahedronOffset_</a> + <a class=\"code hl_variable\" href=\"a01679.html#a64d5d4089862c52124131d75c156facf\">dofsPerHexahedron</a> * <a class=\"code hl_variable\" href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\">gridView_</a>.size(Dune::GeometryTypes::hexahedron);</div>\n-<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> <span class=\"keywordflow\">break</span>;</div>\n-<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> }</div>\n-<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> }</div>\n-<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> }</div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> </div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#aa6c5ef18a6d21e99037521fd668711af\"> 97</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01679.html#a8af148321780535e5555938ac4590e3c\">GridView</a>& <a class=\"code hl_function\" href=\"a01679.html#aa6c5ef18a6d21e99037521fd668711af\">gridView</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\">gridView_</a>;</div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> }</div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> </div>\n-<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a4952fa7945357c969435f48c0a643dd7\"> 102</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01679.html#a4952fa7945357c969435f48c0a643dd7\">update</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01679.html#a8af148321780535e5555938ac4590e3c\">GridView</a>& gv)</div>\n-<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> {</div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> <a class=\"code hl_variable\" href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\">gridView_</a> = gv;</div>\n-<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> }</div>\n-<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> </div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a4bf95ae4450021799f1d8b14fbb6c78b\"> 110</a></span> <a class=\"code hl_class\" href=\"a01667.html\">Node</a> <a class=\"code hl_function\" href=\"a01679.html#a4bf95ae4450021799f1d8b14fbb6c78b\">makeNode</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01667.html\">Node</a>{};</div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> }</div>\n-<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> </div>\n-<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a0d2c4b976257136afdf2b1ac4553a3e9\"> 115</a></span> <a class=\"code hl_typedef\" href=\"a01679.html#aef9347d55bd08683c5da3937c9e347bc\">size_type</a> <a class=\"code hl_function\" href=\"a01679.html#a0d2c4b976257136afdf2b1ac4553a3e9\">size</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> <span class=\"keywordflow\">switch</span> (dim)</div>\n-<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> {</div>\n-<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> <span class=\"keywordflow\">case</span> 1:</div>\n-<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01679.html#a99e23efcb7d3e14798f723ba9f033afe\">dofsPerEdge</a>*<a class=\"code hl_variable\" href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\">gridView_</a>.size(0);</div>\n-<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> <span class=\"keywordflow\">case</span> 2:</div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> {</div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01679.html#ab9209fa402834b5c9a35d9e987122dce\">dofsPerTriangle</a>*<a class=\"code hl_variable\" href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\">gridView_</a>.size(Dune::GeometryTypes::triangle) + <a class=\"code hl_variable\" href=\"a01679.html#aad680a5b4e4584e3f2d56396af361123\">dofsPerQuad</a>*<a class=\"code hl_variable\" href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\">gridView_</a>.size(Dune::GeometryTypes::quadrilateral);</div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> }</div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> <span class=\"keywordflow\">case</span> 3:</div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> {</div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01679.html#a755b7a249dd88abd62ce3be575320572\">dofsPerTetrahedron</a>*<a class=\"code hl_variable\" href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\">gridView_</a>.size(Dune::GeometryTypes::tetrahedron)</div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> + <a class=\"code hl_variable\" href=\"a01679.html#ac1406270c17daf802721fae3e90d350f\">dofsPerPyramid</a>*<a class=\"code hl_variable\" href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\">gridView_</a>.size(Dune::GeometryTypes::pyramid)</div>\n-<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> + <a class=\"code hl_variable\" href=\"a01679.html#afb53eceb4802d0e888664e0cbe33f843\">dofsPerPrism</a>*<a class=\"code hl_variable\" href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\">gridView_</a>.size(Dune::GeometryTypes::prism)</div>\n-<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> + <a class=\"code hl_variable\" href=\"a01679.html#a64d5d4089862c52124131d75c156facf\">dofsPerHexahedron</a>*<a class=\"code hl_variable\" href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\">gridView_</a>.size(Dune::GeometryTypes::hexahedron);</div>\n-<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> }</div>\n-<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> }</div>\n-<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"No size method for "</span> << dim << <span class=\"stringliteral\">"d grids available yet!"</span>);</div>\n-<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> }</div>\n-<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> </div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a845490072407c1b9228ba479879e58eb\"> 138</a></span> <a class=\"code hl_typedef\" href=\"a01679.html#aef9347d55bd08683c5da3937c9e347bc\">size_type</a> <a class=\"code hl_function\" href=\"a01679.html#a845490072407c1b9228ba479879e58eb\">size</a>(<span class=\"keyword\">const</span> SizePrefix& prefix)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> assert(prefix.size() == 0 || prefix.size() == 1);</div>\n-<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> <span class=\"keywordflow\">return</span> (prefix.size() == 0) ? <a class=\"code hl_function\" href=\"a01679.html#a0d2c4b976257136afdf2b1ac4553a3e9\">size</a>() : 0;</div>\n-<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> }</div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> </div>\n-<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#af02b1117a420678629201602beea6cec\"> 145</a></span> <a class=\"code hl_typedef\" href=\"a01679.html#aef9347d55bd08683c5da3937c9e347bc\">size_type</a> <a class=\"code hl_function\" href=\"a01679.html#af02b1117a420678629201602beea6cec\">dimension</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01679.html#a0d2c4b976257136afdf2b1ac4553a3e9\">size</a>();</div>\n-<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> }</div>\n-<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> </div>\n-<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a1e75fb410ce720edf5415828059f52d0\"> 150</a></span> <a class=\"code hl_typedef\" href=\"a01679.html#aef9347d55bd08683c5da3937c9e347bc\">size_type</a> <a class=\"code hl_function\" href=\"a01679.html#a1e75fb410ce720edf5415828059f52d0\">maxNodeSize</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00213.html#ga0d8eb549af76bc2563ab189e63668ee5\">Dune::power</a>(k+1, <span class=\"keywordtype\">int</span>(GV::dimension));</div>\n-<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> }</div>\n-<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> </div>\n-<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n-<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a1bf33483feb5a8f3482b2bcb2d591883\"> 156</a></span> It <a class=\"code hl_function\" href=\"a01679.html#a1bf33483feb5a8f3482b2bcb2d591883\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01667.html\">Node</a>& node, It it)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridIndexSet = <a class=\"code hl_function\" href=\"a01679.html#aa6c5ef18a6d21e99037521fd668711af\">gridView</a>().indexSet();</div>\n-<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& element = node.<a class=\"code hl_function\" href=\"a01667.html#a9d58cded4e8fb6665c22c758e55f4914\">element</a>();</div>\n-<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> </div>\n-<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> <a class=\"code hl_typedef\" href=\"a01679.html#aef9347d55bd08683c5da3937c9e347bc\">size_type</a> offset = 0;</div>\n-<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> (dim==1)</div>\n-<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> offset = <a class=\"code hl_variable\" href=\"a01679.html#a99e23efcb7d3e14798f723ba9f033afe\">dofsPerEdge</a>*gridIndexSet.subIndex(element,0,0);</div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> (dim==2)</div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> {</div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> <span class=\"keywordflow\">if</span> (element.type().isTriangle())</div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> offset = <a class=\"code hl_variable\" href=\"a01679.html#ab9209fa402834b5c9a35d9e987122dce\">dofsPerTriangle</a>*gridIndexSet.subIndex(element,0,0);</div>\n-<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (element.type().isQuadrilateral())</div>\n-<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> offset = <a class=\"code hl_variable\" href=\"a01679.html#a8f9bb80599a31e77d8b96522467fa691\">quadrilateralOffset_</a> + <a class=\"code hl_variable\" href=\"a01679.html#aad680a5b4e4584e3f2d56396af361123\">dofsPerQuad</a>*gridIndexSet.subIndex(element,0,0);</div>\n-<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> <span class=\"keywordflow\">else</span></div>\n-<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"2d elements have to be triangles or quadrilaterals"</span>);</div>\n-<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> }</div>\n-<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> (dim==3)</div>\n-<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> {</div>\n-<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> <span class=\"keywordflow\">if</span> (element.type().isTetrahedron())</div>\n-<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> offset = <a class=\"code hl_variable\" href=\"a01679.html#a755b7a249dd88abd62ce3be575320572\">dofsPerTetrahedron</a>*gridIndexSet.subIndex(element,0,0);</div>\n-<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (element.type().isPrism())</div>\n-<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> offset = <a class=\"code hl_variable\" href=\"a01679.html#afb36ed4d135e4755c90307f3a1678f55\">prismOffset_</a> + <a class=\"code hl_variable\" href=\"a01679.html#afb53eceb4802d0e888664e0cbe33f843\">dofsPerPrism</a>*gridIndexSet.subIndex(element,0,0);</div>\n-<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (element.type().isHexahedron())</div>\n-<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> offset = <a class=\"code hl_variable\" href=\"a01679.html#a49fc97158b3e4b9851ed636300c718ce\">hexahedronOffset_</a> + <a class=\"code hl_variable\" href=\"a01679.html#a64d5d4089862c52124131d75c156facf\">dofsPerHexahedron</a>*gridIndexSet.subIndex(element,0,0);</div>\n-<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (element.type().isPyramid())</div>\n-<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> offset = <a class=\"code hl_variable\" href=\"a01679.html#a6ad26ab973d39bc12e575d80cd1320d2\">pyramidOffset_</a> + <a class=\"code hl_variable\" href=\"a01679.html#ac1406270c17daf802721fae3e90d350f\">dofsPerPyramid</a>*gridIndexSet.subIndex(element,0,0);</div>\n-<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span> <span class=\"keywordflow\">else</span></div>\n-<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"3d elements have to be tetrahedrons, prisms, hexahedrons or pyramids"</span>);</div>\n-<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> }</div>\n-<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> <span class=\"keywordflow\">else</span></div>\n-<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"No index method for "</span> << dim << <span class=\"stringliteral\">"d grids available yet!"</span>);</div>\n-<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> <span class=\"keywordflow\">for</span> (<a class=\"code hl_typedef\" href=\"a01679.html#aef9347d55bd08683c5da3937c9e347bc\">size_type</a> i = 0, end = node.<a class=\"code hl_function\" href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">size</a>() ; i < end ; ++i, ++it)</div>\n-<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> *it = {offset + i};</div>\n-<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span> <span class=\"keywordflow\">return</span> it;</div>\n-<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> }</div>\n-<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> </div>\n-<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a3f7f366f6ddce30b39792634d5a057de\"> 194</a></span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_function\" href=\"a01679.html#a3f7f366f6ddce30b39792634d5a057de\">order</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> <span class=\"keywordflow\">return</span> k;</div>\n-<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> }</div>\n-<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> </div>\n-<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span><span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\"> 200</a></span> <a class=\"code hl_typedef\" href=\"a01679.html#a8af148321780535e5555938ac4590e3c\">GridView</a> <a class=\"code hl_variable\" href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\">gridView_</a>;</div>\n-<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> </div>\n-<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a8f9bb80599a31e77d8b96522467fa691\"> 202</a></span> <span class=\"keywordtype\">size_t</span> <a class=\"code hl_variable\" href=\"a01679.html#a8f9bb80599a31e77d8b96522467fa691\">quadrilateralOffset_</a>;</div>\n-<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a6ad26ab973d39bc12e575d80cd1320d2\"> 203</a></span> <span class=\"keywordtype\">size_t</span> <a class=\"code hl_variable\" href=\"a01679.html#a6ad26ab973d39bc12e575d80cd1320d2\">pyramidOffset_</a>;</div>\n-<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#afb36ed4d135e4755c90307f3a1678f55\"> 204</a></span> <span class=\"keywordtype\">size_t</span> <a class=\"code hl_variable\" href=\"a01679.html#afb36ed4d135e4755c90307f3a1678f55\">prismOffset_</a>;</div>\n-<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01679.html#a49fc97158b3e4b9851ed636300c718ce\"> 205</a></span> <span class=\"keywordtype\">size_t</span> <a class=\"code hl_variable\" href=\"a01679.html#a49fc97158b3e4b9851ed636300c718ce\">hexahedronOffset_</a>;</div>\n-<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span>};</div>\n-<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> </div>\n-<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span> </div>\n-<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> </div>\n-<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span><span class=\"keyword\">namespace </span>BasisFactory {</div>\n-<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> </div>\n-<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span><span class=\"keyword\">template</span><std::<span class=\"keywordtype\">size_t</span> k></div>\n-<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#gae7dbc0c4e48b9cf3da63d6ef431b3481\"> 220</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00213.html#gae7dbc0c4e48b9cf3da63d6ef431b3481\">lagrangeDG</a>()</div>\n-<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span>{</div>\n-<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span> <span class=\"keywordflow\">return</span> [](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridView) {</div>\n-<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01679.html\">LagrangeDGPreBasis</a><std::decay_t<<span class=\"keyword\">decltype</span>(gridView)>, k>(gridView);</div>\n-<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> };</div>\n-<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span>}</div>\n-<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> </div>\n-<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span>} <span class=\"comment\">// end namespace BasisFactory</span></div>\n-<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> </div>\n-<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> </div>\n-<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span> </div>\n-<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span><span class=\"comment\">// *****************************************************************************</span></div>\n-<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span><span class=\"comment\">// This is the actual global basis implementation based on the reusable parts.</span></div>\n-<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span><span class=\"comment\">// *****************************************************************************</span></div>\n-<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> </div>\n-<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k></div>\n-<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#ga5de7b8547ff84158602bfb45a4358c67\"> 243</a></span><span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01555.html\">LagrangeDGBasis</a> = <a class=\"code hl_class\" href=\"a01555.html\">DefaultGlobalBasis<LagrangeDGPreBasis<GV, k></a> >;</div>\n-<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> </div>\n-<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> </div>\n-<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span> </div>\n-<div class=\"line\"><a id=\"l00247\" name=\"l00247\"></a><span class=\"lineno\"> 247</span>} <span class=\"comment\">// end namespace Functions</span></div>\n-<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"> 248</span>} <span class=\"comment\">// end namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span> </div>\n-<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span> </div>\n-<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH</span></div>\n-<div class=\"ttc\" id=\"aa00119_html\"><div class=\"ttname\"><a href=\"a00119.html\">defaultglobalbasis.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00125_html\"><div class=\"ttname\"><a href=\"a00125.html\">lagrangebasis.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00191_html\"><div class=\"ttname\"><a href=\"a00191.html\">nodes.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00213_html_ga0d8eb549af76bc2563ab189e63668ee5\"><div class=\"ttname\"><a href=\"a00213.html#ga0d8eb549af76bc2563ab189e63668ee5\">Dune::Functions::BasisFactory::power</a></div><div class=\"ttdeci\">auto power(ChildPreBasisFactory &&childPreBasisFactory, const IndexMergingStrategy &)</div><div class=\"ttdoc\">Create a pre-basis factory that can build a PowerPreBasis.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:369</div></div>\n-<div class=\"ttc\" id=\"aa00213_html_gae7dbc0c4e48b9cf3da63d6ef431b3481\"><div class=\"ttname\"><a href=\"a00213.html#gae7dbc0c4e48b9cf3da63d6ef431b3481\">Dune::Functions::BasisFactory::lagrangeDG</a></div><div class=\"ttdeci\">auto lagrangeDG()</div><div class=\"ttdoc\">Create a pre-basis factory that can create a LagrangeDG pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:220</div></div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> </div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> </div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span>} <span class=\"comment\">// end namespace Functions</span></div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span>} <span class=\"comment\">// end namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> </div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH</span></div>\n+<div class=\"ttc\" id=\"aa00032_html\"><div class=\"ttname\"><a href=\"a00032.html\">multiindex.hh</a></div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa01555_html\"><div class=\"ttname\"><a href=\"a01555.html\">Dune::Functions::DefaultGlobalBasis</a></div><div class=\"ttdoc\">Global basis for given pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:46</div></div>\n-<div class=\"ttc\" id=\"aa01667_html\"><div class=\"ttname\"><a href=\"a01667.html\">Dune::Functions::LagrangeNode</a></div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:387</div></div>\n-<div class=\"ttc\" id=\"aa01667_html_a9d58cded4e8fb6665c22c758e55f4914\"><div class=\"ttname\"><a href=\"a01667.html#a9d58cded4e8fb6665c22c758e55f4914\">Dune::Functions::LagrangeNode::element</a></div><div class=\"ttdeci\">const Element & element() const</div><div class=\"ttdoc\">Return current element, throw if unbound.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:439</div></div>\n-<div class=\"ttc\" id=\"aa01679_html\"><div class=\"ttname\"><a href=\"a01679.html\">Dune::Functions::LagrangeDGPreBasis</a></div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:38</div></div>\n-<div class=\"ttc\" id=\"aa01679_html_a0d2c4b976257136afdf2b1ac4553a3e9\"><div class=\"ttname\"><a href=\"a01679.html#a0d2c4b976257136afdf2b1ac4553a3e9\">Dune::Functions::LagrangeDGPreBasis::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:115</div></div>\n-<div class=\"ttc\" id=\"aa01679_html_a1bf33483feb5a8f3482b2bcb2d591883\"><div class=\"ttname\"><a href=\"a01679.html#a1bf33483feb5a8f3482b2bcb2d591883\">Dune::Functions::LagrangeDGPreBasis::indices</a></div><div class=\"ttdeci\">It indices(const Node &node, It it) const</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:156</div></div>\n-<div class=\"ttc\" id=\"aa01679_html_a1e75fb410ce720edf5415828059f52d0\"><div class=\"ttname\"><a href=\"a01679.html#a1e75fb410ce720edf5415828059f52d0\">Dune::Functions::LagrangeDGPreBasis::maxNodeSize</a></div><div class=\"ttdeci\">size_type maxNodeSize() const</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:150</div></div>\n-<div class=\"ttc\" id=\"aa01679_html_a20f969e87311ae7db719d06e7737d70e\"><div class=\"ttname\"><a href=\"a01679.html#a20f969e87311ae7db719d06e7737d70e\">Dune::Functions::LagrangeDGPreBasis::multiIndexBufferSize</a></div><div class=\"ttdeci\">static constexpr size_type multiIndexBufferSize</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:62</div></div>\n-<div class=\"ttc\" id=\"aa01679_html_a3f7f366f6ddce30b39792634d5a057de\"><div class=\"ttname\"><a href=\"a01679.html#a3f7f366f6ddce30b39792634d5a057de\">Dune::Functions::LagrangeDGPreBasis::order</a></div><div class=\"ttdeci\">unsigned int order() const</div><div class=\"ttdoc\">Polynomial order used in the local Lagrange finite-elements.</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:194</div></div>\n-<div class=\"ttc\" id=\"aa01679_html_a4952fa7945357c969435f48c0a643dd7\"><div class=\"ttname\"><a href=\"a01679.html#a4952fa7945357c969435f48c0a643dd7\">Dune::Functions::LagrangeDGPreBasis::update</a></div><div class=\"ttdeci\">void update(const GridView &gv)</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:102</div></div>\n-<div class=\"ttc\" id=\"aa01679_html_a49fc97158b3e4b9851ed636300c718ce\"><div class=\"ttname\"><a href=\"a01679.html#a49fc97158b3e4b9851ed636300c718ce\">Dune::Functions::LagrangeDGPreBasis::hexahedronOffset_</a></div><div class=\"ttdeci\">size_t hexahedronOffset_</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:205</div></div>\n-<div class=\"ttc\" id=\"aa01679_html_a4bf95ae4450021799f1d8b14fbb6c78b\"><div class=\"ttname\"><a href=\"a01679.html#a4bf95ae4450021799f1d8b14fbb6c78b\">Dune::Functions::LagrangeDGPreBasis::makeNode</a></div><div class=\"ttdeci\">Node makeNode() const</div><div class=\"ttdoc\">Create tree node.</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:110</div></div>\n-<div class=\"ttc\" id=\"aa01679_html_a4ceb8a4c31a5cf55d03f715717c95910\"><div class=\"ttname\"><a href=\"a01679.html#a4ceb8a4c31a5cf55d03f715717c95910\">Dune::Functions::LagrangeDGPreBasis::maxMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type maxMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:60</div></div>\n-<div class=\"ttc\" id=\"aa01679_html_a64d5d4089862c52124131d75c156facf\"><div class=\"ttname\"><a href=\"a01679.html#a64d5d4089862c52124131d75c156facf\">Dune::Functions::LagrangeDGPreBasis::dofsPerHexahedron</a></div><div class=\"ttdeci\">static const int dofsPerHexahedron</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:54</div></div>\n-<div class=\"ttc\" id=\"aa01679_html_a6922ab8ade352184b13dca9d354b663e\"><div class=\"ttname\"><a href=\"a01679.html#a6922ab8ade352184b13dca9d354b663e\">Dune::Functions::LagrangeDGPreBasis::LagrangeDGPreBasis</a></div><div class=\"ttdeci\">LagrangeDGPreBasis(const GridView &gv)</div><div class=\"ttdoc\">Constructor for a given grid view object.</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:65</div></div>\n-<div class=\"ttc\" id=\"aa01679_html_a6ad26ab973d39bc12e575d80cd1320d2\"><div class=\"ttname\"><a href=\"a01679.html#a6ad26ab973d39bc12e575d80cd1320d2\">Dune::Functions::LagrangeDGPreBasis::pyramidOffset_</a></div><div class=\"ttdeci\">size_t pyramidOffset_</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:203</div></div>\n-<div class=\"ttc\" id=\"aa01679_html_a755b7a249dd88abd62ce3be575320572\"><div class=\"ttname\"><a href=\"a01679.html#a755b7a249dd88abd62ce3be575320572\">Dune::Functions::LagrangeDGPreBasis::dofsPerTetrahedron</a></div><div class=\"ttdeci\">static const int dofsPerTetrahedron</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:52</div></div>\n-<div class=\"ttc\" id=\"aa01679_html_a845490072407c1b9228ba479879e58eb\"><div class=\"ttname\"><a href=\"a01679.html#a845490072407c1b9228ba479879e58eb\">Dune::Functions::LagrangeDGPreBasis::size</a></div><div class=\"ttdeci\">size_type size(const SizePrefix &prefix) const</div><div class=\"ttdoc\">Return number possible values for next position in multi index.</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:138</div></div>\n-<div class=\"ttc\" id=\"aa01679_html_a8af148321780535e5555938ac4590e3c\"><div class=\"ttname\"><a href=\"a01679.html#a8af148321780535e5555938ac4590e3c\">Dune::Functions::LagrangeDGPreBasis::GridView</a></div><div class=\"ttdeci\">GV GridView</div><div class=\"ttdoc\">The grid view that the FE space is defined on.</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:44</div></div>\n-<div class=\"ttc\" id=\"aa01679_html_a8b70bc6aa806e06c8062a69d4287af96\"><div class=\"ttname\"><a href=\"a01679.html#a8b70bc6aa806e06c8062a69d4287af96\">Dune::Functions::LagrangeDGPreBasis::initializeIndices</a></div><div class=\"ttdeci\">void initializeIndices()</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:70</div></div>\n-<div class=\"ttc\" id=\"aa01679_html_a8f9bb80599a31e77d8b96522467fa691\"><div class=\"ttname\"><a href=\"a01679.html#a8f9bb80599a31e77d8b96522467fa691\">Dune::Functions::LagrangeDGPreBasis::quadrilateralOffset_</a></div><div class=\"ttdeci\">size_t quadrilateralOffset_</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:202</div></div>\n-<div class=\"ttc\" id=\"aa01679_html_a99e23efcb7d3e14798f723ba9f033afe\"><div class=\"ttname\"><a href=\"a01679.html#a99e23efcb7d3e14798f723ba9f033afe\">Dune::Functions::LagrangeDGPreBasis::dofsPerEdge</a></div><div class=\"ttdeci\">static const int dofsPerEdge</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:49</div></div>\n-<div class=\"ttc\" id=\"aa01679_html_aa6c5ef18a6d21e99037521fd668711af\"><div class=\"ttname\"><a href=\"a01679.html#aa6c5ef18a6d21e99037521fd668711af\">Dune::Functions::LagrangeDGPreBasis::gridView</a></div><div class=\"ttdeci\">const GridView & gridView() const</div><div class=\"ttdoc\">Obtain the grid view that the basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:97</div></div>\n-<div class=\"ttc\" id=\"aa01679_html_aad680a5b4e4584e3f2d56396af361123\"><div class=\"ttname\"><a href=\"a01679.html#aad680a5b4e4584e3f2d56396af361123\">Dune::Functions::LagrangeDGPreBasis::dofsPerQuad</a></div><div class=\"ttdeci\">static const int dofsPerQuad</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:51</div></div>\n-<div class=\"ttc\" id=\"aa01679_html_ab9209fa402834b5c9a35d9e987122dce\"><div class=\"ttname\"><a href=\"a01679.html#ab9209fa402834b5c9a35d9e987122dce\">Dune::Functions::LagrangeDGPreBasis::dofsPerTriangle</a></div><div class=\"ttdeci\">static const int dofsPerTriangle</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:50</div></div>\n-<div class=\"ttc\" id=\"aa01679_html_ac1406270c17daf802721fae3e90d350f\"><div class=\"ttname\"><a href=\"a01679.html#ac1406270c17daf802721fae3e90d350f\">Dune::Functions::LagrangeDGPreBasis::dofsPerPyramid</a></div><div class=\"ttdeci\">static const int dofsPerPyramid</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:55</div></div>\n-<div class=\"ttc\" id=\"aa01679_html_ae96405a175e0d71369d209ba64c548e7\"><div class=\"ttname\"><a href=\"a01679.html#ae96405a175e0d71369d209ba64c548e7\">Dune::Functions::LagrangeDGPreBasis::gridView_</a></div><div class=\"ttdeci\">GridView gridView_</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:200</div></div>\n-<div class=\"ttc\" id=\"aa01679_html_ae9cd5968c89433b07b3de6c28e89a368\"><div class=\"ttname\"><a href=\"a01679.html#ae9cd5968c89433b07b3de6c28e89a368\">Dune::Functions::LagrangeDGPreBasis::minMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type minMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:61</div></div>\n-<div class=\"ttc\" id=\"aa01679_html_aef9347d55bd08683c5da3937c9e347bc\"><div class=\"ttname\"><a href=\"a01679.html#aef9347d55bd08683c5da3937c9e347bc\">Dune::Functions::LagrangeDGPreBasis::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:45</div></div>\n-<div class=\"ttc\" id=\"aa01679_html_af02b1117a420678629201602beea6cec\"><div class=\"ttname\"><a href=\"a01679.html#af02b1117a420678629201602beea6cec\">Dune::Functions::LagrangeDGPreBasis::dimension</a></div><div class=\"ttdeci\">size_type dimension() const</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:145</div></div>\n-<div class=\"ttc\" id=\"aa01679_html_afb36ed4d135e4755c90307f3a1678f55\"><div class=\"ttname\"><a href=\"a01679.html#afb36ed4d135e4755c90307f3a1678f55\">Dune::Functions::LagrangeDGPreBasis::prismOffset_</a></div><div class=\"ttdeci\">size_t prismOffset_</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:204</div></div>\n-<div class=\"ttc\" id=\"aa01679_html_afb53eceb4802d0e888664e0cbe33f843\"><div class=\"ttname\"><a href=\"a01679.html#afb53eceb4802d0e888664e0cbe33f843\">Dune::Functions::LagrangeDGPreBasis::dofsPerPrism</a></div><div class=\"ttdeci\">static const int dofsPerPrism</div><div class=\"ttdef\"><b>Definition:</b> lagrangedgbasis.hh:53</div></div>\n-<div class=\"ttc\" id=\"aa01707_html_a859d50513645ef2ea0188d0779c1df30\"><div class=\"ttname\"><a href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">Dune::Functions::BasisNodeMixin::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:142</div></div>\n+<div class=\"ttc\" id=\"aa01267_html\"><div class=\"ttname\"><a href=\"a01267.html\">Dune::Functions::StaticMultiIndex< size_type, 1 ></a></div><div class=\"ttdoc\">A statically sized MultiIndex type.</div><div class=\"ttdef\"><b>Definition:</b> multiindex.hh:49</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,376 +5,41 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-lagrangedgbasis.hh\n+flatmultiindex.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH\n- 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH\n+ 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH\n+ 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH\n 5\n 6#include <array>\n- 7#include <dune/common/exceptions.hh>\n- 8#include <dune/common/math.hh>\n+ 7\n+ 8#include <dune/functions/common/multiindex.hh>\n 9\n- 10#include <dune/functions/functionspacebases/nodes.hh>\n- 11#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n- 12#include <dune/functions/functionspacebases/lagrangebasis.hh>\n+ 10namespace Dune {\n+ 11namespace Functions {\n+ 12\n 13\n 14\n- 15\n- 16\n- 17namespace Dune {\n- 18namespace Functions {\n- 19\n- 20\n- 21\n- 22/\n-/ *****************************************************************************\n- 23// This is the reusable part of the basis. It contains\n- 24//\n- 25// LagrangeDGPreBasis\n- 26// LagrangeDGNode\n- 27//\n- 28// The pre-basis allows to create the others and is the owner of possible\n-shared\n- 29// state. These components do _not_ depend on the global basis and local\n-view\n- 30// and can be used without a global basis.\n- 31/\n-/ *****************************************************************************\n+ 30template<class size_type>\n+31using FlatMultiIndex = StaticMultiIndex<size_type,_1>;\n 32\n- 33template<typename GV, int k>\n-34using LagrangeDGNode = LagrangeNode<GV,_k>;\n- 35\n- 36template<typename GV, int k>\n-37class LagrangeDGPreBasis\n- 38{\n- 39 static const int dim = GV::dimension;\n- 40\n- 41public:\n- 42\n-44 using GridView = GV;\n-45 using size_type = std::size_t;\n- 46\n- 47\n- 48 // Precompute the number of dofs per entity type\n-49 const static int dofsPerEdge = k+1;\n-50 const static int dofsPerTriangle = (k+1)*(k+2)/2;\n-51 const static int dofsPerQuad = (k+1)*(k+1);\n-52 const static int dofsPerTetrahedron = (k+1)*(k+2)*(k+3)/6;\n-53 const static int dofsPerPrism = (k+1)*(k+1)*(k+2)/2;\n-54 const static int dofsPerHexahedron = (k+1)*(k+1)*(k+1);\n-55 const static int dofsPerPyramid = (k+1)*(k+2)*(2*k+3)/6;\n- 56\n- 57\n-58 using Node = LagrangeDGNode<GV,_k>;\n- 59\n-60 static constexpr size_type maxMultiIndexSize = 1;\n-61 static constexpr size_type minMultiIndexSize = 1;\n-62 static constexpr size_type multiIndexBufferSize = 1;\n- 63\n-65 LagrangeDGPreBasis(const GridView& gv) :\n- 66 gridView_(gv)\n- 67 {}\n- 68\n- 69\n-70 void initializeIndices()\n- 71 {\n- 72 switch (dim)\n- 73 {\n- 74 case 1:\n- 75 {\n- 76 break;\n- 77 }\n- 78 case 2:\n- 79 {\n- 80 quadrilateralOffset_ = dofsPerTriangle * gridView_.size(Dune::\n-GeometryTypes::triangle);\n- 81 break;\n- 82 }\n- 83 case 3:\n- 84 {\n- 85 prismOffset_ = dofsPerTetrahedron * gridView_.size(Dune::GeometryTypes::\n-tetrahedron);\n- 86\n- 87 hexahedronOffset_ = prismOffset_ + dofsPerPrism * gridView_.size(Dune::\n-GeometryTypes::prism);\n- 88\n- 89 pyramidOffset_ = hexahedronOffset_ + dofsPerHexahedron * gridView_.size\n-(Dune::GeometryTypes::hexahedron);\n- 90 break;\n- 91 }\n- 92 }\n- 93 }\n- 94\n-97 const GridView& gridView() const\n- 98 {\n- 99 return gridView_;\n- 100 }\n- 101\n-102 void update(const GridView& gv)\n- 103 {\n- 104 gridView_ = gv;\n- 105 }\n- 106\n-110 Node makeNode() const\n- 111 {\n- 112 return Node{};\n- 113 }\n- 114\n-115 size_type size() const\n- 116 {\n- 117 switch (dim)\n- 118 {\n- 119 case 1:\n- 120 return dofsPerEdge*gridView_.size(0);\n- 121 case 2:\n- 122 {\n- 123 return dofsPerTriangle*gridView_.size(Dune::GeometryTypes::triangle) +\n-dofsPerQuad*gridView_.size(Dune::GeometryTypes::quadrilateral);\n- 124 }\n- 125 case 3:\n- 126 {\n- 127 return dofsPerTetrahedron*gridView_.size(Dune::GeometryTypes::tetrahedron)\n- 128 + dofsPerPyramid*gridView_.size(Dune::GeometryTypes::pyramid)\n- 129 + dofsPerPrism*gridView_.size(Dune::GeometryTypes::prism)\n- 130 + dofsPerHexahedron*gridView_.size(Dune::GeometryTypes::hexahedron);\n- 131 }\n- 132 }\n- 133 DUNE_THROW(Dune::NotImplemented, \"No size method for \" << dim << \"d grids\n-available yet!\");\n- 134 }\n- 135\n- 137 template<class SizePrefix>\n-138 size_type size(const SizePrefix& prefix) const\n- 139 {\n- 140 assert(prefix.size() == 0 || prefix.size() == 1);\n- 141 return (prefix.size() == 0) ? size() : 0;\n- 142 }\n- 143\n-145 size_type dimension() const\n- 146 {\n- 147 return size();\n- 148 }\n- 149\n-150 size_type maxNodeSize() const\n- 151 {\n- 152 return Dune::power(k+1, int(GV::dimension));\n- 153 }\n- 154\n- 155 template<typename It>\n-156 It indices(const Node& node, It it) const\n- 157 {\n- 158 const auto& gridIndexSet = gridView().indexSet();\n- 159 const auto& element = node.element();\n- 160\n- 161 size_type offset = 0;\n- 162 if constexpr (dim==1)\n- 163 offset = dofsPerEdge*gridIndexSet.subIndex(element,0,0);\n- 164 else if constexpr (dim==2)\n- 165 {\n- 166 if (element.type().isTriangle())\n- 167 offset = dofsPerTriangle*gridIndexSet.subIndex(element,0,0);\n- 168 else if (element.type().isQuadrilateral())\n- 169 offset = quadrilateralOffset_ + dofsPerQuad*gridIndexSet.subIndex\n-(element,0,0);\n- 170 else\n- 171 DUNE_THROW(Dune::NotImplemented, \"2d elements have to be triangles or\n-quadrilaterals\");\n- 172 }\n- 173 else if constexpr (dim==3)\n- 174 {\n- 175 if (element.type().isTetrahedron())\n- 176 offset = dofsPerTetrahedron*gridIndexSet.subIndex(element,0,0);\n- 177 else if (element.type().isPrism())\n- 178 offset = prismOffset_ + dofsPerPrism*gridIndexSet.subIndex(element,0,0);\n- 179 else if (element.type().isHexahedron())\n- 180 offset = hexahedronOffset_ + dofsPerHexahedron*gridIndexSet.subIndex\n-(element,0,0);\n- 181 else if (element.type().isPyramid())\n- 182 offset = pyramidOffset_ + dofsPerPyramid*gridIndexSet.subIndex\n-(element,0,0);\n- 183 else\n- 184 DUNE_THROW(Dune::NotImplemented, \"3d elements have to be tetrahedrons,\n-prisms, hexahedrons or pyramids\");\n- 185 }\n- 186 else\n- 187 DUNE_THROW(Dune::NotImplemented, \"No index method for \" << dim << \"d grids\n-available yet!\");\n- 188 for (size_type i = 0, end = node.size() ; i < end ; ++i, ++it)\n- 189 *it = {offset + i};\n- 190 return it;\n- 191 }\n- 192\n-194 unsigned int order() const\n- 195 {\n- 196 return k;\n- 197 }\n- 198\n- 199protected:\n-200 GridView gridView_;\n- 201\n-202 size_t quadrilateralOffset_;\n-203 size_t pyramidOffset_;\n-204 size_t prismOffset_;\n-205 size_t hexahedronOffset_;\n- 206};\n- 207\n- 208\n- 209\n- 210namespace BasisFactory {\n- 211\n- 219template<std::size_t k>\n-220auto lagrangeDG()\n- 221{\n- 222 return [](const auto& gridView) {\n- 223 return LagrangeDGPreBasis<std::decay_t<decltype(gridView)>, k>(gridView);\n- 224 };\n- 225}\n- 226\n- 227} // end namespace BasisFactory\n- 228\n- 229\n- 230\n- 231/\n-/ *****************************************************************************\n- 232// This is the actual global basis implementation based on the reusable\n-parts.\n- 233/\n-/ *****************************************************************************\n- 234\n- 242template<typename GV, int k>\n-243using LagrangeDGBasis = DefaultGlobalBasis<LagrangeDGPreBasis<GV,_k> >;\n- 244\n- 245\n- 246\n- 247} // end namespace Functions\n- 248} // end namespace Dune\n- 249\n- 250\n- 251#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_LAGRANGEDGBASIS_HH\n-defaultglobalbasis.hh\n-lagrangebasis.hh\n-nodes.hh\n-Dune::Functions::BasisFactory::power\n-auto power(ChildPreBasisFactory &&childPreBasisFactory, const\n-IndexMergingStrategy &)\n-Create a pre-basis factory that can build a PowerPreBasis.\n-Definition: powerbasis.hh:369\n-Dune::Functions::BasisFactory::lagrangeDG\n-auto lagrangeDG()\n-Create a pre-basis factory that can create a LagrangeDG pre-basis.\n-Definition: lagrangedgbasis.hh:220\n+ 33\n+ 34\n+ 35} // end namespace Functions\n+ 36} // end namespace Dune\n+ 37\n+ 38#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATMULTIINDEX_HH\n+multiindex.hh\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::DefaultGlobalBasis\n-Global basis for given pre-basis.\n-Definition: defaultglobalbasis.hh:46\n-Dune::Functions::LagrangeNode\n-Definition: lagrangebasis.hh:387\n-Dune::Functions::LagrangeNode::element\n-const Element & element() const\n-Return current element, throw if unbound.\n-Definition: lagrangebasis.hh:439\n-Dune::Functions::LagrangeDGPreBasis\n-Definition: lagrangedgbasis.hh:38\n-Dune::Functions::LagrangeDGPreBasis::size\n-size_type size() const\n-Definition: lagrangedgbasis.hh:115\n-Dune::Functions::LagrangeDGPreBasis::indices\n-It indices(const Node &node, It it) const\n-Definition: lagrangedgbasis.hh:156\n-Dune::Functions::LagrangeDGPreBasis::maxNodeSize\n-size_type maxNodeSize() const\n-Definition: lagrangedgbasis.hh:150\n-Dune::Functions::LagrangeDGPreBasis::multiIndexBufferSize\n-static constexpr size_type multiIndexBufferSize\n-Definition: lagrangedgbasis.hh:62\n-Dune::Functions::LagrangeDGPreBasis::order\n-unsigned int order() const\n-Polynomial order used in the local Lagrange finite-elements.\n-Definition: lagrangedgbasis.hh:194\n-Dune::Functions::LagrangeDGPreBasis::update\n-void update(const GridView &gv)\n-Definition: lagrangedgbasis.hh:102\n-Dune::Functions::LagrangeDGPreBasis::hexahedronOffset_\n-size_t hexahedronOffset_\n-Definition: lagrangedgbasis.hh:205\n-Dune::Functions::LagrangeDGPreBasis::makeNode\n-Node makeNode() const\n-Create tree node.\n-Definition: lagrangedgbasis.hh:110\n-Dune::Functions::LagrangeDGPreBasis::maxMultiIndexSize\n-static constexpr size_type maxMultiIndexSize\n-Definition: lagrangedgbasis.hh:60\n-Dune::Functions::LagrangeDGPreBasis::dofsPerHexahedron\n-static const int dofsPerHexahedron\n-Definition: lagrangedgbasis.hh:54\n-Dune::Functions::LagrangeDGPreBasis::LagrangeDGPreBasis\n-LagrangeDGPreBasis(const GridView &gv)\n-Constructor for a given grid view object.\n-Definition: lagrangedgbasis.hh:65\n-Dune::Functions::LagrangeDGPreBasis::pyramidOffset_\n-size_t pyramidOffset_\n-Definition: lagrangedgbasis.hh:203\n-Dune::Functions::LagrangeDGPreBasis::dofsPerTetrahedron\n-static const int dofsPerTetrahedron\n-Definition: lagrangedgbasis.hh:52\n-Dune::Functions::LagrangeDGPreBasis::size\n-size_type size(const SizePrefix &prefix) const\n-Return number possible values for next position in multi index.\n-Definition: lagrangedgbasis.hh:138\n-Dune::Functions::LagrangeDGPreBasis::GridView\n-GV GridView\n-The grid view that the FE space is defined on.\n-Definition: lagrangedgbasis.hh:44\n-Dune::Functions::LagrangeDGPreBasis::initializeIndices\n-void initializeIndices()\n-Definition: lagrangedgbasis.hh:70\n-Dune::Functions::LagrangeDGPreBasis::quadrilateralOffset_\n-size_t quadrilateralOffset_\n-Definition: lagrangedgbasis.hh:202\n-Dune::Functions::LagrangeDGPreBasis::dofsPerEdge\n-static const int dofsPerEdge\n-Definition: lagrangedgbasis.hh:49\n-Dune::Functions::LagrangeDGPreBasis::gridView\n-const GridView & gridView() const\n-Obtain the grid view that the basis is defined on.\n-Definition: lagrangedgbasis.hh:97\n-Dune::Functions::LagrangeDGPreBasis::dofsPerQuad\n-static const int dofsPerQuad\n-Definition: lagrangedgbasis.hh:51\n-Dune::Functions::LagrangeDGPreBasis::dofsPerTriangle\n-static const int dofsPerTriangle\n-Definition: lagrangedgbasis.hh:50\n-Dune::Functions::LagrangeDGPreBasis::dofsPerPyramid\n-static const int dofsPerPyramid\n-Definition: lagrangedgbasis.hh:55\n-Dune::Functions::LagrangeDGPreBasis::gridView_\n-GridView gridView_\n-Definition: lagrangedgbasis.hh:200\n-Dune::Functions::LagrangeDGPreBasis::minMultiIndexSize\n-static constexpr size_type minMultiIndexSize\n-Definition: lagrangedgbasis.hh:61\n-Dune::Functions::LagrangeDGPreBasis::size_type\n-std::size_t size_type\n-Definition: lagrangedgbasis.hh:45\n-Dune::Functions::LagrangeDGPreBasis::dimension\n-size_type dimension() const\n-Definition: lagrangedgbasis.hh:145\n-Dune::Functions::LagrangeDGPreBasis::prismOffset_\n-size_t prismOffset_\n-Definition: lagrangedgbasis.hh:204\n-Dune::Functions::LagrangeDGPreBasis::dofsPerPrism\n-static const int dofsPerPrism\n-Definition: lagrangedgbasis.hh:53\n-Dune::Functions::BasisNodeMixin::size\n-size_type size() const\n-Definition: nodes.hh:142\n+Dune::Functions::StaticMultiIndex<_size_type,_1_>\n+A statically sized MultiIndex type.\n+Definition: multiindex.hh:49\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00146.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00146.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: subspacelocalview.hh File Reference</title>\n+<title>dune-functions: periodicbasis.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -64,37 +64,52 @@\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n-<a href=\"#namespaces\">Namespaces</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">subspacelocalview.hh File Reference</div></div>\n+<a href=\"#namespaces\">Namespaces</a> |\n+<a href=\"#func-members\">Functions</a> </div>\n+ <div class=\"headertitle\"><div class=\"title\">periodicbasis.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <tuple></code><br />\n-<code>#include <dune/common/concept.hh></code><br />\n-<code>#include <dune/typetree/childextraction.hh></code><br />\n+<div class=\"textblock\"><code>#include <utility></code><br />\n+<code>#include <type_traits></code><br />\n+<code>#include <limits></code><br />\n+<code>#include <set></code><br />\n+<code>#include <vector></code><br />\n <code>#include <<a class=\"el\" href=\"a02876_source.html\">dune/functions/functionspacebases/concepts.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00164_source.html\">dune/functions/functionspacebases/transformedindexbasis.hh</a>></code><br />\n </div>\n <p><a href=\"a00146_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01811.html\">Dune::Functions::SubspaceLocalView< RLV, PP ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">The restriction of a finite element basis to a single element. <a href=\"a01811.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01723.html\">Dune::Functions::BasisFactory::Experimental::PeriodicIndexSet</a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Container storing identified indices for a periodic basis. <a href=\"a01723.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a00224\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00224.html\">Dune::Functions::BasisFactory</a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a00227\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00227.html\">Dune::Functions::BasisFactory::Experimental</a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+</table><table class=\"memberdecls\">\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n+Functions</h2></td></tr>\n+<tr class=\"memitem:ga797d4c1dfcfe6b0a98de9284c4f6b5e3\"><td class=\"memTemplParams\" colspan=\"2\">template<class RawPreBasisIndicator , class PIS > </td></tr>\n+<tr class=\"memitem:ga797d4c1dfcfe6b0a98de9284c4f6b5e3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#ga797d4c1dfcfe6b0a98de9284c4f6b5e3\">Dune::Functions::BasisFactory::Experimental::periodic</a> (RawPreBasisIndicator &&rawPreBasisIndicator, PIS &&periodicIndexSet)</td></tr>\n+<tr class=\"memdesc:ga797d4c1dfcfe6b0a98de9284c4f6b5e3\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a pre-basis factory that can create a periodic pre-basis. <a href=\"a00213.html#ga797d4c1dfcfe6b0a98de9284c4f6b5e3\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga797d4c1dfcfe6b0a98de9284c4f6b5e3\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,26 +5,39 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-Classes | Namespaces\n-subspacelocalview.hh File Reference\n-#include <tuple>\n-#include <dune/common/concept.hh>\n-#include <dune/typetree/childextraction.hh>\n+Classes | Namespaces | Functions\n+periodicbasis.hh File Reference\n+#include <utility>\n+#include <type_traits>\n+#include <limits>\n+#include <set>\n+#include <vector>\n #include <dune/functions/functionspacebases/concepts.hh>\n+#include <dune/functions/functionspacebases/transformedindexbasis.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-class \u00a0Dune::Functions::SubspaceLocalView<_RLV,_PP_>\n-\u00a0 The restriction of a finite element basis to a single element. More...\n+class \u00a0Dune::Functions::BasisFactory::Experimental::PeriodicIndexSet\n+\u00a0 Container storing identified indices for a periodic basis. More...\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n+namespace \u00a0Dune::Functions::BasisFactory\n+\u00a0\n+namespace \u00a0Dune::Functions::BasisFactory::Experimental\n+\u00a0\n+ Functions\n+template<class RawPreBasisIndicator , class PIS >\n+auto\u00a0Dune::Functions::BasisFactory::Experimental::periodic\n+ (RawPreBasisIndicator &&rawPreBasisIndicator, PIS &&periodicIndexSet)\n+\u00a0 Create a pre-basis factory that can create a periodic pre-basis. More...\n+\u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00146_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00146_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: subspacelocalview.hh Source File</title>\n+<title>dune-functions: periodicbasis.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,162 +62,203 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">subspacelocalview.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">periodicbasis.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00146.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_PERIODICBASIS_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_PERIODICBASIS_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span> </div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <tuple></span></div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/common/concept.hh></span></div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span> </div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/typetree/childextraction.hh></span></div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a02876.html\">dune/functions/functionspacebases/concepts.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <utility></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <type_traits></span></div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <limits></span></div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <set></span></div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <vector></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a02876.html\">dune/functions/functionspacebases/concepts.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00164.html\">dune/functions/functionspacebases/transformedindexbasis.hh</a>></span></div>\n <div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n <div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00219.html\">Dune::Functions</a> {</div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"keyword\">namespace </span>BasisFactory {</div>\n <div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span> </div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> </div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> RB, <span class=\"keyword\">class</span> PP></div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"keyword\">class </span><a class=\"code hl_function\" href=\"a00219.html#a17589fdc18b015644525c7ad037e6441\">SubspaceBasis</a>;</div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> </div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"comment\">// The PeriodicBasis class is in the Experimental namespace because we are</span></div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"comment\">// not completely sure yet whether we like it. We reserve the right to</span></div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"comment\">// modify it without advance warning. Use at your own risk!</span></div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span> </div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00227.html\"> 24</a></span><span class=\"keyword\">namespace </span>Experimental {</div>\n <div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> </div>\n <div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> </div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> RLV, <span class=\"keyword\">class</span> PP></div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html\"> 29</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01811.html\">SubspaceLocalView</a></div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span>{</div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> <span class=\"keyword\">using </span>PrefixPath = PP;</div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> </div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> </div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#aa1f3b0a89f5d186299ed0a5329562815\"> 35</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01811.html#aa1f3b0a89f5d186299ed0a5329562815\">RootLocalView</a> = RLV;</div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> </div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#a3a627e895c213316cb666677fb9176de\"> 38</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01807.html\">GlobalBasis</a> = <a class=\"code hl_class\" href=\"a01807.html\">SubspaceBasis<typename RootLocalView::GlobalBasis, PrefixPath></a>;</div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01723.html\"> 35</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01723.html\">PeriodicIndexSet</a></div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span>{</div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> <span class=\"keyword\">using </span>IndexPairSet = std::set<std::pair<std::size_t,std::size_t>>;</div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span><span class=\"keyword\">public</span>:</div>\n <div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> </div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#aa050bf0c521425f496729c3947a61bae\"> 41</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01811.html#aa050bf0c521425f496729c3947a61bae\">GridView</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01807.html#a6e7dd708494382dad7cc288ce6cfe6b8\">GlobalBasis::GridView</a>;</div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> </div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#aa8331a332fffea09e3bddd41d3d0530b\"> 44</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01811.html#aa8331a332fffea09e3bddd41d3d0530b\">Element</a> = <span class=\"keyword\">typename</span> GridView::template Codim<0>::Entity;</div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> </div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#aa53cfe0f5da6f163c89cfe7efd03977d\"> 47</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01811.html#aa53cfe0f5da6f163c89cfe7efd03977d\">size_type</a> = std::size_t;</div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> </div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#ae4f87d4a8978c25f211132aa6001290c\"> 50</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01811.html#ae4f87d4a8978c25f211132aa6001290c\">RootTree</a> = <span class=\"keyword\">typename</span> RootLocalView::Tree;</div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> </div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#a04b95239bc90b94a1332233663446cd2\"> 53</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01811.html#a04b95239bc90b94a1332233663446cd2\">Tree</a> = <span class=\"keyword\">typename</span> TypeTree::ChildForTreePath<RootTree, PrefixPath>;</div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> </div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#a332b6754582b1108ef353b1b78ae01a3\"> 56</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01811.html#a332b6754582b1108ef353b1b78ae01a3\">MultiIndex</a> = <span class=\"keyword\">typename</span> RootLocalView::MultiIndex;</div>\n-<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> </div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#aa0d1d0d89f2dd443da6da8d77f6a344f\"> 59</a></span> <a class=\"code hl_function\" href=\"a01811.html#aa0d1d0d89f2dd443da6da8d77f6a344f\">SubspaceLocalView</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01807.html\">GlobalBasis</a>& <a class=\"code hl_function\" href=\"a01811.html#ab86e2da3d257ff25f989a0b51dd7fa95\">globalBasis</a>, <span class=\"keyword\">const</span> PrefixPath& <span class=\"comment\">/*prefixPath*/</span>) :</div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> <a class=\"code hl_variable\" href=\"a01811.html#a2fb2643d53fb7511f2eb6ddff751043c\">globalBasis_</a>(&<a class=\"code hl_function\" href=\"a01811.html#ab86e2da3d257ff25f989a0b51dd7fa95\">globalBasis</a>),</div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> <a class=\"code hl_variable\" href=\"a01811.html#a6db2abe3c910a2aad3a91f732e34c95a\">rootLocalView_</a>(<a class=\"code hl_function\" href=\"a01811.html#ab86e2da3d257ff25f989a0b51dd7fa95\">globalBasis</a>.rootBasis().localView())</div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> {</div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span><span class=\"comment\">// static_assert(models<Concept::BasisTree<GridView>, Tree>(), "Tree type passed to SubspaceLocalView does not model the BasisNode concept.");</span></div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> }</div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01723.html#a97911b25f2c1cf61ab48a667ae448b7e\"> 47</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01723.html#a97911b25f2c1cf61ab48a667ae448b7e\">unifyIndexPair</a>(std::size_t a, std::size_t b)</div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> {</div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> <span class=\"keywordflow\">if</span> (a>b)</div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> std::swap(a,b);</div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> <span class=\"keywordflow\">if</span> (a==b)</div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> <span class=\"keywordflow\">return</span>;</div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> indexPairSet_.insert(std::make_pair(a,b));</div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> }</div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> </div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01723.html#ace4a53d881dc7e6add6b0fd05a394738\"> 56</a></span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& <a class=\"code hl_function\" href=\"a01723.html#ace4a53d881dc7e6add6b0fd05a394738\">indexPairSet</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> <span class=\"keywordflow\">return</span> indexPairSet_;</div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> }</div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> </div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> IndexPairSet indexPairSet_;</div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span>};</div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> </div>\n <div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> </div>\n-<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#a8d67dd96c63054ab2caccf7c50975838\"> 71</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01811.html#a8d67dd96c63054ab2caccf7c50975838\">bind</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01811.html#aa8331a332fffea09e3bddd41d3d0530b\">Element</a>& e)</div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> {</div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> <a class=\"code hl_variable\" href=\"a01811.html#a6db2abe3c910a2aad3a91f732e34c95a\">rootLocalView_</a>.bind(e);</div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> }</div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> </div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span><span class=\"keyword\">namespace </span>Impl {</div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> </div>\n+<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span><span class=\"comment\">// An index transformation for a TransformedIndexPreBasis</span></div>\n+<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span><span class=\"comment\">// implementing periodic functions by merging indices.</span></div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span><span class=\"comment\">// Currently only flat indices are supported.</span></div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span><span class=\"keyword\">class </span>PeriodicIndexingTransformation</div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span>{</div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span><span class=\"keyword\">public</span>:</div>\n <div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> </div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#a2d7c1e74433fb663cbed0c2ab6fc7198\"> 80</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01811.html#aa8331a332fffea09e3bddd41d3d0530b\">Element</a>& <a class=\"code hl_function\" href=\"a01811.html#a2d7c1e74433fb663cbed0c2ab6fc7198\">element</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01811.html#a6db2abe3c910a2aad3a91f732e34c95a\">rootLocalView_</a>.element();</div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> }</div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> </div>\n-<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#a210cb18bf65e34f621e0bffd6cb19384\"> 89</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01811.html#a210cb18bf65e34f621e0bffd6cb19384\">unbind</a>()</div>\n-<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> {</div>\n-<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> <a class=\"code hl_variable\" href=\"a01811.html#a6db2abe3c910a2aad3a91f732e34c95a\">rootLocalView_</a>.unbind();</div>\n-<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> }</div>\n-<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> </div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#a31341266e49615ffc56949f471bb61a8\"> 96</a></span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a01811.html#a31341266e49615ffc56949f471bb61a8\">bound</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01811.html#a6db2abe3c910a2aad3a91f732e34c95a\">rootLocalView_</a>.bound();</div>\n-<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> }</div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> </div>\n-<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#acd8c1a7b0ab5a820590b96e441524c06\"> 105</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01811.html#a04b95239bc90b94a1332233663446cd2\">Tree</a>& <a class=\"code hl_function\" href=\"a01811.html#acd8c1a7b0ab5a820590b96e441524c06\">tree</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> <span class=\"keywordflow\">return</span> TypeTree::child(<a class=\"code hl_variable\" href=\"a01811.html#a6db2abe3c910a2aad3a91f732e34c95a\">rootLocalView_</a>.tree(), <a class=\"code hl_variable\" href=\"a01811.html#a2fb2643d53fb7511f2eb6ddff751043c\">globalBasis_</a>-><a class=\"code hl_function\" href=\"a01807.html#a7c1756f78b770fbbe6937b8a146cdc81\">prefixPath</a>());</div>\n-<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> }</div>\n-<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> </div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#a3bd132c98fd23a67c253c9475540ac90\"> 112</a></span> <a class=\"code hl_typedef\" href=\"a01811.html#aa53cfe0f5da6f163c89cfe7efd03977d\">size_type</a> <a class=\"code hl_function\" href=\"a01811.html#a3bd132c98fd23a67c253c9475540ac90\">size</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01811.html#a6db2abe3c910a2aad3a91f732e34c95a\">rootLocalView_</a>.size();</div>\n-<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> }</div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> </div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#ac553ded1a00894bfb703f41a86f8ce06\"> 123</a></span> <a class=\"code hl_typedef\" href=\"a01811.html#aa53cfe0f5da6f163c89cfe7efd03977d\">size_type</a> <a class=\"code hl_function\" href=\"a01811.html#ac553ded1a00894bfb703f41a86f8ce06\">maxSize</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01811.html#a6db2abe3c910a2aad3a91f732e34c95a\">rootLocalView_</a>.maxSize();</div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> }</div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> </div>\n-<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#adb5c1fb9c9e3eb19ebb3333e4401f9aa\"> 129</a></span> <a class=\"code hl_typedef\" href=\"a01811.html#a332b6754582b1108ef353b1b78ae01a3\">MultiIndex</a> <a class=\"code hl_function\" href=\"a01811.html#adb5c1fb9c9e3eb19ebb3333e4401f9aa\">index</a>(<a class=\"code hl_typedef\" href=\"a01811.html#aa53cfe0f5da6f163c89cfe7efd03977d\">size_type</a> i)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01811.html#a6db2abe3c910a2aad3a91f732e34c95a\">rootLocalView_</a>.index(i);</div>\n-<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> }</div>\n-<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> </div>\n-<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#ab86e2da3d257ff25f989a0b51dd7fa95\"> 136</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01807.html\">GlobalBasis</a>& <a class=\"code hl_function\" href=\"a01811.html#ab86e2da3d257ff25f989a0b51dd7fa95\">globalBasis</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> <span class=\"keywordflow\">return</span> *<a class=\"code hl_variable\" href=\"a01811.html#a2fb2643d53fb7511f2eb6ddff751043c\">globalBasis_</a>;</div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> }</div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> </div>\n-<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#aa28ae73e021d001a954cafe23c570900\"> 141</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01811.html#aa1f3b0a89f5d186299ed0a5329562815\">RootLocalView</a>& <a class=\"code hl_function\" href=\"a01811.html#aa28ae73e021d001a954cafe23c570900\">rootLocalView</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01811.html#a6db2abe3c910a2aad3a91f732e34c95a\">rootLocalView_</a>;</div>\n-<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> }</div>\n-<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> </div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span><span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#a2fb2643d53fb7511f2eb6ddff751043c\"> 147</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01807.html\">GlobalBasis</a>* <a class=\"code hl_variable\" href=\"a01811.html#a2fb2643d53fb7511f2eb6ddff751043c\">globalBasis_</a>;</div>\n-<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#a6db2abe3c910a2aad3a91f732e34c95a\"> 148</a></span> <a class=\"code hl_typedef\" href=\"a01811.html#aa1f3b0a89f5d186299ed0a5329562815\">RootLocalView</a> <a class=\"code hl_variable\" href=\"a01811.html#a6db2abe3c910a2aad3a91f732e34c95a\">rootLocalView_</a>;</div>\n-<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span>};</div>\n-<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> </div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> </div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> </div>\n-<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span>} <span class=\"comment\">// end namespace Functions</span></div>\n-<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span>} <span class=\"comment\">// end namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> </div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> std::size_t minIndexSize = 1;</div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> std::size_t maxIndexSize = 1;</div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> </div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> RawPreBasis, <span class=\"keyword\">class</span> IndexPairSet></div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> PeriodicIndexingTransformation(<span class=\"keyword\">const</span> RawPreBasis& rawPreBasis, <span class=\"keyword\">const</span> IndexPairSet& indexPairSet)</div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> {</div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> <span class=\"keyword\">static_assert</span>(RawPreBasis::maxMultiIndexSize==1, <span class=\"stringliteral\">"PeriodicIndexingTransformation is only implemented for flat multi-indices"</span>);</div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> std::size_t invalid = {std::numeric_limits<std::size_t>::max()};</div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> mappedIdx_.resize(rawPreBasis.size(), invalid);</div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> numIndices_ = 0;</div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> std::size_t i = 0;</div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& [a, b] : indexPairSet)</div>\n+<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> {</div>\n+<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> <span class=\"keywordflow\">for</span>(; i<=a; ++i)</div>\n+<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> <span class=\"keywordflow\">if</span> (mappedIdx_[i] == invalid)</div>\n+<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> mappedIdx_[i] = numIndices_++;</div>\n+<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> mappedIdx_[b] = mappedIdx_[a];</div>\n+<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> }</div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> <span class=\"keywordflow\">for</span>(; i<rawPreBasis.size(); ++i)</div>\n+<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> <span class=\"keywordflow\">if</span> (mappedIdx_[i] == invalid)</div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> mappedIdx_[i] = numIndices_++;</div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> }</div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> </div>\n+<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> MultiIndex, <span class=\"keyword\">class</span> PreBasis></div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> <span class=\"keywordtype\">void</span> transformIndex(MultiIndex& multiIndex, <span class=\"keyword\">const</span> PreBasis& preBasis)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> multiIndex = {{ mappedIdx_[multiIndex[0]] }};</div>\n+<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> }</div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> </div>\n+<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Prefix, <span class=\"keyword\">class</span> PreBasis></div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> std::size_t size(<span class=\"keyword\">const</span> Prefix& prefix, <span class=\"keyword\">const</span> PreBasis& preBasis)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> <span class=\"keywordflow\">if</span> (prefix.size() == 1)</div>\n+<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> <span class=\"keywordflow\">return</span> 0;</div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> <span class=\"keywordflow\">return</span> numIndices_;</div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> }</div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> </div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> PreBasis></div>\n+<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> <span class=\"keyword\">auto</span> dimension(<span class=\"keyword\">const</span> PreBasis& preBasis)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> <span class=\"keywordflow\">return</span> numIndices_;</div>\n+<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> }</div>\n+<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> </div>\n+<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> std::vector<std::size_t> mappedIdx_;</div>\n+<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> std::size_t numIndices_;</div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span>};</div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> </div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> </div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> </div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> RawPreBasisIndicator></div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span><span class=\"keyword\">class </span>PeriodicPreBasisFactory</div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span>{</div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> PeriodicPreBasisFactory()</div>\n+<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> {}</div>\n+<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> </div>\n+<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> RPBI, <span class=\"keyword\">class</span> PIS></div>\n+<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> PeriodicPreBasisFactory(RPBI&& rawPreBasisIndicator, PIS&& periodicIndexSet) :</div>\n+<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> rawPreBasisIndicator_(std::forward<RPBI>(rawPreBasisIndicator)),</div>\n+<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> periodicIndexSet_(std::forward<PIS>(periodicIndexSet))</div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> {}</div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> </div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>GridView,</div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> std::enable_if_t<models<Concept::GlobalBasis<GridView>,RawPreBasisIndicator>(), <span class=\"keywordtype\">int</span>> = 0></div>\n+<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> <span class=\"keyword\">auto</span> <span class=\"keyword\">operator</span>()(<span class=\"keyword\">const</span> GridView& gridView) <span class=\"keyword\">const</span></div>\n+<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> {</div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& rawPreBasis = rawPreBasisIndicator_.preBasis();</div>\n+<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> <span class=\"keyword\">auto</span> transformation = PeriodicIndexingTransformation(rawPreBasis, periodicIndexSet_.indexPairSet());</div>\n+<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00229.html#a97702eea52e7ff7d9e66226034aee386\">Dune::Functions::Experimental::TransformedIndexPreBasis</a>(std::move(rawPreBasis), std::move(transformation));</div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> }</div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> </div>\n+<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>GridView,</div>\n+<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> std::enable_if_t<models<Concept::PreBasis<GridView>,RawPreBasisIndicator>(), <span class=\"keywordtype\">int</span>> = 0></div>\n+<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> <span class=\"keyword\">auto</span> <span class=\"keyword\">operator</span>()(<span class=\"keyword\">const</span> GridView& gridView) <span class=\"keyword\">const</span></div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> {</div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& rawPreBasis = rawPreBasisIndicator_;</div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> <span class=\"keyword\">auto</span> transformation = PeriodicIndexingTransformation(rawPreBasis, periodicIndexSet_.indexPairSet());</div>\n+<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00229.html#a97702eea52e7ff7d9e66226034aee386\">Dune::Functions::Experimental::TransformedIndexPreBasis</a>(std::move(rawPreBasis), std::move(transformation));</div>\n+<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> }</div>\n <div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> </div>\n-<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> </div>\n-<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH</span></div>\n-<div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa00219_html_a17589fdc18b015644525c7ad037e6441\"><div class=\"ttname\"><a href=\"a00219.html#a17589fdc18b015644525c7ad037e6441\">Dune::Functions::SubspaceBasis</a></div><div class=\"ttdeci\">SubspaceBasis(const RB &, const TP) -> SubspaceBasis< RB, TP ></div></div>\n-<div class=\"ttc\" id=\"aa01807_html\"><div class=\"ttname\"><a href=\"a01807.html\">Dune::Functions::SubspaceBasis</a></div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:38</div></div>\n-<div class=\"ttc\" id=\"aa01807_html_a6e7dd708494382dad7cc288ce6cfe6b8\"><div class=\"ttname\"><a href=\"a01807.html#a6e7dd708494382dad7cc288ce6cfe6b8\">Dune::Functions::SubspaceBasis::GridView</a></div><div class=\"ttdeci\">typename RootBasis::GridView GridView</div><div class=\"ttdoc\">The grid view that the FE space is defined on.</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:48</div></div>\n-<div class=\"ttc\" id=\"aa01807_html_a7c1756f78b770fbbe6937b8a146cdc81\"><div class=\"ttname\"><a href=\"a01807.html#a7c1756f78b770fbbe6937b8a146cdc81\">Dune::Functions::SubspaceBasis::prefixPath</a></div><div class=\"ttdeci\">const PrefixPath & prefixPath() const</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:118</div></div>\n-<div class=\"ttc\" id=\"aa01811_html\"><div class=\"ttname\"><a href=\"a01811.html\">Dune::Functions::SubspaceLocalView</a></div><div class=\"ttdoc\">The restriction of a finite element basis to a single element.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:30</div></div>\n-<div class=\"ttc\" id=\"aa01811_html_a04b95239bc90b94a1332233663446cd2\"><div class=\"ttname\"><a href=\"a01811.html#a04b95239bc90b94a1332233663446cd2\">Dune::Functions::SubspaceLocalView::Tree</a></div><div class=\"ttdeci\">typename TypeTree::ChildForTreePath< RootTree, PrefixPath > Tree</div><div class=\"ttdoc\">Tree of local finite elements / local shape function sets.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:53</div></div>\n-<div class=\"ttc\" id=\"aa01811_html_a210cb18bf65e34f621e0bffd6cb19384\"><div class=\"ttname\"><a href=\"a01811.html#a210cb18bf65e34f621e0bffd6cb19384\">Dune::Functions::SubspaceLocalView::unbind</a></div><div class=\"ttdeci\">void unbind()</div><div class=\"ttdoc\">Unbind from the current element.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:89</div></div>\n-<div class=\"ttc\" id=\"aa01811_html_a2d7c1e74433fb663cbed0c2ab6fc7198\"><div class=\"ttname\"><a href=\"a01811.html#a2d7c1e74433fb663cbed0c2ab6fc7198\">Dune::Functions::SubspaceLocalView::element</a></div><div class=\"ttdeci\">const Element & element() const</div><div class=\"ttdoc\">Return the grid element that the view is bound to.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:80</div></div>\n-<div class=\"ttc\" id=\"aa01811_html_a2fb2643d53fb7511f2eb6ddff751043c\"><div class=\"ttname\"><a href=\"a01811.html#a2fb2643d53fb7511f2eb6ddff751043c\">Dune::Functions::SubspaceLocalView::globalBasis_</a></div><div class=\"ttdeci\">const GlobalBasis * globalBasis_</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:147</div></div>\n-<div class=\"ttc\" id=\"aa01811_html_a31341266e49615ffc56949f471bb61a8\"><div class=\"ttname\"><a href=\"a01811.html#a31341266e49615ffc56949f471bb61a8\">Dune::Functions::SubspaceLocalView::bound</a></div><div class=\"ttdeci\">bool bound() const</div><div class=\"ttdoc\">Return if the view is bound to a grid element.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:96</div></div>\n-<div class=\"ttc\" id=\"aa01811_html_a332b6754582b1108ef353b1b78ae01a3\"><div class=\"ttname\"><a href=\"a01811.html#a332b6754582b1108ef353b1b78ae01a3\">Dune::Functions::SubspaceLocalView::MultiIndex</a></div><div class=\"ttdeci\">typename RootLocalView::MultiIndex MultiIndex</div><div class=\"ttdoc\">Type used for global numbering of the basis vectors.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:56</div></div>\n-<div class=\"ttc\" id=\"aa01811_html_a3bd132c98fd23a67c253c9475540ac90\"><div class=\"ttname\"><a href=\"a01811.html#a3bd132c98fd23a67c253c9475540ac90\">Dune::Functions::SubspaceLocalView::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdoc\">Total number of degrees of freedom on this element.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:112</div></div>\n-<div class=\"ttc\" id=\"aa01811_html_a6db2abe3c910a2aad3a91f732e34c95a\"><div class=\"ttname\"><a href=\"a01811.html#a6db2abe3c910a2aad3a91f732e34c95a\">Dune::Functions::SubspaceLocalView::rootLocalView_</a></div><div class=\"ttdeci\">RootLocalView rootLocalView_</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:148</div></div>\n-<div class=\"ttc\" id=\"aa01811_html_a8d67dd96c63054ab2caccf7c50975838\"><div class=\"ttname\"><a href=\"a01811.html#a8d67dd96c63054ab2caccf7c50975838\">Dune::Functions::SubspaceLocalView::bind</a></div><div class=\"ttdeci\">void bind(const Element &e)</div><div class=\"ttdoc\">Bind the view to a grid element.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:71</div></div>\n-<div class=\"ttc\" id=\"aa01811_html_aa050bf0c521425f496729c3947a61bae\"><div class=\"ttname\"><a href=\"a01811.html#aa050bf0c521425f496729c3947a61bae\">Dune::Functions::SubspaceLocalView::GridView</a></div><div class=\"ttdeci\">typename GlobalBasis::GridView GridView</div><div class=\"ttdoc\">The grid view the global FE basis lives on.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:41</div></div>\n-<div class=\"ttc\" id=\"aa01811_html_aa0d1d0d89f2dd443da6da8d77f6a344f\"><div class=\"ttname\"><a href=\"a01811.html#aa0d1d0d89f2dd443da6da8d77f6a344f\">Dune::Functions::SubspaceLocalView::SubspaceLocalView</a></div><div class=\"ttdeci\">SubspaceLocalView(const GlobalBasis &globalBasis, const PrefixPath &)</div><div class=\"ttdoc\">Construct local view for a given global finite element basis.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:59</div></div>\n-<div class=\"ttc\" id=\"aa01811_html_aa1f3b0a89f5d186299ed0a5329562815\"><div class=\"ttname\"><a href=\"a01811.html#aa1f3b0a89f5d186299ed0a5329562815\">Dune::Functions::SubspaceLocalView::RootLocalView</a></div><div class=\"ttdeci\">RLV RootLocalView</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:35</div></div>\n-<div class=\"ttc\" id=\"aa01811_html_aa28ae73e021d001a954cafe23c570900\"><div class=\"ttname\"><a href=\"a01811.html#aa28ae73e021d001a954cafe23c570900\">Dune::Functions::SubspaceLocalView::rootLocalView</a></div><div class=\"ttdeci\">const RootLocalView & rootLocalView() const</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:141</div></div>\n-<div class=\"ttc\" id=\"aa01811_html_aa53cfe0f5da6f163c89cfe7efd03977d\"><div class=\"ttname\"><a href=\"a01811.html#aa53cfe0f5da6f163c89cfe7efd03977d\">Dune::Functions::SubspaceLocalView::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdoc\">The type used for sizes.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:47</div></div>\n-<div class=\"ttc\" id=\"aa01811_html_aa8331a332fffea09e3bddd41d3d0530b\"><div class=\"ttname\"><a href=\"a01811.html#aa8331a332fffea09e3bddd41d3d0530b\">Dune::Functions::SubspaceLocalView::Element</a></div><div class=\"ttdeci\">typename GridView::template Codim< 0 >::Entity Element</div><div class=\"ttdoc\">Type of the grid element we are bound to.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:44</div></div>\n-<div class=\"ttc\" id=\"aa01811_html_ab86e2da3d257ff25f989a0b51dd7fa95\"><div class=\"ttname\"><a href=\"a01811.html#ab86e2da3d257ff25f989a0b51dd7fa95\">Dune::Functions::SubspaceLocalView::globalBasis</a></div><div class=\"ttdeci\">const GlobalBasis & globalBasis() const</div><div class=\"ttdoc\">Return the global basis that we are a view on.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:136</div></div>\n-<div class=\"ttc\" id=\"aa01811_html_ac553ded1a00894bfb703f41a86f8ce06\"><div class=\"ttname\"><a href=\"a01811.html#ac553ded1a00894bfb703f41a86f8ce06\">Dune::Functions::SubspaceLocalView::maxSize</a></div><div class=\"ttdeci\">size_type maxSize() const</div><div class=\"ttdoc\">Maximum local size for any element on the GridView.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:123</div></div>\n-<div class=\"ttc\" id=\"aa01811_html_acd8c1a7b0ab5a820590b96e441524c06\"><div class=\"ttname\"><a href=\"a01811.html#acd8c1a7b0ab5a820590b96e441524c06\">Dune::Functions::SubspaceLocalView::tree</a></div><div class=\"ttdeci\">const Tree & tree() const</div><div class=\"ttdoc\">Return the local ansatz tree associated to the bound entity.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:105</div></div>\n-<div class=\"ttc\" id=\"aa01811_html_adb5c1fb9c9e3eb19ebb3333e4401f9aa\"><div class=\"ttname\"><a href=\"a01811.html#adb5c1fb9c9e3eb19ebb3333e4401f9aa\">Dune::Functions::SubspaceLocalView::index</a></div><div class=\"ttdeci\">MultiIndex index(size_type i) const</div><div class=\"ttdoc\">Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:129</div></div>\n-<div class=\"ttc\" id=\"aa01811_html_ae4f87d4a8978c25f211132aa6001290c\"><div class=\"ttname\"><a href=\"a01811.html#ae4f87d4a8978c25f211132aa6001290c\">Dune::Functions::SubspaceLocalView::RootTree</a></div><div class=\"ttdeci\">typename RootLocalView::Tree RootTree</div><div class=\"ttdoc\">Tree of local finite elements / local shape function sets.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:50</div></div>\n+<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>GridView,</div>\n+<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> std::enable_if_t<not models<Concept::GlobalBasis<GridView>,RawPreBasisIndicator>(), <span class=\"keywordtype\">int</span>> = 0,</div>\n+<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> std::enable_if_t<not models<Concept::PreBasis<GridView>,RawPreBasisIndicator>(), <span class=\"keywordtype\">int</span>> = 0></div>\n+<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> <span class=\"keyword\">auto</span> operator()(<span class=\"keyword\">const</span> GridView& gridView)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> <span class=\"keyword\">auto</span> rawPreBasis = rawPreBasisIndicator_(gridView);</div>\n+<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> rawPreBasis.initializeIndices();</div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> <span class=\"keyword\">auto</span> transformation = PeriodicIndexingTransformation(rawPreBasis, periodicIndexSet_.indexPairSet());</div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00229.html#a97702eea52e7ff7d9e66226034aee386\">Dune::Functions::Experimental::TransformedIndexPreBasis</a>(std::move(rawPreBasis), std::move(transformation));</div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> }</div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> </div>\n+<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> RawPreBasisIndicator rawPreBasisIndicator_;</div>\n+<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> PeriodicIndexSet periodicIndexSet_;</div>\n+<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span>};</div>\n+<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> </div>\n+<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span>} <span class=\"comment\">// end namespace BasisFactory::Impl</span></div>\n+<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> </div>\n+<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> </div>\n+<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> </div>\n+<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> RawPreBasisIndicator, <span class=\"keyword\">class</span> PIS></div>\n+<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#ga797d4c1dfcfe6b0a98de9284c4f6b5e3\"> 191</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00213.html#ga797d4c1dfcfe6b0a98de9284c4f6b5e3\">periodic</a>(</div>\n+<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> RawPreBasisIndicator&& rawPreBasisIndicator,</div>\n+<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> PIS&& periodicIndexSet</div>\n+<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> )</div>\n+<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span>{</div>\n+<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> <span class=\"keywordflow\">return</span> Impl::PeriodicPreBasisFactory<std::decay_t<RawPreBasisIndicator>>(</div>\n+<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> std::forward<RawPreBasisIndicator>(rawPreBasisIndicator),</div>\n+<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> std::forward<PIS>(periodicIndexSet));</div>\n+<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span>}</div>\n+<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> </div>\n+<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span>} <span class=\"comment\">// end namespace Experimental</span></div>\n+<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> </div>\n+<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span>} <span class=\"comment\">// end namespace BasisFactory</span></div>\n+<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> </div>\n+<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span>} <span class=\"comment\">// end namespace Dune::Functions</span></div>\n+<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> </div>\n+<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUFEM_PERIODICBASIS_HH</span></div>\n+<div class=\"ttc\" id=\"aa00164_html\"><div class=\"ttname\"><a href=\"a00164.html\">transformedindexbasis.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00213_html_ga797d4c1dfcfe6b0a98de9284c4f6b5e3\"><div class=\"ttname\"><a href=\"a00213.html#ga797d4c1dfcfe6b0a98de9284c4f6b5e3\">Dune::Functions::BasisFactory::Experimental::periodic</a></div><div class=\"ttdeci\">auto periodic(RawPreBasisIndicator &&rawPreBasisIndicator, PIS &&periodicIndexSet)</div><div class=\"ttdoc\">Create a pre-basis factory that can create a periodic pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> periodicbasis.hh:191</div></div>\n+<div class=\"ttc\" id=\"aa00219_html\"><div class=\"ttname\"><a href=\"a00219.html\">Dune::Functions</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:11</div></div>\n+<div class=\"ttc\" id=\"aa00229_html_a97702eea52e7ff7d9e66226034aee386\"><div class=\"ttname\"><a href=\"a00229.html#a97702eea52e7ff7d9e66226034aee386\">Dune::Functions::Experimental::TransformedIndexPreBasis</a></div><div class=\"ttdeci\">TransformedIndexPreBasis(RPB &&, T &&) -> TransformedIndexPreBasis< std::decay_t< RPB >, std::decay_t< T > ></div></div>\n+<div class=\"ttc\" id=\"aa01723_html\"><div class=\"ttname\"><a href=\"a01723.html\">Dune::Functions::BasisFactory::Experimental::PeriodicIndexSet</a></div><div class=\"ttdoc\">Container storing identified indices for a periodic basis.</div><div class=\"ttdef\"><b>Definition:</b> periodicbasis.hh:36</div></div>\n+<div class=\"ttc\" id=\"aa01723_html_a97911b25f2c1cf61ab48a667ae448b7e\"><div class=\"ttname\"><a href=\"a01723.html#a97911b25f2c1cf61ab48a667ae448b7e\">Dune::Functions::BasisFactory::Experimental::PeriodicIndexSet::unifyIndexPair</a></div><div class=\"ttdeci\">void unifyIndexPair(std::size_t a, std::size_t b)</div><div class=\"ttdoc\">Insert a pair of indices.</div><div class=\"ttdef\"><b>Definition:</b> periodicbasis.hh:47</div></div>\n+<div class=\"ttc\" id=\"aa01723_html_ace4a53d881dc7e6add6b0fd05a394738\"><div class=\"ttname\"><a href=\"a01723.html#ace4a53d881dc7e6add6b0fd05a394738\">Dune::Functions::BasisFactory::Experimental::PeriodicIndexSet::indexPairSet</a></div><div class=\"ttdeci\">const auto & indexPairSet() const</div><div class=\"ttdef\"><b>Definition:</b> periodicbasis.hh:56</div></div>\n <div class=\"ttc\" id=\"aa02876_html\"><div class=\"ttname\"><a href=\"a02876.html\">concepts.hh</a></div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,228 +5,227 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-subspacelocalview.hh\n+periodicbasis.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH\n- 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH\n+ 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_PERIODICBASIS_HH\n+ 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_PERIODICBASIS_HH\n 5\n- 6\n- 7#include <tuple>\n- 8\n- 9#include <dune/common/concept.hh>\n- 10\n- 11#include <dune/typetree/childextraction.hh>\n- 12\n- 13#include <dune/functions/functionspacebases/concepts.hh>\n+ 6#include <utility>\n+ 7#include <type_traits>\n+ 8#include <limits>\n+ 9#include <set>\n+ 10#include <vector>\n+ 11\n+ 12#include <dune/functions/functionspacebases/concepts.hh>\n+ 13#include <dune/functions/functionspacebases/transformedindexbasis.hh>\n 14\n 15\n- 16\n- 17namespace Dune {\n- 18namespace Functions {\n+ 16namespace Dune::Functions {\n+ 17\n+ 18namespace BasisFactory {\n 19\n- 20\n- 21\n- 22template<class RB, class PP>\n- 23class SubspaceBasis;\n- 24\n+ 20// The PeriodicBasis class is in the Experimental namespace because we are\n+ 21// not completely sure yet whether we like it. We reserve the right to\n+ 22// modify it without advance warning. Use at your own risk!\n+ 23\n+24namespace Experimental {\n 25\n 26\n- 28template<class RLV, class PP>\n-29class SubspaceLocalView\n- 30{\n- 31 using PrefixPath = PP;\n- 32\n- 33public:\n- 34\n-35 using RootLocalView = RLV;\n- 36\n-38 using GlobalBasis = SubspaceBasis<typename_RootLocalView::GlobalBasis,\n-PrefixPath>;\n+35class PeriodicIndexSet\n+ 36{\n+ 37 using IndexPairSet = std::set<std::pair<std::size_t,std::size_t>>;\n+ 38public:\n 39\n-41 using GridView = typename GlobalBasis::GridView;\n- 42\n-44 using Element = typename GridView::template Codim<0>::Entity;\n- 45\n-47 using size_type = std::size_t;\n- 48\n-50 using RootTree = typename RootLocalView::Tree;\n- 51\n-53 using Tree = typename TypeTree::ChildForTreePath<RootTree, PrefixPath>;\n- 54\n-56 using MultiIndex = typename RootLocalView::MultiIndex;\n- 57\n-59 SubspaceLocalView(const GlobalBasis& globalBasis, const PrefixPath& /\n-*prefixPath*/) :\n- 60 globalBasis_(&globalBasis),\n- 61 rootLocalView_(globalBasis.rootBasis().localView())\n- 62 {\n- 63// static_assert(models<Concept::BasisTree<GridView>, Tree>(), \"Tree type\n-passed to SubspaceLocalView does not model the BasisNode concept.\");\n- 64 }\n+47 void unifyIndexPair(std::size_t a, std::size_t b)\n+ 48 {\n+ 49 if (a>b)\n+ 50 std::swap(a,b);\n+ 51 if (a==b)\n+ 52 return;\n+ 53 indexPairSet_.insert(std::make_pair(a,b));\n+ 54 }\n+ 55\n+56 const auto& indexPairSet() const\n+ 57 {\n+ 58 return indexPairSet_;\n+ 59 }\n+ 60\n+ 61private:\n+ 62 IndexPairSet indexPairSet_;\n+ 63};\n+ 64\n 65\n-71 void bind(const Element& e)\n- 72 {\n- 73 rootLocalView_.bind(e);\n- 74 }\n+ 66\n+ 67namespace Impl {\n+ 68\n+ 69// An index transformation for a TransformedIndexPreBasis\n+ 70// implementing periodic functions by merging indices.\n+ 71// Currently only flat indices are supported.\n+ 72class PeriodicIndexingTransformation\n+ 73{\n+ 74public:\n 75\n-80 const Element& element() const\n+ 76 static constexpr std::size_t minIndexSize = 1;\n+ 77 static constexpr std::size_t maxIndexSize = 1;\n+ 78\n+ 79 template<class RawPreBasis, class IndexPairSet>\n+ 80 PeriodicIndexingTransformation(const RawPreBasis& rawPreBasis, const\n+IndexPairSet& indexPairSet)\n 81 {\n- 82 return rootLocalView_.element();\n- 83 }\n- 84\n-89 void unbind()\n- 90 {\n- 91 rootLocalView_.unbind();\n- 92 }\n- 93\n-96 bool bound() const\n- 97 {\n- 98 return rootLocalView_.bound();\n- 99 }\n- 100\n-105 const Tree& tree() const\n- 106 {\n- 107 return TypeTree::child(rootLocalView_.tree(), globalBasis_->prefixPath());\n- 108 }\n- 109\n-112 size_type size() const\n- 113 {\n- 114 return rootLocalView_.size();\n- 115 }\n- 116\n-123 size_type maxSize() const\n- 124 {\n- 125 return rootLocalView_.maxSize();\n- 126 }\n- 127\n-129 MultiIndex index(size_type i) const\n- 130 {\n- 131 return rootLocalView_.index(i);\n- 132 }\n- 133\n-136 const GlobalBasis& globalBasis() const\n- 137 {\n- 138 return *globalBasis_;\n- 139 }\n- 140\n-141 const RootLocalView& rootLocalView() const\n+ 82 static_assert(RawPreBasis::maxMultiIndexSize==1,\n+\"PeriodicIndexingTransformation is only implemented for flat multi-indices\");\n+ 83 std::size_t invalid = {std::numeric_limits<std::size_t>::max()};\n+ 84 mappedIdx_.resize(rawPreBasis.size(), invalid);\n+ 85 numIndices_ = 0;\n+ 86 std::size_t i = 0;\n+ 87 for(const auto& [a, b] : indexPairSet)\n+ 88 {\n+ 89 for(; i<=a; ++i)\n+ 90 if (mappedIdx_[i] == invalid)\n+ 91 mappedIdx_[i] = numIndices_++;\n+ 92 mappedIdx_[b] = mappedIdx_[a];\n+ 93 }\n+ 94 for(; i<rawPreBasis.size(); ++i)\n+ 95 if (mappedIdx_[i] == invalid)\n+ 96 mappedIdx_[i] = numIndices_++;\n+ 97 }\n+ 98\n+ 99 template<class MultiIndex, class PreBasis>\n+ 100 void transformIndex(MultiIndex& multiIndex, const PreBasis& preBasis)\n+const\n+ 101 {\n+ 102 multiIndex = {{ mappedIdx_[multiIndex[0]] }};\n+ 103 }\n+ 104\n+ 105 template<class Prefix, class PreBasis>\n+ 106 std::size_t size(const Prefix& prefix, const PreBasis& preBasis) const\n+ 107 {\n+ 108 if (prefix.size() == 1)\n+ 109 return 0;\n+ 110 return numIndices_;\n+ 111 }\n+ 112\n+ 113 template<class PreBasis>\n+ 114 auto dimension(const PreBasis& preBasis) const\n+ 115 {\n+ 116 return numIndices_;\n+ 117 }\n+ 118\n+ 119private:\n+ 120 std::vector<std::size_t> mappedIdx_;\n+ 121 std::size_t numIndices_;\n+ 122};\n+ 123\n+ 124\n+ 125\n+ 126template<class RawPreBasisIndicator>\n+ 127class PeriodicPreBasisFactory\n+ 128{\n+ 129public:\n+ 130 PeriodicPreBasisFactory()\n+ 131 {}\n+ 132\n+ 133 template<class RPBI, class PIS>\n+ 134 PeriodicPreBasisFactory(RPBI&& rawPreBasisIndicator, PIS&&\n+periodicIndexSet) :\n+ 135 rawPreBasisIndicator_(std::forward<RPBI>(rawPreBasisIndicator)),\n+ 136 periodicIndexSet_(std::forward<PIS>(periodicIndexSet))\n+ 137 {}\n+ 138\n+ 139 template<class GridView,\n+ 140 std::enable_if_t<models<Concept::\n+GlobalBasis<GridView>,RawPreBasisIndicator>(), int> = 0>\n+ 141 auto operator()(const GridView& gridView) const\n 142 {\n- 143 return rootLocalView_;\n- 144 }\n- 145\n- 146protected:\n-147 const GlobalBasis* globalBasis_;\n-148 RootLocalView rootLocalView_;\n- 149};\n- 150\n- 151\n- 152\n- 153} // end namespace Functions\n- 154} // end namespace Dune\n- 155\n+ 143 const auto& rawPreBasis = rawPreBasisIndicator_.preBasis();\n+ 144 auto transformation = PeriodicIndexingTransformation(rawPreBasis,\n+periodicIndexSet_.indexPairSet());\n+ 145 return Dune::Functions::Experimental::TransformedIndexPreBasis(std::move\n+(rawPreBasis), std::move(transformation));\n+ 146 }\n+ 147\n+ 148 template<class GridView,\n+ 149 std::enable_if_t<models<Concept::PreBasis<GridView>,RawPreBasisIndicator>\n+(), int> = 0>\n+ 150 auto operator()(const GridView& gridView) const\n+ 151 {\n+ 152 const auto& rawPreBasis = rawPreBasisIndicator_;\n+ 153 auto transformation = PeriodicIndexingTransformation(rawPreBasis,\n+periodicIndexSet_.indexPairSet());\n+ 154 return Dune::Functions::Experimental::TransformedIndexPreBasis(std::move\n+(rawPreBasis), std::move(transformation));\n+ 155 }\n 156\n- 157\n- 158#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH\n-Dune\n-Definition: polynomial.hh:10\n-Dune::Functions::SubspaceBasis\n-SubspaceBasis(const RB &, const TP) -> SubspaceBasis< RB, TP >\n-Dune::Functions::SubspaceBasis\n-Definition: subspacebasis.hh:38\n-Dune::Functions::SubspaceBasis::GridView\n-typename RootBasis::GridView GridView\n-The grid view that the FE space is defined on.\n-Definition: subspacebasis.hh:48\n-Dune::Functions::SubspaceBasis::prefixPath\n-const PrefixPath & prefixPath() const\n-Definition: subspacebasis.hh:118\n-Dune::Functions::SubspaceLocalView\n-The restriction of a finite element basis to a single element.\n-Definition: subspacelocalview.hh:30\n-Dune::Functions::SubspaceLocalView::Tree\n-typename TypeTree::ChildForTreePath< RootTree, PrefixPath > Tree\n-Tree of local finite elements / local shape function sets.\n-Definition: subspacelocalview.hh:53\n-Dune::Functions::SubspaceLocalView::unbind\n-void unbind()\n-Unbind from the current element.\n-Definition: subspacelocalview.hh:89\n-Dune::Functions::SubspaceLocalView::element\n-const Element & element() const\n-Return the grid element that the view is bound to.\n-Definition: subspacelocalview.hh:80\n-Dune::Functions::SubspaceLocalView::globalBasis_\n-const GlobalBasis * globalBasis_\n-Definition: subspacelocalview.hh:147\n-Dune::Functions::SubspaceLocalView::bound\n-bool bound() const\n-Return if the view is bound to a grid element.\n-Definition: subspacelocalview.hh:96\n-Dune::Functions::SubspaceLocalView::MultiIndex\n-typename RootLocalView::MultiIndex MultiIndex\n-Type used for global numbering of the basis vectors.\n-Definition: subspacelocalview.hh:56\n-Dune::Functions::SubspaceLocalView::size\n-size_type size() const\n-Total number of degrees of freedom on this element.\n-Definition: subspacelocalview.hh:112\n-Dune::Functions::SubspaceLocalView::rootLocalView_\n-RootLocalView rootLocalView_\n-Definition: subspacelocalview.hh:148\n-Dune::Functions::SubspaceLocalView::bind\n-void bind(const Element &e)\n-Bind the view to a grid element.\n-Definition: subspacelocalview.hh:71\n-Dune::Functions::SubspaceLocalView::GridView\n-typename GlobalBasis::GridView GridView\n-The grid view the global FE basis lives on.\n-Definition: subspacelocalview.hh:41\n-Dune::Functions::SubspaceLocalView::SubspaceLocalView\n-SubspaceLocalView(const GlobalBasis &globalBasis, const PrefixPath &)\n-Construct local view for a given global finite element basis.\n-Definition: subspacelocalview.hh:59\n-Dune::Functions::SubspaceLocalView::RootLocalView\n-RLV RootLocalView\n-Definition: subspacelocalview.hh:35\n-Dune::Functions::SubspaceLocalView::rootLocalView\n-const RootLocalView & rootLocalView() const\n-Definition: subspacelocalview.hh:141\n-Dune::Functions::SubspaceLocalView::size_type\n-std::size_t size_type\n-The type used for sizes.\n-Definition: subspacelocalview.hh:47\n-Dune::Functions::SubspaceLocalView::Element\n-typename GridView::template Codim< 0 >::Entity Element\n-Type of the grid element we are bound to.\n-Definition: subspacelocalview.hh:44\n-Dune::Functions::SubspaceLocalView::globalBasis\n-const GlobalBasis & globalBasis() const\n-Return the global basis that we are a view on.\n-Definition: subspacelocalview.hh:136\n-Dune::Functions::SubspaceLocalView::maxSize\n-size_type maxSize() const\n-Maximum local size for any element on the GridView.\n-Definition: subspacelocalview.hh:123\n-Dune::Functions::SubspaceLocalView::tree\n-const Tree & tree() const\n-Return the local ansatz tree associated to the bound entity.\n-Definition: subspacelocalview.hh:105\n-Dune::Functions::SubspaceLocalView::index\n-MultiIndex index(size_type i) const\n-Maps from subtree index set [0..size-1] to a globally unique multi index in\n-global basis.\n-Definition: subspacelocalview.hh:129\n-Dune::Functions::SubspaceLocalView::RootTree\n-typename RootLocalView::Tree RootTree\n-Tree of local finite elements / local shape function sets.\n-Definition: subspacelocalview.hh:50\n+ 157 template<class GridView,\n+ 158 std::enable_if_t<not models<Concept::\n+GlobalBasis<GridView>,RawPreBasisIndicator>(), int> = 0,\n+ 159 std::enable_if_t<not models<Concept::\n+PreBasis<GridView>,RawPreBasisIndicator>(), int> = 0>\n+ 160 auto operator()(const GridView& gridView) const\n+ 161 {\n+ 162 auto rawPreBasis = rawPreBasisIndicator_(gridView);\n+ 163 rawPreBasis.initializeIndices();\n+ 164 auto transformation = PeriodicIndexingTransformation(rawPreBasis,\n+periodicIndexSet_.indexPairSet());\n+ 165 return Dune::Functions::Experimental::TransformedIndexPreBasis(std::move\n+(rawPreBasis), std::move(transformation));\n+ 166 }\n+ 167\n+ 168private:\n+ 169 RawPreBasisIndicator rawPreBasisIndicator_;\n+ 170 PeriodicIndexSet periodicIndexSet_;\n+ 171};\n+ 172\n+ 173} // end namespace BasisFactory::Impl\n+ 174\n+ 175\n+ 176\n+ 190template<class RawPreBasisIndicator, class PIS>\n+191auto periodic(\n+ 192 RawPreBasisIndicator&& rawPreBasisIndicator,\n+ 193 PIS&& periodicIndexSet\n+ 194 )\n+ 195{\n+ 196 return Impl::PeriodicPreBasisFactory<std::decay_t<RawPreBasisIndicator>>(\n+ 197 std::forward<RawPreBasisIndicator>(rawPreBasisIndicator),\n+ 198 std::forward<PIS>(periodicIndexSet));\n+ 199}\n+ 200\n+ 201} // end namespace Experimental\n+ 202\n+ 203} // end namespace BasisFactory\n+ 204\n+ 205} // end namespace Dune::Functions\n+ 206\n+ 207#endif // DUNE_FUFEM_PERIODICBASIS_HH\n+transformedindexbasis.hh\n+Dune::Functions::BasisFactory::Experimental::periodic\n+auto periodic(RawPreBasisIndicator &&rawPreBasisIndicator, PIS\n+&&periodicIndexSet)\n+Create a pre-basis factory that can create a periodic pre-basis.\n+Definition: periodicbasis.hh:191\n+Dune::Functions\n+Definition: polynomial.hh:11\n+Dune::Functions::Experimental::TransformedIndexPreBasis\n+TransformedIndexPreBasis(RPB &&, T &&) -> TransformedIndexPreBasis< std::\n+decay_t< RPB >, std::decay_t< T > >\n+Dune::Functions::BasisFactory::Experimental::PeriodicIndexSet\n+Container storing identified indices for a periodic basis.\n+Definition: periodicbasis.hh:36\n+Dune::Functions::BasisFactory::Experimental::PeriodicIndexSet::unifyIndexPair\n+void unifyIndexPair(std::size_t a, std::size_t b)\n+Insert a pair of indices.\n+Definition: periodicbasis.hh:47\n+Dune::Functions::BasisFactory::Experimental::PeriodicIndexSet::indexPairSet\n+const auto & indexPairSet() const\n+Definition: periodicbasis.hh:56\n concepts.hh\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00149.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00149.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: hierarchicallagrangebasis.hh File Reference</title>\n+<title>dune-functions: brezzidouglasmarinibasis.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -67,55 +67,62 @@\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> |\n <a href=\"#typedef-members\">Typedefs</a> |\n <a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">hierarchicallagrangebasis.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">brezzidouglasmarinibasis.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <dune/common/exceptions.hh></code><br />\n-<code>#include <dune/localfunctions/hierarchical/hierarchicalp2.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00191_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00119_source.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></code><br />\n-<code>#include <dune/grid/common/mcmgmapper.hh></code><br />\n+<div class=\"textblock\"><code>#include <array></code><br />\n+<code>#include <dune/common/exceptions.hh></code><br />\n+<code>#include <dune/geometry/referenceelements.hh></code><br />\n+<code>#include <dune/localfunctions/common/virtualinterface.hh></code><br />\n+<code>#include <dune/localfunctions/common/virtualwrappers.hh></code><br />\n+<code>#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube2d.hh></code><br />\n+<code>#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube3d.hh></code><br />\n+<code>#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1simplex2d.hh></code><br />\n+<code>#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2cube2d.hh></code><br />\n+<code>#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2simplex2d.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00137_source.html\">dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00179_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00152_source.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></code><br />\n </div>\n <p><a href=\"a00149_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01623.html\">Dune::Functions::HierarchicalLagrangePreBasis< GV, k, R ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A pre-basis for a hierarchical basis. <a href=\"a01623.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01471.html\">Dune::Functions::BrezziDouglasMariniPreBasis< GV, k ></a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01619.html\">Dune::Functions::HierarchicalLagrangeNode< GV, k, R ></a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01467.html\">Dune::Functions::BrezziDouglasMariniNode< GV, k ></a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00224\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00224.html\">Dune::Functions::BasisFactory</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"typedef-members\" name=\"typedef-members\"></a>\n Typedefs</h2></td></tr>\n-<tr class=\"memitem:gab0bae3d4d425eb9a32bd97c797af7350\"><td class=\"memTemplParams\" colspan=\"2\">template<typename GV , int k, typename R = double> </td></tr>\n-<tr class=\"memitem:gab0bae3d4d425eb9a32bd97c797af7350\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#gab0bae3d4d425eb9a32bd97c797af7350\">Dune::Functions::HierarchicalLagrangeBasis</a> = DefaultGlobalBasis< HierarchicalLagrangePreBasis< GV, k, R > ></td></tr>\n-<tr class=\"memdesc:gab0bae3d4d425eb9a32bd97c797af7350\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Basis of a scalar Hierarchical Lagrange finite element space. <a href=\"a00213.html#gab0bae3d4d425eb9a32bd97c797af7350\">More...</a><br /></td></tr>\n-<tr class=\"separator:gab0bae3d4d425eb9a32bd97c797af7350\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a05987d1b6480619710c578ad80a243e5\"><td class=\"memTemplParams\" colspan=\"2\">template<typename GV , int k> </td></tr>\n+<tr class=\"memitem:a05987d1b6480619710c578ad80a243e5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a05987d1b6480619710c578ad80a243e5\">Dune::Functions::BrezziDouglasMariniBasis</a> = DefaultGlobalBasis< BrezziDouglasMariniPreBasis< GV, k > ></td></tr>\n+<tr class=\"memdesc:a05987d1b6480619710c578ad80a243e5\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Basis of a scalar k-th-order BDM finite element space on simplex and cube grids. <a href=\"a00219.html#a05987d1b6480619710c578ad80a243e5\">More...</a><br /></td></tr>\n+<tr class=\"separator:a05987d1b6480619710c578ad80a243e5\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n Functions</h2></td></tr>\n-<tr class=\"memitem:gae1668779c06b647fd909294cbedf28cf\"><td class=\"memTemplParams\" colspan=\"2\">template<std::size_t k, typename R = double> </td></tr>\n-<tr class=\"memitem:gae1668779c06b647fd909294cbedf28cf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#gae1668779c06b647fd909294cbedf28cf\">Dune::Functions::BasisFactory::hierarchicalLagrange</a> ()</td></tr>\n-<tr class=\"memdesc:gae1668779c06b647fd909294cbedf28cf\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a pre-basis factory that can create a HierarchicalLagrange pre-basis. <a href=\"a00213.html#gae1668779c06b647fd909294cbedf28cf\">More...</a><br /></td></tr>\n-<tr class=\"separator:gae1668779c06b647fd909294cbedf28cf\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga72847f418332ba3d5444a7f153776610\"><td class=\"memTemplParams\" colspan=\"2\">template<std::size_t k> </td></tr>\n+<tr class=\"memitem:ga72847f418332ba3d5444a7f153776610\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#ga72847f418332ba3d5444a7f153776610\">Dune::Functions::BasisFactory::brezziDouglasMarini</a> ()</td></tr>\n+<tr class=\"memdesc:ga72847f418332ba3d5444a7f153776610\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a pre-basis factory that can create a Brezzi-Douglas-Marini pre-basis. <a href=\"a00213.html#ga72847f418332ba3d5444a7f153776610\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga72847f418332ba3d5444a7f153776610\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -6,42 +6,55 @@\n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n Classes | Namespaces | Typedefs | Functions\n-hierarchicallagrangebasis.hh File Reference\n+brezzidouglasmarinibasis.hh File Reference\n+#include <array>\n #include <dune/common/exceptions.hh>\n-#include <dune/localfunctions/hierarchical/hierarchicalp2.hh>\n+#include <dune/geometry/referenceelements.hh>\n+#include <dune/localfunctions/common/virtualinterface.hh>\n+#include <dune/localfunctions/common/virtualwrappers.hh>\n+#include <dune/localfunctions/brezzidouglasmarini/\n+brezzidouglasmarini1cube2d.hh>\n+#include <dune/localfunctions/brezzidouglasmarini/\n+brezzidouglasmarini1cube3d.hh>\n+#include <dune/localfunctions/brezzidouglasmarini/\n+brezzidouglasmarini1simplex2d.hh>\n+#include <dune/localfunctions/brezzidouglasmarini/\n+brezzidouglasmarini2cube2d.hh>\n+#include <dune/localfunctions/brezzidouglasmarini/\n+brezzidouglasmarini2simplex2d.hh>\n+#include <dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh>\n #include <dune/functions/functionspacebases/nodes.hh>\n #include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n-#include <dune/grid/common/mcmgmapper.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-class \u00a0Dune::Functions::HierarchicalLagrangePreBasis<_GV,_k,_R_>\n-\u00a0 A pre-basis for a hierarchical basis. More...\n+class \u00a0Dune::Functions::BrezziDouglasMariniPreBasis<_GV,_k_>\n \u00a0\n-class \u00a0Dune::Functions::HierarchicalLagrangeNode<_GV,_k,_R_>\n+class \u00a0Dune::Functions::BrezziDouglasMariniNode<_GV,_k_>\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n namespace \u00a0Dune::Functions::BasisFactory\n \u00a0\n Typedefs\n-template<typename GV , int k, typename R = double>\n-using\u00a0Dune::Functions::HierarchicalLagrangeBasis = DefaultGlobalBasis<\n- HierarchicalLagrangePreBasis< GV, k, R > >\n-\u00a0 Basis of a scalar Hierarchical Lagrange finite element space. More...\n+template<typename GV , int k>\n+using\u00a0Dune::Functions::BrezziDouglasMariniBasis = DefaultGlobalBasis<\n+ BrezziDouglasMariniPreBasis< GV, k > >\n+\u00a0 Basis of a scalar k-th-order BDM finite element space on simplex and\n+ cube grids. More...\n \u00a0\n Functions\n-template<std::size_t k, typename R = double>\n-auto\u00a0Dune::Functions::BasisFactory::hierarchicalLagrange ()\n-\u00a0 Create a pre-basis factory that can create a HierarchicalLagrange pre-\n+template<std::size_t k>\n+auto\u00a0Dune::Functions::BasisFactory::brezziDouglasMarini ()\n+\u00a0 Create a pre-basis factory that can create a Brezzi-Douglas-Marini pre-\n basis. More...\n \u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00149_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00149_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: hierarchicallagrangebasis.hh Source File</title>\n+<title>dune-functions: brezzidouglasmarinibasis.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,263 +62,387 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">hierarchicallagrangebasis.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">brezzidouglasmarinibasis.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00149.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <dune/common/exceptions.hh></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <dune/localfunctions/hierarchical/hierarchicalp2.hh></span></div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00191.html\">dune/functions/functionspacebases/nodes.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00119.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/grid/common/mcmgmapper.hh></span></div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <array></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <dune/common/exceptions.hh></span></div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <dune/geometry/referenceelements.hh></span></div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/localfunctions/common/virtualinterface.hh></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/localfunctions/common/virtualwrappers.hh></span></div>\n <div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> <span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> <span class=\"comment\">// *****************************************************************************</span></div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> <span class=\"comment\">// Implementation for Hierarchical Lagrange Basis</span></div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> <span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> <span class=\"comment\">// -- only order k=2 is implemented up to now --</span></div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span> <span class=\"comment\">// -- currently only supports simplex grids --</span></div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> <span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> <span class=\"comment\">// This is the reusable part of the HierarchicalLagrangeBasis. It contains</span></div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span> <span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> <span class=\"comment\">// HierarchicalLagrangePreBasis</span></div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> <span class=\"comment\">// HierarchicalLagrangeNode</span></div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> <span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> <span class=\"comment\">// The pre-basis allows to create the others and is the owner of possible shared</span></div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> <span class=\"comment\">// state. These components do _not_ depend on the global basis and can be</span></div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span> <span class=\"comment\">// used without a global basis.</span></div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> <span class=\"comment\">// *****************************************************************************</span></div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> </div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k, <span class=\"keyword\">typename</span> R=<span class=\"keywordtype\">double</span>></div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> <span class=\"keyword\">class </span>HierarchicalLagrangeNode;</div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> </div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k, <span class=\"keyword\">typename</span> R=<span class=\"keywordtype\">double</span>></div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> <span class=\"keyword\">class </span>HierarchicalLagrangePreBasis;</div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> </div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k, <span class=\"keyword\">typename</span> R></div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html\"> 48</a></span> <span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01623.html\">HierarchicalLagrangePreBasis</a></div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> {</div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dim = GV::dimension;</div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> </div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> <span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube2d.hh></span></div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube3d.hh></span></div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1simplex2d.hh></span></div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"preprocessor\">#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2cube2d.hh></span></div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"preprocessor\">#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2simplex2d.hh></span></div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00137.html\">dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00179.html\">dune/functions/functionspacebases/nodes.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00152.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> </div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> </div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"keyword\">namespace </span>Impl {</div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> </div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> <span class=\"keyword\">template</span><<span class=\"keywordtype\">int</span> dim, <span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R, std::<span class=\"keywordtype\">size_t</span> k></div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span> <span class=\"keyword\">struct </span>BDMSimplexLocalInfo</div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> {</div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> <span class=\"keyword\">static_assert</span>((AlwaysFalse<D>::value),<span class=\"stringliteral\">"The requested type of BDM element is not implemented, sorry!"</span>);</div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> };</div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> </div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R></div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> <span class=\"keyword\">struct </span>BDMSimplexLocalInfo<2,D,R,1></div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> {</div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> <span class=\"keyword\">using </span>FiniteElement = BDM1Simplex2DLocalFiniteElement<D,R>;</div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> std::size_t Variants = 8;</div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> };</div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> </div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R></div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> <span class=\"keyword\">struct </span>BDMSimplexLocalInfo<2,D,R,2></div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> {</div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> <span class=\"keyword\">using </span>FiniteElement = BDM2Simplex2DLocalFiniteElement<D,R>;</div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> std::size_t Variants = 8;</div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> };</div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> <span class=\"keyword\">template</span><<span class=\"keywordtype\">int</span> dim, <span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R, std::<span class=\"keywordtype\">size_t</span> k></div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> <span class=\"keyword\">struct </span>BDMCubeLocalInfo</div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> {</div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> <span class=\"keyword\">static_assert</span>((AlwaysFalse<D>::value),<span class=\"stringliteral\">"The requested type of BDM element is not implemented, sorry!"</span>);</div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> };</div>\n <div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> </div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#a8d29fa123c51e408af1e34dadf421658\"> 55</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01623.html#a8d29fa123c51e408af1e34dadf421658\">GridView</a> = GV;</div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> </div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#a06b5f579aec6e1058020aca7c20a4a5b\"> 58</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01623.html#a06b5f579aec6e1058020aca7c20a4a5b\">size_type</a> = std::size_t;</div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> </div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#a7ca4c90a4d74ea37014bd3038b3315be\"> 61</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01619.html\">Node</a> = <a class=\"code hl_class\" href=\"a01619.html\">HierarchicalLagrangeNode<GV, k, R></a>;</div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> </div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#ab05fa83b28393a642a783886d3cfb389\"> 63</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01623.html#a06b5f579aec6e1058020aca7c20a4a5b\">size_type</a> <a class=\"code hl_variable\" href=\"a01623.html#ab05fa83b28393a642a783886d3cfb389\">maxMultiIndexSize</a> = 1;</div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#af0c5d0c1e855de8dc56b81360b617c0c\"> 64</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01623.html#a06b5f579aec6e1058020aca7c20a4a5b\">size_type</a> <a class=\"code hl_variable\" href=\"a01623.html#af0c5d0c1e855de8dc56b81360b617c0c\">minMultiIndexSize</a> = 1;</div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#a5d4d6c9d4b3e41e2dca6a5b250bd942e\"> 65</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01623.html#a06b5f579aec6e1058020aca7c20a4a5b\">size_type</a> <a class=\"code hl_variable\" href=\"a01623.html#a5d4d6c9d4b3e41e2dca6a5b250bd942e\">multiIndexBufferSize</a> = 1;</div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> </div>\n-<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#a97079ff1b8a023dadf424efe80ff38af\"> 71</a></span> <a class=\"code hl_function\" href=\"a01623.html#a97079ff1b8a023dadf424efe80ff38af\">HierarchicalLagrangePreBasis</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01623.html#a8d29fa123c51e408af1e34dadf421658\">GridView</a>& gv) : <a class=\"code hl_variable\" href=\"a01623.html#abfbdf2bbe11f73edd46b001048d09fba\">gridView_</a>(gv) , <a class=\"code hl_variable\" href=\"a01623.html#a7700943c6d6759638af3e5fcb7a63ce4\">mcmgMapper_</a>(gv,p2Layout())</div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> {}</div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> </div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#ac79e037186412bb4d77c8ca2bc6ad494\"> 75</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01623.html#ac79e037186412bb4d77c8ca2bc6ad494\">initializeIndices</a>()</div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> {}</div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> </div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#ab5bd91f85b9195d37879732f0ceeba7e\"> 79</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01623.html#a8d29fa123c51e408af1e34dadf421658\">GridView</a>& <a class=\"code hl_function\" href=\"a01623.html#ab5bd91f85b9195d37879732f0ceeba7e\">gridView</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01623.html#abfbdf2bbe11f73edd46b001048d09fba\">gridView_</a>;</div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> }</div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R></div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> <span class=\"keyword\">struct </span>BDMCubeLocalInfo<2,D,R,1></div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> {</div>\n+<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> <span class=\"keyword\">using </span>FiniteElement = BDM1Cube2DLocalFiniteElement<D,R>;</div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> std::size_t Variants = 16;</div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> };</div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> </div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R></div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> <span class=\"keyword\">struct </span>BDMCubeLocalInfo<2,D,R,2></div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> {</div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> <span class=\"keyword\">using </span>FiniteElement = BDM2Cube2DLocalFiniteElement<D,R>;</div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> std::size_t Variants = 16;</div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> };</div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> </div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R></div>\n+<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> <span class=\"keyword\">struct </span>BDMCubeLocalInfo<3,D,R,1></div>\n+<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> {</div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> <span class=\"keyword\">using </span>FiniteElement = BDM1Cube3DLocalFiniteElement<D,R>;</div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> std::size_t Variants = 64;</div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> };</div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> </div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> dim, <span class=\"keyword\">typename</span> R, std::<span class=\"keywordtype\">size_t</span> k></div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> <span class=\"keyword\">class </span>BDMLocalFiniteElementMap</div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> {</div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> <span class=\"keyword\">using </span>D = <span class=\"keyword\">typename</span> GV::ctype;</div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> <span class=\"keyword\">using </span>CubeFiniteElement = <span class=\"keyword\">typename</span> BDMCubeLocalInfo<dim, D, R, k>::FiniteElement;</div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> <span class=\"keyword\">using </span>SimplexFiniteElement = <span class=\"keyword\">typename</span> BDMSimplexLocalInfo<dim, D, R, k>::FiniteElement;</div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> </div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> <span class=\"keyword\">public</span>:</div>\n <div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> </div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#a741666d871c080d4cdb5097bd7286d26\"> 85</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01623.html#a741666d871c080d4cdb5097bd7286d26\">update</a> (<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01623.html#a8d29fa123c51e408af1e34dadf421658\">GridView</a>& gv)</div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> {</div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> <a class=\"code hl_variable\" href=\"a01623.html#abfbdf2bbe11f73edd46b001048d09fba\">gridView_</a> = gv;</div>\n-<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> <a class=\"code hl_variable\" href=\"a01623.html#a7700943c6d6759638af3e5fcb7a63ce4\">mcmgMapper_</a>.update(gv);</div>\n-<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> }</div>\n-<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> </div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#a23698bafe0dfb6a28abd932345714465\"> 94</a></span> <a class=\"code hl_class\" href=\"a01619.html\">Node</a> <a class=\"code hl_function\" href=\"a01623.html#a23698bafe0dfb6a28abd932345714465\">makeNode</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01619.html\">Node</a>{};</div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> }</div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> </div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#ac351887f1be4aa2af48c45f77e9bb4d3\"> 100</a></span> <a class=\"code hl_typedef\" href=\"a01623.html#a06b5f579aec6e1058020aca7c20a4a5b\">size_type</a> <a class=\"code hl_function\" href=\"a01623.html#ac351887f1be4aa2af48c45f77e9bb4d3\">size</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01623.html#a7700943c6d6759638af3e5fcb7a63ce4\">mcmgMapper_</a>.size();</div>\n-<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> }</div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> </div>\n-<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#ab2091a6b22e8e543b8c1f13e9e5b5397\"> 107</a></span> <a class=\"code hl_typedef\" href=\"a01623.html#a06b5f579aec6e1058020aca7c20a4a5b\">size_type</a> <a class=\"code hl_function\" href=\"a01623.html#ab2091a6b22e8e543b8c1f13e9e5b5397\">size</a>(<span class=\"keyword\">const</span> SizePrefix prefix)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> assert(prefix.size() == 0 || prefix.size() == 1);</div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> <span class=\"keywordflow\">return</span> (prefix.size() == 0) ? <a class=\"code hl_function\" href=\"a01623.html#ac351887f1be4aa2af48c45f77e9bb4d3\">size</a>() : 0;</div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> }</div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> </div>\n-<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#a88651cce49d707a52792467116d66b59\"> 114</a></span> <a class=\"code hl_typedef\" href=\"a01623.html#a06b5f579aec6e1058020aca7c20a4a5b\">size_type</a> <a class=\"code hl_function\" href=\"a01623.html#a88651cce49d707a52792467116d66b59\">dimension</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01623.html#ac351887f1be4aa2af48c45f77e9bb4d3\">size</a>();</div>\n-<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> }</div>\n-<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> </div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#a4a2ade989aac068fb72abe2dd50893cf\"> 123</a></span> <a class=\"code hl_typedef\" href=\"a01623.html#a06b5f579aec6e1058020aca7c20a4a5b\">size_type</a> <a class=\"code hl_function\" href=\"a01623.html#a4a2ade989aac068fb72abe2dd50893cf\">maxNodeSize</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> <span class=\"comment\">// That cast to unsigned int is necessary because GV::dimension is an enum</span></div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> <span class=\"keywordflow\">return</span> Dune::binomial(std::size_t(<a class=\"code hl_function\" href=\"a01623.html#a1e86a08f7b85a90b8e7c34e07eaa1149\">order</a>() + (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>)GV::dimension),std::size_t(<a class=\"code hl_function\" href=\"a01623.html#a1e86a08f7b85a90b8e7c34e07eaa1149\">order</a>()));</div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> }</div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> </div>\n-<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n-<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#ad2404338c629c8ff77315fc5a6a99c88\"> 130</a></span> It <a class=\"code hl_function\" href=\"a01623.html#ad2404338c629c8ff77315fc5a6a99c88\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01619.html\">Node</a>& node, It it)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> <span class=\"keywordflow\">for</span> (<a class=\"code hl_typedef\" href=\"a01623.html#a06b5f579aec6e1058020aca7c20a4a5b\">size_type</a> i = 0, end = node.<a class=\"code hl_function\" href=\"a01619.html#a753c22a75924be3faa2d64f6da96ab7b\">finiteElement</a>().size() ; i < end ; ++it, ++i)</div>\n-<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> {</div>\n-<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> Dune::LocalKey localKey = node.<a class=\"code hl_function\" href=\"a01619.html#a753c22a75924be3faa2d64f6da96ab7b\">finiteElement</a>().localCoefficients().localKey(i);</div>\n-<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& element = node.<a class=\"code hl_function\" href=\"a01619.html#a3999406fb8956a1608e2cb92e8ad54b2\">element</a>();</div>\n-<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> </div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> *it = {{ (<a class=\"code hl_typedef\" href=\"a01623.html#a06b5f579aec6e1058020aca7c20a4a5b\">size_type</a>)(<a class=\"code hl_variable\" href=\"a01623.html#a7700943c6d6759638af3e5fcb7a63ce4\">mcmgMapper_</a>.subIndex(element,localKey.subEntity(),localKey.codim())) }};</div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> }</div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> <span class=\"keywordflow\">return</span> it;</div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> }</div>\n-<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> </div>\n-<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> <span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#abfbdf2bbe11f73edd46b001048d09fba\"> 143</a></span> <a class=\"code hl_typedef\" href=\"a01623.html#a8d29fa123c51e408af1e34dadf421658\">GridView</a> <a class=\"code hl_variable\" href=\"a01623.html#abfbdf2bbe11f73edd46b001048d09fba\">gridView_</a>;</div>\n-<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> </div>\n-<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#a1e86a08f7b85a90b8e7c34e07eaa1149\"> 145</a></span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_function\" href=\"a01623.html#a1e86a08f7b85a90b8e7c34e07eaa1149\">order</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> <span class=\"keywordflow\">return</span> 2;</div>\n-<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> }</div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> <span class=\"keyword\">using </span>T = LocalBasisTraits<D, dim, FieldVector<D,dim>, R, dim, FieldVector<R,dim>, FieldMatrix<D,dim,dim> >;</div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> <span class=\"keyword\">using </span>FiniteElement = LocalFiniteElementVirtualInterface<T>;</div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> </div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> BDMLocalFiniteElementMap(<span class=\"keyword\">const</span> GV& gv)</div>\n+<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> : is_(&(gv.indexSet())), orient_(gv.size(0))</div>\n+<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> {</div>\n+<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> cubeVariant_.resize(BDMCubeLocalInfo<dim, D, R, k>::Variants);</div>\n+<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> simplexVariant_.resize(BDMSimplexLocalInfo<dim, D, R, k>::Variants);</div>\n+<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> </div>\n+<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> <span class=\"comment\">// create all variants</span></div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i = 0; i < cubeVariant_.size(); i++)</div>\n+<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> cubeVariant_[i] = std::make_unique<LocalFiniteElementVirtualImp<CubeFiniteElement> >(CubeFiniteElement(i));</div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> </div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i = 0; i < simplexVariant_.size(); i++)</div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> simplexVariant_[i] = std::make_unique<LocalFiniteElementVirtualImp<SimplexFiniteElement> >(SimplexFiniteElement(i));</div>\n+<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> </div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> <span class=\"comment\">// compute orientation for all elements</span></div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> <span class=\"comment\">// loop once over the grid</span></div>\n+<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& cell : elements(gv))</div>\n+<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> {</div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> myId = is_->index(cell);</div>\n+<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> orient_[myId] = 0;</div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> </div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> <span class=\"keywordflow\">for</span> (<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& intersection : intersections(gv,cell))</div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> {</div>\n+<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> <span class=\"keywordflow\">if</span> (intersection.neighbor() && (is_->index(intersection.outside()) > myId))</div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> orient_[myId] |= (1 << intersection.indexInInside());</div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> }</div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> }</div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> }</div>\n+<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> </div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> EntityType></div>\n+<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> <span class=\"keyword\">const</span> FiniteElement& find(<span class=\"keyword\">const</span> EntityType& e)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> <span class=\"keywordflow\">if</span> (e.type().isCube())</div>\n+<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> <span class=\"keywordflow\">return</span> *cubeVariant_[orient_[is_->index(e)]];</div>\n+<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> <span class=\"keywordflow\">else</span></div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> <span class=\"keywordflow\">return</span> *simplexVariant_[orient_[is_->index(e)]];</div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> }</div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> </div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> <span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> std::vector<std::unique_ptr<LocalFiniteElementVirtualImp<CubeFiniteElement> > > cubeVariant_;</div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> std::vector<std::unique_ptr<LocalFiniteElementVirtualImp<SimplexFiniteElement> > > simplexVariant_;</div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> <span class=\"keyword\">const</span> <span class=\"keyword\">typename</span> GV::IndexSet* is_;</div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> std::vector<unsigned char> orient_;</div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> };</div>\n+<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> </div>\n+<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> </div>\n+<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span>} <span class=\"comment\">// namespace Impl</span></div>\n+<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> </div>\n+<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> </div>\n+<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span><span class=\"comment\">// This is the reusable part of the basis. It contains</span></div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span><span class=\"comment\">//</span></div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span><span class=\"comment\">// BrezziDouglasMariniPreBasis</span></div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span><span class=\"comment\">// BrezziDouglasMariniNode</span></div>\n+<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span><span class=\"comment\">//</span></div>\n+<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span><span class=\"comment\">// The pre-basis allows to create the others and is the owner of possible shared</span></div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span><span class=\"comment\">// state. These components do _not_ depend on the global basis and local view</span></div>\n+<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span><span class=\"comment\">// and can be used without a global basis.</span></div>\n+<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> </div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k></div>\n+<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span><span class=\"keyword\">class </span>BrezziDouglasMariniNode;</div>\n <div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> </div>\n-<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01623.html#a7700943c6d6759638af3e5fcb7a63ce4\"> 150</a></span> MultipleCodimMultipleGeomTypeMapper<GridView> <a class=\"code hl_variable\" href=\"a01623.html#a7700943c6d6759638af3e5fcb7a63ce4\">mcmgMapper_</a>;</div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> </div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> <span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> <span class=\"keyword\">static</span> <span class=\"keyword\">auto</span> p2Layout()</div>\n-<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> {</div>\n-<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> <span class=\"keywordflow\">return</span> [](Dune::GeometryType type, <span class=\"keywordtype\">int</span> gridDim)</div>\n-<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> {</div>\n-<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> <span class=\"keywordflow\">if</span> (type.isVertex())</div>\n-<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> <span class=\"keywordflow\">return</span> 1;</div>\n-<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> <span class=\"keywordflow\">if</span> (type.isLine())</div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> <span class=\"keywordflow\">return</span> 1;</div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> <span class=\"keywordflow\">if</span> (type.isTriangle())</div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> <span class=\"keywordflow\">return</span> 0;</div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> assert(type.isTetrahedron());</div>\n-<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> <span class=\"keywordflow\">return</span> 0;</div>\n-<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> };</div>\n-<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> }</div>\n-<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> };</div>\n-<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> </div>\n-<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> </div>\n-<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> </div>\n-<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k, <span class=\"keyword\">typename</span> R></div>\n-<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01619.html\"> 176</a></span> <span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01619.html\">HierarchicalLagrangeNode</a> :</div>\n-<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01711.html\">LeafBasisNode</a></div>\n-<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> {</div>\n-<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dim = GV::dimension;</div>\n-<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> </div>\n-<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> <span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> </div>\n-<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01619.html#afdc851f725a0f40988027cba8b6561a4\"> 183</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01619.html#afdc851f725a0f40988027cba8b6561a4\">size_type</a> = std::size_t;</div>\n-<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01619.html#afed3c768fa72c180b449d32bc260819f\"> 184</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01619.html#afed3c768fa72c180b449d32bc260819f\">Element</a> = <span class=\"keyword\">typename</span> GV::template Codim<0>::Entity;</div>\n-<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01619.html#a0ce225864d404af00b4777d223873586\"> 185</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01619.html#a0ce225864d404af00b4777d223873586\">FiniteElement</a> = HierarchicalP2LocalFiniteElement<typename GV::ctype,R,dim>;</div>\n-<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> </div>\n-<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01619.html#adf049a268a2918ecbe783de6eb522cf2\"> 187</a></span> <a class=\"code hl_function\" href=\"a01619.html#adf049a268a2918ecbe783de6eb522cf2\">HierarchicalLagrangeNode</a>() :</div>\n-<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> <a class=\"code hl_variable\" href=\"a01619.html#ac8f37af45ccae7918a6b4a969de03bcd\">finiteElement_</a>(),</div>\n-<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> <a class=\"code hl_variable\" href=\"a01619.html#ab29a1c753d80b9e469a15d7444a2ae44\">element_</a>(nullptr)</div>\n-<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span> {}</div>\n-<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> </div>\n-<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01619.html#a3999406fb8956a1608e2cb92e8ad54b2\"> 193</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01619.html#afed3c768fa72c180b449d32bc260819f\">Element</a>& <a class=\"code hl_function\" href=\"a01619.html#a3999406fb8956a1608e2cb92e8ad54b2\">element</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> <span class=\"keywordflow\">return</span> *<a class=\"code hl_variable\" href=\"a01619.html#ab29a1c753d80b9e469a15d7444a2ae44\">element_</a>;</div>\n-<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> }</div>\n-<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> </div>\n-<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01619.html#a753c22a75924be3faa2d64f6da96ab7b\"> 202</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01619.html#a0ce225864d404af00b4777d223873586\">FiniteElement</a>& <a class=\"code hl_function\" href=\"a01619.html#a753c22a75924be3faa2d64f6da96ab7b\">finiteElement</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01619.html#ac8f37af45ccae7918a6b4a969de03bcd\">finiteElement_</a>;</div>\n-<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span> }</div>\n+<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k></div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html\"> 151</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01471.html\">BrezziDouglasMariniPreBasis</a></div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span>{</div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dim = GV::dimension;</div>\n+<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> <span class=\"keyword\">using </span>FiniteElementMap = <span class=\"keyword\">typename</span> Impl::BDMLocalFiniteElementMap<GV, dim, double, k>;</div>\n+<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> </div>\n+<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> </div>\n+<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#a73e7fec0c1f6f0c0316bbfceec2c4a00\"> 159</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01471.html#a73e7fec0c1f6f0c0316bbfceec2c4a00\">GridView</a> = GV;</div>\n+<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#a102944d1f32c8b29c6c297f252c7c1f1\"> 160</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01471.html#a102944d1f32c8b29c6c297f252c7c1f1\">size_type</a> = std::size_t;</div>\n+<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> </div>\n+<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#a1de420ec52e71db3023fcfc505f06d07\"> 162</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01467.html\">Node</a> = <a class=\"code hl_class\" href=\"a01467.html\">BrezziDouglasMariniNode<GV, k></a>;</div>\n+<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> </div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#a602c67342e0fbd8820ac3b07727e7a2b\"> 164</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01471.html#a102944d1f32c8b29c6c297f252c7c1f1\">size_type</a> <a class=\"code hl_variable\" href=\"a01471.html#a602c67342e0fbd8820ac3b07727e7a2b\">maxMultiIndexSize</a> = 1;</div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#a5c9a1db7d0b9553e9a5ae8cad57fe4fa\"> 165</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01471.html#a102944d1f32c8b29c6c297f252c7c1f1\">size_type</a> <a class=\"code hl_variable\" href=\"a01471.html#a5c9a1db7d0b9553e9a5ae8cad57fe4fa\">minMultiIndexSize</a> = 1;</div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#adc251df663d009c59b79a4ea89e77ab7\"> 166</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01471.html#a102944d1f32c8b29c6c297f252c7c1f1\">size_type</a> <a class=\"code hl_variable\" href=\"a01471.html#adc251df663d009c59b79a4ea89e77ab7\">multiIndexBufferSize</a> = 1;</div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> </div>\n+<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#a8a676a86dd435bea14de3bc28fd05cd2\"> 169</a></span> <a class=\"code hl_function\" href=\"a01471.html#a8a676a86dd435bea14de3bc28fd05cd2\">BrezziDouglasMariniPreBasis</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01471.html#a73e7fec0c1f6f0c0316bbfceec2c4a00\">GridView</a>& gv) :</div>\n+<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> <a class=\"code hl_variable\" href=\"a01471.html#af43ee62056d6da93f39b88c2a834b38b\">gridView_</a>(gv),</div>\n+<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> <a class=\"code hl_variable\" href=\"a01471.html#aac5619ab7c2f133c3cb1532ccab671ef\">finiteElementMap_</a>(gv)</div>\n+<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> {</div>\n+<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> <span class=\"comment\">// There is no inherent reason why the basis shouldn't work for grids with more than one</span></div>\n+<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> <span class=\"comment\">// element types. Somebody simply has to sit down and implement the missing bits.</span></div>\n+<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> <span class=\"keywordflow\">if</span> (gv.indexSet().types(0).size() > 1)</div>\n+<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"Brezzi-Douglas-Marini basis is only implemented for grids with a single element type"</span>);</div>\n+<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> }</div>\n+<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> </div>\n+<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#ab5cfa8d3d09efabba16bacfe00ec8395\"> 179</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01471.html#ab5cfa8d3d09efabba16bacfe00ec8395\">initializeIndices</a>()</div>\n+<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> {</div>\n+<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> <a class=\"code hl_variable\" href=\"a01471.html#a652912b1867705a80ee3d8562b916939\">codimOffset_</a>[0] = 0;</div>\n+<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> <a class=\"code hl_variable\" href=\"a01471.html#a652912b1867705a80ee3d8562b916939\">codimOffset_</a>[1] = <a class=\"code hl_variable\" href=\"a01471.html#a652912b1867705a80ee3d8562b916939\">codimOffset_</a>[0] + <a class=\"code hl_variable\" href=\"a01471.html#a1993f6e6d5fe6a4c00774c5065036a75\">dofsPerCodim_</a>[0] * <a class=\"code hl_variable\" href=\"a01471.html#af43ee62056d6da93f39b88c2a834b38b\">gridView_</a>.size(0);</div>\n+<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span> <span class=\"comment\">//if (dim==3) codimOffset_[2] = codimOffset_[1] + dofsPerCodim[1] * gridView_.size(1);</span></div>\n+<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span> }</div>\n+<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> </div>\n+<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#acaba7d4affc7e11e63d12ca6d289dad1\"> 188</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01471.html#a73e7fec0c1f6f0c0316bbfceec2c4a00\">GridView</a>& <a class=\"code hl_function\" href=\"a01471.html#acaba7d4affc7e11e63d12ca6d289dad1\">gridView</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01471.html#af43ee62056d6da93f39b88c2a834b38b\">gridView_</a>;</div>\n+<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> }</div>\n+<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> </div>\n+<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> <span class=\"comment\">/* \\brief Update the stored grid view, to be called if the grid has changed */</span></div>\n+<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#aaf7c89c03020de08177fc5763172fe4e\"> 194</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01471.html#aaf7c89c03020de08177fc5763172fe4e\">update</a> (<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01471.html#a73e7fec0c1f6f0c0316bbfceec2c4a00\">GridView</a>& gv)</div>\n+<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> {</div>\n+<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> <a class=\"code hl_variable\" href=\"a01471.html#af43ee62056d6da93f39b88c2a834b38b\">gridView_</a> = gv;</div>\n+<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> }</div>\n+<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> </div>\n+<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#a71dfd3bb1f044e63beb091078958ec09\"> 202</a></span> <a class=\"code hl_class\" href=\"a01467.html\">Node</a> <a class=\"code hl_function\" href=\"a01471.html#a71dfd3bb1f044e63beb091078958ec09\">makeNode</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01467.html\">Node</a>{&<a class=\"code hl_variable\" href=\"a01471.html#aac5619ab7c2f133c3cb1532ccab671ef\">finiteElementMap_</a>};</div>\n+<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span> }</div>\n <div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> </div>\n-<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01619.html#a727e4f300ad8002fbe281c8a64b8c3ab\"> 208</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01619.html#a727e4f300ad8002fbe281c8a64b8c3ab\">bind</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01619.html#afed3c768fa72c180b449d32bc260819f\">Element</a>& e)</div>\n-<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> {</div>\n-<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> <a class=\"code hl_variable\" href=\"a01619.html#ab29a1c753d80b9e469a15d7444a2ae44\">element_</a> = &e;</div>\n+<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#ad52ffa5d76a4293f6570f523590c7776\"> 207</a></span> <a class=\"code hl_typedef\" href=\"a01471.html#a102944d1f32c8b29c6c297f252c7c1f1\">size_type</a> <a class=\"code hl_function\" href=\"a01471.html#ad52ffa5d76a4293f6570f523590c7776\">size</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01471.html#a1993f6e6d5fe6a4c00774c5065036a75\">dofsPerCodim_</a>[0] * <a class=\"code hl_variable\" href=\"a01471.html#af43ee62056d6da93f39b88c2a834b38b\">gridView_</a>.size(0) + <a class=\"code hl_variable\" href=\"a01471.html#a1993f6e6d5fe6a4c00774c5065036a75\">dofsPerCodim_</a>[1] * <a class=\"code hl_variable\" href=\"a01471.html#af43ee62056d6da93f39b88c2a834b38b\">gridView_</a>.size(1); <span class=\"comment\">// only 2d</span></div>\n+<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> }</div>\n <div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> </div>\n-<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"> 212</span> <span class=\"keywordflow\">if</span> (e.type() != <a class=\"code hl_variable\" href=\"a01619.html#ac8f37af45ccae7918a6b4a969de03bcd\">finiteElement_</a>.type())</div>\n-<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span> DUNE_THROW(Dune::Exception,</div>\n-<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> <span class=\"stringliteral\">"HierarchicalLagrange-elements do not exist for elements of type "</span> << e.type());</div>\n-<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> </div>\n-<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span> this-><a class=\"code hl_function\" href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\">setSize</a>(<a class=\"code hl_variable\" href=\"a01619.html#ac8f37af45ccae7918a6b4a969de03bcd\">finiteElement_</a>.size());</div>\n-<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> }</div>\n-<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> </div>\n-<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> <span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span> </div>\n-<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01619.html#ad790d69fbc395f76cbe10d2beb6718a8\"> 221</a></span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_function\" href=\"a01619.html#ad790d69fbc395f76cbe10d2beb6718a8\">order</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> <span class=\"keywordflow\">return</span> 2;</div>\n-<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> }</div>\n+<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n+<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#a6c46d94ec8cf7cc85af4e5f8ec60f60a\"> 214</a></span> <a class=\"code hl_typedef\" href=\"a01471.html#a102944d1f32c8b29c6c297f252c7c1f1\">size_type</a> <a class=\"code hl_function\" href=\"a01471.html#a6c46d94ec8cf7cc85af4e5f8ec60f60a\">size</a>(<span class=\"keyword\">const</span> SizePrefix prefix)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span> assert(prefix.size() == 0 || prefix.size() == 1);</div>\n+<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> <span class=\"keywordflow\">return</span> (prefix.size() == 0) ? <a class=\"code hl_function\" href=\"a01471.html#ad52ffa5d76a4293f6570f523590c7776\">size</a>() : 0;</div>\n+<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> }</div>\n+<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> </div>\n+<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#a3ff046bf8b883ccdf97ea293eae3dba0\"> 221</a></span> <a class=\"code hl_typedef\" href=\"a01471.html#a102944d1f32c8b29c6c297f252c7c1f1\">size_type</a> <a class=\"code hl_function\" href=\"a01471.html#a3ff046bf8b883ccdf97ea293eae3dba0\">dimension</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01471.html#ad52ffa5d76a4293f6570f523590c7776\">size</a>();</div>\n+<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> }</div>\n <div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span> </div>\n-<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01619.html#ac8f37af45ccae7918a6b4a969de03bcd\"> 226</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01619.html#a0ce225864d404af00b4777d223873586\">FiniteElement</a> <a class=\"code hl_variable\" href=\"a01619.html#ac8f37af45ccae7918a6b4a969de03bcd\">finiteElement_</a>;</div>\n-<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01619.html#ab29a1c753d80b9e469a15d7444a2ae44\"> 227</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01619.html#afed3c768fa72c180b449d32bc260819f\">Element</a>* <a class=\"code hl_variable\" href=\"a01619.html#ab29a1c753d80b9e469a15d7444a2ae44\">element_</a>;</div>\n-<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> };</div>\n-<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> </div>\n-<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span> </div>\n-<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span> </div>\n-<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> <span class=\"keyword\">namespace </span>BasisFactory {</div>\n-<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> </div>\n-<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span> <span class=\"keyword\">template</span><std::<span class=\"keywordtype\">size_t</span> k, <span class=\"keyword\">typename</span> R=<span class=\"keywordtype\">double</span>></div>\n-<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#gae1668779c06b647fd909294cbedf28cf\"> 243</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00213.html#gae1668779c06b647fd909294cbedf28cf\">hierarchicalLagrange</a>()</div>\n-<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> {</div>\n-<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> <span class=\"keywordflow\">return</span> [](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridView) {</div>\n-<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01623.html\">HierarchicalLagrangePreBasis</a><std::decay_t<<span class=\"keyword\">decltype</span>(gridView)>, k, R>(gridView);</div>\n-<div class=\"line\"><a id=\"l00247\" name=\"l00247\"></a><span class=\"lineno\"> 247</span> };</div>\n-<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"> 248</span> }</div>\n+<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#aef13302e7f426077b56121d29c1af505\"> 226</a></span> <a class=\"code hl_typedef\" href=\"a01471.html#a102944d1f32c8b29c6c297f252c7c1f1\">size_type</a> <a class=\"code hl_function\" href=\"a01471.html#aef13302e7f426077b56121d29c1af505\">maxNodeSize</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> <span class=\"comment\">// The implementation currently only supports grids with a single element type.</span></div>\n+<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> <span class=\"comment\">// We can therefore return the actual number of dofs here.</span></div>\n+<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span> GeometryType elementType = *(<a class=\"code hl_variable\" href=\"a01471.html#af43ee62056d6da93f39b88c2a834b38b\">gridView_</a>.indexSet().types(0).begin());</div>\n+<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span> <span class=\"keywordtype\">size_t</span> numFaces = ReferenceElements<double,dim>::general(elementType).size(1);</div>\n+<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01471.html#a1993f6e6d5fe6a4c00774c5065036a75\">dofsPerCodim_</a>[0] + <a class=\"code hl_variable\" href=\"a01471.html#a1993f6e6d5fe6a4c00774c5065036a75\">dofsPerCodim_</a>[1] * numFaces;</div>\n+<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> }</div>\n+<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> </div>\n+<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"> 240</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n+<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#afae24105eb45c9cd8753ab732447269f\"> 241</a></span> It <a class=\"code hl_function\" href=\"a01471.html#afae24105eb45c9cd8753ab732447269f\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01467.html\">Node</a>& node, It it)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridIndexSet = <a class=\"code hl_function\" href=\"a01471.html#acaba7d4affc7e11e63d12ca6d289dad1\">gridView</a>().indexSet();</div>\n+<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& element = node.<a class=\"code hl_function\" href=\"a01467.html#ae8e23a4ee0a66bea03e2189c42569638\">element</a>();</div>\n+<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> </div>\n+<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span> <span class=\"comment\">// throw if element is not of predefined type</span></div>\n+<div class=\"line\"><a id=\"l00247\" name=\"l00247\"></a><span class=\"lineno\"> 247</span> <span class=\"keywordflow\">if</span> (not(element.type().isCube()) and not(element.type().isSimplex()))</div>\n+<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"> 248</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"BrezziDouglasMariniBasis only implemented for cube and simplex elements."</span>);</div>\n <div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span> </div>\n-<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span> } <span class=\"comment\">// end namespace BasisFactory</span></div>\n-<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span> </div>\n-<div class=\"line\"><a id=\"l00262\" name=\"l00262\"></a><span class=\"lineno\"> 262</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k, <span class=\"keyword\">typename</span> R=<span class=\"keywordtype\">double</span>></div>\n-<div class=\"line\"><a id=\"l00263\" name=\"l00263\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#gab0bae3d4d425eb9a32bd97c797af7350\"> 263</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01555.html\">HierarchicalLagrangeBasis</a> = <a class=\"code hl_class\" href=\"a01555.html\">DefaultGlobalBasis<HierarchicalLagrangePreBasis<GV, k, R></a> >;</div>\n+<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span> <span class=\"keywordflow\">for</span>(std::size_t i=0, end=node.<a class=\"code hl_function\" href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">size</a>(); i<end; ++i, ++it)</div>\n+<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span> {</div>\n+<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span> Dune::LocalKey localKey = node.<a class=\"code hl_function\" href=\"a01467.html#a058497cca9f58ef4c540569c10e21922\">finiteElement</a>().localCoefficients().localKey(i);</div>\n+<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"> 253</span> </div>\n+<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"> 254</span> <span class=\"comment\">// The dimension of the entity that the current dof is related to</span></div>\n+<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span> <span class=\"keywordtype\">size_t</span> subentity = localKey.subEntity();</div>\n+<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"> 256</span> <span class=\"keywordtype\">size_t</span> codim = localKey.codim();</div>\n+<div class=\"line\"><a id=\"l00257\" name=\"l00257\"></a><span class=\"lineno\"> 257</span> </div>\n+<div class=\"line\"><a id=\"l00258\" name=\"l00258\"></a><span class=\"lineno\"> 258</span> *it = { <a class=\"code hl_variable\" href=\"a01471.html#a652912b1867705a80ee3d8562b916939\">codimOffset_</a>[codim] +</div>\n+<div class=\"line\"><a id=\"l00259\" name=\"l00259\"></a><span class=\"lineno\"> 259</span> <a class=\"code hl_variable\" href=\"a01471.html#a1993f6e6d5fe6a4c00774c5065036a75\">dofsPerCodim_</a>[codim] * gridIndexSet.subIndex(element, subentity, codim) + localKey.index() };</div>\n+<div class=\"line\"><a id=\"l00260\" name=\"l00260\"></a><span class=\"lineno\"> 260</span> }</div>\n+<div class=\"line\"><a id=\"l00261\" name=\"l00261\"></a><span class=\"lineno\"> 261</span> </div>\n+<div class=\"line\"><a id=\"l00262\" name=\"l00262\"></a><span class=\"lineno\"> 262</span> <span class=\"keywordflow\">return</span> it;</div>\n+<div class=\"line\"><a id=\"l00263\" name=\"l00263\"></a><span class=\"lineno\"> 263</span> }</div>\n <div class=\"line\"><a id=\"l00264\" name=\"l00264\"></a><span class=\"lineno\"> 264</span> </div>\n-<div class=\"line\"><a id=\"l00265\" name=\"l00265\"></a><span class=\"lineno\"> 265</span> } <span class=\"comment\">// end namespace Functions</span></div>\n-<div class=\"line\"><a id=\"l00266\" name=\"l00266\"></a><span class=\"lineno\"> 266</span>} <span class=\"comment\">// end namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00267\" name=\"l00267\"></a><span class=\"lineno\"> 267</span> </div>\n-<div class=\"line\"><a id=\"l00268\" name=\"l00268\"></a><span class=\"lineno\"> 268</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH</span></div>\n-<div class=\"ttc\" id=\"aa00119_html\"><div class=\"ttname\"><a href=\"a00119.html\">defaultglobalbasis.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00191_html\"><div class=\"ttname\"><a href=\"a00191.html\">nodes.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00213_html_gae1668779c06b647fd909294cbedf28cf\"><div class=\"ttname\"><a href=\"a00213.html#gae1668779c06b647fd909294cbedf28cf\">Dune::Functions::BasisFactory::hierarchicalLagrange</a></div><div class=\"ttdeci\">auto hierarchicalLagrange()</div><div class=\"ttdoc\">Create a pre-basis factory that can create a HierarchicalLagrange pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:243</div></div>\n+<div class=\"line\"><a id=\"l00265\" name=\"l00265\"></a><span class=\"lineno\"> 265</span><span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00266\" name=\"l00266\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#af43ee62056d6da93f39b88c2a834b38b\"> 266</a></span> <a class=\"code hl_typedef\" href=\"a01471.html#a73e7fec0c1f6f0c0316bbfceec2c4a00\">GridView</a> <a class=\"code hl_variable\" href=\"a01471.html#af43ee62056d6da93f39b88c2a834b38b\">gridView_</a>;</div>\n+<div class=\"line\"><a id=\"l00267\" name=\"l00267\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#a652912b1867705a80ee3d8562b916939\"> 267</a></span> std::array<size_t,dim+1> <a class=\"code hl_variable\" href=\"a01471.html#a652912b1867705a80ee3d8562b916939\">codimOffset_</a>;</div>\n+<div class=\"line\"><a id=\"l00268\" name=\"l00268\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#aac5619ab7c2f133c3cb1532ccab671ef\"> 268</a></span> FiniteElementMap <a class=\"code hl_variable\" href=\"a01471.html#aac5619ab7c2f133c3cb1532ccab671ef\">finiteElementMap_</a>;</div>\n+<div class=\"line\"><a id=\"l00269\" name=\"l00269\"></a><span class=\"lineno\"> 269</span> <span class=\"comment\">// Number of dofs per entity type depending on the entity's codimension and type</span></div>\n+<div class=\"line\"><a id=\"l00270\" name=\"l00270\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#a1993f6e6d5fe6a4c00774c5065036a75\"> 270</a></span> std::array<int,2> <a class=\"code hl_variable\" href=\"a01471.html#a1993f6e6d5fe6a4c00774c5065036a75\">dofsPerCodim_</a> {{dim*(k-1)*3, dim+(k-1)}};</div>\n+<div class=\"line\"><a id=\"l00271\" name=\"l00271\"></a><span class=\"lineno\"> 271</span>};</div>\n+<div class=\"line\"><a id=\"l00272\" name=\"l00272\"></a><span class=\"lineno\"> 272</span> </div>\n+<div class=\"line\"><a id=\"l00273\" name=\"l00273\"></a><span class=\"lineno\"> 273</span> </div>\n+<div class=\"line\"><a id=\"l00274\" name=\"l00274\"></a><span class=\"lineno\"> 274</span> </div>\n+<div class=\"line\"><a id=\"l00275\" name=\"l00275\"></a><span class=\"lineno\"> 275</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k></div>\n+<div class=\"line\"><a id=\"l00276\" name=\"l00276\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01467.html\"> 276</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01467.html\">BrezziDouglasMariniNode</a> :</div>\n+<div class=\"line\"><a id=\"l00277\" name=\"l00277\"></a><span class=\"lineno\"> 277</span> <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01711.html\">LeafBasisNode</a></div>\n+<div class=\"line\"><a id=\"l00278\" name=\"l00278\"></a><span class=\"lineno\"> 278</span>{</div>\n+<div class=\"line\"><a id=\"l00279\" name=\"l00279\"></a><span class=\"lineno\"> 279</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dim = GV::dimension;</div>\n+<div class=\"line\"><a id=\"l00280\" name=\"l00280\"></a><span class=\"lineno\"> 280</span> </div>\n+<div class=\"line\"><a id=\"l00281\" name=\"l00281\"></a><span class=\"lineno\"> 281</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00282\" name=\"l00282\"></a><span class=\"lineno\"> 282</span> </div>\n+<div class=\"line\"><a id=\"l00283\" name=\"l00283\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01467.html#a49e7d0a643c96351a14b0ddecc3af110\"> 283</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01467.html#a49e7d0a643c96351a14b0ddecc3af110\">size_type</a> = std::size_t;</div>\n+<div class=\"line\"><a id=\"l00284\" name=\"l00284\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01467.html#a2fc6b972db6957aebcc56f216484ec86\"> 284</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01467.html#a2fc6b972db6957aebcc56f216484ec86\">Element</a> = <span class=\"keyword\">typename</span> GV::template Codim<0>::Entity;</div>\n+<div class=\"line\"><a id=\"l00285\" name=\"l00285\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01467.html#a77a908078a6fa30703e91f98696989a1\"> 285</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01467.html#a77a908078a6fa30703e91f98696989a1\">FiniteElementMap</a> = <span class=\"keyword\">typename</span> Impl::BDMLocalFiniteElementMap<GV, dim, double, k>;</div>\n+<div class=\"line\"><a id=\"l00286\" name=\"l00286\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01467.html#ad9a8a43ec0f0a4fde1ee3938c486e075\"> 286</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01467.html#ad9a8a43ec0f0a4fde1ee3938c486e075\">FiniteElement</a> = Impl::GlobalValuedLocalFiniteElement<Impl::ContravariantPiolaTransformator,</div>\n+<div class=\"line\"><a id=\"l00287\" name=\"l00287\"></a><span class=\"lineno\"> 287</span> <span class=\"keyword\">typename</span> FiniteElementMap::FiniteElement,</div>\n+<div class=\"line\"><a id=\"l00288\" name=\"l00288\"></a><span class=\"lineno\"> 288</span> <a class=\"code hl_typedef\" href=\"a01467.html#a2fc6b972db6957aebcc56f216484ec86\">Element</a>>;</div>\n+<div class=\"line\"><a id=\"l00289\" name=\"l00289\"></a><span class=\"lineno\"> 289</span> </div>\n+<div class=\"line\"><a id=\"l00290\" name=\"l00290\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01467.html#ae2c0512c6dc67e01c8d35fa326a76c71\"> 290</a></span> <a class=\"code hl_function\" href=\"a01467.html#ae2c0512c6dc67e01c8d35fa326a76c71\">BrezziDouglasMariniNode</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01467.html#a77a908078a6fa30703e91f98696989a1\">FiniteElementMap</a>* finiteElementMap) :</div>\n+<div class=\"line\"><a id=\"l00291\" name=\"l00291\"></a><span class=\"lineno\"> 291</span> <a class=\"code hl_variable\" href=\"a01467.html#ab6684e2a641164b8affc1aa6f09b56be\">element_</a>(nullptr),</div>\n+<div class=\"line\"><a id=\"l00292\" name=\"l00292\"></a><span class=\"lineno\"> 292</span> <a class=\"code hl_variable\" href=\"a01467.html#a4640aa80acd2da83ba654b01f4b8fbda\">finiteElementMap_</a>(finiteElementMap)</div>\n+<div class=\"line\"><a id=\"l00293\" name=\"l00293\"></a><span class=\"lineno\"> 293</span> {}</div>\n+<div class=\"line\"><a id=\"l00294\" name=\"l00294\"></a><span class=\"lineno\"> 294</span> </div>\n+<div class=\"line\"><a id=\"l00296\" name=\"l00296\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01467.html#ae8e23a4ee0a66bea03e2189c42569638\"> 296</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01467.html#a2fc6b972db6957aebcc56f216484ec86\">Element</a>& <a class=\"code hl_function\" href=\"a01467.html#ae8e23a4ee0a66bea03e2189c42569638\">element</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00297\" name=\"l00297\"></a><span class=\"lineno\"> 297</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00298\" name=\"l00298\"></a><span class=\"lineno\"> 298</span> <span class=\"keywordflow\">return</span> *<a class=\"code hl_variable\" href=\"a01467.html#ab6684e2a641164b8affc1aa6f09b56be\">element_</a>;</div>\n+<div class=\"line\"><a id=\"l00299\" name=\"l00299\"></a><span class=\"lineno\"> 299</span> }</div>\n+<div class=\"line\"><a id=\"l00300\" name=\"l00300\"></a><span class=\"lineno\"> 300</span> </div>\n+<div class=\"line\"><a id=\"l00305\" name=\"l00305\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01467.html#a058497cca9f58ef4c540569c10e21922\"> 305</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01467.html#ad9a8a43ec0f0a4fde1ee3938c486e075\">FiniteElement</a>& <a class=\"code hl_function\" href=\"a01467.html#a058497cca9f58ef4c540569c10e21922\">finiteElement</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00306\" name=\"l00306\"></a><span class=\"lineno\"> 306</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00307\" name=\"l00307\"></a><span class=\"lineno\"> 307</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01467.html#a5fb9707fc06bc48d07fd41f6c064fb3d\">finiteElement_</a>;</div>\n+<div class=\"line\"><a id=\"l00308\" name=\"l00308\"></a><span class=\"lineno\"> 308</span> }</div>\n+<div class=\"line\"><a id=\"l00309\" name=\"l00309\"></a><span class=\"lineno\"> 309</span> </div>\n+<div class=\"line\"><a id=\"l00311\" name=\"l00311\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01467.html#adc25f4eeeecf7b88dab88eafc0837ae5\"> 311</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01467.html#adc25f4eeeecf7b88dab88eafc0837ae5\">bind</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01467.html#a2fc6b972db6957aebcc56f216484ec86\">Element</a>& e)</div>\n+<div class=\"line\"><a id=\"l00312\" name=\"l00312\"></a><span class=\"lineno\"> 312</span> {</div>\n+<div class=\"line\"><a id=\"l00313\" name=\"l00313\"></a><span class=\"lineno\"> 313</span> <a class=\"code hl_variable\" href=\"a01467.html#ab6684e2a641164b8affc1aa6f09b56be\">element_</a> = &e;</div>\n+<div class=\"line\"><a id=\"l00314\" name=\"l00314\"></a><span class=\"lineno\"> 314</span> <a class=\"code hl_variable\" href=\"a01467.html#a5fb9707fc06bc48d07fd41f6c064fb3d\">finiteElement_</a>.bind((<a class=\"code hl_variable\" href=\"a01467.html#a4640aa80acd2da83ba654b01f4b8fbda\">finiteElementMap_</a>->find(*<a class=\"code hl_variable\" href=\"a01467.html#ab6684e2a641164b8affc1aa6f09b56be\">element_</a>)), e);</div>\n+<div class=\"line\"><a id=\"l00315\" name=\"l00315\"></a><span class=\"lineno\"> 315</span> this-><a class=\"code hl_function\" href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\">setSize</a>(<a class=\"code hl_variable\" href=\"a01467.html#a5fb9707fc06bc48d07fd41f6c064fb3d\">finiteElement_</a>.size());</div>\n+<div class=\"line\"><a id=\"l00316\" name=\"l00316\"></a><span class=\"lineno\"> 316</span> }</div>\n+<div class=\"line\"><a id=\"l00317\" name=\"l00317\"></a><span class=\"lineno\"> 317</span> </div>\n+<div class=\"line\"><a id=\"l00318\" name=\"l00318\"></a><span class=\"lineno\"> 318</span><span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00319\" name=\"l00319\"></a><span class=\"lineno\"> 319</span> </div>\n+<div class=\"line\"><a id=\"l00320\" name=\"l00320\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01467.html#a5fb9707fc06bc48d07fd41f6c064fb3d\"> 320</a></span> <a class=\"code hl_typedef\" href=\"a01467.html#ad9a8a43ec0f0a4fde1ee3938c486e075\">FiniteElement</a> <a class=\"code hl_variable\" href=\"a01467.html#a5fb9707fc06bc48d07fd41f6c064fb3d\">finiteElement_</a>;</div>\n+<div class=\"line\"><a id=\"l00321\" name=\"l00321\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01467.html#ab6684e2a641164b8affc1aa6f09b56be\"> 321</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01467.html#a2fc6b972db6957aebcc56f216484ec86\">Element</a>* <a class=\"code hl_variable\" href=\"a01467.html#ab6684e2a641164b8affc1aa6f09b56be\">element_</a>;</div>\n+<div class=\"line\"><a id=\"l00322\" name=\"l00322\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01467.html#a4640aa80acd2da83ba654b01f4b8fbda\"> 322</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01467.html#a77a908078a6fa30703e91f98696989a1\">FiniteElementMap</a>* <a class=\"code hl_variable\" href=\"a01467.html#a4640aa80acd2da83ba654b01f4b8fbda\">finiteElementMap_</a>;</div>\n+<div class=\"line\"><a id=\"l00323\" name=\"l00323\"></a><span class=\"lineno\"> 323</span>};</div>\n+<div class=\"line\"><a id=\"l00324\" name=\"l00324\"></a><span class=\"lineno\"> 324</span> </div>\n+<div class=\"line\"><a id=\"l00325\" name=\"l00325\"></a><span class=\"lineno\"> 325</span> </div>\n+<div class=\"line\"><a id=\"l00326\" name=\"l00326\"></a><span class=\"lineno\"> 326</span> </div>\n+<div class=\"line\"><a id=\"l00327\" name=\"l00327\"></a><span class=\"lineno\"> 327</span><span class=\"keyword\">namespace </span>BasisFactory {</div>\n+<div class=\"line\"><a id=\"l00328\" name=\"l00328\"></a><span class=\"lineno\"> 328</span> </div>\n+<div class=\"line\"><a id=\"l00336\" name=\"l00336\"></a><span class=\"lineno\"> 336</span><span class=\"keyword\">template</span><std::<span class=\"keywordtype\">size_t</span> k></div>\n+<div class=\"line\"><a id=\"l00337\" name=\"l00337\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#ga72847f418332ba3d5444a7f153776610\"> 337</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00213.html#ga72847f418332ba3d5444a7f153776610\">brezziDouglasMarini</a>()</div>\n+<div class=\"line\"><a id=\"l00338\" name=\"l00338\"></a><span class=\"lineno\"> 338</span>{</div>\n+<div class=\"line\"><a id=\"l00339\" name=\"l00339\"></a><span class=\"lineno\"> 339</span> <span class=\"keywordflow\">return</span> [](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridView) {</div>\n+<div class=\"line\"><a id=\"l00340\" name=\"l00340\"></a><span class=\"lineno\"> 340</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01471.html\">BrezziDouglasMariniPreBasis</a><std::decay_t<<span class=\"keyword\">decltype</span>(gridView)>, k>(gridView);</div>\n+<div class=\"line\"><a id=\"l00341\" name=\"l00341\"></a><span class=\"lineno\"> 341</span> };</div>\n+<div class=\"line\"><a id=\"l00342\" name=\"l00342\"></a><span class=\"lineno\"> 342</span>}</div>\n+<div class=\"line\"><a id=\"l00343\" name=\"l00343\"></a><span class=\"lineno\"> 343</span> </div>\n+<div class=\"line\"><a id=\"l00344\" name=\"l00344\"></a><span class=\"lineno\"> 344</span>} <span class=\"comment\">// end namespace BasisFactory</span></div>\n+<div class=\"line\"><a id=\"l00345\" name=\"l00345\"></a><span class=\"lineno\"> 345</span> </div>\n+<div class=\"line\"><a id=\"l00346\" name=\"l00346\"></a><span class=\"lineno\"> 346</span> </div>\n+<div class=\"line\"><a id=\"l00347\" name=\"l00347\"></a><span class=\"lineno\"> 347</span> </div>\n+<div class=\"line\"><a id=\"l00348\" name=\"l00348\"></a><span class=\"lineno\"> 348</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00349\" name=\"l00349\"></a><span class=\"lineno\"> 349</span><span class=\"comment\">// This is the actual global basis implementation based on the reusable parts.</span></div>\n+<div class=\"line\"><a id=\"l00350\" name=\"l00350\"></a><span class=\"lineno\"> 350</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00351\" name=\"l00351\"></a><span class=\"lineno\"> 351</span> </div>\n+<div class=\"line\"><a id=\"l00359\" name=\"l00359\"></a><span class=\"lineno\"> 359</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k></div>\n+<div class=\"line\"><a id=\"l00360\" name=\"l00360\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a05987d1b6480619710c578ad80a243e5\"> 360</a></span><span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01555.html\">BrezziDouglasMariniBasis</a> = <a class=\"code hl_class\" href=\"a01555.html\">DefaultGlobalBasis<BrezziDouglasMariniPreBasis<GV, k></a> >;</div>\n+<div class=\"line\"><a id=\"l00361\" name=\"l00361\"></a><span class=\"lineno\"> 361</span> </div>\n+<div class=\"line\"><a id=\"l00362\" name=\"l00362\"></a><span class=\"lineno\"> 362</span>} <span class=\"comment\">// end namespace Functions</span></div>\n+<div class=\"line\"><a id=\"l00363\" name=\"l00363\"></a><span class=\"lineno\"> 363</span>} <span class=\"comment\">// end namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00364\" name=\"l00364\"></a><span class=\"lineno\"> 364</span> </div>\n+<div class=\"line\"><a id=\"l00365\" name=\"l00365\"></a><span class=\"lineno\"> 365</span> </div>\n+<div class=\"line\"><a id=\"l00366\" name=\"l00366\"></a><span class=\"lineno\"> 366</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH</span></div>\n+<div class=\"ttc\" id=\"aa00137_html\"><div class=\"ttname\"><a href=\"a00137.html\">globalvaluedlocalfiniteelement.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00152_html\"><div class=\"ttname\"><a href=\"a00152.html\">defaultglobalbasis.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00179_html\"><div class=\"ttname\"><a href=\"a00179.html\">nodes.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00213_html_ga72847f418332ba3d5444a7f153776610\"><div class=\"ttname\"><a href=\"a00213.html#ga72847f418332ba3d5444a7f153776610\">Dune::Functions::BasisFactory::brezziDouglasMarini</a></div><div class=\"ttdeci\">auto brezziDouglasMarini()</div><div class=\"ttdoc\">Create a pre-basis factory that can create a Brezzi-Douglas-Marini pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:337</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n+<div class=\"ttc\" id=\"aa01467_html\"><div class=\"ttname\"><a href=\"a01467.html\">Dune::Functions::BrezziDouglasMariniNode</a></div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:278</div></div>\n+<div class=\"ttc\" id=\"aa01467_html_a058497cca9f58ef4c540569c10e21922\"><div class=\"ttname\"><a href=\"a01467.html#a058497cca9f58ef4c540569c10e21922\">Dune::Functions::BrezziDouglasMariniNode::finiteElement</a></div><div class=\"ttdeci\">const FiniteElement & finiteElement() const</div><div class=\"ttdoc\">Return the LocalFiniteElement for the element we are bound to.</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:305</div></div>\n+<div class=\"ttc\" id=\"aa01467_html_a2fc6b972db6957aebcc56f216484ec86\"><div class=\"ttname\"><a href=\"a01467.html#a2fc6b972db6957aebcc56f216484ec86\">Dune::Functions::BrezziDouglasMariniNode::Element</a></div><div class=\"ttdeci\">typename GV::template Codim< 0 >::Entity Element</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:284</div></div>\n+<div class=\"ttc\" id=\"aa01467_html_a4640aa80acd2da83ba654b01f4b8fbda\"><div class=\"ttname\"><a href=\"a01467.html#a4640aa80acd2da83ba654b01f4b8fbda\">Dune::Functions::BrezziDouglasMariniNode::finiteElementMap_</a></div><div class=\"ttdeci\">const FiniteElementMap * finiteElementMap_</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:322</div></div>\n+<div class=\"ttc\" id=\"aa01467_html_a49e7d0a643c96351a14b0ddecc3af110\"><div class=\"ttname\"><a href=\"a01467.html#a49e7d0a643c96351a14b0ddecc3af110\">Dune::Functions::BrezziDouglasMariniNode::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:283</div></div>\n+<div class=\"ttc\" id=\"aa01467_html_a5fb9707fc06bc48d07fd41f6c064fb3d\"><div class=\"ttname\"><a href=\"a01467.html#a5fb9707fc06bc48d07fd41f6c064fb3d\">Dune::Functions::BrezziDouglasMariniNode::finiteElement_</a></div><div class=\"ttdeci\">FiniteElement finiteElement_</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:320</div></div>\n+<div class=\"ttc\" id=\"aa01467_html_a77a908078a6fa30703e91f98696989a1\"><div class=\"ttname\"><a href=\"a01467.html#a77a908078a6fa30703e91f98696989a1\">Dune::Functions::BrezziDouglasMariniNode::FiniteElementMap</a></div><div class=\"ttdeci\">typename Impl::BDMLocalFiniteElementMap< GV, dim, double, k > FiniteElementMap</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:285</div></div>\n+<div class=\"ttc\" id=\"aa01467_html_ab6684e2a641164b8affc1aa6f09b56be\"><div class=\"ttname\"><a href=\"a01467.html#ab6684e2a641164b8affc1aa6f09b56be\">Dune::Functions::BrezziDouglasMariniNode::element_</a></div><div class=\"ttdeci\">const Element * element_</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:321</div></div>\n+<div class=\"ttc\" id=\"aa01467_html_ad9a8a43ec0f0a4fde1ee3938c486e075\"><div class=\"ttname\"><a href=\"a01467.html#ad9a8a43ec0f0a4fde1ee3938c486e075\">Dune::Functions::BrezziDouglasMariniNode::FiniteElement</a></div><div class=\"ttdeci\">Impl::GlobalValuedLocalFiniteElement< Impl::ContravariantPiolaTransformator, typename FiniteElementMap::FiniteElement, Element > FiniteElement</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:288</div></div>\n+<div class=\"ttc\" id=\"aa01467_html_adc25f4eeeecf7b88dab88eafc0837ae5\"><div class=\"ttname\"><a href=\"a01467.html#adc25f4eeeecf7b88dab88eafc0837ae5\">Dune::Functions::BrezziDouglasMariniNode::bind</a></div><div class=\"ttdeci\">void bind(const Element &e)</div><div class=\"ttdoc\">Bind to element.</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:311</div></div>\n+<div class=\"ttc\" id=\"aa01467_html_ae2c0512c6dc67e01c8d35fa326a76c71\"><div class=\"ttname\"><a href=\"a01467.html#ae2c0512c6dc67e01c8d35fa326a76c71\">Dune::Functions::BrezziDouglasMariniNode::BrezziDouglasMariniNode</a></div><div class=\"ttdeci\">BrezziDouglasMariniNode(const FiniteElementMap *finiteElementMap)</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:290</div></div>\n+<div class=\"ttc\" id=\"aa01467_html_ae8e23a4ee0a66bea03e2189c42569638\"><div class=\"ttname\"><a href=\"a01467.html#ae8e23a4ee0a66bea03e2189c42569638\">Dune::Functions::BrezziDouglasMariniNode::element</a></div><div class=\"ttdeci\">const Element & element() const</div><div class=\"ttdoc\">Return current element, throw if unbound.</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:296</div></div>\n+<div class=\"ttc\" id=\"aa01471_html\"><div class=\"ttname\"><a href=\"a01471.html\">Dune::Functions::BrezziDouglasMariniPreBasis</a></div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:152</div></div>\n+<div class=\"ttc\" id=\"aa01471_html_a102944d1f32c8b29c6c297f252c7c1f1\"><div class=\"ttname\"><a href=\"a01471.html#a102944d1f32c8b29c6c297f252c7c1f1\">Dune::Functions::BrezziDouglasMariniPreBasis::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:160</div></div>\n+<div class=\"ttc\" id=\"aa01471_html_a1993f6e6d5fe6a4c00774c5065036a75\"><div class=\"ttname\"><a href=\"a01471.html#a1993f6e6d5fe6a4c00774c5065036a75\">Dune::Functions::BrezziDouglasMariniPreBasis::dofsPerCodim_</a></div><div class=\"ttdeci\">std::array< int, 2 > dofsPerCodim_</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:270</div></div>\n+<div class=\"ttc\" id=\"aa01471_html_a3ff046bf8b883ccdf97ea293eae3dba0\"><div class=\"ttname\"><a href=\"a01471.html#a3ff046bf8b883ccdf97ea293eae3dba0\">Dune::Functions::BrezziDouglasMariniPreBasis::dimension</a></div><div class=\"ttdeci\">size_type dimension() const</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:221</div></div>\n+<div class=\"ttc\" id=\"aa01471_html_a5c9a1db7d0b9553e9a5ae8cad57fe4fa\"><div class=\"ttname\"><a href=\"a01471.html#a5c9a1db7d0b9553e9a5ae8cad57fe4fa\">Dune::Functions::BrezziDouglasMariniPreBasis::minMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type minMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:165</div></div>\n+<div class=\"ttc\" id=\"aa01471_html_a602c67342e0fbd8820ac3b07727e7a2b\"><div class=\"ttname\"><a href=\"a01471.html#a602c67342e0fbd8820ac3b07727e7a2b\">Dune::Functions::BrezziDouglasMariniPreBasis::maxMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type maxMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:164</div></div>\n+<div class=\"ttc\" id=\"aa01471_html_a652912b1867705a80ee3d8562b916939\"><div class=\"ttname\"><a href=\"a01471.html#a652912b1867705a80ee3d8562b916939\">Dune::Functions::BrezziDouglasMariniPreBasis::codimOffset_</a></div><div class=\"ttdeci\">std::array< size_t, dim+1 > codimOffset_</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:267</div></div>\n+<div class=\"ttc\" id=\"aa01471_html_a6c46d94ec8cf7cc85af4e5f8ec60f60a\"><div class=\"ttname\"><a href=\"a01471.html#a6c46d94ec8cf7cc85af4e5f8ec60f60a\">Dune::Functions::BrezziDouglasMariniPreBasis::size</a></div><div class=\"ttdeci\">size_type size(const SizePrefix prefix) const</div><div class=\"ttdoc\">Return number possible values for next position in multi index.</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:214</div></div>\n+<div class=\"ttc\" id=\"aa01471_html_a71dfd3bb1f044e63beb091078958ec09\"><div class=\"ttname\"><a href=\"a01471.html#a71dfd3bb1f044e63beb091078958ec09\">Dune::Functions::BrezziDouglasMariniPreBasis::makeNode</a></div><div class=\"ttdeci\">Node makeNode() const</div><div class=\"ttdoc\">Create tree node.</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:202</div></div>\n+<div class=\"ttc\" id=\"aa01471_html_a73e7fec0c1f6f0c0316bbfceec2c4a00\"><div class=\"ttname\"><a href=\"a01471.html#a73e7fec0c1f6f0c0316bbfceec2c4a00\">Dune::Functions::BrezziDouglasMariniPreBasis::GridView</a></div><div class=\"ttdeci\">GV GridView</div><div class=\"ttdoc\">The grid view that the FE space is defined on.</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:159</div></div>\n+<div class=\"ttc\" id=\"aa01471_html_a8a676a86dd435bea14de3bc28fd05cd2\"><div class=\"ttname\"><a href=\"a01471.html#a8a676a86dd435bea14de3bc28fd05cd2\">Dune::Functions::BrezziDouglasMariniPreBasis::BrezziDouglasMariniPreBasis</a></div><div class=\"ttdeci\">BrezziDouglasMariniPreBasis(const GridView &gv)</div><div class=\"ttdoc\">Constructor for a given grid view object.</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:169</div></div>\n+<div class=\"ttc\" id=\"aa01471_html_aac5619ab7c2f133c3cb1532ccab671ef\"><div class=\"ttname\"><a href=\"a01471.html#aac5619ab7c2f133c3cb1532ccab671ef\">Dune::Functions::BrezziDouglasMariniPreBasis::finiteElementMap_</a></div><div class=\"ttdeci\">FiniteElementMap finiteElementMap_</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:268</div></div>\n+<div class=\"ttc\" id=\"aa01471_html_aaf7c89c03020de08177fc5763172fe4e\"><div class=\"ttname\"><a href=\"a01471.html#aaf7c89c03020de08177fc5763172fe4e\">Dune::Functions::BrezziDouglasMariniPreBasis::update</a></div><div class=\"ttdeci\">void update(const GridView &gv)</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:194</div></div>\n+<div class=\"ttc\" id=\"aa01471_html_ab5cfa8d3d09efabba16bacfe00ec8395\"><div class=\"ttname\"><a href=\"a01471.html#ab5cfa8d3d09efabba16bacfe00ec8395\">Dune::Functions::BrezziDouglasMariniPreBasis::initializeIndices</a></div><div class=\"ttdeci\">void initializeIndices()</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:179</div></div>\n+<div class=\"ttc\" id=\"aa01471_html_acaba7d4affc7e11e63d12ca6d289dad1\"><div class=\"ttname\"><a href=\"a01471.html#acaba7d4affc7e11e63d12ca6d289dad1\">Dune::Functions::BrezziDouglasMariniPreBasis::gridView</a></div><div class=\"ttdeci\">const GridView & gridView() const</div><div class=\"ttdoc\">Obtain the grid view that the basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:188</div></div>\n+<div class=\"ttc\" id=\"aa01471_html_ad52ffa5d76a4293f6570f523590c7776\"><div class=\"ttname\"><a href=\"a01471.html#ad52ffa5d76a4293f6570f523590c7776\">Dune::Functions::BrezziDouglasMariniPreBasis::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:207</div></div>\n+<div class=\"ttc\" id=\"aa01471_html_adc251df663d009c59b79a4ea89e77ab7\"><div class=\"ttname\"><a href=\"a01471.html#adc251df663d009c59b79a4ea89e77ab7\">Dune::Functions::BrezziDouglasMariniPreBasis::multiIndexBufferSize</a></div><div class=\"ttdeci\">static constexpr size_type multiIndexBufferSize</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:166</div></div>\n+<div class=\"ttc\" id=\"aa01471_html_aef13302e7f426077b56121d29c1af505\"><div class=\"ttname\"><a href=\"a01471.html#aef13302e7f426077b56121d29c1af505\">Dune::Functions::BrezziDouglasMariniPreBasis::maxNodeSize</a></div><div class=\"ttdeci\">size_type maxNodeSize() const</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:226</div></div>\n+<div class=\"ttc\" id=\"aa01471_html_af43ee62056d6da93f39b88c2a834b38b\"><div class=\"ttname\"><a href=\"a01471.html#af43ee62056d6da93f39b88c2a834b38b\">Dune::Functions::BrezziDouglasMariniPreBasis::gridView_</a></div><div class=\"ttdeci\">GridView gridView_</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:266</div></div>\n+<div class=\"ttc\" id=\"aa01471_html_afae24105eb45c9cd8753ab732447269f\"><div class=\"ttname\"><a href=\"a01471.html#afae24105eb45c9cd8753ab732447269f\">Dune::Functions::BrezziDouglasMariniPreBasis::indices</a></div><div class=\"ttdeci\">It indices(const Node &node, It it) const</div><div class=\"ttdoc\">Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:241</div></div>\n <div class=\"ttc\" id=\"aa01555_html\"><div class=\"ttname\"><a href=\"a01555.html\">Dune::Functions::DefaultGlobalBasis</a></div><div class=\"ttdoc\">Global basis for given pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:46</div></div>\n-<div class=\"ttc\" id=\"aa01619_html\"><div class=\"ttname\"><a href=\"a01619.html\">Dune::Functions::HierarchicalLagrangeNode</a></div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:178</div></div>\n-<div class=\"ttc\" id=\"aa01619_html_a0ce225864d404af00b4777d223873586\"><div class=\"ttname\"><a href=\"a01619.html#a0ce225864d404af00b4777d223873586\">Dune::Functions::HierarchicalLagrangeNode::FiniteElement</a></div><div class=\"ttdeci\">HierarchicalP2LocalFiniteElement< typename GV::ctype, R, dim > FiniteElement</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:185</div></div>\n-<div class=\"ttc\" id=\"aa01619_html_a3999406fb8956a1608e2cb92e8ad54b2\"><div class=\"ttname\"><a href=\"a01619.html#a3999406fb8956a1608e2cb92e8ad54b2\">Dune::Functions::HierarchicalLagrangeNode::element</a></div><div class=\"ttdeci\">const Element & element() const</div><div class=\"ttdoc\">Return current element, throw if unbound.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:193</div></div>\n-<div class=\"ttc\" id=\"aa01619_html_a727e4f300ad8002fbe281c8a64b8c3ab\"><div class=\"ttname\"><a href=\"a01619.html#a727e4f300ad8002fbe281c8a64b8c3ab\">Dune::Functions::HierarchicalLagrangeNode::bind</a></div><div class=\"ttdeci\">void bind(const Element &e)</div><div class=\"ttdoc\">Bind to element.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:208</div></div>\n-<div class=\"ttc\" id=\"aa01619_html_a753c22a75924be3faa2d64f6da96ab7b\"><div class=\"ttname\"><a href=\"a01619.html#a753c22a75924be3faa2d64f6da96ab7b\">Dune::Functions::HierarchicalLagrangeNode::finiteElement</a></div><div class=\"ttdeci\">const FiniteElement & finiteElement() const</div><div class=\"ttdoc\">Return the LocalFiniteElement for the element we are bound to.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:202</div></div>\n-<div class=\"ttc\" id=\"aa01619_html_ab29a1c753d80b9e469a15d7444a2ae44\"><div class=\"ttname\"><a href=\"a01619.html#ab29a1c753d80b9e469a15d7444a2ae44\">Dune::Functions::HierarchicalLagrangeNode::element_</a></div><div class=\"ttdeci\">const Element * element_</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:227</div></div>\n-<div class=\"ttc\" id=\"aa01619_html_ac8f37af45ccae7918a6b4a969de03bcd\"><div class=\"ttname\"><a href=\"a01619.html#ac8f37af45ccae7918a6b4a969de03bcd\">Dune::Functions::HierarchicalLagrangeNode::finiteElement_</a></div><div class=\"ttdeci\">const FiniteElement finiteElement_</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:226</div></div>\n-<div class=\"ttc\" id=\"aa01619_html_ad790d69fbc395f76cbe10d2beb6718a8\"><div class=\"ttname\"><a href=\"a01619.html#ad790d69fbc395f76cbe10d2beb6718a8\">Dune::Functions::HierarchicalLagrangeNode::order</a></div><div class=\"ttdeci\">unsigned int order() const</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:221</div></div>\n-<div class=\"ttc\" id=\"aa01619_html_adf049a268a2918ecbe783de6eb522cf2\"><div class=\"ttname\"><a href=\"a01619.html#adf049a268a2918ecbe783de6eb522cf2\">Dune::Functions::HierarchicalLagrangeNode::HierarchicalLagrangeNode</a></div><div class=\"ttdeci\">HierarchicalLagrangeNode()</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:187</div></div>\n-<div class=\"ttc\" id=\"aa01619_html_afdc851f725a0f40988027cba8b6561a4\"><div class=\"ttname\"><a href=\"a01619.html#afdc851f725a0f40988027cba8b6561a4\">Dune::Functions::HierarchicalLagrangeNode::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:183</div></div>\n-<div class=\"ttc\" id=\"aa01619_html_afed3c768fa72c180b449d32bc260819f\"><div class=\"ttname\"><a href=\"a01619.html#afed3c768fa72c180b449d32bc260819f\">Dune::Functions::HierarchicalLagrangeNode::Element</a></div><div class=\"ttdeci\">typename GV::template Codim< 0 >::Entity Element</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:184</div></div>\n-<div class=\"ttc\" id=\"aa01623_html\"><div class=\"ttname\"><a href=\"a01623.html\">Dune::Functions::HierarchicalLagrangePreBasis</a></div><div class=\"ttdoc\">A pre-basis for a hierarchical basis.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:49</div></div>\n-<div class=\"ttc\" id=\"aa01623_html_a06b5f579aec6e1058020aca7c20a4a5b\"><div class=\"ttname\"><a href=\"a01623.html#a06b5f579aec6e1058020aca7c20a4a5b\">Dune::Functions::HierarchicalLagrangePreBasis::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdoc\">Type used for indices and size information.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:58</div></div>\n-<div class=\"ttc\" id=\"aa01623_html_a1e86a08f7b85a90b8e7c34e07eaa1149\"><div class=\"ttname\"><a href=\"a01623.html#a1e86a08f7b85a90b8e7c34e07eaa1149\">Dune::Functions::HierarchicalLagrangePreBasis::order</a></div><div class=\"ttdeci\">unsigned int order() const</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:145</div></div>\n-<div class=\"ttc\" id=\"aa01623_html_a23698bafe0dfb6a28abd932345714465\"><div class=\"ttname\"><a href=\"a01623.html#a23698bafe0dfb6a28abd932345714465\">Dune::Functions::HierarchicalLagrangePreBasis::makeNode</a></div><div class=\"ttdeci\">Node makeNode() const</div><div class=\"ttdoc\">Create tree node.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:94</div></div>\n-<div class=\"ttc\" id=\"aa01623_html_a4a2ade989aac068fb72abe2dd50893cf\"><div class=\"ttname\"><a href=\"a01623.html#a4a2ade989aac068fb72abe2dd50893cf\">Dune::Functions::HierarchicalLagrangePreBasis::maxNodeSize</a></div><div class=\"ttdeci\">size_type maxNodeSize() const</div><div class=\"ttdoc\">Get the maximal number of DOFs associated to node for any element.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:123</div></div>\n-<div class=\"ttc\" id=\"aa01623_html_a5d4d6c9d4b3e41e2dca6a5b250bd942e\"><div class=\"ttname\"><a href=\"a01623.html#a5d4d6c9d4b3e41e2dca6a5b250bd942e\">Dune::Functions::HierarchicalLagrangePreBasis::multiIndexBufferSize</a></div><div class=\"ttdeci\">static constexpr size_type multiIndexBufferSize</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:65</div></div>\n-<div class=\"ttc\" id=\"aa01623_html_a741666d871c080d4cdb5097bd7286d26\"><div class=\"ttname\"><a href=\"a01623.html#a741666d871c080d4cdb5097bd7286d26\">Dune::Functions::HierarchicalLagrangePreBasis::update</a></div><div class=\"ttdeci\">void update(const GridView &gv)</div><div class=\"ttdoc\">Update the stored grid view & MultipleCodimMultipleGeomTypeMapper, to be called if the grid has chang...</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:85</div></div>\n-<div class=\"ttc\" id=\"aa01623_html_a7700943c6d6759638af3e5fcb7a63ce4\"><div class=\"ttname\"><a href=\"a01623.html#a7700943c6d6759638af3e5fcb7a63ce4\">Dune::Functions::HierarchicalLagrangePreBasis::mcmgMapper_</a></div><div class=\"ttdeci\">MultipleCodimMultipleGeomTypeMapper< GridView > mcmgMapper_</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:150</div></div>\n-<div class=\"ttc\" id=\"aa01623_html_a88651cce49d707a52792467116d66b59\"><div class=\"ttname\"><a href=\"a01623.html#a88651cce49d707a52792467116d66b59\">Dune::Functions::HierarchicalLagrangePreBasis::dimension</a></div><div class=\"ttdeci\">size_type dimension() const</div><div class=\"ttdoc\">Get the total dimension of the space spanned by this basis.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:114</div></div>\n-<div class=\"ttc\" id=\"aa01623_html_a8d29fa123c51e408af1e34dadf421658\"><div class=\"ttname\"><a href=\"a01623.html#a8d29fa123c51e408af1e34dadf421658\">Dune::Functions::HierarchicalLagrangePreBasis::GridView</a></div><div class=\"ttdeci\">GV GridView</div><div class=\"ttdoc\">The grid view that the FE basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:55</div></div>\n-<div class=\"ttc\" id=\"aa01623_html_a97079ff1b8a023dadf424efe80ff38af\"><div class=\"ttname\"><a href=\"a01623.html#a97079ff1b8a023dadf424efe80ff38af\">Dune::Functions::HierarchicalLagrangePreBasis::HierarchicalLagrangePreBasis</a></div><div class=\"ttdeci\">HierarchicalLagrangePreBasis(const GridView &gv)</div><div class=\"ttdoc\">Constructor for a given grid view object with layout for second order.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:71</div></div>\n-<div class=\"ttc\" id=\"aa01623_html_ab05fa83b28393a642a783886d3cfb389\"><div class=\"ttname\"><a href=\"a01623.html#ab05fa83b28393a642a783886d3cfb389\">Dune::Functions::HierarchicalLagrangePreBasis::maxMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type maxMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:63</div></div>\n-<div class=\"ttc\" id=\"aa01623_html_ab2091a6b22e8e543b8c1f13e9e5b5397\"><div class=\"ttname\"><a href=\"a01623.html#ab2091a6b22e8e543b8c1f13e9e5b5397\">Dune::Functions::HierarchicalLagrangePreBasis::size</a></div><div class=\"ttdeci\">size_type size(const SizePrefix prefix) const</div><div class=\"ttdoc\">Return number of possible values for next position in multi index.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:107</div></div>\n-<div class=\"ttc\" id=\"aa01623_html_ab5bd91f85b9195d37879732f0ceeba7e\"><div class=\"ttname\"><a href=\"a01623.html#ab5bd91f85b9195d37879732f0ceeba7e\">Dune::Functions::HierarchicalLagrangePreBasis::gridView</a></div><div class=\"ttdeci\">const GridView & gridView() const</div><div class=\"ttdoc\">Obtain the grid view that the basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:79</div></div>\n-<div class=\"ttc\" id=\"aa01623_html_abfbdf2bbe11f73edd46b001048d09fba\"><div class=\"ttname\"><a href=\"a01623.html#abfbdf2bbe11f73edd46b001048d09fba\">Dune::Functions::HierarchicalLagrangePreBasis::gridView_</a></div><div class=\"ttdeci\">GridView gridView_</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:143</div></div>\n-<div class=\"ttc\" id=\"aa01623_html_ac351887f1be4aa2af48c45f77e9bb4d3\"><div class=\"ttname\"><a href=\"a01623.html#ac351887f1be4aa2af48c45f77e9bb4d3\">Dune::Functions::HierarchicalLagrangePreBasis::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdoc\">Same as size(prefix) with empty prefix.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:100</div></div>\n-<div class=\"ttc\" id=\"aa01623_html_ac79e037186412bb4d77c8ca2bc6ad494\"><div class=\"ttname\"><a href=\"a01623.html#ac79e037186412bb4d77c8ca2bc6ad494\">Dune::Functions::HierarchicalLagrangePreBasis::initializeIndices</a></div><div class=\"ttdeci\">void initializeIndices()</div><div class=\"ttdoc\">Initialize the global indices.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:75</div></div>\n-<div class=\"ttc\" id=\"aa01623_html_ad2404338c629c8ff77315fc5a6a99c88\"><div class=\"ttname\"><a href=\"a01623.html#ad2404338c629c8ff77315fc5a6a99c88\">Dune::Functions::HierarchicalLagrangePreBasis::indices</a></div><div class=\"ttdeci\">It indices(const Node &node, It it) const</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:130</div></div>\n-<div class=\"ttc\" id=\"aa01623_html_af0c5d0c1e855de8dc56b81360b617c0c\"><div class=\"ttname\"><a href=\"a01623.html#af0c5d0c1e855de8dc56b81360b617c0c\">Dune::Functions::HierarchicalLagrangePreBasis::minMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type minMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> hierarchicallagrangebasis.hh:64</div></div>\n+<div class=\"ttc\" id=\"aa01707_html_a859d50513645ef2ea0188d0779c1df30\"><div class=\"ttname\"><a href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">Dune::Functions::BasisNodeMixin::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:142</div></div>\n <div class=\"ttc\" id=\"aa01707_html_ae93815e5c4012f7be5d11786f40d267a\"><div class=\"ttname\"><a href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\">Dune::Functions::BasisNodeMixin::setSize</a></div><div class=\"ttdeci\">void setSize(const size_type size)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:164</div></div>\n <div class=\"ttc\" id=\"aa01711_html\"><div class=\"ttname\"><a href=\"a01711.html\">Dune::Functions::LeafBasisNode</a></div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:186</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,354 +5,510 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-hierarchicallagrangebasis.hh\n+brezzidouglasmarinibasis.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH\n- 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH\n+ 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH\n+ 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH\n 5\n- 6#include <dune/common/exceptions.hh>\n- 7#include <dune/localfunctions/hierarchical/hierarchicalp2.hh>\n- 8\n- 9#include <dune/functions/functionspacebases/nodes.hh>\n- 10#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n- 11#include <dune/grid/common/mcmgmapper.hh>\n+ 6#include <array>\n+ 7#include <dune/common/exceptions.hh>\n+ 8#include <dune/geometry/referenceelements.hh>\n+ 9\n+ 10#include <dune/localfunctions/common/virtualinterface.hh>\n+ 11#include <dune/localfunctions/common/virtualwrappers.hh>\n 12\n- 13namespace Dune {\n- 14 namespace Functions {\n- 15\n- 16 /\n-/ *****************************************************************************\n- 17 // Implementation for Hierarchical Lagrange Basis\n- 18 //\n- 19 // -- only order k=2 is implemented up to now --\n- 20 // -- currently only supports simplex grids --\n- 21 //\n- 22 // This is the reusable part of the HierarchicalLagrangeBasis. It contains\n- 23 //\n- 24 // HierarchicalLagrangePreBasis\n- 25 // HierarchicalLagrangeNode\n- 26 //\n- 27 // The pre-basis allows to create the others and is the owner of possible\n-shared\n- 28 // state. These components do _not_ depend on the global basis and can be\n- 29 // used without a global basis.\n- 30 /\n-/ *****************************************************************************\n- 31\n- 32 template<typename GV, int k, typename R=double>\n- 33 class HierarchicalLagrangeNode;\n- 34\n- 35 template<typename GV, int k, typename R=double>\n- 36 class HierarchicalLagrangePreBasis;\n- 37\n- 47 template<typename GV, int k, typename R>\n-48 class HierarchicalLagrangePreBasis\n- 49 {\n- 50 static const int dim = GV::dimension;\n- 51\n- 52 public:\n+ 13#include <dune/localfunctions/brezzidouglasmarini/\n+brezzidouglasmarini1cube2d.hh>\n+ 14#include <dune/localfunctions/brezzidouglasmarini/\n+brezzidouglasmarini1cube3d.hh>\n+ 15#include <dune/localfunctions/brezzidouglasmarini/\n+brezzidouglasmarini1simplex2d.hh>\n+ 16#include <dune/localfunctions/brezzidouglasmarini/\n+brezzidouglasmarini2cube2d.hh>\n+ 17#include <dune/localfunctions/brezzidouglasmarini/\n+brezzidouglasmarini2simplex2d.hh>\n+ 18\n+ 19#include <dune/functions/functionspacebases/\n+globalvaluedlocalfiniteelement.hh>\n+ 20#include <dune/functions/functionspacebases/nodes.hh>\n+ 21#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n+ 22\n+ 23namespace Dune {\n+ 24namespace Functions {\n+ 25\n+ 26namespace Impl {\n+ 27\n+ 28 template<int dim, typename D, typename R, std::size_t k>\n+ 29 struct BDMSimplexLocalInfo\n+ 30 {\n+ 31 static_assert((AlwaysFalse<D>::value),\"The requested type of BDM element is\n+not implemented, sorry!\");\n+ 32 };\n+ 33\n+ 34 template<typename D, typename R>\n+ 35 struct BDMSimplexLocalInfo<2,D,R,1>\n+ 36 {\n+ 37 using FiniteElement = BDM1Simplex2DLocalFiniteElement<D,R>;\n+ 38 static const std::size_t Variants = 8;\n+ 39 };\n+ 40\n+ 41 template<typename D, typename R>\n+ 42 struct BDMSimplexLocalInfo<2,D,R,2>\n+ 43 {\n+ 44 using FiniteElement = BDM2Simplex2DLocalFiniteElement<D,R>;\n+ 45 static const std::size_t Variants = 8;\n+ 46 };\n+ 47\n+ 48 template<int dim, typename D, typename R, std::size_t k>\n+ 49 struct BDMCubeLocalInfo\n+ 50 {\n+ 51 static_assert((AlwaysFalse<D>::value),\"The requested type of BDM element is\n+not implemented, sorry!\");\n+ 52 };\n 53\n-55 using GridView = GV;\n- 56\n-58 using size_type = std::size_t;\n- 59\n-61 using Node = HierarchicalLagrangeNode<GV,_k,_R>;\n- 62\n-63 static constexpr size_type maxMultiIndexSize = 1;\n-64 static constexpr size_type minMultiIndexSize = 1;\n-65 static constexpr size_type multiIndexBufferSize = 1;\n- 66\n-71 HierarchicalLagrangePreBasis(const GridView& gv) : gridView_(gv) ,\n-mcmgMapper_(gv,p2Layout())\n- 72 {}\n- 73\n-75 void initializeIndices()\n- 76 {}\n- 77\n-79 const GridView& gridView() const\n- 80 {\n- 81 return gridView_;\n- 82 }\n+ 54 template<typename D, typename R>\n+ 55 struct BDMCubeLocalInfo<2,D,R,1>\n+ 56 {\n+ 57 using FiniteElement = BDM1Cube2DLocalFiniteElement<D,R>;\n+ 58 static const std::size_t Variants = 16;\n+ 59 };\n+ 60\n+ 61 template<typename D, typename R>\n+ 62 struct BDMCubeLocalInfo<2,D,R,2>\n+ 63 {\n+ 64 using FiniteElement = BDM2Cube2DLocalFiniteElement<D,R>;\n+ 65 static const std::size_t Variants = 16;\n+ 66 };\n+ 67\n+ 68 template<typename D, typename R>\n+ 69 struct BDMCubeLocalInfo<3,D,R,1>\n+ 70 {\n+ 71 using FiniteElement = BDM1Cube3DLocalFiniteElement<D,R>;\n+ 72 static const std::size_t Variants = 64;\n+ 73 };\n+ 74\n+ 75 template<typename GV, int dim, typename R, std::size_t k>\n+ 76 class BDMLocalFiniteElementMap\n+ 77 {\n+ 78 using D = typename GV::ctype;\n+ 79 using CubeFiniteElement = typename BDMCubeLocalInfo<dim, D, R, k>::\n+FiniteElement;\n+ 80 using SimplexFiniteElement = typename BDMSimplexLocalInfo<dim, D, R, k>::\n+FiniteElement;\n+ 81\n+ 82 public:\n 83\n-85 void update (const GridView& gv)\n- 86 {\n- 87 gridView_ = gv;\n- 88 mcmgMapper_.update(gv);\n- 89 }\n- 90\n-94 Node makeNode() const\n- 95 {\n- 96 return Node{};\n- 97 }\n- 98\n-100 size_type size() const\n- 101 {\n- 102 return mcmgMapper_.size();\n- 103 }\n- 104\n- 106 template<class SizePrefix>\n-107 size_type size(const SizePrefix prefix) const\n+ 84 using T = LocalBasisTraits<D, dim, FieldVector<D,dim>, R, dim,\n+FieldVector<R,dim>, FieldMatrix<D,dim,dim> >;\n+ 85 using FiniteElement = LocalFiniteElementVirtualInterface<T>;\n+ 86\n+ 87 BDMLocalFiniteElementMap(const GV& gv)\n+ 88 : is_(&(gv.indexSet())), orient_(gv.size(0))\n+ 89 {\n+ 90 cubeVariant_.resize(BDMCubeLocalInfo<dim, D, R, k>::Variants);\n+ 91 simplexVariant_.resize(BDMSimplexLocalInfo<dim, D, R, k>::Variants);\n+ 92\n+ 93 // create all variants\n+ 94 for (size_t i = 0; i < cubeVariant_.size(); i++)\n+ 95 cubeVariant_[i] = std::\n+make_unique<LocalFiniteElementVirtualImp<CubeFiniteElement> >(CubeFiniteElement\n+(i));\n+ 96\n+ 97 for (size_t i = 0; i < simplexVariant_.size(); i++)\n+ 98 simplexVariant_[i] = std::\n+make_unique<LocalFiniteElementVirtualImp<SimplexFiniteElement> >\n+(SimplexFiniteElement(i));\n+ 99\n+ 100 // compute orientation for all elements\n+ 101 // loop once over the grid\n+ 102 for(const auto& cell : elements(gv))\n+ 103 {\n+ 104 unsigned int myId = is_->index(cell);\n+ 105 orient_[myId] = 0;\n+ 106\n+ 107 for (const auto& intersection : intersections(gv,cell))\n 108 {\n- 109 assert(prefix.size() == 0 || prefix.size() == 1);\n- 110 return (prefix.size() == 0) ? size() : 0;\n+ 109 if (intersection.neighbor() && (is_->index(intersection.outside()) >\n+myId))\n+ 110 orient_[myId] |= (1 << intersection.indexInInside());\n 111 }\n- 112\n-114 size_type dimension() const\n- 115 {\n- 116 return size();\n- 117 }\n- 118\n-123 size_type maxNodeSize() const\n- 124 {\n- 125 // That cast to unsigned int is necessary because GV::dimension is an enum\n- 126 return Dune::binomial(std::size_t(order() + (unsigned int)GV::\n-dimension),std::size_t(order()));\n- 127 }\n- 128\n- 129 template<typename It>\n-130 It indices(const Node& node, It it) const\n- 131 {\n- 132 for (size_type i = 0, end = node.finiteElement().size() ; i < end ; ++it,\n-++i)\n- 133 {\n- 134 Dune::LocalKey localKey = node.finiteElement().localCoefficients\n-().localKey(i);\n- 135 const auto& element = node.element();\n- 136\n- 137 *it = {{ (size_type)(mcmgMapper_.subIndex(element,localKey.subEntity\n-(),localKey.codim())) }};\n- 138 }\n- 139 return it;\n- 140 }\n- 141\n- 142 protected:\n-143 GridView gridView_;\n- 144\n-145 unsigned int order() const\n- 146 {\n- 147 return 2;\n- 148 }\n+ 112 }\n+ 113 }\n+ 114\n+ 116 template<class EntityType>\n+ 117 const FiniteElement& find(const EntityType& e) const\n+ 118 {\n+ 119 if (e.type().isCube())\n+ 120 return *cubeVariant_[orient_[is_->index(e)]];\n+ 121 else\n+ 122 return *simplexVariant_[orient_[is_->index(e)]];\n+ 123 }\n+ 124\n+ 125 private:\n+ 126 std::vector<std::\n+unique_ptr<LocalFiniteElementVirtualImp<CubeFiniteElement> > > cubeVariant_;\n+ 127 std::vector<std::\n+unique_ptr<LocalFiniteElementVirtualImp<SimplexFiniteElement> > >\n+simplexVariant_;\n+ 128 const typename GV::IndexSet* is_;\n+ 129 std::vector<unsigned char> orient_;\n+ 130 };\n+ 131\n+ 132\n+ 133} // namespace Impl\n+ 134\n+ 135\n+ 136/\n+/ *****************************************************************************\n+ 137// This is the reusable part of the basis. It contains\n+ 138//\n+ 139// BrezziDouglasMariniPreBasis\n+ 140// BrezziDouglasMariniNode\n+ 141//\n+ 142// The pre-basis allows to create the others and is the owner of possible\n+shared\n+ 143// state. These components do _not_ depend on the global basis and local\n+view\n+ 144// and can be used without a global basis.\n+ 145/\n+/ *****************************************************************************\n+ 146\n+ 147template<typename GV, int k>\n+ 148class BrezziDouglasMariniNode;\n 149\n-150 MultipleCodimMultipleGeomTypeMapper<GridView> mcmgMapper_;\n- 151\n- 152 private:\n- 157 static auto p2Layout()\n- 158 {\n- 159 return [](Dune::GeometryType type, int gridDim)\n- 160 {\n- 161 if (type.isVertex())\n- 162 return 1;\n- 163 if (type.isLine())\n- 164 return 1;\n- 165 if (type.isTriangle())\n- 166 return 0;\n- 167 assert(type.isTetrahedron());\n- 168 return 0;\n- 169 };\n- 170 }\n- 171 };\n- 172\n- 173\n- 174\n- 175 template<typename GV, int k, typename R>\n-176 class HierarchicalLagrangeNode :\n- 177 public LeafBasisNode\n- 178 {\n- 179 static const int dim = GV::dimension;\n- 180\n- 181 public:\n- 182\n-183 using size_type = std::size_t;\n-184 using Element = typename GV::template Codim<0>::Entity;\n-185 using FiniteElement = HierarchicalP2LocalFiniteElement<typename GV::\n-ctype,R,dim>;\n- 186\n-187 HierarchicalLagrangeNode() :\n- 188 finiteElement_(),\n- 189 element_(nullptr)\n- 190 {}\n- 191\n-193 const Element& element() const\n- 194 {\n- 195 return *element_;\n- 196 }\n- 197\n-202 const FiniteElement& finiteElement() const\n+ 150template<typename GV, int k>\n+151class BrezziDouglasMariniPreBasis\n+ 152{\n+ 153 static const int dim = GV::dimension;\n+ 154 using FiniteElementMap = typename Impl::BDMLocalFiniteElementMap<GV, dim,\n+double, k>;\n+ 155\n+ 156public:\n+ 157\n+159 using GridView = GV;\n+160 using size_type = std::size_t;\n+ 161\n+162 using Node = BrezziDouglasMariniNode<GV,_k>;\n+ 163\n+164 static constexpr size_type maxMultiIndexSize = 1;\n+165 static constexpr size_type minMultiIndexSize = 1;\n+166 static constexpr size_type multiIndexBufferSize = 1;\n+ 167\n+169 BrezziDouglasMariniPreBasis(const GridView& gv) :\n+ 170 gridView_(gv),\n+ 171 finiteElementMap_(gv)\n+ 172 {\n+ 173 // There is no inherent reason why the basis shouldn't work for grids with\n+more than one\n+ 174 // element types. Somebody simply has to sit down and implement the\n+missing bits.\n+ 175 if (gv.indexSet().types(0).size() > 1)\n+ 176 DUNE_THROW(Dune::NotImplemented, \"Brezzi-Douglas-Marini basis is only\n+implemented for grids with a single element type\");\n+ 177 }\n+ 178\n+179 void initializeIndices()\n+ 180 {\n+ 181 codimOffset_[0] = 0;\n+ 182 codimOffset_[1] = codimOffset_[0] + dofsPerCodim_[0] * gridView_.size(0);\n+ 183 //if (dim==3) codimOffset_[2] = codimOffset_[1] + dofsPerCodim[1] *\n+gridView_.size(1);\n+ 184 }\n+ 185\n+188 const GridView& gridView() const\n+ 189 {\n+ 190 return gridView_;\n+ 191 }\n+ 192\n+ 193 /* \\brief Update the stored grid view, to be called if the grid has\n+changed */\n+194 void update (const GridView& gv)\n+ 195 {\n+ 196 gridView_ = gv;\n+ 197 }\n+ 198\n+202 Node makeNode() const\n 203 {\n- 204 return finiteElement_;\n+ 204 return Node{&finiteElementMap_};\n 205 }\n 206\n-208 void bind(const Element& e)\n- 209 {\n- 210 element_ = &e;\n+207 size_type size() const\n+ 208 {\n+ 209 return dofsPerCodim_[0] * gridView_.size(0) + dofsPerCodim_[1] *\n+gridView_.size(1); // only 2d\n+ 210 }\n 211\n- 212 if (e.type() != finiteElement_.type())\n- 213 DUNE_THROW(Dune::Exception,\n- 214 \"HierarchicalLagrange-elements do not exist for elements of type \" <<\n-e.type());\n- 215\n- 216 this->setSize(finiteElement_.size());\n- 217 }\n- 218\n- 219 protected:\n- 220\n-221 unsigned int order() const\n+ 213 template<class SizePrefix>\n+214 size_type size(const SizePrefix prefix) const\n+ 215 {\n+ 216 assert(prefix.size() == 0 || prefix.size() == 1);\n+ 217 return (prefix.size() == 0) ? size() : 0;\n+ 218 }\n+ 219\n+221 size_type dimension() const\n 222 {\n- 223 return 2;\n+ 223 return size();\n 224 }\n 225\n-226 const FiniteElement finiteElement_;\n-227 const Element* element_;\n- 228 };\n- 229\n- 230\n- 231\n- 232 namespace BasisFactory {\n- 233\n- 242 template<std::size_t k, typename R=double>\n-243 auto hierarchicalLagrange()\n- 244 {\n- 245 return [](const auto& gridView) {\n- 246 return HierarchicalLagrangePreBasis<std::decay_t<decltype(gridView)>, k,\n-R>(gridView);\n- 247 };\n- 248 }\n+226 size_type maxNodeSize() const\n+ 227 {\n+ 228 // The implementation currently only supports grids with a single element\n+type.\n+ 229 // We can therefore return the actual number of dofs here.\n+ 230 GeometryType elementType = *(gridView_.indexSet().types(0).begin());\n+ 231 size_t numFaces = ReferenceElements<double,dim>::general(elementType).size\n+(1);\n+ 232 return dofsPerCodim_[0] + dofsPerCodim_[1] * numFaces;\n+ 233 }\n+ 234\n+ 240 template<typename It>\n+241 It indices(const Node& node, It it) const\n+ 242 {\n+ 243 const auto& gridIndexSet = gridView().indexSet();\n+ 244 const auto& element = node.element();\n+ 245\n+ 246 // throw if element is not of predefined type\n+ 247 if (not(element.type().isCube()) and not(element.type().isSimplex()))\n+ 248 DUNE_THROW(Dune::NotImplemented, \"BrezziDouglasMariniBasis only\n+implemented for cube and simplex elements.\");\n 249\n- 250 } // end namespace BasisFactory\n- 251\n- 262 template<typename GV, int k, typename R=double>\n-263 using HierarchicalLagrangeBasis =\n-DefaultGlobalBasis<HierarchicalLagrangePreBasis<GV,_k,_R> >;\n+ 250 for(std::size_t i=0, end=node.size(); i<end; ++i, ++it)\n+ 251 {\n+ 252 Dune::LocalKey localKey = node.finiteElement().localCoefficients\n+().localKey(i);\n+ 253\n+ 254 // The dimension of the entity that the current dof is related to\n+ 255 size_t subentity = localKey.subEntity();\n+ 256 size_t codim = localKey.codim();\n+ 257\n+ 258 *it = { codimOffset_[codim] +\n+ 259 dofsPerCodim_[codim] * gridIndexSet.subIndex(element, subentity, codim) +\n+localKey.index() };\n+ 260 }\n+ 261\n+ 262 return it;\n+ 263 }\n 264\n- 265 } // end namespace Functions\n- 266} // end namespace Dune\n- 267\n- 268#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICALLAGRANGEBASIS_HH\n+ 265protected:\n+266 GridView gridView_;\n+267 std::array<size_t,dim+1> codimOffset_;\n+268 FiniteElementMap finiteElementMap_;\n+ 269 // Number of dofs per entity type depending on the entity's codimension\n+and type\n+270 std::array<int,2> dofsPerCodim_ {{dim*(k-1)*3, dim+(k-1)}};\n+ 271};\n+ 272\n+ 273\n+ 274\n+ 275template<typename GV, int k>\n+276class BrezziDouglasMariniNode :\n+ 277 public LeafBasisNode\n+ 278{\n+ 279 static const int dim = GV::dimension;\n+ 280\n+ 281public:\n+ 282\n+283 using size_type = std::size_t;\n+284 using Element = typename GV::template Codim<0>::Entity;\n+285 using FiniteElementMap = typename Impl::BDMLocalFiniteElementMap<GV, dim,\n+double, k>;\n+286 using FiniteElement = Impl::GlobalValuedLocalFiniteElement<Impl::\n+ContravariantPiolaTransformator,\n+ 287 typename FiniteElementMap::FiniteElement,\n+ 288 Element>;\n+ 289\n+290 BrezziDouglasMariniNode(const FiniteElementMap* finiteElementMap) :\n+ 291 element_(nullptr),\n+ 292 finiteElementMap_(finiteElementMap)\n+ 293 {}\n+ 294\n+296 const Element& element() const\n+ 297 {\n+ 298 return *element_;\n+ 299 }\n+ 300\n+305 const FiniteElement& finiteElement() const\n+ 306 {\n+ 307 return finiteElement_;\n+ 308 }\n+ 309\n+311 void bind(const Element& e)\n+ 312 {\n+ 313 element_ = &e;\n+ 314 finiteElement_.bind((finiteElementMap_->find(*element_)), e);\n+ 315 this->setSize(finiteElement_.size());\n+ 316 }\n+ 317\n+ 318protected:\n+ 319\n+320 FiniteElement finiteElement_;\n+321 const Element* element_;\n+322 const FiniteElementMap* finiteElementMap_;\n+ 323};\n+ 324\n+ 325\n+ 326\n+ 327namespace BasisFactory {\n+ 328\n+ 336template<std::size_t k>\n+337auto brezziDouglasMarini()\n+ 338{\n+ 339 return [](const auto& gridView) {\n+ 340 return BrezziDouglasMariniPreBasis<std::decay_t<decltype(gridView)>, k>\n+(gridView);\n+ 341 };\n+ 342}\n+ 343\n+ 344} // end namespace BasisFactory\n+ 345\n+ 346\n+ 347\n+ 348/\n+/ *****************************************************************************\n+ 349// This is the actual global basis implementation based on the reusable\n+parts.\n+ 350/\n+/ *****************************************************************************\n+ 351\n+ 359template<typename GV, int k>\n+360using BrezziDouglasMariniBasis =\n+DefaultGlobalBasis<BrezziDouglasMariniPreBasis<GV,_k> >;\n+ 361\n+ 362} // end namespace Functions\n+ 363} // end namespace Dune\n+ 364\n+ 365\n+ 366#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH\n+globalvaluedlocalfiniteelement.hh\n defaultglobalbasis.hh\n nodes.hh\n-Dune::Functions::BasisFactory::hierarchicalLagrange\n-auto hierarchicalLagrange()\n-Create a pre-basis factory that can create a HierarchicalLagrange pre-basis.\n-Definition: hierarchicallagrangebasis.hh:243\n+Dune::Functions::BasisFactory::brezziDouglasMarini\n+auto brezziDouglasMarini()\n+Create a pre-basis factory that can create a Brezzi-Douglas-Marini pre-basis.\n+Definition: brezzidouglasmarinibasis.hh:337\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::DefaultGlobalBasis\n-Global basis for given pre-basis.\n-Definition: defaultglobalbasis.hh:46\n-Dune::Functions::HierarchicalLagrangeNode\n-Definition: hierarchicallagrangebasis.hh:178\n-Dune::Functions::HierarchicalLagrangeNode::FiniteElement\n-HierarchicalP2LocalFiniteElement< typename GV::ctype, R, dim > FiniteElement\n-Definition: hierarchicallagrangebasis.hh:185\n-Dune::Functions::HierarchicalLagrangeNode::element\n-const Element & element() const\n-Return current element, throw if unbound.\n-Definition: hierarchicallagrangebasis.hh:193\n-Dune::Functions::HierarchicalLagrangeNode::bind\n-void bind(const Element &e)\n-Bind to element.\n-Definition: hierarchicallagrangebasis.hh:208\n-Dune::Functions::HierarchicalLagrangeNode::finiteElement\n+Dune::Functions::BrezziDouglasMariniNode\n+Definition: brezzidouglasmarinibasis.hh:278\n+Dune::Functions::BrezziDouglasMariniNode::finiteElement\n const FiniteElement & finiteElement() const\n Return the LocalFiniteElement for the element we are bound to.\n-Definition: hierarchicallagrangebasis.hh:202\n-Dune::Functions::HierarchicalLagrangeNode::element_\n-const Element * element_\n-Definition: hierarchicallagrangebasis.hh:227\n-Dune::Functions::HierarchicalLagrangeNode::finiteElement_\n-const FiniteElement finiteElement_\n-Definition: hierarchicallagrangebasis.hh:226\n-Dune::Functions::HierarchicalLagrangeNode::order\n-unsigned int order() const\n-Definition: hierarchicallagrangebasis.hh:221\n-Dune::Functions::HierarchicalLagrangeNode::HierarchicalLagrangeNode\n-HierarchicalLagrangeNode()\n-Definition: hierarchicallagrangebasis.hh:187\n-Dune::Functions::HierarchicalLagrangeNode::size_type\n-std::size_t size_type\n-Definition: hierarchicallagrangebasis.hh:183\n-Dune::Functions::HierarchicalLagrangeNode::Element\n+Definition: brezzidouglasmarinibasis.hh:305\n+Dune::Functions::BrezziDouglasMariniNode::Element\n typename GV::template Codim< 0 >::Entity Element\n-Definition: hierarchicallagrangebasis.hh:184\n-Dune::Functions::HierarchicalLagrangePreBasis\n-A pre-basis for a hierarchical basis.\n-Definition: hierarchicallagrangebasis.hh:49\n-Dune::Functions::HierarchicalLagrangePreBasis::size_type\n+Definition: brezzidouglasmarinibasis.hh:284\n+Dune::Functions::BrezziDouglasMariniNode::finiteElementMap_\n+const FiniteElementMap * finiteElementMap_\n+Definition: brezzidouglasmarinibasis.hh:322\n+Dune::Functions::BrezziDouglasMariniNode::size_type\n std::size_t size_type\n-Type used for indices and size information.\n-Definition: hierarchicallagrangebasis.hh:58\n-Dune::Functions::HierarchicalLagrangePreBasis::order\n-unsigned int order() const\n-Definition: hierarchicallagrangebasis.hh:145\n-Dune::Functions::HierarchicalLagrangePreBasis::makeNode\n-Node makeNode() const\n-Create tree node.\n-Definition: hierarchicallagrangebasis.hh:94\n-Dune::Functions::HierarchicalLagrangePreBasis::maxNodeSize\n-size_type maxNodeSize() const\n-Get the maximal number of DOFs associated to node for any element.\n-Definition: hierarchicallagrangebasis.hh:123\n-Dune::Functions::HierarchicalLagrangePreBasis::multiIndexBufferSize\n-static constexpr size_type multiIndexBufferSize\n-Definition: hierarchicallagrangebasis.hh:65\n-Dune::Functions::HierarchicalLagrangePreBasis::update\n-void update(const GridView &gv)\n-Update the stored grid view & MultipleCodimMultipleGeomTypeMapper, to be called\n-if the grid has chang...\n-Definition: hierarchicallagrangebasis.hh:85\n-Dune::Functions::HierarchicalLagrangePreBasis::mcmgMapper_\n-MultipleCodimMultipleGeomTypeMapper< GridView > mcmgMapper_\n-Definition: hierarchicallagrangebasis.hh:150\n-Dune::Functions::HierarchicalLagrangePreBasis::dimension\n+Definition: brezzidouglasmarinibasis.hh:283\n+Dune::Functions::BrezziDouglasMariniNode::finiteElement_\n+FiniteElement finiteElement_\n+Definition: brezzidouglasmarinibasis.hh:320\n+Dune::Functions::BrezziDouglasMariniNode::FiniteElementMap\n+typename Impl::BDMLocalFiniteElementMap< GV, dim, double, k > FiniteElementMap\n+Definition: brezzidouglasmarinibasis.hh:285\n+Dune::Functions::BrezziDouglasMariniNode::element_\n+const Element * element_\n+Definition: brezzidouglasmarinibasis.hh:321\n+Dune::Functions::BrezziDouglasMariniNode::FiniteElement\n+Impl::GlobalValuedLocalFiniteElement< Impl::ContravariantPiolaTransformator,\n+typename FiniteElementMap::FiniteElement, Element > FiniteElement\n+Definition: brezzidouglasmarinibasis.hh:288\n+Dune::Functions::BrezziDouglasMariniNode::bind\n+void bind(const Element &e)\n+Bind to element.\n+Definition: brezzidouglasmarinibasis.hh:311\n+Dune::Functions::BrezziDouglasMariniNode::BrezziDouglasMariniNode\n+BrezziDouglasMariniNode(const FiniteElementMap *finiteElementMap)\n+Definition: brezzidouglasmarinibasis.hh:290\n+Dune::Functions::BrezziDouglasMariniNode::element\n+const Element & element() const\n+Return current element, throw if unbound.\n+Definition: brezzidouglasmarinibasis.hh:296\n+Dune::Functions::BrezziDouglasMariniPreBasis\n+Definition: brezzidouglasmarinibasis.hh:152\n+Dune::Functions::BrezziDouglasMariniPreBasis::size_type\n+std::size_t size_type\n+Definition: brezzidouglasmarinibasis.hh:160\n+Dune::Functions::BrezziDouglasMariniPreBasis::dofsPerCodim_\n+std::array< int, 2 > dofsPerCodim_\n+Definition: brezzidouglasmarinibasis.hh:270\n+Dune::Functions::BrezziDouglasMariniPreBasis::dimension\n size_type dimension() const\n-Get the total dimension of the space spanned by this basis.\n-Definition: hierarchicallagrangebasis.hh:114\n-Dune::Functions::HierarchicalLagrangePreBasis::GridView\n-GV GridView\n-The grid view that the FE basis is defined on.\n-Definition: hierarchicallagrangebasis.hh:55\n-Dune::Functions::HierarchicalLagrangePreBasis::HierarchicalLagrangePreBasis\n-HierarchicalLagrangePreBasis(const GridView &gv)\n-Constructor for a given grid view object with layout for second order.\n-Definition: hierarchicallagrangebasis.hh:71\n-Dune::Functions::HierarchicalLagrangePreBasis::maxMultiIndexSize\n+Definition: brezzidouglasmarinibasis.hh:221\n+Dune::Functions::BrezziDouglasMariniPreBasis::minMultiIndexSize\n+static constexpr size_type minMultiIndexSize\n+Definition: brezzidouglasmarinibasis.hh:165\n+Dune::Functions::BrezziDouglasMariniPreBasis::maxMultiIndexSize\n static constexpr size_type maxMultiIndexSize\n-Definition: hierarchicallagrangebasis.hh:63\n-Dune::Functions::HierarchicalLagrangePreBasis::size\n+Definition: brezzidouglasmarinibasis.hh:164\n+Dune::Functions::BrezziDouglasMariniPreBasis::codimOffset_\n+std::array< size_t, dim+1 > codimOffset_\n+Definition: brezzidouglasmarinibasis.hh:267\n+Dune::Functions::BrezziDouglasMariniPreBasis::size\n size_type size(const SizePrefix prefix) const\n-Return number of possible values for next position in multi index.\n-Definition: hierarchicallagrangebasis.hh:107\n-Dune::Functions::HierarchicalLagrangePreBasis::gridView\n+Return number possible values for next position in multi index.\n+Definition: brezzidouglasmarinibasis.hh:214\n+Dune::Functions::BrezziDouglasMariniPreBasis::makeNode\n+Node makeNode() const\n+Create tree node.\n+Definition: brezzidouglasmarinibasis.hh:202\n+Dune::Functions::BrezziDouglasMariniPreBasis::GridView\n+GV GridView\n+The grid view that the FE space is defined on.\n+Definition: brezzidouglasmarinibasis.hh:159\n+Dune::Functions::BrezziDouglasMariniPreBasis::BrezziDouglasMariniPreBasis\n+BrezziDouglasMariniPreBasis(const GridView &gv)\n+Constructor for a given grid view object.\n+Definition: brezzidouglasmarinibasis.hh:169\n+Dune::Functions::BrezziDouglasMariniPreBasis::finiteElementMap_\n+FiniteElementMap finiteElementMap_\n+Definition: brezzidouglasmarinibasis.hh:268\n+Dune::Functions::BrezziDouglasMariniPreBasis::update\n+void update(const GridView &gv)\n+Definition: brezzidouglasmarinibasis.hh:194\n+Dune::Functions::BrezziDouglasMariniPreBasis::initializeIndices\n+void initializeIndices()\n+Definition: brezzidouglasmarinibasis.hh:179\n+Dune::Functions::BrezziDouglasMariniPreBasis::gridView\n const GridView & gridView() const\n Obtain the grid view that the basis is defined on.\n-Definition: hierarchicallagrangebasis.hh:79\n-Dune::Functions::HierarchicalLagrangePreBasis::gridView_\n-GridView gridView_\n-Definition: hierarchicallagrangebasis.hh:143\n-Dune::Functions::HierarchicalLagrangePreBasis::size\n+Definition: brezzidouglasmarinibasis.hh:188\n+Dune::Functions::BrezziDouglasMariniPreBasis::size\n size_type size() const\n-Same as size(prefix) with empty prefix.\n-Definition: hierarchicallagrangebasis.hh:100\n-Dune::Functions::HierarchicalLagrangePreBasis::initializeIndices\n-void initializeIndices()\n-Initialize the global indices.\n-Definition: hierarchicallagrangebasis.hh:75\n-Dune::Functions::HierarchicalLagrangePreBasis::indices\n+Definition: brezzidouglasmarinibasis.hh:207\n+Dune::Functions::BrezziDouglasMariniPreBasis::multiIndexBufferSize\n+static constexpr size_type multiIndexBufferSize\n+Definition: brezzidouglasmarinibasis.hh:166\n+Dune::Functions::BrezziDouglasMariniPreBasis::maxNodeSize\n+size_type maxNodeSize() const\n+Definition: brezzidouglasmarinibasis.hh:226\n+Dune::Functions::BrezziDouglasMariniPreBasis::gridView_\n+GridView gridView_\n+Definition: brezzidouglasmarinibasis.hh:266\n+Dune::Functions::BrezziDouglasMariniPreBasis::indices\n It indices(const Node &node, It it) const\n-Definition: hierarchicallagrangebasis.hh:130\n-Dune::Functions::HierarchicalLagrangePreBasis::minMultiIndexSize\n-static constexpr size_type minMultiIndexSize\n-Definition: hierarchicallagrangebasis.hh:64\n+Maps from subtree index set [0..size-1] to a globally unique multi index in\n+global basis.\n+Definition: brezzidouglasmarinibasis.hh:241\n+Dune::Functions::DefaultGlobalBasis\n+Global basis for given pre-basis.\n+Definition: defaultglobalbasis.hh:46\n+Dune::Functions::BasisNodeMixin::size\n+size_type size() const\n+Definition: nodes.hh:142\n Dune::Functions::BasisNodeMixin::setSize\n void setSize(const size_type size)\n Definition: nodes.hh:164\n Dune::Functions::LeafBasisNode\n Definition: nodes.hh:186\n \n ===============================================================================\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00152.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00152.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: subentitydofs.hh File Reference</title>\n+<title>dune-functions: defaultglobalbasis.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -66,50 +66,57 @@\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> |\n <a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">subentitydofs.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">defaultglobalbasis.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <vector></code><br />\n-<code>#include <dune/geometry/referenceelements.hh></code><br />\n-<code>#include <dune/typetree/traversal.hh></code><br />\n+<div class=\"textblock\"><code>#include <cstddef></code><br />\n+<code>#include <type_traits></code><br />\n+<code>#include <utility></code><br />\n+<code>#include <dune/common/reservedvector.hh></code><br />\n+<code>#include <dune/common/typeutilities.hh></code><br />\n+<code>#include <dune/common/concept.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00029_source.html\">dune/functions/common/type_traits.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00128_source.html\">dune/functions/functionspacebases/defaultlocalview.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a02876_source.html\">dune/functions/functionspacebases/concepts.hh</a>></code><br />\n </div>\n <p><a href=\"a00152_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01803.html\">Dune::Functions::SubEntityDOFs< GridView ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Range of DOFs associated to sub-entity. <a href=\"a01803.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01555.html\">Dune::Functions::DefaultGlobalBasis< PB ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Global basis for given pre-basis. <a href=\"a01555.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a00224\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00224.html\">Dune::Functions::BasisFactory</a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a00225\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00225.html\">Dune::Functions::BasisBuilder</a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n Functions</h2></td></tr>\n-<tr class=\"memitem:ga0b9da94fff21e98877d0e3fe1c1554c7\"><td class=\"memTemplParams\" colspan=\"2\">template<class T > </td></tr>\n-<tr class=\"memitem:ga0b9da94fff21e98877d0e3fe1c1554c7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00214.html#ga0b9da94fff21e98877d0e3fe1c1554c7\">Dune::Functions::subEntityDOFs</a> (const T &)</td></tr>\n-<tr class=\"memdesc:ga0b9da94fff21e98877d0e3fe1c1554c7\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create <a class=\"el\" href=\"a01803.html\" title=\"Range of DOFs associated to sub-entity.\">SubEntityDOFs</a> object. <a href=\"a00214.html#ga0b9da94fff21e98877d0e3fe1c1554c7\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga0b9da94fff21e98877d0e3fe1c1554c7\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:ga5803226b1ed4bf848a9532181c952244\"><td class=\"memTemplParams\" colspan=\"2\">template<class LocalView > </td></tr>\n-<tr class=\"memitem:ga5803226b1ed4bf848a9532181c952244\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00214.html#ga5803226b1ed4bf848a9532181c952244\">Dune::Functions::subEntityDOFs</a> (const LocalView &localView, std::size_t subEntityIndex, std::size_t subEntityCodim)</td></tr>\n-<tr class=\"memdesc:ga5803226b1ed4bf848a9532181c952244\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create bound <a class=\"el\" href=\"a01803.html\" title=\"Range of DOFs associated to sub-entity.\">SubEntityDOFs</a> object. <a href=\"a00214.html#ga5803226b1ed4bf848a9532181c952244\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga5803226b1ed4bf848a9532181c952244\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:ga09ad7987f85909bfcf269a0de9c652d8\"><td class=\"memTemplParams\" colspan=\"2\">template<class LocalView , class Intersection > </td></tr>\n-<tr class=\"memitem:ga09ad7987f85909bfcf269a0de9c652d8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00214.html#ga09ad7987f85909bfcf269a0de9c652d8\">Dune::Functions::subEntityDOFs</a> (const LocalView &localView, const Intersection &intersection)</td></tr>\n-<tr class=\"memdesc:ga09ad7987f85909bfcf269a0de9c652d8\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create bound <a class=\"el\" href=\"a01803.html\" title=\"Range of DOFs associated to sub-entity.\">SubEntityDOFs</a> object. <a href=\"a00214.html#ga09ad7987f85909bfcf269a0de9c652d8\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga09ad7987f85909bfcf269a0de9c652d8\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a060058e4e3c070530978192cb7c99d39\"><td class=\"memTemplParams\" colspan=\"2\">template<class PreBasis > </td></tr>\n+<tr class=\"memitem:a060058e4e3c070530978192cb7c99d39\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\"> </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a060058e4e3c070530978192cb7c99d39\">Dune::Functions::DefaultGlobalBasis</a> (PreBasis &&) -> DefaultGlobalBasis< std::decay_t< PreBasis > ></td></tr>\n+<tr class=\"separator:a060058e4e3c070530978192cb7c99d39\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a57d2c8b66fd384768b94af95e4ce5d78\"><td class=\"memTemplParams\" colspan=\"2\">template<class GridView , class PreBasisFactory > </td></tr>\n+<tr class=\"memitem:a57d2c8b66fd384768b94af95e4ce5d78\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\"> </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a57d2c8b66fd384768b94af95e4ce5d78\">Dune::Functions::DefaultGlobalBasis</a> (const GridView &gv, PreBasisFactory &&f) -> DefaultGlobalBasis< std::decay_t< decltype(f(gv))> ></td></tr>\n+<tr class=\"separator:a57d2c8b66fd384768b94af95e4ce5d78\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a1f0dc55c03c3a9862c76456d5574abe2\"><td class=\"memTemplParams\" colspan=\"2\">template<class GridView , class PreBasisFactory > </td></tr>\n+<tr class=\"memitem:a1f0dc55c03c3a9862c76456d5574abe2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00224.html#a1f0dc55c03c3a9862c76456d5574abe2\">Dune::Functions::BasisFactory::makeBasis</a> (const GridView &gridView, PreBasisFactory &&preBasisFactory)</td></tr>\n+<tr class=\"separator:a1f0dc55c03c3a9862c76456d5574abe2\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -6,39 +6,47 @@\n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n Classes | Namespaces | Functions\n-subentitydofs.hh File Reference\n-#include <vector>\n-#include <dune/geometry/referenceelements.hh>\n-#include <dune/typetree/traversal.hh>\n+defaultglobalbasis.hh File Reference\n+#include <cstddef>\n+#include <type_traits>\n+#include <utility>\n+#include <dune/common/reservedvector.hh>\n+#include <dune/common/typeutilities.hh>\n+#include <dune/common/concept.hh>\n+#include <dune/functions/common/type_traits.hh>\n+#include <dune/functions/functionspacebases/defaultlocalview.hh>\n+#include <dune/functions/functionspacebases/concepts.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-class \u00a0Dune::Functions::SubEntityDOFs<_GridView_>\n-\u00a0 Range of DOFs associated to sub-entity. More...\n+class \u00a0Dune::Functions::DefaultGlobalBasis<_PB_>\n+\u00a0 Global basis for given pre-basis. More...\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n+namespace \u00a0Dune::Functions::BasisFactory\n+\u00a0\n+namespace \u00a0Dune::Functions::BasisBuilder\n+\u00a0\n Functions\n-template<class T >\n-auto\u00a0Dune::Functions::subEntityDOFs (const T &)\n-\u00a0 Create SubEntityDOFs object. More...\n-\u00a0\n-template<class LocalView >\n-auto\u00a0Dune::Functions::subEntityDOFs (const LocalView &localView, std::size_t\n- subEntityIndex, std::size_t subEntityCodim)\n-\u00a0 Create bound SubEntityDOFs object. More...\n-\u00a0\n-template<class LocalView , class Intersection >\n-auto\u00a0Dune::Functions::subEntityDOFs (const LocalView &localView, const\n- Intersection &intersection)\n-\u00a0 Create bound SubEntityDOFs object. More...\n+template<class PreBasis >\n+ \u00a0Dune::Functions::DefaultGlobalBasis (PreBasis &&) -> DefaultGlobalBasis<\n+ std::decay_t< PreBasis > >\n+\u00a0\n+template<class GridView , class PreBasisFactory >\n+ \u00a0Dune::Functions::DefaultGlobalBasis (const GridView &gv, PreBasisFactory\n+ &&f) -> DefaultGlobalBasis< std::decay_t< decltype(f(gv))> >\n+\u00a0\n+template<class GridView , class PreBasisFactory >\n+auto\u00a0Dune::Functions::BasisFactory::makeBasis (const GridView &gridView,\n+ PreBasisFactory &&preBasisFactory)\n \u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00152_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00152_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: subentitydofs.hh Source File</title>\n+<title>dune-functions: defaultglobalbasis.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,148 +62,203 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">subentitydofs.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">defaultglobalbasis.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00152.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <vector></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span> </div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <dune/geometry/referenceelements.hh></span></div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/typetree/traversal.hh></span></div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span> </div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <cstddef></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <type_traits></span></div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <utility></span></div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/reservedvector.hh></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/common/typeutilities.hh></span></div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <dune/common/concept.hh></span></div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00029.html\">dune/functions/common/type_traits.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00128.html\">dune/functions/functionspacebases/defaultlocalview.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a02876.html\">dune/functions/functionspacebases/concepts.hh</a>></span></div>\n <div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Gr<span class=\"keywordtype\">id</span>View></div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01803.html\"> 41</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01803.html\">SubEntityDOFs</a></div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span>{</div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dim = GridView::dimension;</div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> </div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> </div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> LocalView></div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01803.html#acac48052c1a9079f779b64e68ce52e82\"> 64</a></span> <a class=\"code hl_class\" href=\"a01803.html\">SubEntityDOFs</a>& <a class=\"code hl_function\" href=\"a01803.html#acac48052c1a9079f779b64e68ce52e82\">bind</a>(<span class=\"keyword\">const</span> LocalView& localView, std::size_t subEntityIndex, std::size_t subEntityCodim)</div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> {</div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> <span class=\"comment\">// fill vector with local indices of all DOFs contained in subentity</span></div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> containedDOFs_.clear();</div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> dofIsContained_.assign(localView.size(), <span class=\"keyword\">false</span>);</div>\n-<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> </div>\n-<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> <span class=\"keyword\">auto</span> re = Dune::referenceElement<double,dim>(localView.element().type());</div>\n-<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> </div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> Dune::TypeTree::forEachLeafNode(localView.tree(), [&](<span class=\"keyword\">auto</span>&& node, <span class=\"keyword\">auto</span>&& <span class=\"comment\">/*treePath*/</span>) {</div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> const auto& localCoefficients = node.finiteElement().localCoefficients();</div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> std::size_t localSize = localCoefficients.size();</div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> for(std::size_t i=0; i<localSize; ++i)</div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> {</div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> auto localKey = localCoefficients.localKey(i);</div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> if (re.subEntities(subEntityIndex, subEntityCodim, localKey.codim()).contains(localKey.subEntity()))</div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> {</div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> containedDOFs_.push_back(node.localIndex(i));</div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> dofIsContained_[node.localIndex(i)] = true;</div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> }</div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> }</div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> });</div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>;</div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> }</div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> </div>\n-<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> LocalView, <span class=\"keyword\">class</span> Intersection></div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01803.html#a263bb19c72865bbad450b3c21ba6ad23\"> 104</a></span> <a class=\"code hl_class\" href=\"a01803.html\">SubEntityDOFs</a>& <a class=\"code hl_function\" href=\"a01803.html#a263bb19c72865bbad450b3c21ba6ad23\">bind</a>(<span class=\"keyword\">const</span> LocalView& localView, <span class=\"keyword\">const</span> Intersection& intersection)</div>\n-<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> {</div>\n-<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> <span class=\"keywordflow\">return</span> bind(localView, intersection.indexInInside(), 1);</div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> }</div>\n-<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> </div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01803.html#a1cdf6bb0ea464ebf9df5ac067a218fd9\"> 110</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a01803.html#a1cdf6bb0ea464ebf9df5ac067a218fd9\">begin</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> <span class=\"keywordflow\">return</span> containedDOFs_.cbegin();</div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> }</div>\n-<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> </div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01803.html#a773f6413ae560bdbccdfedf332b602dd\"> 116</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a01803.html#a773f6413ae560bdbccdfedf332b602dd\">end</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> <span class=\"keywordflow\">return</span> containedDOFs_.cend();</div>\n-<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> }</div>\n-<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> </div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01803.html#a2192e4fe71d9642ccd3ba5a64797a823\"> 122</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a01803.html#a2192e4fe71d9642ccd3ba5a64797a823\">size</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> <span class=\"keywordflow\">return</span> containedDOFs_.size();</div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> }</div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> </div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01803.html#ad8ae0869865b9f6a2aaa09a1a1ade514\"> 128</a></span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <span class=\"keyword\">operator</span>[](std::size_t i) <span class=\"keyword\">const</span></div>\n-<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> {</div>\n-<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> <span class=\"keywordflow\">return</span> containedDOFs_[i];</div>\n-<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> }</div>\n-<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> </div>\n-<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01803.html#a4c581279b643d6b1800dfdadd73f4bda\"> 134</a></span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a01803.html#a4c581279b643d6b1800dfdadd73f4bda\">contains</a>(std::size_t localIndex)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> <span class=\"keywordflow\">return</span> dofIsContained_[localIndex];</div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> }</div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> </div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span><span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> </div>\n-<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> std::vector<std::size_t> containedDOFs_;</div>\n-<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> std::vector<bool> dofIsContained_;</div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span>};</div>\n-<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> </div>\n-<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> </div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> </div>\n-<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n-<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00214.html#ga0b9da94fff21e98877d0e3fe1c1554c7\"> 160</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00214.html#ga09ad7987f85909bfcf269a0de9c652d8\">subEntityDOFs</a>(<span class=\"keyword\">const</span> T&)</div>\n-<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span>{</div>\n-<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01803.html\">SubEntityDOFs<typename T::GridView></a>{};</div>\n-<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span>}</div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> </div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> </div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span> </div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> </div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> PB></div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html\"> 45</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01555.html\">DefaultGlobalBasis</a></div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span>{</div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> </div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#a4d800349e8aa9ae148a178827d51ccda\"> 51</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01555.html#a4d800349e8aa9ae148a178827d51ccda\">PreBasis</a> = PB;</div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> </div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#aa33c9a46f1e7548b2a956c36f6554e89\"> 54</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01555.html#aa33c9a46f1e7548b2a956c36f6554e89\">PrefixPath</a> = TypeTree::HybridTreePath<>;</div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> </div>\n+<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#a2b9cab135f3764650ad063d49c4c2fcb\"> 57</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01555.html#a2b9cab135f3764650ad063d49c4c2fcb\">GridView</a> = <span class=\"keyword\">typename</span> PreBasis::GridView;</div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> </div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#a10db3413eda75531530d9b0bf82e8335\"> 60</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01555.html#a10db3413eda75531530d9b0bf82e8335\">size_type</a> = std::size_t;</div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> </div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#a6dd2621b698c77033f1b37443b7c7e65\"> 63</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01559.html\">LocalView</a> = <a class=\"code hl_class\" href=\"a01559.html\">DefaultLocalView<DefaultGlobalBasis<PreBasis></a>>;</div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> </div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#a71e8362c3966f9bc4ced844fb8474be7\"> 66</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01555.html#a71e8362c3966f9bc4ced844fb8474be7\">MultiIndex</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01559.html#acffe4cd37e8a7720e1a3eced31570c5a\">LocalView::MultiIndex</a>;</div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> </div>\n+<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#a00a78eb6f90d02a8c5dd3d4718b14e99\"> 69</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01555.html#a00a78eb6f90d02a8c5dd3d4718b14e99\">SizePrefix</a> = Dune::ReservedVector<std::size_t, PreBasis::multiIndexBufferSize>;</div>\n+<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> </div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>... T,</div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> disableCopyMove<<a class=\"code hl_function\" href=\"a01555.html#ac8c43e23bffc9116702a479f1c1d01f4\">DefaultGlobalBasis</a>, T...> = 0,</div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> <a class=\"code hl_typedef\" href=\"a00215.html#ga673247dd74bcdd9e5acfc7735faf8a5b\">enableIfConstructible</a><<a class=\"code hl_typedef\" href=\"a01555.html#a4d800349e8aa9ae148a178827d51ccda\">PreBasis</a>, T...> = 0></div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#ac8c43e23bffc9116702a479f1c1d01f4\"> 82</a></span> <a class=\"code hl_function\" href=\"a01555.html#ac8c43e23bffc9116702a479f1c1d01f4\">DefaultGlobalBasis</a>(T&&... t) :</div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> <a class=\"code hl_variable\" href=\"a01555.html#a7d0a58f78727ab3b0d9159a899031f07\">preBasis_</a>(std::forward<T>(t)...),</div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> <a class=\"code hl_variable\" href=\"a01555.html#aeed6ef808c134ff63cea8102b7a03c22\">prefixPath_</a>()</div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> {</div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> <span class=\"keyword\">static_assert</span>(models<Concept::PreBasis<GridView>, <a class=\"code hl_typedef\" href=\"a01555.html#a4d800349e8aa9ae148a178827d51ccda\">PreBasis</a>>(), <span class=\"stringliteral\">"Type passed to DefaultGlobalBasis does not model the PreBasis concept."</span>);</div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> <a class=\"code hl_variable\" href=\"a01555.html#a7d0a58f78727ab3b0d9159a899031f07\">preBasis_</a>.initializeIndices();</div>\n+<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> }</div>\n+<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> </div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>PreBasisFactory,</div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> std::enable_if_t<Dune::IsCallable<PreBasisFactory(<a class=\"code hl_typedef\" href=\"a01555.html#a2b9cab135f3764650ad063d49c4c2fcb\">GridView</a>), <a class=\"code hl_typedef\" href=\"a01555.html#a4d800349e8aa9ae148a178827d51ccda\">PreBasis</a>>::value, <span class=\"keywordtype\">int</span>> = 0></div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#aca0a06166bf28fbc1f22dbcb7ca98812\"> 98</a></span> <a class=\"code hl_function\" href=\"a01555.html#aca0a06166bf28fbc1f22dbcb7ca98812\">DefaultGlobalBasis</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01555.html#a2b9cab135f3764650ad063d49c4c2fcb\">GridView</a>& <a class=\"code hl_function\" href=\"a01555.html#a34897e5d2dd92bf5f34d61e47a9eff66\">gridView</a>, PreBasisFactory&& factory) :</div>\n+<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> <a class=\"code hl_variable\" href=\"a01555.html#a7d0a58f78727ab3b0d9159a899031f07\">preBasis_</a>(factory(<a class=\"code hl_function\" href=\"a01555.html#a34897e5d2dd92bf5f34d61e47a9eff66\">gridView</a>)),</div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> <a class=\"code hl_variable\" href=\"a01555.html#aeed6ef808c134ff63cea8102b7a03c22\">prefixPath_</a>()</div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> {</div>\n+<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> <span class=\"keyword\">static_assert</span>(models<Concept::PreBasis<GridView>, <a class=\"code hl_typedef\" href=\"a01555.html#a4d800349e8aa9ae148a178827d51ccda\">PreBasis</a>>(), <span class=\"stringliteral\">"Type passed to DefaultGlobalBasis does not model the PreBasis concept."</span>);</div>\n+<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> <a class=\"code hl_variable\" href=\"a01555.html#a7d0a58f78727ab3b0d9159a899031f07\">preBasis_</a>.initializeIndices();</div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> }</div>\n+<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> </div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#a34897e5d2dd92bf5f34d61e47a9eff66\"> 107</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01555.html#a2b9cab135f3764650ad063d49c4c2fcb\">GridView</a>& <a class=\"code hl_function\" href=\"a01555.html#a34897e5d2dd92bf5f34d61e47a9eff66\">gridView</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01555.html#a7d0a58f78727ab3b0d9159a899031f07\">preBasis_</a>.gridView();</div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> }</div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> </div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#ae9a040d36416bf5456a7d7cbca241f17\"> 113</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01555.html#a4d800349e8aa9ae148a178827d51ccda\">PreBasis</a>& <a class=\"code hl_function\" href=\"a01555.html#ae9a040d36416bf5456a7d7cbca241f17\">preBasis</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01555.html#a7d0a58f78727ab3b0d9159a899031f07\">preBasis_</a>;</div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> }</div>\n+<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> </div>\n+<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#a6683475941d1516b89a98d6ace4d5842\"> 119</a></span> <a class=\"code hl_typedef\" href=\"a01555.html#a4d800349e8aa9ae148a178827d51ccda\">PreBasis</a>& <a class=\"code hl_function\" href=\"a01555.html#a6683475941d1516b89a98d6ace4d5842\">preBasis</a>()</div>\n+<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> {</div>\n+<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01555.html#a7d0a58f78727ab3b0d9159a899031f07\">preBasis_</a>;</div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> }</div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> </div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#a6b7b8b0a9c65da16b6fe1b7e6ef20e8c\"> 130</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01555.html#a6b7b8b0a9c65da16b6fe1b7e6ef20e8c\">update</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01555.html#a2b9cab135f3764650ad063d49c4c2fcb\">GridView</a> & gv)</div>\n+<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> {</div>\n+<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> <a class=\"code hl_variable\" href=\"a01555.html#a7d0a58f78727ab3b0d9159a899031f07\">preBasis_</a>.update(gv);</div>\n+<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> <a class=\"code hl_variable\" href=\"a01555.html#a7d0a58f78727ab3b0d9159a899031f07\">preBasis_</a>.initializeIndices();</div>\n+<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> }</div>\n+<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> </div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#a762dcee80e33652a80d5aca07244bbb5\"> 137</a></span> <a class=\"code hl_typedef\" href=\"a01555.html#a10db3413eda75531530d9b0bf82e8335\">size_type</a> <a class=\"code hl_function\" href=\"a01555.html#a762dcee80e33652a80d5aca07244bbb5\">dimension</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01555.html#a7d0a58f78727ab3b0d9159a899031f07\">preBasis_</a>.dimension();</div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> }</div>\n+<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> </div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#ad77464358ec140b149c1391d036eaed1\"> 143</a></span> <a class=\"code hl_typedef\" href=\"a01555.html#a10db3413eda75531530d9b0bf82e8335\">size_type</a> <a class=\"code hl_function\" href=\"a01555.html#ad77464358ec140b149c1391d036eaed1\">size</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01555.html#a7d0a58f78727ab3b0d9159a899031f07\">preBasis_</a>.size();</div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> }</div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> </div>\n+<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#a752ada691a91cb10c109e3a1093df507\"> 149</a></span> <a class=\"code hl_typedef\" href=\"a01555.html#a10db3413eda75531530d9b0bf82e8335\">size_type</a> <a class=\"code hl_function\" href=\"a01555.html#a752ada691a91cb10c109e3a1093df507\">size</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01555.html#a00a78eb6f90d02a8c5dd3d4718b14e99\">SizePrefix</a>& prefix)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01555.html#a7d0a58f78727ab3b0d9159a899031f07\">preBasis_</a>.size(prefix);</div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> }</div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> </div>\n+<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#a836be8e833f7f5b1910bc247658df00a\"> 155</a></span> <a class=\"code hl_class\" href=\"a01559.html\">LocalView</a> <a class=\"code hl_function\" href=\"a01555.html#a836be8e833f7f5b1910bc247658df00a\">localView</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_typedef\" href=\"a01555.html#a6dd2621b698c77033f1b37443b7c7e65\">LocalView</a>(*<span class=\"keyword\">this</span>);</div>\n+<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> }</div>\n+<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> </div>\n+<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#aeff2d7cf6ef6c17e4c27f12d997701a3\"> 161</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01555.html\">DefaultGlobalBasis</a>& <a class=\"code hl_function\" href=\"a01555.html#aeff2d7cf6ef6c17e4c27f12d997701a3\">rootBasis</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>;</div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> }</div>\n <div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> </div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> </div>\n-<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> LocalView></div>\n-<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00214.html#ga5803226b1ed4bf848a9532181c952244\"> 187</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00214.html#ga09ad7987f85909bfcf269a0de9c652d8\">subEntityDOFs</a>(<span class=\"keyword\">const</span> LocalView& localView, std::size_t subEntityIndex, std::size_t subEntityCodim)</div>\n-<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span>{</div>\n-<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> <span class=\"keyword\">using </span>GridView = <span class=\"keyword\">typename</span> LocalView::GridView;</div>\n-<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span> <a class=\"code hl_class\" href=\"a01803.html\">SubEntityDOFs<GridView></a> <a class=\"code hl_function\" href=\"a00214.html#ga09ad7987f85909bfcf269a0de9c652d8\">subEntityDOFs</a>;</div>\n-<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> <a class=\"code hl_function\" href=\"a00214.html#ga09ad7987f85909bfcf269a0de9c652d8\">subEntityDOFs</a>.bind(localView, subEntityIndex, subEntityCodim);</div>\n-<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00214.html#ga09ad7987f85909bfcf269a0de9c652d8\">subEntityDOFs</a>;</div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#afa626db7f92e548a453532c0a600301f\"> 167</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01555.html#aa33c9a46f1e7548b2a956c36f6554e89\">PrefixPath</a>& <a class=\"code hl_function\" href=\"a01555.html#afa626db7f92e548a453532c0a600301f\">prefixPath</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01555.html#aeed6ef808c134ff63cea8102b7a03c22\">prefixPath_</a>;</div>\n+<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> }</div>\n+<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> </div>\n+<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span><span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#a7d0a58f78727ab3b0d9159a899031f07\"> 173</a></span> <a class=\"code hl_typedef\" href=\"a01555.html#a4d800349e8aa9ae148a178827d51ccda\">PreBasis</a> <a class=\"code hl_variable\" href=\"a01555.html#a7d0a58f78727ab3b0d9159a899031f07\">preBasis_</a>;</div>\n+<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01555.html#aeed6ef808c134ff63cea8102b7a03c22\"> 174</a></span> <a class=\"code hl_typedef\" href=\"a01555.html#aa33c9a46f1e7548b2a956c36f6554e89\">PrefixPath</a> <a class=\"code hl_variable\" href=\"a01555.html#aeed6ef808c134ff63cea8102b7a03c22\">prefixPath_</a>;</div>\n+<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span>};</div>\n+<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> </div>\n+<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> </div>\n+<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> </div>\n+<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> PreBasis></div>\n+<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a060058e4e3c070530978192cb7c99d39\"> 180</a></span><a class=\"code hl_function\" href=\"a00219.html#a060058e4e3c070530978192cb7c99d39\">DefaultGlobalBasis</a>(PreBasis&&) -> <a class=\"code hl_class\" href=\"a01555.html\">DefaultGlobalBasis<std::decay_t<PreBasis></a>>;</div>\n+<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> </div>\n+<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Gr<span class=\"keywordtype\">id</span>View, <span class=\"keyword\">class</span> PreBasisFactory></div>\n+<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a57d2c8b66fd384768b94af95e4ce5d78\"> 183</a></span><a class=\"code hl_function\" href=\"a00219.html#a060058e4e3c070530978192cb7c99d39\">DefaultGlobalBasis</a>(<span class=\"keyword\">const</span> GridView& gv, PreBasisFactory&& f) -> <a class=\"code hl_class\" href=\"a01555.html\">DefaultGlobalBasis</a><std::decay_t<<span class=\"keyword\">decltype</span>(f(gv))>>;</div>\n+<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span> </div>\n+<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> </div>\n+<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> </div>\n+<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span><span class=\"keyword\">namespace </span>BasisFactory {</div>\n+<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> </div>\n+<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Gr<span class=\"keywordtype\">id</span>View, <span class=\"keyword\">class</span> PreBasisFactory></div>\n+<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00224.html#a1f0dc55c03c3a9862c76456d5574abe2\"> 190</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00224.html#a1f0dc55c03c3a9862c76456d5574abe2\">makeBasis</a>(<span class=\"keyword\">const</span> GridView& gridView, PreBasisFactory&& preBasisFactory)</div>\n+<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span>{</div>\n+<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00219.html#a060058e4e3c070530978192cb7c99d39\">DefaultGlobalBasis</a>(preBasisFactory(gridView));</div>\n <div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span>}</div>\n <div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> </div>\n-<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> </div>\n+<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span>} <span class=\"comment\">// end namespace BasisFactory</span></div>\n <div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> </div>\n-<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> LocalView, <span class=\"keyword\">class</span> Intersection></div>\n-<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00214.html#ga09ad7987f85909bfcf269a0de9c652d8\"> 216</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00214.html#ga09ad7987f85909bfcf269a0de9c652d8\">subEntityDOFs</a>(<span class=\"keyword\">const</span> LocalView& localView, <span class=\"keyword\">const</span> Intersection& intersection)</div>\n-<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span>{</div>\n-<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> <span class=\"keyword\">using </span>GridView = <span class=\"keyword\">typename</span> LocalView::GridView;</div>\n-<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> <a class=\"code hl_class\" href=\"a01803.html\">SubEntityDOFs<GridView></a> <a class=\"code hl_function\" href=\"a00214.html#ga09ad7987f85909bfcf269a0de9c652d8\">subEntityDOFs</a>;</div>\n-<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span> <a class=\"code hl_function\" href=\"a00214.html#ga09ad7987f85909bfcf269a0de9c652d8\">subEntityDOFs</a>.bind(localView, intersection);</div>\n-<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00214.html#ga09ad7987f85909bfcf269a0de9c652d8\">subEntityDOFs</a>;</div>\n-<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span>}</div>\n-<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> </div>\n-<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> </div>\n-<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span> </div>\n-<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span>} <span class=\"comment\">// namespace Functions</span></div>\n-<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span>} <span class=\"comment\">// namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> </div>\n-<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH</span></div>\n-<div class=\"ttc\" id=\"aa00214_html_ga09ad7987f85909bfcf269a0de9c652d8\"><div class=\"ttname\"><a href=\"a00214.html#ga09ad7987f85909bfcf269a0de9c652d8\">Dune::Functions::subEntityDOFs</a></div><div class=\"ttdeci\">auto subEntityDOFs(const LocalView &localView, const Intersection &intersection)</div><div class=\"ttdoc\">Create bound SubEntityDOFs object.</div><div class=\"ttdef\"><b>Definition:</b> subentitydofs.hh:216</div></div>\n+<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span><span class=\"comment\">// Backward compatibility</span></div>\n+<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span><span class=\"keyword\">namespace </span>BasisBuilder {</div>\n+<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> </div>\n+<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> <span class=\"keyword\">using namespace </span>BasisFactory;</div>\n+<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> </div>\n+<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span>}</div>\n+<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> </div>\n+<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> </div>\n+<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span>} <span class=\"comment\">// end namespace Functions</span></div>\n+<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span>} <span class=\"comment\">// end namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> </div>\n+<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span> </div>\n+<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> </div>\n+<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH</span></div>\n+<div class=\"ttc\" id=\"aa00029_html\"><div class=\"ttname\"><a href=\"a00029.html\">type_traits.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00128_html\"><div class=\"ttname\"><a href=\"a00128.html\">defaultlocalview.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00215_html_ga673247dd74bcdd9e5acfc7735faf8a5b\"><div class=\"ttname\"><a href=\"a00215.html#ga673247dd74bcdd9e5acfc7735faf8a5b\">Dune::Functions::enableIfConstructible</a></div><div class=\"ttdeci\">typename std::enable_if< std::is_constructible< T, Args... >::value, int >::type enableIfConstructible</div><div class=\"ttdoc\">Helper to constrain forwarding constructors.</div><div class=\"ttdef\"><b>Definition:</b> type_traits.hh:26</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa01803_html\"><div class=\"ttname\"><a href=\"a01803.html\">Dune::Functions::SubEntityDOFs</a></div><div class=\"ttdoc\">Range of DOFs associated to sub-entity.</div><div class=\"ttdef\"><b>Definition:</b> subentitydofs.hh:42</div></div>\n-<div class=\"ttc\" id=\"aa01803_html_a1cdf6bb0ea464ebf9df5ac067a218fd9\"><div class=\"ttname\"><a href=\"a01803.html#a1cdf6bb0ea464ebf9df5ac067a218fd9\">Dune::Functions::SubEntityDOFs::begin</a></div><div class=\"ttdeci\">auto begin() const</div><div class=\"ttdoc\">Create begin iterator for access to range of contained local indices.</div><div class=\"ttdef\"><b>Definition:</b> subentitydofs.hh:110</div></div>\n-<div class=\"ttc\" id=\"aa01803_html_a2192e4fe71d9642ccd3ba5a64797a823\"><div class=\"ttname\"><a href=\"a01803.html#a2192e4fe71d9642ccd3ba5a64797a823\">Dune::Functions::SubEntityDOFs::size</a></div><div class=\"ttdeci\">auto size() const</div><div class=\"ttdoc\">Return number of contained DOFs.</div><div class=\"ttdef\"><b>Definition:</b> subentitydofs.hh:122</div></div>\n-<div class=\"ttc\" id=\"aa01803_html_a263bb19c72865bbad450b3c21ba6ad23\"><div class=\"ttname\"><a href=\"a01803.html#a263bb19c72865bbad450b3c21ba6ad23\">Dune::Functions::SubEntityDOFs::bind</a></div><div class=\"ttdeci\">SubEntityDOFs & bind(const LocalView &localView, const Intersection &intersection)</div><div class=\"ttdoc\">Bind SubEntityDOFs object to LocalView and sub-entity.</div><div class=\"ttdef\"><b>Definition:</b> subentitydofs.hh:104</div></div>\n-<div class=\"ttc\" id=\"aa01803_html_a4c581279b643d6b1800dfdadd73f4bda\"><div class=\"ttname\"><a href=\"a01803.html#a4c581279b643d6b1800dfdadd73f4bda\">Dune::Functions::SubEntityDOFs::contains</a></div><div class=\"ttdeci\">bool contains(std::size_t localIndex) const</div><div class=\"ttdoc\">Check if given local index is contained in this range of DOFs.</div><div class=\"ttdef\"><b>Definition:</b> subentitydofs.hh:134</div></div>\n-<div class=\"ttc\" id=\"aa01803_html_a773f6413ae560bdbccdfedf332b602dd\"><div class=\"ttname\"><a href=\"a01803.html#a773f6413ae560bdbccdfedf332b602dd\">Dune::Functions::SubEntityDOFs::end</a></div><div class=\"ttdeci\">auto end() const</div><div class=\"ttdoc\">Create end iterator for access to range of contained local indices.</div><div class=\"ttdef\"><b>Definition:</b> subentitydofs.hh:116</div></div>\n-<div class=\"ttc\" id=\"aa01803_html_acac48052c1a9079f779b64e68ce52e82\"><div class=\"ttname\"><a href=\"a01803.html#acac48052c1a9079f779b64e68ce52e82\">Dune::Functions::SubEntityDOFs::bind</a></div><div class=\"ttdeci\">SubEntityDOFs & bind(const LocalView &localView, std::size_t subEntityIndex, std::size_t subEntityCodim)</div><div class=\"ttdoc\">Bind SubEntityDOFs object to LocalView and sub-entity.</div><div class=\"ttdef\"><b>Definition:</b> subentitydofs.hh:64</div></div>\n+<div class=\"ttc\" id=\"aa00219_html_a060058e4e3c070530978192cb7c99d39\"><div class=\"ttname\"><a href=\"a00219.html#a060058e4e3c070530978192cb7c99d39\">Dune::Functions::DefaultGlobalBasis</a></div><div class=\"ttdeci\">DefaultGlobalBasis(PreBasis &&) -> DefaultGlobalBasis< std::decay_t< PreBasis > ></div></div>\n+<div class=\"ttc\" id=\"aa00224_html_a1f0dc55c03c3a9862c76456d5574abe2\"><div class=\"ttname\"><a href=\"a00224.html#a1f0dc55c03c3a9862c76456d5574abe2\">Dune::Functions::BasisFactory::makeBasis</a></div><div class=\"ttdeci\">auto makeBasis(const GridView &gridView, PreBasisFactory &&preBasisFactory)</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:190</div></div>\n+<div class=\"ttc\" id=\"aa01555_html\"><div class=\"ttname\"><a href=\"a01555.html\">Dune::Functions::DefaultGlobalBasis</a></div><div class=\"ttdoc\">Global basis for given pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:46</div></div>\n+<div class=\"ttc\" id=\"aa01555_html_a00a78eb6f90d02a8c5dd3d4718b14e99\"><div class=\"ttname\"><a href=\"a01555.html#a00a78eb6f90d02a8c5dd3d4718b14e99\">Dune::Functions::DefaultGlobalBasis::SizePrefix</a></div><div class=\"ttdeci\">Dune::ReservedVector< std::size_t, PreBasis::multiIndexBufferSize > SizePrefix</div><div class=\"ttdoc\">Type used for prefixes handed to the size() method.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:69</div></div>\n+<div class=\"ttc\" id=\"aa01555_html_a10db3413eda75531530d9b0bf82e8335\"><div class=\"ttname\"><a href=\"a01555.html#a10db3413eda75531530d9b0bf82e8335\">Dune::Functions::DefaultGlobalBasis::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdoc\">Type used for indices and size information.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:60</div></div>\n+<div class=\"ttc\" id=\"aa01555_html_a2b9cab135f3764650ad063d49c4c2fcb\"><div class=\"ttname\"><a href=\"a01555.html#a2b9cab135f3764650ad063d49c4c2fcb\">Dune::Functions::DefaultGlobalBasis::GridView</a></div><div class=\"ttdeci\">typename PreBasis::GridView GridView</div><div class=\"ttdoc\">The grid view that the FE space is defined on.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:57</div></div>\n+<div class=\"ttc\" id=\"aa01555_html_a34897e5d2dd92bf5f34d61e47a9eff66\"><div class=\"ttname\"><a href=\"a01555.html#a34897e5d2dd92bf5f34d61e47a9eff66\">Dune::Functions::DefaultGlobalBasis::gridView</a></div><div class=\"ttdeci\">const GridView & gridView() const</div><div class=\"ttdoc\">Obtain the grid view that the basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:107</div></div>\n+<div class=\"ttc\" id=\"aa01555_html_a4d800349e8aa9ae148a178827d51ccda\"><div class=\"ttname\"><a href=\"a01555.html#a4d800349e8aa9ae148a178827d51ccda\">Dune::Functions::DefaultGlobalBasis::PreBasis</a></div><div class=\"ttdeci\">PB PreBasis</div><div class=\"ttdoc\">Pre-basis providing the implementation details.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:51</div></div>\n+<div class=\"ttc\" id=\"aa01555_html_a6683475941d1516b89a98d6ace4d5842\"><div class=\"ttname\"><a href=\"a01555.html#a6683475941d1516b89a98d6ace4d5842\">Dune::Functions::DefaultGlobalBasis::preBasis</a></div><div class=\"ttdeci\">PreBasis & preBasis()</div><div class=\"ttdoc\">Obtain the pre-basis providing the implementation details.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:119</div></div>\n+<div class=\"ttc\" id=\"aa01555_html_a6b7b8b0a9c65da16b6fe1b7e6ef20e8c\"><div class=\"ttname\"><a href=\"a01555.html#a6b7b8b0a9c65da16b6fe1b7e6ef20e8c\">Dune::Functions::DefaultGlobalBasis::update</a></div><div class=\"ttdeci\">void update(const GridView &gv)</div><div class=\"ttdoc\">Update the stored grid view.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:130</div></div>\n+<div class=\"ttc\" id=\"aa01555_html_a6dd2621b698c77033f1b37443b7c7e65\"><div class=\"ttname\"><a href=\"a01555.html#a6dd2621b698c77033f1b37443b7c7e65\">Dune::Functions::DefaultGlobalBasis::LocalView</a></div><div class=\"ttdeci\">DefaultLocalView< DefaultGlobalBasis< PreBasis > > LocalView</div><div class=\"ttdoc\">Type of the local view on the restriction of the basis to a single element.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:63</div></div>\n+<div class=\"ttc\" id=\"aa01555_html_a71e8362c3966f9bc4ced844fb8474be7\"><div class=\"ttname\"><a href=\"a01555.html#a71e8362c3966f9bc4ced844fb8474be7\">Dune::Functions::DefaultGlobalBasis::MultiIndex</a></div><div class=\"ttdeci\">typename LocalView::MultiIndex MultiIndex</div><div class=\"ttdoc\">Type used for global numbering of the basis vectors.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:66</div></div>\n+<div class=\"ttc\" id=\"aa01555_html_a752ada691a91cb10c109e3a1093df507\"><div class=\"ttname\"><a href=\"a01555.html#a752ada691a91cb10c109e3a1093df507\">Dune::Functions::DefaultGlobalBasis::size</a></div><div class=\"ttdeci\">size_type size(const SizePrefix &prefix) const</div><div class=\"ttdoc\">Return number of possible values for next position in multi index.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:149</div></div>\n+<div class=\"ttc\" id=\"aa01555_html_a762dcee80e33652a80d5aca07244bbb5\"><div class=\"ttname\"><a href=\"a01555.html#a762dcee80e33652a80d5aca07244bbb5\">Dune::Functions::DefaultGlobalBasis::dimension</a></div><div class=\"ttdeci\">size_type dimension() const</div><div class=\"ttdoc\">Get the total dimension of the space spanned by this basis.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:137</div></div>\n+<div class=\"ttc\" id=\"aa01555_html_a7d0a58f78727ab3b0d9159a899031f07\"><div class=\"ttname\"><a href=\"a01555.html#a7d0a58f78727ab3b0d9159a899031f07\">Dune::Functions::DefaultGlobalBasis::preBasis_</a></div><div class=\"ttdeci\">PreBasis preBasis_</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:173</div></div>\n+<div class=\"ttc\" id=\"aa01555_html_a836be8e833f7f5b1910bc247658df00a\"><div class=\"ttname\"><a href=\"a01555.html#a836be8e833f7f5b1910bc247658df00a\">Dune::Functions::DefaultGlobalBasis::localView</a></div><div class=\"ttdeci\">LocalView localView() const</div><div class=\"ttdoc\">Return local view for basis.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:155</div></div>\n+<div class=\"ttc\" id=\"aa01555_html_aa33c9a46f1e7548b2a956c36f6554e89\"><div class=\"ttname\"><a href=\"a01555.html#aa33c9a46f1e7548b2a956c36f6554e89\">Dune::Functions::DefaultGlobalBasis::PrefixPath</a></div><div class=\"ttdeci\">TypeTree::HybridTreePath<> PrefixPath</div><div class=\"ttdoc\">The empty prefix path that identifies the root in the local ansatz tree.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:54</div></div>\n+<div class=\"ttc\" id=\"aa01555_html_ac8c43e23bffc9116702a479f1c1d01f4\"><div class=\"ttname\"><a href=\"a01555.html#ac8c43e23bffc9116702a479f1c1d01f4\">Dune::Functions::DefaultGlobalBasis::DefaultGlobalBasis</a></div><div class=\"ttdeci\">DefaultGlobalBasis(T &&... t)</div><div class=\"ttdoc\">Constructor.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:82</div></div>\n+<div class=\"ttc\" id=\"aa01555_html_aca0a06166bf28fbc1f22dbcb7ca98812\"><div class=\"ttname\"><a href=\"a01555.html#aca0a06166bf28fbc1f22dbcb7ca98812\">Dune::Functions::DefaultGlobalBasis::DefaultGlobalBasis</a></div><div class=\"ttdeci\">DefaultGlobalBasis(const GridView &gridView, PreBasisFactory &&factory)</div><div class=\"ttdoc\">Constructor from a PreBasis factory.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:98</div></div>\n+<div class=\"ttc\" id=\"aa01555_html_ad77464358ec140b149c1391d036eaed1\"><div class=\"ttname\"><a href=\"a01555.html#ad77464358ec140b149c1391d036eaed1\">Dune::Functions::DefaultGlobalBasis::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdoc\">Return number of possible values for next position in empty multi index.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:143</div></div>\n+<div class=\"ttc\" id=\"aa01555_html_ae9a040d36416bf5456a7d7cbca241f17\"><div class=\"ttname\"><a href=\"a01555.html#ae9a040d36416bf5456a7d7cbca241f17\">Dune::Functions::DefaultGlobalBasis::preBasis</a></div><div class=\"ttdeci\">const PreBasis & preBasis() const</div><div class=\"ttdoc\">Obtain the pre-basis providing the implementation details.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:113</div></div>\n+<div class=\"ttc\" id=\"aa01555_html_aeed6ef808c134ff63cea8102b7a03c22\"><div class=\"ttname\"><a href=\"a01555.html#aeed6ef808c134ff63cea8102b7a03c22\">Dune::Functions::DefaultGlobalBasis::prefixPath_</a></div><div class=\"ttdeci\">PrefixPath prefixPath_</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:174</div></div>\n+<div class=\"ttc\" id=\"aa01555_html_aeff2d7cf6ef6c17e4c27f12d997701a3\"><div class=\"ttname\"><a href=\"a01555.html#aeff2d7cf6ef6c17e4c27f12d997701a3\">Dune::Functions::DefaultGlobalBasis::rootBasis</a></div><div class=\"ttdeci\">const DefaultGlobalBasis & rootBasis() const</div><div class=\"ttdoc\">Return *this because we are not embedded in a larger basis.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:161</div></div>\n+<div class=\"ttc\" id=\"aa01555_html_afa626db7f92e548a453532c0a600301f\"><div class=\"ttname\"><a href=\"a01555.html#afa626db7f92e548a453532c0a600301f\">Dune::Functions::DefaultGlobalBasis::prefixPath</a></div><div class=\"ttdeci\">const PrefixPath & prefixPath() const</div><div class=\"ttdoc\">Return empty path, because this is the root in the local ansatz tree.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:167</div></div>\n+<div class=\"ttc\" id=\"aa01559_html\"><div class=\"ttname\"><a href=\"a01559.html\">Dune::Functions::DefaultLocalView</a></div><div class=\"ttdoc\">The restriction of a finite element basis to a single element.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:28</div></div>\n+<div class=\"ttc\" id=\"aa01559_html_acffe4cd37e8a7720e1a3eced31570c5a\"><div class=\"ttname\"><a href=\"a01559.html#acffe4cd37e8a7720e1a3eced31570c5a\">Dune::Functions::DefaultLocalView::MultiIndex</a></div><div class=\"ttdeci\">std::conditional_t<(PreBasis::minMultiIndexSize==PreBasis::maxMultiIndexSize), StaticMultiIndex< size_type, PreBasis::maxMultiIndexSize >, Dune::ReservedVector< size_type, PreBasis::multiIndexBufferSize > > MultiIndex</div><div class=\"ttdoc\">Type used for global numbering of the basis vectors.</div><div class=\"ttdef\"><b>Definition:</b> defaultlocalview.hh:64</div></div>\n+<div class=\"ttc\" id=\"aa02876_html\"><div class=\"ttname\"><a href=\"a02876.html\">concepts.hh</a></div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,176 +5,283 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-subentitydofs.hh\n+defaultglobalbasis.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH\n- 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH\n+ 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH\n+ 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH\n 5\n- 6#include <vector>\n- 7\n- 8#include <dune/geometry/referenceelements.hh>\n- 9#include <dune/typetree/traversal.hh>\n- 10\n- 11\n- 12\n- 13namespace Dune {\n- 14namespace Functions {\n- 15\n- 16\n+ 6#include <cstddef>\n+ 7#include <type_traits>\n+ 8#include <utility>\n+ 9\n+ 10#include <dune/common/reservedvector.hh>\n+ 11#include <dune/common/typeutilities.hh>\n+ 12#include <dune/common/concept.hh>\n+ 13\n+ 14#include <dune/functions/common/type_traits.hh>\n+ 15#include <dune/functions/functionspacebases/defaultlocalview.hh>\n+ 16#include <dune/functions/functionspacebases/concepts.hh>\n 17\n- 40template<class GridView>\n-41class SubEntityDOFs\n- 42{\n- 43 static const int dim = GridView::dimension;\n- 44\n- 45public:\n- 46\n- 63 template<class LocalView>\n-64 SubEntityDOFs& bind(const LocalView& localView, std::size_t subEntityIndex,\n-std::size_t subEntityCodim)\n- 65 {\n- 66 // fill vector with local indices of all DOFs contained in subentity\n- 67 containedDOFs_.clear();\n- 68 dofIsContained_.assign(localView.size(), false);\n- 69\n- 70 auto re = Dune::referenceElement<double,dim>(localView.element().type());\n- 71\n- 72 Dune::TypeTree::forEachLeafNode(localView.tree(), [&](auto&& node, auto&& /\n-*treePath*/) {\n- 73 const auto& localCoefficients = node.finiteElement().localCoefficients();\n- 74 std::size_t localSize = localCoefficients.size();\n- 75 for(std::size_t i=0; i<localSize; ++i)\n- 76 {\n- 77 auto localKey = localCoefficients.localKey(i);\n- 78 if (re.subEntities(subEntityIndex, subEntityCodim, localKey.codim\n-()).contains(localKey.subEntity()))\n- 79 {\n- 80 containedDOFs_.push_back(node.localIndex(i));\n- 81 dofIsContained_[node.localIndex(i)] = true;\n- 82 }\n- 83 }\n- 84 });\n- 85 return *this;\n- 86 }\n- 87\n- 103 template<class LocalView, class Intersection>\n-104 SubEntityDOFs& bind(const LocalView& localView, const Intersection&\n-intersection)\n- 105 {\n- 106 return bind(localView, intersection.indexInInside(), 1);\n- 107 }\n- 108\n-110 auto begin() const\n- 111 {\n- 112 return containedDOFs_.cbegin();\n- 113 }\n- 114\n-116 auto end() const\n- 117 {\n- 118 return containedDOFs_.cend();\n- 119 }\n- 120\n-122 auto size() const\n- 123 {\n- 124 return containedDOFs_.size();\n- 125 }\n- 126\n-128 decltype(auto) operator[](std::size_t i) const\n- 129 {\n- 130 return containedDOFs_[i];\n- 131 }\n- 132\n-134 bool contains(std::size_t localIndex) const\n- 135 {\n- 136 return dofIsContained_[localIndex];\n- 137 }\n- 138\n- 139private:\n- 140\n- 141 std::vector<std::size_t> containedDOFs_;\n- 142 std::vector<bool> dofIsContained_;\n- 143};\n- 144\n- 145\n- 146\n- 159template<class T>\n-160auto subEntityDOFs(const T&)\n- 161{\n- 162 return SubEntityDOFs<typename_T::GridView>{};\n- 163}\n- 164\n+ 18\n+ 19\n+ 20namespace Dune {\n+ 21namespace Functions {\n+ 22\n+ 23\n+ 24\n+ 44template<class PB>\n+45class DefaultGlobalBasis\n+ 46{\n+ 47\n+ 48public:\n+ 49\n+51 using PreBasis = PB;\n+ 52\n+54 using PrefixPath = TypeTree::HybridTreePath<>;\n+ 55\n+57 using GridView = typename PreBasis::GridView;\n+ 58\n+60 using size_type = std::size_t;\n+ 61\n+63 using LocalView = DefaultLocalView<DefaultGlobalBasis<PreBasis>>;\n+ 64\n+66 using MultiIndex = typename LocalView::MultiIndex;\n+ 67\n+69 using SizePrefix = Dune::ReservedVector<std::size_t, PreBasis::\n+multiIndexBufferSize>;\n+ 70\n+ 79 template<class... T,\n+ 80 disableCopyMove<DefaultGlobalBasis, T...> = 0,\n+ 81 enableIfConstructible<PreBasis, T...> = 0>\n+82 DefaultGlobalBasis(T&&... t) :\n+ 83 preBasis_(std::forward<T>(t)...),\n+ 84 prefixPath_()\n+ 85 {\n+ 86 static_assert(models<Concept::PreBasis<GridView>, PreBasis>(), \"Type passed\n+to DefaultGlobalBasis does not model the PreBasis concept.\");\n+ 87 preBasis_.initializeIndices();\n+ 88 }\n+ 89\n+ 96 template<class PreBasisFactory,\n+ 97 std::enable_if_t<Dune::IsCallable<PreBasisFactory(GridView), PreBasis>::\n+value, int> = 0>\n+98 DefaultGlobalBasis(const GridView& gridView, PreBasisFactory&& factory) :\n+ 99 preBasis_(factory(gridView)),\n+ 100 prefixPath_()\n+ 101 {\n+ 102 static_assert(models<Concept::PreBasis<GridView>, PreBasis>(), \"Type\n+passed to DefaultGlobalBasis does not model the PreBasis concept.\");\n+ 103 preBasis_.initializeIndices();\n+ 104 }\n+ 105\n+107 const GridView& gridView() const\n+ 108 {\n+ 109 return preBasis_.gridView();\n+ 110 }\n+ 111\n+113 const PreBasis& preBasis() const\n+ 114 {\n+ 115 return preBasis_;\n+ 116 }\n+ 117\n+119 PreBasis& preBasis()\n+ 120 {\n+ 121 return preBasis_;\n+ 122 }\n+ 123\n+130 void update(const GridView & gv)\n+ 131 {\n+ 132 preBasis_.update(gv);\n+ 133 preBasis_.initializeIndices();\n+ 134 }\n+ 135\n+137 size_type dimension() const\n+ 138 {\n+ 139 return preBasis_.dimension();\n+ 140 }\n+ 141\n+143 size_type size() const\n+ 144 {\n+ 145 return preBasis_.size();\n+ 146 }\n+ 147\n+149 size_type size(const SizePrefix& prefix) const\n+ 150 {\n+ 151 return preBasis_.size(prefix);\n+ 152 }\n+ 153\n+155 LocalView localView() const\n+ 156 {\n+ 157 return LocalView(*this);\n+ 158 }\n+ 159\n+161 const DefaultGlobalBasis& rootBasis() const\n+ 162 {\n+ 163 return *this;\n+ 164 }\n 165\n- 166\n- 186template<class LocalView>\n-187auto subEntityDOFs(const LocalView& localView, std::size_t subEntityIndex,\n-std::size_t subEntityCodim)\n- 188{\n- 189 using GridView = typename LocalView::GridView;\n- 190 SubEntityDOFs<GridView> subEntityDOFs;\n- 191 subEntityDOFs.bind(localView, subEntityIndex, subEntityCodim);\n- 192 return subEntityDOFs;\n+167 const PrefixPath& prefixPath() const\n+ 168 {\n+ 169 return prefixPath_;\n+ 170 }\n+ 171\n+ 172protected:\n+173 PreBasis preBasis_;\n+174 PrefixPath prefixPath_;\n+ 175};\n+ 176\n+ 177\n+ 178\n+ 179template<class PreBasis>\n+180DefaultGlobalBasis(PreBasis&&) -> DefaultGlobalBasis<std::\n+decay_t<PreBasis>>;\n+ 181\n+ 182template<class GridView, class PreBasisFactory>\n+183DefaultGlobalBasis(const GridView& gv, PreBasisFactory&& f) -\n+> DefaultGlobalBasis<std::decay_t<decltype(f(gv))>>;\n+ 184\n+ 185\n+ 186\n+ 187namespace BasisFactory {\n+ 188\n+ 189template<class GridView, class PreBasisFactory>\n+190auto makeBasis(const GridView& gridView, PreBasisFactory&& preBasisFactory)\n+ 191{\n+ 192 return DefaultGlobalBasis(preBasisFactory(gridView));\n 193}\n 194\n- 195\n+ 195} // end namespace BasisFactory\n 196\n- 215template<class LocalView, class Intersection>\n-216auto subEntityDOFs(const LocalView& localView, const Intersection&\n-intersection)\n- 217{\n- 218 using GridView = typename LocalView::GridView;\n- 219 SubEntityDOFs<GridView> subEntityDOFs;\n- 220 subEntityDOFs.bind(localView, intersection);\n- 221 return subEntityDOFs;\n- 222}\n- 223\n- 224\n- 225\n- 226} // namespace Functions\n- 227} // namespace Dune\n- 228\n- 229#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBENTITYDOFS_HH\n-Dune::Functions::subEntityDOFs\n-auto subEntityDOFs(const LocalView &localView, const Intersection\n-&intersection)\n-Create bound SubEntityDOFs object.\n-Definition: subentitydofs.hh:216\n+ 197// Backward compatibility\n+ 198namespace BasisBuilder {\n+ 199\n+ 200 using namespace BasisFactory;\n+ 201\n+ 202}\n+ 203\n+ 204\n+ 205} // end namespace Functions\n+ 206} // end namespace Dune\n+ 207\n+ 208\n+ 209\n+ 210#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH\n+type_traits.hh\n+defaultlocalview.hh\n+Dune::Functions::enableIfConstructible\n+typename std::enable_if< std::is_constructible< T, Args... >::value, int >::\n+type enableIfConstructible\n+Helper to constrain forwarding constructors.\n+Definition: type_traits.hh:26\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::SubEntityDOFs\n-Range of DOFs associated to sub-entity.\n-Definition: subentitydofs.hh:42\n-Dune::Functions::SubEntityDOFs::begin\n-auto begin() const\n-Create begin iterator for access to range of contained local indices.\n-Definition: subentitydofs.hh:110\n-Dune::Functions::SubEntityDOFs::size\n-auto size() const\n-Return number of contained DOFs.\n-Definition: subentitydofs.hh:122\n-Dune::Functions::SubEntityDOFs::bind\n-SubEntityDOFs & bind(const LocalView &localView, const Intersection\n-&intersection)\n-Bind SubEntityDOFs object to LocalView and sub-entity.\n-Definition: subentitydofs.hh:104\n-Dune::Functions::SubEntityDOFs::contains\n-bool contains(std::size_t localIndex) const\n-Check if given local index is contained in this range of DOFs.\n-Definition: subentitydofs.hh:134\n-Dune::Functions::SubEntityDOFs::end\n-auto end() const\n-Create end iterator for access to range of contained local indices.\n-Definition: subentitydofs.hh:116\n-Dune::Functions::SubEntityDOFs::bind\n-SubEntityDOFs & bind(const LocalView &localView, std::size_t subEntityIndex,\n-std::size_t subEntityCodim)\n-Bind SubEntityDOFs object to LocalView and sub-entity.\n-Definition: subentitydofs.hh:64\n+Dune::Functions::DefaultGlobalBasis\n+DefaultGlobalBasis(PreBasis &&) -> DefaultGlobalBasis< std::decay_t< PreBasis >\n+>\n+Dune::Functions::BasisFactory::makeBasis\n+auto makeBasis(const GridView &gridView, PreBasisFactory &&preBasisFactory)\n+Definition: defaultglobalbasis.hh:190\n+Dune::Functions::DefaultGlobalBasis\n+Global basis for given pre-basis.\n+Definition: defaultglobalbasis.hh:46\n+Dune::Functions::DefaultGlobalBasis::SizePrefix\n+Dune::ReservedVector< std::size_t, PreBasis::multiIndexBufferSize > SizePrefix\n+Type used for prefixes handed to the size() method.\n+Definition: defaultglobalbasis.hh:69\n+Dune::Functions::DefaultGlobalBasis::size_type\n+std::size_t size_type\n+Type used for indices and size information.\n+Definition: defaultglobalbasis.hh:60\n+Dune::Functions::DefaultGlobalBasis::GridView\n+typename PreBasis::GridView GridView\n+The grid view that the FE space is defined on.\n+Definition: defaultglobalbasis.hh:57\n+Dune::Functions::DefaultGlobalBasis::gridView\n+const GridView & gridView() const\n+Obtain the grid view that the basis is defined on.\n+Definition: defaultglobalbasis.hh:107\n+Dune::Functions::DefaultGlobalBasis::PreBasis\n+PB PreBasis\n+Pre-basis providing the implementation details.\n+Definition: defaultglobalbasis.hh:51\n+Dune::Functions::DefaultGlobalBasis::preBasis\n+PreBasis & preBasis()\n+Obtain the pre-basis providing the implementation details.\n+Definition: defaultglobalbasis.hh:119\n+Dune::Functions::DefaultGlobalBasis::update\n+void update(const GridView &gv)\n+Update the stored grid view.\n+Definition: defaultglobalbasis.hh:130\n+Dune::Functions::DefaultGlobalBasis::LocalView\n+DefaultLocalView< DefaultGlobalBasis< PreBasis > > LocalView\n+Type of the local view on the restriction of the basis to a single element.\n+Definition: defaultglobalbasis.hh:63\n+Dune::Functions::DefaultGlobalBasis::MultiIndex\n+typename LocalView::MultiIndex MultiIndex\n+Type used for global numbering of the basis vectors.\n+Definition: defaultglobalbasis.hh:66\n+Dune::Functions::DefaultGlobalBasis::size\n+size_type size(const SizePrefix &prefix) const\n+Return number of possible values for next position in multi index.\n+Definition: defaultglobalbasis.hh:149\n+Dune::Functions::DefaultGlobalBasis::dimension\n+size_type dimension() const\n+Get the total dimension of the space spanned by this basis.\n+Definition: defaultglobalbasis.hh:137\n+Dune::Functions::DefaultGlobalBasis::preBasis_\n+PreBasis preBasis_\n+Definition: defaultglobalbasis.hh:173\n+Dune::Functions::DefaultGlobalBasis::localView\n+LocalView localView() const\n+Return local view for basis.\n+Definition: defaultglobalbasis.hh:155\n+Dune::Functions::DefaultGlobalBasis::PrefixPath\n+TypeTree::HybridTreePath<> PrefixPath\n+The empty prefix path that identifies the root in the local ansatz tree.\n+Definition: defaultglobalbasis.hh:54\n+Dune::Functions::DefaultGlobalBasis::DefaultGlobalBasis\n+DefaultGlobalBasis(T &&... t)\n+Constructor.\n+Definition: defaultglobalbasis.hh:82\n+Dune::Functions::DefaultGlobalBasis::DefaultGlobalBasis\n+DefaultGlobalBasis(const GridView &gridView, PreBasisFactory &&factory)\n+Constructor from a PreBasis factory.\n+Definition: defaultglobalbasis.hh:98\n+Dune::Functions::DefaultGlobalBasis::size\n+size_type size() const\n+Return number of possible values for next position in empty multi index.\n+Definition: defaultglobalbasis.hh:143\n+Dune::Functions::DefaultGlobalBasis::preBasis\n+const PreBasis & preBasis() const\n+Obtain the pre-basis providing the implementation details.\n+Definition: defaultglobalbasis.hh:113\n+Dune::Functions::DefaultGlobalBasis::prefixPath_\n+PrefixPath prefixPath_\n+Definition: defaultglobalbasis.hh:174\n+Dune::Functions::DefaultGlobalBasis::rootBasis\n+const DefaultGlobalBasis & rootBasis() const\n+Return *this because we are not embedded in a larger basis.\n+Definition: defaultglobalbasis.hh:161\n+Dune::Functions::DefaultGlobalBasis::prefixPath\n+const PrefixPath & prefixPath() const\n+Return empty path, because this is the root in the local ansatz tree.\n+Definition: defaultglobalbasis.hh:167\n+Dune::Functions::DefaultLocalView\n+The restriction of a finite element basis to a single element.\n+Definition: defaultlocalview.hh:28\n+Dune::Functions::DefaultLocalView::MultiIndex\n+std::conditional_t<(PreBasis::minMultiIndexSize==PreBasis::maxMultiIndexSize),\n+StaticMultiIndex< size_type, PreBasis::maxMultiIndexSize >, Dune::\n+ReservedVector< size_type, PreBasis::multiIndexBufferSize > > MultiIndex\n+Type used for global numbering of the basis vectors.\n+Definition: defaultlocalview.hh:64\n+concepts.hh\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00155.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00155.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: sizeinfo.hh File Reference</title>\n+<title>dune-functions: flatvectorview.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -63,42 +63,48 @@\n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n-<a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> |\n <a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">sizeinfo.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">flatvectorview.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <div class=\"textblock\"><code>#include <array></code><br />\n+<code>#include <dune/common/concept.hh></code><br />\n+<code>#include <dune/common/hybridutilities.hh></code><br />\n+<code>#include <dune/common/indices.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a02876_source.html\">dune/functions/functionspacebases/concepts.hh</a>></code><br />\n </div>\n <p><a href=\"a00155_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n-Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01799.html\">Dune::Functions::SizeInfo< B ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A class encapsulating size information. <a href=\"a01799.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-</table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n Functions</h2></td></tr>\n-<tr class=\"memitem:abd7e25a89325dbe2232b17308dae45f2\"><td class=\"memTemplParams\" colspan=\"2\">template<class Basis > </td></tr>\n-<tr class=\"memitem:abd7e25a89325dbe2232b17308dae45f2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">SizeInfo< Basis > </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#abd7e25a89325dbe2232b17308dae45f2\">Dune::Functions::sizeInfo</a> (const Basis &basis)</td></tr>\n-<tr class=\"separator:abd7e25a89325dbe2232b17308dae45f2\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ad98b265d97ebd619e7732df6a8d1f7da\"><td class=\"memTemplParams\" colspan=\"2\">template<class T > </td></tr>\n+<tr class=\"memitem:ad98b265d97ebd619e7732df6a8d1f7da\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\">Dune::Functions::flatVectorView</a> (T &t)</td></tr>\n+<tr class=\"memdesc:ad98b265d97ebd619e7732df6a8d1f7da\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create flat vector view of passed mutable container. <a href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\">More...</a><br /></td></tr>\n+<tr class=\"separator:ad98b265d97ebd619e7732df6a8d1f7da\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ac37c350bd2f6cb4fea793ac4f665c0fe\"><td class=\"memTemplParams\" colspan=\"2\">template<class T > </td></tr>\n+<tr class=\"memitem:ac37c350bd2f6cb4fea793ac4f665c0fe\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#ac37c350bd2f6cb4fea793ac4f665c0fe\">Dune::Functions::flatVectorView</a> (const T &t)</td></tr>\n+<tr class=\"memdesc:ac37c350bd2f6cb4fea793ac4f665c0fe\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create flat vector view of passed const container. <a href=\"a00219.html#ac37c350bd2f6cb4fea793ac4f665c0fe\">More...</a><br /></td></tr>\n+<tr class=\"separator:ac37c350bd2f6cb4fea793ac4f665c0fe\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a4fac6802f21000f59e52aade3cd47b08\"><td class=\"memTemplParams\" colspan=\"2\">template<class T > </td></tr>\n+<tr class=\"memitem:a4fac6802f21000f59e52aade3cd47b08\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a4fac6802f21000f59e52aade3cd47b08\">Dune::Functions::flatVectorView</a> (T &&t)</td></tr>\n+<tr class=\"memdesc:a4fac6802f21000f59e52aade3cd47b08\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create flat vector view of passed container temporary. <a href=\"a00219.html#a4fac6802f21000f59e52aade3cd47b08\">More...</a><br /></td></tr>\n+<tr class=\"separator:a4fac6802f21000f59e52aade3cd47b08\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,27 +5,36 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-Classes | Namespaces | Functions\n-sizeinfo.hh File Reference\n+Namespaces | Functions\n+flatvectorview.hh File Reference\n #include <array>\n+#include <dune/common/concept.hh>\n+#include <dune/common/hybridutilities.hh>\n+#include <dune/common/indices.hh>\n+#include <dune/functions/functionspacebases/concepts.hh>\n Go_to_the_source_code_of_this_file.\n- Classes\n-class \u00a0Dune::Functions::SizeInfo<_B_>\n-\u00a0 A class encapsulating size information. More...\n-\u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n Functions\n-template<class Basis >\n-SizeInfo< Basis >\u00a0Dune::Functions::sizeInfo (const Basis &basis)\n+template<class T >\n+auto\u00a0Dune::Functions::flatVectorView (T &t)\n+\u00a0 Create flat vector view of passed mutable container. More...\n+\u00a0\n+template<class T >\n+auto\u00a0Dune::Functions::flatVectorView (const T &t)\n+\u00a0 Create flat vector view of passed const container. More...\n+\u00a0\n+template<class T >\n+auto\u00a0Dune::Functions::flatVectorView (T &&t)\n+\u00a0 Create flat vector view of passed container temporary. More...\n \u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00155_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00155_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: sizeinfo.hh Source File</title>\n+<title>dune-functions: flatvectorview.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,84 +62,209 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">sizeinfo.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">flatvectorview.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00155.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATVECTORVIEW_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATVECTORVIEW_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <array></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span> </div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span> </div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span> </div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <array></span></div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/common/concept.hh></span></div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/hybridutilities.hh></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/common/indices.hh></span></div>\n <div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> B></div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01799.html\"> 24</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01799.html\">SizeInfo</a></div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a02876.html\">dune/functions/functionspacebases/concepts.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"keyword\">namespace </span>Impl {</div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> </div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> </div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> V></div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"keyword\">struct </span>FlatVectorBackend</div>\n <div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span>{</div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01799.html#aa558e8687398c74affd92abb8af9bd58\"> 27</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01799.html#aa558e8687398c74affd92abb8af9bd58\">Basis</a> = B;</div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01799.html#a9d54b03391ba53f2cde374099ef62c21\"> 28</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01799.html#a9d54b03391ba53f2cde374099ef62c21\">size_type</a> = <span class=\"keyword\">typename</span> Basis::size_type;</div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01799.html#a36c68248ee3be872cf53a7c8915773f2\"> 29</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01799.html#a36c68248ee3be872cf53a7c8915773f2\">SizePrefix</a> = <span class=\"keyword\">typename</span> Basis::SizePrefix;</div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> </div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01799.html#ac3e18dc3b17c52eafe2e803562d72c5b\"> 34</a></span> <a class=\"code hl_function\" href=\"a01799.html#ac3e18dc3b17c52eafe2e803562d72c5b\">SizeInfo</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01799.html#aa558e8687398c74affd92abb8af9bd58\">Basis</a>& basis) :</div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> <a class=\"code hl_variable\" href=\"a01799.html#add41e7177edce69126ff66367bfef2fc\">basis_</a>(&basis)</div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> {}</div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> </div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01799.html#a9c71fa33343b928c5b93e2c8dcb9595f\"> 41</a></span> <a class=\"code hl_typedef\" href=\"a01799.html#a9d54b03391ba53f2cde374099ef62c21\">size_type</a> <a class=\"code hl_function\" href=\"a01799.html#a9c71fa33343b928c5b93e2c8dcb9595f\">operator()</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01799.html#a36c68248ee3be872cf53a7c8915773f2\">SizePrefix</a>& prefix)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01799.html#add41e7177edce69126ff66367bfef2fc\">basis_</a>->size(prefix);</div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> }</div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> </div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01799.html#a4f2343f16899076f68aa9dbeef992d80\"> 52</a></span> <a class=\"code hl_typedef\" href=\"a01799.html#a9d54b03391ba53f2cde374099ef62c21\">size_type</a> <a class=\"code hl_function\" href=\"a01799.html#a4f2343f16899076f68aa9dbeef992d80\">size</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01799.html#a36c68248ee3be872cf53a7c8915773f2\">SizePrefix</a>& prefix)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01799.html#add41e7177edce69126ff66367bfef2fc\">basis_</a>->size(prefix);</div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> }</div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> </div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>VV, <span class=\"keyword\">class </span>Index,</div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> <span class=\"keyword\">typename</span> std::enable_if< models<Concept::HasIndexAccess, VV, Index>(), <span class=\"keywordtype\">int</span>>::type = 0></div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span> <span class=\"keyword\">static</span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) getEntry(VV&& v, <span class=\"keyword\">const</span> Index& i)</div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> {</div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> <span class=\"keywordflow\">return</span> v[i];</div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> }</div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> </div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>VV, <span class=\"keyword\">class </span>Index,</div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> <span class=\"keyword\">typename</span> std::enable_if< not models<Concept::HasIndexAccess, VV, Index>(), <span class=\"keywordtype\">int</span>>::type = 0></div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> <span class=\"keyword\">static</span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) getEntry(VV&& v, <span class=\"keyword\">const</span> Index&)</div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> {</div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> <span class=\"keywordflow\">return</span> std::forward<VV>(v);</div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> }</div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> </div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>VV,</div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> <span class=\"keyword\">typename</span> std::enable_if< models<Concept::HasSizeMethod, VV>(), <span class=\"keywordtype\">int</span>>::type = 0></div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> <span class=\"keyword\">static</span> <span class=\"keyword\">auto</span> size(VV&& v)</div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> {</div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> <span class=\"keywordflow\">return</span> Dune::Hybrid::size(v);</div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> }</div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>VV,</div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> <span class=\"keyword\">typename</span> std::enable_if< not models<Concept::HasSizeMethod, VV>(), <span class=\"keywordtype\">int</span>>::type = 0></div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> <span class=\"keyword\">static</span> <span class=\"keyword\">auto</span> size(VV&&)</div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> {</div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> <span class=\"keywordflow\">return</span> Dune::index_constant<1>{};</div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> }</div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span>};</div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> </div>\n <div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> </div>\n-<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01799.html#a7a6245f9d3517156801ffdb27c2c879e\"> 57</a></span> <span class=\"keyword\">operator</span> <a class=\"code hl_typedef\" href=\"a01799.html#a9d54b03391ba53f2cde374099ef62c21\">size_type</a> ()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01799.html#add41e7177edce69126ff66367bfef2fc\">basis_</a>->dimension();</div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> }</div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> </div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span><span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> </div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01799.html#add41e7177edce69126ff66367bfef2fc\"> 64</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01799.html#aa558e8687398c74affd92abb8af9bd58\">Basis</a>* <a class=\"code hl_variable\" href=\"a01799.html#add41e7177edce69126ff66367bfef2fc\">basis_</a>;</div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span>};</div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> </div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> </div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Basis></div>\n-<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#abd7e25a89325dbe2232b17308dae45f2\"> 69</a></span><a class=\"code hl_class\" href=\"a01799.html\">SizeInfo<Basis></a> <a class=\"code hl_function\" href=\"a00219.html#abd7e25a89325dbe2232b17308dae45f2\">sizeInfo</a>(<span class=\"keyword\">const</span> Basis& basis)</div>\n-<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span>{</div>\n-<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01799.html\">SizeInfo<Basis></a>(basis);</div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span>}</div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> </div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> </div>\n+<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> </div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> </div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> K, <span class=\"keywordtype\">int</span> n, <span class=\"keywordtype\">int</span> m></div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span><span class=\"keyword\">struct </span>FlatVectorBackend<typename <a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a>::FieldMatrix<K, n, m> ></div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span>{</div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> </div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> VV, <span class=\"keyword\">class</span> Index></div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> <span class=\"keyword\">static</span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) getEntry(VV&& v, <span class=\"keyword\">const</span> Index& i)</div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> {</div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> <span class=\"keywordflow\">return</span> v[i/m][i%m];</div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> }</div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> </div>\n+<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> VV></div>\n+<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> <span class=\"keyword\">static</span> <span class=\"keyword\">auto</span> size(VV&& v)</div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> {</div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> <span class=\"keywordflow\">return</span> Dune::index_constant<n*m>{};</div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> }</div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span>};</div>\n <div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> </div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span>} <span class=\"comment\">// end namespace Functions</span></div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span>} <span class=\"comment\">// end namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> </div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH</span></div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> </div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> </div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> K, std::<span class=\"keywordtype\">size_t</span> n></div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span><span class=\"keyword\">struct </span>FlatVectorBackend< std::array<K, n> ></div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span>{</div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> </div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> VV, <span class=\"keyword\">class</span> Index></div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> <span class=\"keyword\">static</span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) getEntry(VV&& v, <span class=\"keyword\">const</span> Index& i)</div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> {</div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span> innerSize = <span class=\"keyword\">decltype</span>(FlatVectorBackend<K>::size(v[0]))::value;</div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> <span class=\"keywordflow\">return</span> FlatVectorBackend<K>::getEntry(v[i/innerSize], i%innerSize);</div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> }</div>\n+<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> </div>\n+<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> VV></div>\n+<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> <span class=\"keyword\">static</span> <span class=\"keyword\">auto</span> size(VV&& v)</div>\n+<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> {</div>\n+<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span> innerSize = <span class=\"keyword\">decltype</span>(FlatVectorBackend<K>::size(v[0]))::value;</div>\n+<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> <span class=\"keywordflow\">return</span> Dune::index_constant<n*innerSize>{};</div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> }</div>\n+<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> </div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span>};</div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> </div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> </div>\n+<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> </div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> </div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n+<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span><span class=\"keyword\">class </span>FlatVectorView</div>\n+<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span>{</div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> <span class=\"keyword\">using </span>Backend = FlatVectorBackend<std::decay_t<T>>;</div>\n+<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> FlatVectorView(T& t) :</div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> t_(&t)</div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> {}</div>\n+<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> </div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> <span class=\"keyword\">auto</span> size()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> <span class=\"keywordflow\">return</span> Backend::size(*t_);</div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> }</div>\n+<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> </div>\n+<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Index></div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <span class=\"keyword\">operator</span>[](<span class=\"keyword\">const</span> Index& i) <span class=\"keyword\">const</span></div>\n+<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> {</div>\n+<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> <span class=\"keywordflow\">return</span> Backend::getEntry(*t_, i);</div>\n+<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> }</div>\n+<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> </div>\n+<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Index></div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <span class=\"keyword\">operator</span>[](<span class=\"keyword\">const</span> Index& i)</div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> {</div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> <span class=\"keywordflow\">return</span> Backend::getEntry(*t_, i);</div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> }</div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> </div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> T* t_;</div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span>};</div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> </div>\n+<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> </div>\n+<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n+<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span><span class=\"keyword\">class </span>FlatVectorView<T&&></div>\n+<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span>{</div>\n+<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> <span class=\"keyword\">using </span>Backend = FlatVectorBackend<std::decay_t<T>>;</div>\n+<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> FlatVectorView(T&& t) :</div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> t_(std::move(t))</div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> {}</div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> </div>\n+<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> <span class=\"keyword\">auto</span> size()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> <span class=\"keywordflow\">return</span> Backend::size(t_);</div>\n+<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> }</div>\n+<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> </div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Index></div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <span class=\"keyword\">operator</span>[](<span class=\"keyword\">const</span> Index& i) <span class=\"keyword\">const</span></div>\n+<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> {</div>\n+<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> <span class=\"keywordflow\">return</span> Backend::getEntry(t_, i);</div>\n+<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> }</div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> </div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Index></div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <span class=\"keyword\">operator</span>[](<span class=\"keyword\">const</span> Index& i)</div>\n+<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> {</div>\n+<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> <span class=\"keywordflow\">return</span> Backend::getEntry(t_, i);</div>\n+<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> }</div>\n+<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> </div>\n+<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> T t_;</div>\n+<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span>};</div>\n+<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> </div>\n+<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span>} <span class=\"comment\">// namespace Impl</span></div>\n+<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> </div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> </div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> </div>\n+<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n+<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\"> 179</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\">flatVectorView</a>(T& t)</div>\n+<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span>{</div>\n+<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> <span class=\"keywordflow\">return</span> Impl::FlatVectorView<T>(t);</div>\n+<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span>}</div>\n+<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span> </div>\n+<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n+<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#ac37c350bd2f6cb4fea793ac4f665c0fe\"> 197</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\">flatVectorView</a>(<span class=\"keyword\">const</span> T& t)</div>\n+<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span>{</div>\n+<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> <span class=\"keywordflow\">return</span> Impl::FlatVectorView<const T>(t);</div>\n+<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span>}</div>\n+<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> </div>\n+<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> T></div>\n+<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a4fac6802f21000f59e52aade3cd47b08\"> 215</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\">flatVectorView</a>(T&& t)</div>\n+<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span>{</div>\n+<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> <span class=\"keywordflow\">return</span> Impl::FlatVectorView<T&&>(std::move(t));</div>\n+<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span>}</div>\n+<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> </div>\n+<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span> </div>\n+<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span>} <span class=\"comment\">// namespace Dune::Functions</span></div>\n+<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span>} <span class=\"comment\">// namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> </div>\n+<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> </div>\n+<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATVECTORVIEW_HH</span></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa00219_html_abd7e25a89325dbe2232b17308dae45f2\"><div class=\"ttname\"><a href=\"a00219.html#abd7e25a89325dbe2232b17308dae45f2\">Dune::Functions::sizeInfo</a></div><div class=\"ttdeci\">SizeInfo< Basis > sizeInfo(const Basis &basis)</div><div class=\"ttdef\"><b>Definition:</b> sizeinfo.hh:69</div></div>\n-<div class=\"ttc\" id=\"aa01799_html\"><div class=\"ttname\"><a href=\"a01799.html\">Dune::Functions::SizeInfo</a></div><div class=\"ttdoc\">A class encapsulating size information.</div><div class=\"ttdef\"><b>Definition:</b> sizeinfo.hh:25</div></div>\n-<div class=\"ttc\" id=\"aa01799_html_a36c68248ee3be872cf53a7c8915773f2\"><div class=\"ttname\"><a href=\"a01799.html#a36c68248ee3be872cf53a7c8915773f2\">Dune::Functions::SizeInfo::SizePrefix</a></div><div class=\"ttdeci\">typename Basis::SizePrefix SizePrefix</div><div class=\"ttdef\"><b>Definition:</b> sizeinfo.hh:29</div></div>\n-<div class=\"ttc\" id=\"aa01799_html_a4f2343f16899076f68aa9dbeef992d80\"><div class=\"ttname\"><a href=\"a01799.html#a4f2343f16899076f68aa9dbeef992d80\">Dune::Functions::SizeInfo::size</a></div><div class=\"ttdeci\">size_type size(const SizePrefix &prefix) const</div><div class=\"ttdoc\">Return number possible values for next position in multi index.</div><div class=\"ttdef\"><b>Definition:</b> sizeinfo.hh:52</div></div>\n-<div class=\"ttc\" id=\"aa01799_html_a9c71fa33343b928c5b93e2c8dcb9595f\"><div class=\"ttname\"><a href=\"a01799.html#a9c71fa33343b928c5b93e2c8dcb9595f\">Dune::Functions::SizeInfo::operator()</a></div><div class=\"ttdeci\">size_type operator()(const SizePrefix &prefix) const</div><div class=\"ttdoc\">Return number possible values for next position in multi index.</div><div class=\"ttdef\"><b>Definition:</b> sizeinfo.hh:41</div></div>\n-<div class=\"ttc\" id=\"aa01799_html_a9d54b03391ba53f2cde374099ef62c21\"><div class=\"ttname\"><a href=\"a01799.html#a9d54b03391ba53f2cde374099ef62c21\">Dune::Functions::SizeInfo::size_type</a></div><div class=\"ttdeci\">typename Basis::size_type size_type</div><div class=\"ttdef\"><b>Definition:</b> sizeinfo.hh:28</div></div>\n-<div class=\"ttc\" id=\"aa01799_html_aa558e8687398c74affd92abb8af9bd58\"><div class=\"ttname\"><a href=\"a01799.html#aa558e8687398c74affd92abb8af9bd58\">Dune::Functions::SizeInfo::Basis</a></div><div class=\"ttdeci\">B Basis</div><div class=\"ttdef\"><b>Definition:</b> sizeinfo.hh:27</div></div>\n-<div class=\"ttc\" id=\"aa01799_html_ac3e18dc3b17c52eafe2e803562d72c5b\"><div class=\"ttname\"><a href=\"a01799.html#ac3e18dc3b17c52eafe2e803562d72c5b\">Dune::Functions::SizeInfo::SizeInfo</a></div><div class=\"ttdeci\">SizeInfo(const Basis &basis)</div><div class=\"ttdoc\">Construct from basis.</div><div class=\"ttdef\"><b>Definition:</b> sizeinfo.hh:34</div></div>\n-<div class=\"ttc\" id=\"aa01799_html_add41e7177edce69126ff66367bfef2fc\"><div class=\"ttname\"><a href=\"a01799.html#add41e7177edce69126ff66367bfef2fc\">Dune::Functions::SizeInfo::basis_</a></div><div class=\"ttdeci\">const Basis * basis_</div><div class=\"ttdef\"><b>Definition:</b> sizeinfo.hh:64</div></div>\n+<div class=\"ttc\" id=\"aa00219_html_ad98b265d97ebd619e7732df6a8d1f7da\"><div class=\"ttname\"><a href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\">Dune::Functions::flatVectorView</a></div><div class=\"ttdeci\">auto flatVectorView(T &t)</div><div class=\"ttdoc\">Create flat vector view of passed mutable container.</div><div class=\"ttdef\"><b>Definition:</b> flatvectorview.hh:179</div></div>\n+<div class=\"ttc\" id=\"aa02876_html\"><div class=\"ttname\"><a href=\"a02876.html\">concepts.hh</a></div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,101 +5,212 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-sizeinfo.hh\n+flatvectorview.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH\n- 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH\n+ 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATVECTORVIEW_HH\n+ 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATVECTORVIEW_HH\n 5\n- 6#include <array>\n- 7\n- 8namespace Dune {\n- 9namespace Functions {\n- 10\n- 11\n+ 6\n+ 7#include <array>\n+ 8\n+ 9#include <dune/common/concept.hh>\n+ 10#include <dune/common/hybridutilities.hh>\n+ 11#include <dune/common/indices.hh>\n 12\n- 23template<class B>\n-24class SizeInfo\n+ 13#include <dune/functions/functionspacebases/concepts.hh>\n+ 14\n+ 15\n+ 16\n+ 17\n+ 18namespace Dune {\n+ 19namespace Functions {\n+ 20namespace Impl {\n+ 21\n+ 22\n+ 23template<class V>\n+ 24struct FlatVectorBackend\n 25{\n- 26public:\n-27 using Basis = B;\n-28 using size_type = typename Basis::size_type;\n-29 using SizePrefix = typename Basis::SizePrefix;\n- 30\n-34 SizeInfo(const Basis& basis) :\n- 35 basis_(&basis)\n- 36 {}\n- 37\n-41 size_type operator()(const SizePrefix& prefix) const\n- 42 {\n- 43 return basis_->size(prefix);\n- 44 }\n- 45\n-52 size_type size(const SizePrefix& prefix) const\n- 53 {\n- 54 return basis_->size(prefix);\n- 55 }\n+ 26\n+ 27 template<class VV, class Index,\n+ 28 typename std::enable_if< models<Concept::HasIndexAccess, VV, Index>(),\n+int>::type = 0>\n+ 29 static decltype(auto) getEntry(VV&& v, const Index& i)\n+ 30 {\n+ 31 return v[i];\n+ 32 }\n+ 33\n+ 34 template<class VV, class Index,\n+ 35 typename std::enable_if< not models<Concept::HasIndexAccess, VV, Index>(),\n+int>::type = 0>\n+ 36 static decltype(auto) getEntry(VV&& v, const Index&)\n+ 37 {\n+ 38 return std::forward<VV>(v);\n+ 39 }\n+ 40\n+ 41 template<class VV,\n+ 42 typename std::enable_if< models<Concept::HasSizeMethod, VV>(), int>::type =\n+0>\n+ 43 static auto size(VV&& v)\n+ 44 {\n+ 45 return Dune::Hybrid::size(v);\n+ 46 }\n+ 47\n+ 48 template<class VV,\n+ 49 typename std::enable_if< not models<Concept::HasSizeMethod, VV>(), int>::\n+type = 0>\n+ 50 static auto size(VV&&)\n+ 51 {\n+ 52 return Dune::index_constant<1>{};\n+ 53 }\n+ 54};\n+ 55\n 56\n-57 operator size_type () const\n- 58 {\n- 59 return basis_->dimension();\n- 60 }\n- 61\n- 62protected:\n- 63\n-64 const Basis* basis_;\n- 65};\n- 66\n- 67\n- 68template<class Basis>\n-69SizeInfo<Basis> sizeInfo(const Basis& basis)\n- 70{\n- 71 return SizeInfo<Basis>(basis);\n- 72}\n- 73\n- 74\n+ 57\n+ 58\n+ 59template<class K, int n, int m>\n+ 60struct FlatVectorBackend<typename Dune::FieldMatrix<K, n, m> >\n+ 61{\n+ 62\n+ 63 template<class VV, class Index>\n+ 64 static decltype(auto) getEntry(VV&& v, const Index& i)\n+ 65 {\n+ 66 return v[i/m][i%m];\n+ 67 }\n+ 68\n+ 69 template<class VV>\n+ 70 static auto size(VV&& v)\n+ 71 {\n+ 72 return Dune::index_constant<n*m>{};\n+ 73 }\n+ 74};\n 75\n- 76} // end namespace Functions\n- 77} // end namespace Dune\n- 78\n- 79#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SIZEINFO_HH\n+ 76\n+ 77\n+ 78template<class K, std::size_t n>\n+ 79struct FlatVectorBackend< std::array<K, n> >\n+ 80{\n+ 81\n+ 82 template<class VV, class Index>\n+ 83 static decltype(auto) getEntry(VV&& v, const Index& i)\n+ 84 {\n+ 85 const auto innerSize = decltype(FlatVectorBackend<K>::size(v[0]))::value;\n+ 86 return FlatVectorBackend<K>::getEntry(v[i/innerSize], i%innerSize);\n+ 87 }\n+ 88\n+ 89 template<class VV>\n+ 90 static auto size(VV&& v)\n+ 91 {\n+ 92 const auto innerSize = decltype(FlatVectorBackend<K>::size(v[0]))::value;\n+ 93 return Dune::index_constant<n*innerSize>{};\n+ 94 }\n+ 95\n+ 96};\n+ 97\n+ 98\n+ 99\n+ 100\n+ 101template<class T>\n+ 102class FlatVectorView\n+ 103{\n+ 104 using Backend = FlatVectorBackend<std::decay_t<T>>;\n+ 105public:\n+ 106 FlatVectorView(T& t) :\n+ 107 t_(&t)\n+ 108 {}\n+ 109\n+ 110 auto size() const\n+ 111 {\n+ 112 return Backend::size(*t_);\n+ 113 }\n+ 114\n+ 115 template<class Index>\n+ 116 decltype(auto) operator[](const Index& i) const\n+ 117 {\n+ 118 return Backend::getEntry(*t_, i);\n+ 119 }\n+ 120\n+ 121 template<class Index>\n+ 122 decltype(auto) operator[](const Index& i)\n+ 123 {\n+ 124 return Backend::getEntry(*t_, i);\n+ 125 }\n+ 126\n+ 127private:\n+ 128 T* t_;\n+ 129};\n+ 130\n+ 131\n+ 132template<class T>\n+ 133class FlatVectorView<T&&>\n+ 134{\n+ 135 using Backend = FlatVectorBackend<std::decay_t<T>>;\n+ 136public:\n+ 137 FlatVectorView(T&& t) :\n+ 138 t_(std::move(t))\n+ 139 {}\n+ 140\n+ 141 auto size() const\n+ 142 {\n+ 143 return Backend::size(t_);\n+ 144 }\n+ 145\n+ 146 template<class Index>\n+ 147 decltype(auto) operator[](const Index& i) const\n+ 148 {\n+ 149 return Backend::getEntry(t_, i);\n+ 150 }\n+ 151\n+ 152 template<class Index>\n+ 153 decltype(auto) operator[](const Index& i)\n+ 154 {\n+ 155 return Backend::getEntry(t_, i);\n+ 156 }\n+ 157\n+ 158private:\n+ 159 T t_;\n+ 160};\n+ 161\n+ 162} // namespace Impl\n+ 163\n+ 164\n+ 165\n+ 178template<class T>\n+179auto flatVectorView(T& t)\n+ 180{\n+ 181 return Impl::FlatVectorView<T>(t);\n+ 182}\n+ 183\n+ 196template<class T>\n+197auto flatVectorView(const T& t)\n+ 198{\n+ 199 return Impl::FlatVectorView<const T>(t);\n+ 200}\n+ 201\n+ 214template<class T>\n+215auto flatVectorView(T&& t)\n+ 216{\n+ 217 return Impl::FlatVectorView<T&&>(std::move(t));\n+ 218}\n+ 219\n+ 220\n+ 221} // namespace Dune::Functions\n+ 222} // namespace Dune\n+ 223\n+ 224\n+ 225#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_FLATVECTORVIEW_HH\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::sizeInfo\n-SizeInfo< Basis > sizeInfo(const Basis &basis)\n-Definition: sizeinfo.hh:69\n-Dune::Functions::SizeInfo\n-A class encapsulating size information.\n-Definition: sizeinfo.hh:25\n-Dune::Functions::SizeInfo::SizePrefix\n-typename Basis::SizePrefix SizePrefix\n-Definition: sizeinfo.hh:29\n-Dune::Functions::SizeInfo::size\n-size_type size(const SizePrefix &prefix) const\n-Return number possible values for next position in multi index.\n-Definition: sizeinfo.hh:52\n-Dune::Functions::SizeInfo::operator()\n-size_type operator()(const SizePrefix &prefix) const\n-Return number possible values for next position in multi index.\n-Definition: sizeinfo.hh:41\n-Dune::Functions::SizeInfo::size_type\n-typename Basis::size_type size_type\n-Definition: sizeinfo.hh:28\n-Dune::Functions::SizeInfo::Basis\n-B Basis\n-Definition: sizeinfo.hh:27\n-Dune::Functions::SizeInfo::SizeInfo\n-SizeInfo(const Basis &basis)\n-Construct from basis.\n-Definition: sizeinfo.hh:34\n-Dune::Functions::SizeInfo::basis_\n-const Basis * basis_\n-Definition: sizeinfo.hh:64\n+Dune::Functions::flatVectorView\n+auto flatVectorView(T &t)\n+Create flat vector view of passed mutable container.\n+Definition: flatvectorview.hh:179\n+concepts.hh\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00158.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00158.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: hierarchicvectorwrapper.hh File Reference</title>\n+<title>dune-functions: basistags.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -66,51 +66,77 @@\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> |\n <a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">hierarchicvectorwrapper.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">basistags.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <dune/common/concept.hh></code><br />\n-<code>#include <dune/common/hybridutilities.hh></code><br />\n-<code>#include <dune/common/indices.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00041_source.html\">dune/functions/common/indexaccess.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00050_source.html\">dune/functions/common/utility.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00092_source.html\">dune/functions/common/type_traits.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a02876_source.html\">dune/functions/functionspacebases/concepts.hh</a>></code><br />\n+<div class=\"textblock\"><code>#include <type_traits></code><br />\n+<code>#include <dune/common/concept.hh></code><br />\n </div>\n <p><a href=\"a00158_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01647.html\">Dune::Functions::HierarchicVectorWrapper< V, CO ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A wrapper providing multiindex access to vector entries. <a href=\"a01647.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01411.html\">Dune::Functions::Concept::IndexMergingStrategy</a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01415.html\">Dune::Functions::BasisFactory::IndexMergingStrategy</a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Base class for index merging strategies to simplify detection. <a href=\"a01415.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01419.html\">Dune::Functions::BasisFactory::FlatLexicographic</a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Lexicographic merging of direct children without blocking. <a href=\"a01419.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01423.html\">Dune::Functions::BasisFactory::FlatInterleaved</a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Interleaved merging of direct children without blocking. <a href=\"a01423.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01427.html\">Dune::Functions::BasisFactory::BlockedLexicographic</a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Lexicographic merging of direct children with blocking (i.e. creating one block per direct child). <a href=\"a01427.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01431.html\">Dune::Functions::BasisFactory::BlockedInterleaved</a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Interleaved merging of direct children with blocking (i.e. creating blocks at the leaves containing one leaf per child each). <a href=\"a01431.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a00220\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00220.html\">Dune::Functions::Concept</a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a00224\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00224.html\">Dune::Functions::BasisFactory</a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a00225\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00225.html\">Dune::Functions::BasisBuilder</a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n Functions</h2></td></tr>\n-<tr class=\"memitem:aa74497c764d8ce0b365abae3637dadc8\"><td class=\"memTemplParams\" colspan=\"2\">template<class V > </td></tr>\n-<tr class=\"memitem:aa74497c764d8ce0b365abae3637dadc8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">HierarchicVectorWrapper< V > </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#aa74497c764d8ce0b365abae3637dadc8\">Dune::Functions::hierarchicVector</a> (V &v)</td></tr>\n-<tr class=\"separator:aa74497c764d8ce0b365abae3637dadc8\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a5c705706be679d2a462e38b08274ad33\"><td class=\"memTemplParams\" colspan=\"2\">template<class MultiIndex , class V , typename std::enable_if< models< Concept::HasIndexAccess, V, MultiIndex >(), int >::type = 0> </td></tr>\n-<tr class=\"memitem:a5c705706be679d2a462e38b08274ad33\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">V & </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a5c705706be679d2a462e38b08274ad33\">Dune::Functions::makeHierarchicVectorForMultiIndex</a> (V &v)</td></tr>\n-<tr class=\"separator:a5c705706be679d2a462e38b08274ad33\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:ae48bf799daaf0751086b47457350675e\"><td class=\"memTemplParams\" colspan=\"2\">template<class MultiIndex , class V , typename std::enable_if< not models< Concept::HasIndexAccess, V, MultiIndex >(), int >::type = 0> </td></tr>\n-<tr class=\"memitem:ae48bf799daaf0751086b47457350675e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">HierarchicVectorWrapper< V > </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#ae48bf799daaf0751086b47457350675e\">Dune::Functions::makeHierarchicVectorForMultiIndex</a> (V &v)</td></tr>\n-<tr class=\"separator:ae48bf799daaf0751086b47457350675e\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a067e42f1ca7d6c4131518e5eb269da35\"><td class=\"memTemplParams\" colspan=\"2\">template<typename T > </td></tr>\n+<tr class=\"memitem:a067e42f1ca7d6c4131518e5eb269da35\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static constexpr bool </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00220.html#a067e42f1ca7d6c4131518e5eb269da35\">Dune::Functions::Concept::isIndexMergingStrategy</a> ()</td></tr>\n+<tr class=\"separator:a067e42f1ca7d6c4131518e5eb269da35\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a4c80c069c722824168167f5ac1bc3474\"><td class=\"memTemplParams\" colspan=\"2\">template<typename T > </td></tr>\n+<tr class=\"memitem:a4c80c069c722824168167f5ac1bc3474\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static constexpr bool </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00220.html#a4c80c069c722824168167f5ac1bc3474\">Dune::Functions::Concept::isIndexMergingStrategy</a> (T &&t)</td></tr>\n+<tr class=\"separator:a4c80c069c722824168167f5ac1bc3474\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ad515867ac194016a6f9e4463d1c67a24\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00224.html#ad515867ac194016a6f9e4463d1c67a24\">Dune::Functions::BasisFactory::registerIndexMergingStrategy</a> (IndexMergingStrategy)</td></tr>\n+<tr class=\"separator:ad515867ac194016a6f9e4463d1c67a24\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga611fb3c6cb312fb95e83dd1a62da13bc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr FlatLexicographic </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00214.html#ga611fb3c6cb312fb95e83dd1a62da13bc\">Dune::Functions::BasisFactory::flatLexicographic</a> ()</td></tr>\n+<tr class=\"memdesc:ga611fb3c6cb312fb95e83dd1a62da13bc\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Creates a lexicographic merging of direct children without blocking. <a href=\"a00214.html#ga611fb3c6cb312fb95e83dd1a62da13bc\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga611fb3c6cb312fb95e83dd1a62da13bc\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga67995074ba44e2e28647170584f54bec\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr FlatInterleaved </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00214.html#ga67995074ba44e2e28647170584f54bec\">Dune::Functions::BasisFactory::flatInterleaved</a> ()</td></tr>\n+<tr class=\"memdesc:ga67995074ba44e2e28647170584f54bec\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Creates an interleaved merging of direct children without blocking. <a href=\"a00214.html#ga67995074ba44e2e28647170584f54bec\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga67995074ba44e2e28647170584f54bec\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:gadd59442e0e62464ee27af6f2741b4494\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr BlockedLexicographic </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00214.html#gadd59442e0e62464ee27af6f2741b4494\">Dune::Functions::BasisFactory::blockedLexicographic</a> ()</td></tr>\n+<tr class=\"memdesc:gadd59442e0e62464ee27af6f2741b4494\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Creates a lexicographic merging of direct children with blocking (i.e. creating one block per direct child). <a href=\"a00214.html#gadd59442e0e62464ee27af6f2741b4494\">More...</a><br /></td></tr>\n+<tr class=\"separator:gadd59442e0e62464ee27af6f2741b4494\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga649b67336300e9f05e38b5479ca21a24\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr BlockedInterleaved </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00214.html#ga649b67336300e9f05e38b5479ca21a24\">Dune::Functions::BasisFactory::blockedInterleaved</a> ()</td></tr>\n+<tr class=\"memdesc:ga649b67336300e9f05e38b5479ca21a24\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Creates an interleaved merging of direct children with blocking (i.e. creating blocks at the leaves containing one leaf per child each). <a href=\"a00214.html#ga649b67336300e9f05e38b5479ca21a24\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga649b67336300e9f05e38b5479ca21a24\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -6,42 +6,81 @@\n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n Classes | Namespaces | Functions\n-hierarchicvectorwrapper.hh File Reference\n+basistags.hh File Reference\n+#include <type_traits>\n #include <dune/common/concept.hh>\n-#include <dune/common/hybridutilities.hh>\n-#include <dune/common/indices.hh>\n-#include <dune/functions/common/indexaccess.hh>\n-#include <dune/functions/common/utility.hh>\n-#include <dune/functions/common/type_traits.hh>\n-#include <dune/functions/functionspacebases/concepts.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-class \u00a0Dune::Functions::HierarchicVectorWrapper<_V,_CO_>\n-\u00a0 A wrapper providing multiindex access to vector entries. More...\n+struct \u00a0Dune::Functions::Concept::IndexMergingStrategy\n+\u00a0\n+struct \u00a0Dune::Functions::BasisFactory::IndexMergingStrategy\n+\u00a0 Base class for index merging strategies to simplify detection. More...\n+\u00a0\n+struct \u00a0Dune::Functions::BasisFactory::FlatLexicographic\n+\u00a0 Lexicographic merging of direct children without blocking. More...\n+\u00a0\n+struct \u00a0Dune::Functions::BasisFactory::FlatInterleaved\n+\u00a0 Interleaved merging of direct children without blocking. More...\n+\u00a0\n+struct \u00a0Dune::Functions::BasisFactory::BlockedLexicographic\n+\u00a0 Lexicographic merging of direct children with blocking (i.e. creating\n+ one block per direct child). More...\n+\u00a0\n+struct \u00a0Dune::Functions::BasisFactory::BlockedInterleaved\n+\u00a0 Interleaved merging of direct children with blocking (i.e. creating\n+ blocks at the leaves containing one leaf per child each). More...\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n- Functions\n-template<class V >\n-HierarchicVectorWrapper< V >\u00a0Dune::Functions::hierarchicVector (V &v)\n+namespace \u00a0Dune::Functions::Concept\n+\u00a0\n+namespace \u00a0Dune::Functions::BasisFactory\n \u00a0\n-template<class MultiIndex , class V , typename std::enable_if< models<\n-Concept::HasIndexAccess, V, MultiIndex >(), int >::type = 0>\n- V &\u00a0Dune::Functions::\n- makeHierarchicVectorForMultiIndex (V &v)\n-\u00a0\n-template<class MultiIndex , class V , typename std::enable_if< not models<\n-Concept::HasIndexAccess, V, MultiIndex >(), int >::type = 0>\n-HierarchicVectorWrapper< V >\u00a0Dune::Functions::\n- makeHierarchicVectorForMultiIndex (V &v)\n+namespace \u00a0Dune::Functions::BasisBuilder\n+\u00a0\n+ Functions\n+template<typename T >\n+ static constexpr bool\u00a0Dune::Functions::Concept::\n+ isIndexMergingStrategy ()\n+\u00a0\n+template<typename T >\n+ static constexpr bool\u00a0Dune::Functions::Concept::\n+ isIndexMergingStrategy (T &&t)\n+\u00a0\n+ void\u00a0Dune::Functions::BasisFactory::\n+ registerIndexMergingStrategy\n+ (IndexMergingStrategy)\n+\u00a0\n+ constexpr FlatLexicographic\u00a0Dune::Functions::BasisFactory::\n+ flatLexicographic ()\n+\u00a0 Creates a lexicographic merging of direct\n+ children without blocking. More...\n+\u00a0\n+ constexpr FlatInterleaved\u00a0Dune::Functions::BasisFactory::flatInterleaved\n+ ()\n+\u00a0 Creates an interleaved merging of direct\n+ children without blocking. More...\n+\u00a0\n+constexpr BlockedLexicographic\u00a0Dune::Functions::BasisFactory::\n+ blockedLexicographic ()\n+ Creates a lexicographic merging of direct\n+\u00a0 children with blocking (i.e. creating one block\n+ per direct child). More...\n+\u00a0\n+ constexpr BlockedInterleaved\u00a0Dune::Functions::BasisFactory::\n+ blockedInterleaved ()\n+ Creates an interleaved merging of direct\n+\u00a0 children with blocking (i.e. creating blocks at\n+ the leaves containing one leaf per child each).\n+ More...\n \u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00158_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00158_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: hierarchicvectorwrapper.hh Source File</title>\n+<title>dune-functions: basistags.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,276 +62,122 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">hierarchicvectorwrapper.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">basistags.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00158.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <dune/common/concept.hh></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <dune/common/hybridutilities.hh></span></div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <dune/common/indices.hh></span></div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00041.html\">dune/functions/common/indexaccess.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00050.html\">dune/functions/common/utility.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00092.html\">dune/functions/common/type_traits.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a02876.html\">dune/functions/functionspacebases/concepts.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span> </div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"keyword\">namespace </span>Imp {</div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> </div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span> <span class=\"comment\">// Construct default coefficient type from vector and multiindex type</span></div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> <span class=\"comment\">// This requires that MultiIndex has a static size. Otherwise the</span></div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> <span class=\"comment\">// vector type itself is returned.</span></div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> V, <span class=\"keyword\">class</span> MultiIndex></div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> <span class=\"keyword\">struct </span>CoefficientType</div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> {</div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> E, std::<span class=\"keywordtype\">size_t</span> size></div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> <span class=\"keyword\">struct </span>DefaultCoefficientTypeHelper</div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> {</div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> <span class=\"keyword\">using </span>E0 = <span class=\"keyword\">decltype</span>(std::declval<E>()[Dune::Indices::_0]);</div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> <span class=\"keyword\">using </span>type = <span class=\"keyword\">typename</span> DefaultCoefficientTypeHelper<E0, size-1>::type;</div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> };</div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <type_traits></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <dune/common/concept.hh></span></div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> <span class=\"keyword\">namespace </span>Concept {</div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01411.html\"> 14</a></span> <span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01411.html\">IndexMergingStrategy</a></div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> {</div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> T></div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01411.html#a8552823d8c75d18bca5f41f36cd7b2dd\"> 17</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a01411.html#a8552823d8c75d18bca5f41f36cd7b2dd\">require</a>(T&& t) -> <span class=\"keyword\">decltype</span>(</div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> <a class=\"code hl_function\" href=\"a00224.html#ad515867ac194016a6f9e4463d1c67a24\">registerIndexMergingStrategy</a>(t)</div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> );</div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span> };</div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> </div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> T></div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00220.html#a067e42f1ca7d6c4131518e5eb269da35\"> 23</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a00220.html#a067e42f1ca7d6c4131518e5eb269da35\">isIndexMergingStrategy</a>()</div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> {</div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> <span class=\"keywordflow\">return</span> models<Concept::IndexMergingStrategy,T>();</div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> }</div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> </div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> T></div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00220.html#a4c80c069c722824168167f5ac1bc3474\"> 29</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a00220.html#a067e42f1ca7d6c4131518e5eb269da35\">isIndexMergingStrategy</a>(T&& t)</div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> {</div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> <span class=\"keywordflow\">return</span> models<Concept::IndexMergingStrategy,std::decay_t<T>>();</div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> }</div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> </div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> } <span class=\"comment\">// namespace Concept</span></div>\n <div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> </div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> E></div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> <span class=\"keyword\">struct </span>DefaultCoefficientTypeHelper<E, 0></div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> {</div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> <span class=\"keyword\">using </span>type = E;</div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> };</div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> </div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>MI,</div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> <span class=\"keyword\">typename</span> std::enable_if<HasStaticSize<MI>::value, <span class=\"keywordtype\">int</span>>::type = 0></div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> std::size_t getStaticSizeOrZero()</div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> {</div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> <span class=\"keywordflow\">return</span> StaticSize<MI>::value;</div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> }</div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> </div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>MI,</div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> <span class=\"keyword\">typename</span> std::enable_if<not HasStaticSize<MI>::value, <span class=\"keywordtype\">int</span>>::type = 0></div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> std::size_t getStaticSizeOrZero()</div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> {</div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> <span class=\"keywordflow\">return</span> 0;</div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> }</div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> </div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> <span class=\"keyword\">using </span>type = <span class=\"keyword\">typename</span> DefaultCoefficientTypeHelper<V, getStaticSizeOrZero<MultiIndex>()>::type;</div>\n-<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> };</div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> </div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> </div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> </div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> <span class=\"comment\">// This tag class is used as Coefficient template parameter</span></div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> <span class=\"comment\">// for HierarchicVectorWrapper if the coefficient type should</span></div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> <span class=\"comment\">// be deduced.</span></div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> <span class=\"keyword\">struct </span>DeducedCoefficientTag {};</div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> </div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span>} <span class=\"comment\">// namespace Imp</span></div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> </div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> </div>\n-<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> </div>\n-<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> V, <span class=\"keyword\">class</span> CO=Imp::DeducedCoefficientTag></div>\n-<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01647.html\"> 91</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01647.html\">HierarchicVectorWrapper</a></div>\n-<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span>{</div>\n-<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> MultiIndex></div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> <span class=\"keyword\">using </span>Coefficient = <span class=\"keyword\">typename</span> std::conditional< std::is_same<Imp::DeducedCoefficientTag,CO>::value and <a class=\"code hl_struct\" href=\"a01331.html\">HasStaticSize<MultiIndex>::value</a>,</div>\n-<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> <span class=\"keyword\">typename</span> Imp::CoefficientType<V, MultiIndex>::type,</div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> CO</div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> >::type;</div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> </div>\n-<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> </div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> <span class=\"keyword\">using </span>size_type = std::size_t;</div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> </div>\n-<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>C, <span class=\"keyword\">class </span>SizeProvider,</div>\n-<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> <span class=\"keyword\">typename</span> std::enable_if< not models<Concept::HasResize, C>(), <span class=\"keywordtype\">int</span>>::type = 0,</div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> <span class=\"keyword\">typename</span> std::enable_if< not models<Concept::HasSizeMethod, C>(), <span class=\"keywordtype\">int</span>>::type = 0></div>\n-<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> resizeHelper(C& c, <span class=\"keyword\">const</span> SizeProvider& sizeProvider, <span class=\"keyword\">typename</span> SizeProvider::SizePrefix prefix)</div>\n-<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> {</div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> <span class=\"keyword\">auto</span> size = sizeProvider.size(prefix);</div>\n-<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> <span class=\"keywordflow\">if</span> (size != 0)</div>\n-<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> DUNE_THROW(RangeError, <span class=\"stringliteral\">"Can't resize scalar vector entry v["</span> << prefix << <span class=\"stringliteral\">"] to size("</span> << prefix << <span class=\"stringliteral\">")="</span> << size);</div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> }</div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> </div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> <span class=\"keyword\">struct </span>StaticResizeHelper</div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> {</div>\n-<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> I, <span class=\"keyword\">class</span> C, <span class=\"keyword\">class</span> SizeProv<span class=\"keywordtype\">id</span>er></div>\n-<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> apply(I&& i, C& c, <span class=\"keyword\">const</span> SizeProvider& sizeProvider, <span class=\"keyword\">typename</span> SizeProvider::SizePrefix prefix)</div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> {</div>\n-<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> prefix.back() = i;</div>\n-<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> resizeHelper(c[i], sizeProvider, prefix);</div>\n-<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> }</div>\n-<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> };</div>\n-<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> </div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>C, <span class=\"keyword\">class </span>SizeProvider,</div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> <span class=\"keyword\">typename</span> std::enable_if< not models<Concept::HasResize, C>(), <span class=\"keywordtype\">int</span>>::type = 0,</div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> <span class=\"keyword\">typename</span> std::enable_if< models<Concept::HasSizeMethod, C>(), <span class=\"keywordtype\">int</span>>::type = 0></div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> resizeHelper(C& c, <span class=\"keyword\">const</span> SizeProvider& sizeProvider, <span class=\"keyword\">typename</span> SizeProvider::SizePrefix prefix)</div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> {</div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> <span class=\"keyword\">auto</span> size = sizeProvider.size(prefix);</div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> <span class=\"keywordflow\">if</span> (size == 0)</div>\n-<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> <span class=\"keywordflow\">return</span>;</div>\n-<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> </div>\n-<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> <span class=\"keywordflow\">if</span> (c.size() != size)</div>\n-<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> DUNE_THROW(RangeError, <span class=\"stringliteral\">"Can't resize statically sized vector entry v["</span> << prefix << <span class=\"stringliteral\">"] of size "</span> << c.size() << <span class=\"stringliteral\">" to size("</span> << prefix << <span class=\"stringliteral\">")="</span> << size);</div>\n-<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> </div>\n-<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> <span class=\"keyword\">using namespace </span>Dune::Hybrid;</div>\n-<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> prefix.push_back(0);</div>\n-<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> forEach(integralRange(Hybrid::size(c)), [&](<span class=\"keyword\">auto</span>&& i) {</div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> StaticResizeHelper::apply(i, c, sizeProvider, prefix);</div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> });</div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> }</div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> </div>\n-<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>C, <span class=\"keyword\">class </span>SizeProvider,</div>\n-<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> <span class=\"keyword\">typename</span> std::enable_if< models<Concept::HasResize, C>(), <span class=\"keywordtype\">int</span>>::type = 0></div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> resizeHelper(C& c, <span class=\"keyword\">const</span> SizeProvider& sizeProvider, <span class=\"keyword\">typename</span> SizeProvider::SizePrefix prefix)</div>\n-<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> {</div>\n-<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> <span class=\"keyword\">auto</span> size = sizeProvider.size(prefix);</div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> <span class=\"keywordflow\">if</span> (size==0)</div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> {</div>\n-<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> <span class=\"keywordflow\">if</span> (c.size()==0)</div>\n-<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> DUNE_THROW(RangeError, <span class=\"stringliteral\">"Can't resize dynamically sized vector entry v["</span> << prefix << <span class=\"stringliteral\">"]. Its size is 0 but the target size is unknown due to size("</span> << prefix << <span class=\"stringliteral\">")=0."</span>);</div>\n-<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> <span class=\"keywordflow\">else</span></div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> <span class=\"keywordflow\">return</span>;</div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> }</div>\n-<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> </div>\n-<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> c.resize(size);</div>\n-<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> prefix.push_back(0);</div>\n-<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> <span class=\"keywordflow\">for</span>(std::size_t i=0; i<size; ++i)</div>\n-<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> {</div>\n-<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> prefix.back() = i;</div>\n-<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> resizeHelper(c[i], sizeProvider, prefix);</div>\n-<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> }</div>\n-<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> }</div>\n-<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> </div>\n-<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> </div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> </div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> </div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01647.html#a7662d9e57bc2b8e522f4d423c9bbe750\"> 167</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01647.html#a7662d9e57bc2b8e522f4d423c9bbe750\">Vector</a> = V;</div>\n-<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> </div>\n-<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> MultiIndex></div>\n-<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01647.html#a84a850d0e5587fc6f14179ec3f15da5c\"> 170</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01647.html#a84a850d0e5587fc6f14179ec3f15da5c\">Entry</a> = Coefficient<MultiIndex>;</div>\n-<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> </div>\n-<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01647.html#ac303d31978320b6a3fc4f17f2db0d938\"> 172</a></span> <a class=\"code hl_function\" href=\"a01647.html#ac303d31978320b6a3fc4f17f2db0d938\">HierarchicVectorWrapper</a>(<a class=\"code hl_typedef\" href=\"a01647.html#a7662d9e57bc2b8e522f4d423c9bbe750\">Vector</a>& <a class=\"code hl_function\" href=\"a01647.html#aa87d301d268493db3421a6eb5b9b307e\">vector</a>) :</div>\n-<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> vector_(&<a class=\"code hl_function\" href=\"a01647.html#aa87d301d268493db3421a6eb5b9b307e\">vector</a>)</div>\n-<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> {}</div>\n-<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> </div>\n-<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizeProv<span class=\"keywordtype\">id</span>er></div>\n-<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01647.html#ae7c4ff9e9c573813493c8f36607037c3\"> 177</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01647.html#ae7c4ff9e9c573813493c8f36607037c3\">resize</a>(<span class=\"keyword\">const</span> SizeProvider& sizeProvider)</div>\n-<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> {</div>\n-<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> <span class=\"keyword\">typename</span> SizeProvider::SizePrefix prefix;</div>\n-<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> prefix.resize(0);</div>\n-<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> resizeHelper(*vector_, sizeProvider, prefix);</div>\n-<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> }</div>\n-<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span> </div>\n-<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> MultiIndex></div>\n-<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01647.html#a5c3c358453d3e57b1bdc2a2343dde827\"> 185</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01647.html#a84a850d0e5587fc6f14179ec3f15da5c\">Entry<MultiIndex></a>& <a class=\"code hl_function\" href=\"a01647.html#a5c3c358453d3e57b1bdc2a2343dde827\">operator[]</a>(<span class=\"keyword\">const</span> MultiIndex& index)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> <span class=\"keyword\">static_assert</span>(not std::is_same<Imp::DeducedCoefficientTag,Entry<MultiIndex>>::value, <span class=\"stringliteral\">"Coefficient type for HierarchicVectorWrapper and given multi-index type cannot be determined automatically!"</span>);</div>\n-<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> <span class=\"keywordflow\">return</span> hybridMultiIndexAccess<const Entry<MultiIndex>&>(*vector_, index);</div>\n-<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> }</div>\n-<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span> </div>\n-<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> MultiIndex></div>\n-<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01647.html#a5416072b233a9bef7e81d670de156bb7\"> 192</a></span> <a class=\"code hl_typedef\" href=\"a01647.html#a84a850d0e5587fc6f14179ec3f15da5c\">Entry<MultiIndex></a>& <a class=\"code hl_function\" href=\"a01647.html#a5416072b233a9bef7e81d670de156bb7\">operator[]</a>(<span class=\"keyword\">const</span> MultiIndex& index)</div>\n-<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> {</div>\n-<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> <span class=\"keyword\">static_assert</span>(not std::is_same<Imp::DeducedCoefficientTag,Entry<MultiIndex>>::value, <span class=\"stringliteral\">"Coefficient type for HierarchicVectorWrapper and given multi-index type cannot be determined automatically!"</span>);</div>\n-<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> <span class=\"keywordflow\">return</span> hybridMultiIndexAccess<Entry<MultiIndex>&>(*vector_, index);</div>\n-<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> }</div>\n-<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> </div>\n-<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> MultiIndex></div>\n-<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01647.html#ae31a684e42b25f20767987da090212ef\"> 199</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01647.html#a84a850d0e5587fc6f14179ec3f15da5c\">Entry<MultiIndex></a>& <a class=\"code hl_function\" href=\"a01647.html#ae31a684e42b25f20767987da090212ef\">operator()</a>(<span class=\"keyword\">const</span> MultiIndex& index)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> <span class=\"keyword\">static_assert</span>(not std::is_same<Imp::DeducedCoefficientTag,Entry<MultiIndex>>::value, <span class=\"stringliteral\">"Coefficient type for HierarchicVectorWrapper and given multi-index type cannot be determined automatically!"</span>);</div>\n-<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> <span class=\"keywordflow\">return</span> (*<span class=\"keyword\">this</span>)[index];</div>\n-<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> }</div>\n-<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> </div>\n-<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> MultiIndex></div>\n-<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01647.html#a120c2f9cb951f4af18b61a3d8d3b320d\"> 206</a></span> <a class=\"code hl_typedef\" href=\"a01647.html#a84a850d0e5587fc6f14179ec3f15da5c\">Entry<MultiIndex></a>& <a class=\"code hl_function\" href=\"a01647.html#a120c2f9cb951f4af18b61a3d8d3b320d\">operator()</a>(<span class=\"keyword\">const</span> MultiIndex& index)</div>\n-<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> {</div>\n-<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span> <span class=\"keyword\">static_assert</span>(not std::is_same<Imp::DeducedCoefficientTag,Entry<MultiIndex>>::value, <span class=\"stringliteral\">"Coefficient type for HierarchicVectorWrapper and given multi-index type cannot be determined automatically!"</span>);</div>\n-<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> <span class=\"keywordflow\">return</span> (*<span class=\"keyword\">this</span>)[index];</div>\n-<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> }</div>\n-<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> </div>\n-<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01647.html#aa87d301d268493db3421a6eb5b9b307e\"> 212</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01647.html#a7662d9e57bc2b8e522f4d423c9bbe750\">Vector</a>& <a class=\"code hl_function\" href=\"a01647.html#aa87d301d268493db3421a6eb5b9b307e\">vector</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> <span class=\"keywordflow\">return</span> *vector_;</div>\n-<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> }</div>\n-<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span> </div>\n-<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01647.html#a63d1ba934a2e49657400ae410ecd2660\"> 217</a></span> <a class=\"code hl_typedef\" href=\"a01647.html#a7662d9e57bc2b8e522f4d423c9bbe750\">Vector</a>& <a class=\"code hl_function\" href=\"a01647.html#a63d1ba934a2e49657400ae410ecd2660\">vector</a>()</div>\n-<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> {</div>\n-<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> <span class=\"keywordflow\">return</span> *vector_;</div>\n-<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span> }</div>\n-<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> </div>\n-<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span><span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> </div>\n-<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> <a class=\"code hl_typedef\" href=\"a01647.html#a7662d9e57bc2b8e522f4d423c9bbe750\">Vector</a>* vector_;</div>\n-<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span>};</div>\n-<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> </div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> </div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00224.html\"> 37</a></span><span class=\"keyword\">namespace </span>BasisFactory {</div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> </div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01415.html\"> 44</a></span> <span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01415.html\">IndexMergingStrategy</a> {};</div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> </div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00224.html#ad515867ac194016a6f9e4463d1c67a24\"> 46</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a00224.html#ad515867ac194016a6f9e4463d1c67a24\">registerIndexMergingStrategy</a>(<a class=\"code hl_struct\" href=\"a01415.html\">IndexMergingStrategy</a>);</div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01419.html\"> 78</a></span> <span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01419.html\">FlatLexicographic</a></div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> : <span class=\"keyword\">public</span> <a class=\"code hl_struct\" href=\"a01415.html\">IndexMergingStrategy</a></div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> {};</div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> </div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01423.html\"> 112</a></span> <span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01423.html\">FlatInterleaved</a></div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> : <span class=\"keyword\">public</span> <a class=\"code hl_struct\" href=\"a01415.html\">IndexMergingStrategy</a></div>\n+<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> {};</div>\n+<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> </div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01427.html\"> 146</a></span> <span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01427.html\">BlockedLexicographic</a></div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> : <span class=\"keyword\">public</span> <a class=\"code hl_struct\" href=\"a01415.html\">IndexMergingStrategy</a></div>\n+<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> {};</div>\n+<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> </div>\n+<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01431.html\"> 180</a></span> <span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01431.html\">BlockedInterleaved</a> : <span class=\"keyword\">public</span> <a class=\"code hl_struct\" href=\"a01415.html\">IndexMergingStrategy</a> {};</div>\n+<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> </div>\n+<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> </div>\n+<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00214.html#ga611fb3c6cb312fb95e83dd1a62da13bc\"> 188</a></span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_struct\" href=\"a01419.html\">FlatLexicographic</a> <a class=\"code hl_function\" href=\"a00214.html#ga611fb3c6cb312fb95e83dd1a62da13bc\">flatLexicographic</a>()</div>\n+<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> {</div>\n+<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span> <span class=\"keywordflow\">return</span> {};</div>\n+<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> }</div>\n+<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> </div>\n+<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00214.html#ga67995074ba44e2e28647170584f54bec\"> 198</a></span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_struct\" href=\"a01423.html\">FlatInterleaved</a> <a class=\"code hl_function\" href=\"a00214.html#ga67995074ba44e2e28647170584f54bec\">flatInterleaved</a>()</div>\n+<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> {</div>\n+<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> <span class=\"keywordflow\">return</span> {};</div>\n+<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> }</div>\n+<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> </div>\n+<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00214.html#gadd59442e0e62464ee27af6f2741b4494\"> 208</a></span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_struct\" href=\"a01427.html\">BlockedLexicographic</a> <a class=\"code hl_function\" href=\"a00214.html#gadd59442e0e62464ee27af6f2741b4494\">blockedLexicographic</a>()</div>\n+<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> {</div>\n+<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> <span class=\"keywordflow\">return</span> {};</div>\n+<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> }</div>\n+<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"> 212</span> </div>\n+<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00214.html#ga649b67336300e9f05e38b5479ca21a24\"> 218</a></span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_struct\" href=\"a01431.html\">BlockedInterleaved</a> <a class=\"code hl_function\" href=\"a00214.html#ga649b67336300e9f05e38b5479ca21a24\">blockedInterleaved</a>()</div>\n+<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> {</div>\n+<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span> <span class=\"keywordflow\">return</span> {};</div>\n+<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> }</div>\n+<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span> </div>\n+<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span>} <span class=\"comment\">// end namespace BasisFactory</span></div>\n+<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> </div>\n+<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span><span class=\"comment\">// Backward compatibility</span></div>\n+<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00225.html\"> 226</a></span><span class=\"keyword\">namespace </span>BasisBuilder {</div>\n <div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> </div>\n-<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> </div>\n+<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> <span class=\"keyword\">using namespace </span>BasisFactory;</div>\n <div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> </div>\n-<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> V></div>\n-<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#aa74497c764d8ce0b365abae3637dadc8\"> 231</a></span><a class=\"code hl_class\" href=\"a01647.html\">HierarchicVectorWrapper< V ></a> <a class=\"code hl_function\" href=\"a00219.html#aa74497c764d8ce0b365abae3637dadc8\">hierarchicVector</a>(V& v)</div>\n-<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span>{</div>\n-<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01647.html\">HierarchicVectorWrapper<V></a>(v);</div>\n-<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span>}</div>\n+<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span>}</div>\n+<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span> </div>\n+<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span>} <span class=\"comment\">// end namespace Functions</span></div>\n+<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span>} <span class=\"comment\">// end namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> </div>\n <div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> </div>\n-<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span> </div>\n-<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span> </div>\n-<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>MultiIndex, <span class=\"keyword\">class </span>V,</div>\n-<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span> <span class=\"keyword\">typename</span> std::enable_if< models<Concept::HasIndexAccess, V, MultiIndex>(), <span class=\"keywordtype\">int</span>>::type = 0></div>\n-<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a5c705706be679d2a462e38b08274ad33\"> 240</a></span>V& <a class=\"code hl_function\" href=\"a00219.html#a5c705706be679d2a462e38b08274ad33\">makeHierarchicVectorForMultiIndex</a>(V& v)</div>\n-<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span>{</div>\n-<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span> <span class=\"keywordflow\">return</span> v;</div>\n-<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span>}</div>\n-<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> </div>\n-<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> </div>\n-<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span> </div>\n-<div class=\"line\"><a id=\"l00247\" name=\"l00247\"></a><span class=\"lineno\"> 247</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>MultiIndex, <span class=\"keyword\">class </span>V,</div>\n-<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"> 248</span> <span class=\"keyword\">typename</span> std::enable_if< not models<Concept::HasIndexAccess, V, MultiIndex>(), <span class=\"keywordtype\">int</span>>::type = 0></div>\n-<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#ae48bf799daaf0751086b47457350675e\"> 249</a></span><a class=\"code hl_class\" href=\"a01647.html\">HierarchicVectorWrapper< V ></a> <a class=\"code hl_function\" href=\"a00219.html#a5c705706be679d2a462e38b08274ad33\">makeHierarchicVectorForMultiIndex</a>(V& v)</div>\n-<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span>{</div>\n-<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01647.html\">HierarchicVectorWrapper<V></a>(v);</div>\n-<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span>}</div>\n-<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"> 253</span> </div>\n-<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"> 254</span> </div>\n-<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span> </div>\n-<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"> 256</span>} <span class=\"comment\">// namespace Dune::Functions</span></div>\n-<div class=\"line\"><a id=\"l00257\" name=\"l00257\"></a><span class=\"lineno\"> 257</span>} <span class=\"comment\">// namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00258\" name=\"l00258\"></a><span class=\"lineno\"> 258</span> </div>\n-<div class=\"line\"><a id=\"l00259\" name=\"l00259\"></a><span class=\"lineno\"> 259</span> </div>\n-<div class=\"line\"><a id=\"l00260\" name=\"l00260\"></a><span class=\"lineno\"> 260</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH</span></div>\n-<div class=\"ttc\" id=\"aa00041_html\"><div class=\"ttname\"><a href=\"a00041.html\">indexaccess.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00050_html\"><div class=\"ttname\"><a href=\"a00050.html\">utility.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00092_html\"><div class=\"ttname\"><a href=\"a00092.html\">type_traits.hh</a></div></div>\n+<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH</span></div>\n+<div class=\"ttc\" id=\"aa00214_html_ga611fb3c6cb312fb95e83dd1a62da13bc\"><div class=\"ttname\"><a href=\"a00214.html#ga611fb3c6cb312fb95e83dd1a62da13bc\">Dune::Functions::BasisFactory::flatLexicographic</a></div><div class=\"ttdeci\">constexpr FlatLexicographic flatLexicographic()</div><div class=\"ttdoc\">Creates a lexicographic merging of direct children without blocking.</div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:188</div></div>\n+<div class=\"ttc\" id=\"aa00214_html_ga649b67336300e9f05e38b5479ca21a24\"><div class=\"ttname\"><a href=\"a00214.html#ga649b67336300e9f05e38b5479ca21a24\">Dune::Functions::BasisFactory::blockedInterleaved</a></div><div class=\"ttdeci\">constexpr BlockedInterleaved blockedInterleaved()</div><div class=\"ttdoc\">Creates an interleaved merging of direct children with blocking (i.e. creating blocks at the leaves c...</div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:218</div></div>\n+<div class=\"ttc\" id=\"aa00214_html_ga67995074ba44e2e28647170584f54bec\"><div class=\"ttname\"><a href=\"a00214.html#ga67995074ba44e2e28647170584f54bec\">Dune::Functions::BasisFactory::flatInterleaved</a></div><div class=\"ttdeci\">constexpr FlatInterleaved flatInterleaved()</div><div class=\"ttdoc\">Creates an interleaved merging of direct children without blocking.</div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:198</div></div>\n+<div class=\"ttc\" id=\"aa00214_html_gadd59442e0e62464ee27af6f2741b4494\"><div class=\"ttname\"><a href=\"a00214.html#gadd59442e0e62464ee27af6f2741b4494\">Dune::Functions::BasisFactory::blockedLexicographic</a></div><div class=\"ttdeci\">constexpr BlockedLexicographic blockedLexicographic()</div><div class=\"ttdoc\">Creates a lexicographic merging of direct children with blocking (i.e. creating one block per direct ...</div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:208</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa00219_html_a5c705706be679d2a462e38b08274ad33\"><div class=\"ttname\"><a href=\"a00219.html#a5c705706be679d2a462e38b08274ad33\">Dune::Functions::makeHierarchicVectorForMultiIndex</a></div><div class=\"ttdeci\">V & makeHierarchicVectorForMultiIndex(V &v)</div><div class=\"ttdef\"><b>Definition:</b> hierarchicvectorwrapper.hh:240</div></div>\n-<div class=\"ttc\" id=\"aa00219_html_aa74497c764d8ce0b365abae3637dadc8\"><div class=\"ttname\"><a href=\"a00219.html#aa74497c764d8ce0b365abae3637dadc8\">Dune::Functions::hierarchicVector</a></div><div class=\"ttdeci\">HierarchicVectorWrapper< V > hierarchicVector(V &v)</div><div class=\"ttdef\"><b>Definition:</b> hierarchicvectorwrapper.hh:231</div></div>\n-<div class=\"ttc\" id=\"aa01331_html\"><div class=\"ttname\"><a href=\"a01331.html\">Dune::Functions::HasStaticSize</a></div><div class=\"ttdoc\">Check if type is a statically sized container.</div><div class=\"ttdef\"><b>Definition:</b> type_traits.hh:83</div></div>\n-<div class=\"ttc\" id=\"aa01647_html\"><div class=\"ttname\"><a href=\"a01647.html\">Dune::Functions::HierarchicVectorWrapper</a></div><div class=\"ttdoc\">A wrapper providing multiindex access to vector entries.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicvectorwrapper.hh:92</div></div>\n-<div class=\"ttc\" id=\"aa01647_html_a120c2f9cb951f4af18b61a3d8d3b320d\"><div class=\"ttname\"><a href=\"a01647.html#a120c2f9cb951f4af18b61a3d8d3b320d\">Dune::Functions::HierarchicVectorWrapper::operator()</a></div><div class=\"ttdeci\">Entry< MultiIndex > & operator()(const MultiIndex &index)</div><div class=\"ttdef\"><b>Definition:</b> hierarchicvectorwrapper.hh:206</div></div>\n-<div class=\"ttc\" id=\"aa01647_html_a5416072b233a9bef7e81d670de156bb7\"><div class=\"ttname\"><a href=\"a01647.html#a5416072b233a9bef7e81d670de156bb7\">Dune::Functions::HierarchicVectorWrapper::operator[]</a></div><div class=\"ttdeci\">Entry< MultiIndex > & operator[](const MultiIndex &index)</div><div class=\"ttdef\"><b>Definition:</b> hierarchicvectorwrapper.hh:192</div></div>\n-<div class=\"ttc\" id=\"aa01647_html_a5c3c358453d3e57b1bdc2a2343dde827\"><div class=\"ttname\"><a href=\"a01647.html#a5c3c358453d3e57b1bdc2a2343dde827\">Dune::Functions::HierarchicVectorWrapper::operator[]</a></div><div class=\"ttdeci\">const Entry< MultiIndex > & operator[](const MultiIndex &index) const</div><div class=\"ttdef\"><b>Definition:</b> hierarchicvectorwrapper.hh:185</div></div>\n-<div class=\"ttc\" id=\"aa01647_html_a63d1ba934a2e49657400ae410ecd2660\"><div class=\"ttname\"><a href=\"a01647.html#a63d1ba934a2e49657400ae410ecd2660\">Dune::Functions::HierarchicVectorWrapper::vector</a></div><div class=\"ttdeci\">Vector & vector()</div><div class=\"ttdef\"><b>Definition:</b> hierarchicvectorwrapper.hh:217</div></div>\n-<div class=\"ttc\" id=\"aa01647_html_a7662d9e57bc2b8e522f4d423c9bbe750\"><div class=\"ttname\"><a href=\"a01647.html#a7662d9e57bc2b8e522f4d423c9bbe750\">Dune::Functions::HierarchicVectorWrapper::Vector</a></div><div class=\"ttdeci\">V Vector</div><div class=\"ttdef\"><b>Definition:</b> hierarchicvectorwrapper.hh:167</div></div>\n-<div class=\"ttc\" id=\"aa01647_html_a84a850d0e5587fc6f14179ec3f15da5c\"><div class=\"ttname\"><a href=\"a01647.html#a84a850d0e5587fc6f14179ec3f15da5c\">Dune::Functions::HierarchicVectorWrapper::Entry</a></div><div class=\"ttdeci\">Coefficient< MultiIndex > Entry</div><div class=\"ttdef\"><b>Definition:</b> hierarchicvectorwrapper.hh:170</div></div>\n-<div class=\"ttc\" id=\"aa01647_html_aa87d301d268493db3421a6eb5b9b307e\"><div class=\"ttname\"><a href=\"a01647.html#aa87d301d268493db3421a6eb5b9b307e\">Dune::Functions::HierarchicVectorWrapper::vector</a></div><div class=\"ttdeci\">const Vector & vector() const</div><div class=\"ttdef\"><b>Definition:</b> hierarchicvectorwrapper.hh:212</div></div>\n-<div class=\"ttc\" id=\"aa01647_html_ac303d31978320b6a3fc4f17f2db0d938\"><div class=\"ttname\"><a href=\"a01647.html#ac303d31978320b6a3fc4f17f2db0d938\">Dune::Functions::HierarchicVectorWrapper::HierarchicVectorWrapper</a></div><div class=\"ttdeci\">HierarchicVectorWrapper(Vector &vector)</div><div class=\"ttdef\"><b>Definition:</b> hierarchicvectorwrapper.hh:172</div></div>\n-<div class=\"ttc\" id=\"aa01647_html_ae31a684e42b25f20767987da090212ef\"><div class=\"ttname\"><a href=\"a01647.html#ae31a684e42b25f20767987da090212ef\">Dune::Functions::HierarchicVectorWrapper::operator()</a></div><div class=\"ttdeci\">const Entry< MultiIndex > & operator()(const MultiIndex &index) const</div><div class=\"ttdef\"><b>Definition:</b> hierarchicvectorwrapper.hh:199</div></div>\n-<div class=\"ttc\" id=\"aa01647_html_ae7c4ff9e9c573813493c8f36607037c3\"><div class=\"ttname\"><a href=\"a01647.html#ae7c4ff9e9c573813493c8f36607037c3\">Dune::Functions::HierarchicVectorWrapper::resize</a></div><div class=\"ttdeci\">void resize(const SizeProvider &sizeProvider)</div><div class=\"ttdef\"><b>Definition:</b> hierarchicvectorwrapper.hh:177</div></div>\n-<div class=\"ttc\" id=\"aa02876_html\"><div class=\"ttname\"><a href=\"a02876.html\">concepts.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00220_html_a067e42f1ca7d6c4131518e5eb269da35\"><div class=\"ttname\"><a href=\"a00220.html#a067e42f1ca7d6c4131518e5eb269da35\">Dune::Functions::Concept::isIndexMergingStrategy</a></div><div class=\"ttdeci\">static constexpr bool isIndexMergingStrategy()</div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:23</div></div>\n+<div class=\"ttc\" id=\"aa00224_html_ad515867ac194016a6f9e4463d1c67a24\"><div class=\"ttname\"><a href=\"a00224.html#ad515867ac194016a6f9e4463d1c67a24\">Dune::Functions::BasisFactory::registerIndexMergingStrategy</a></div><div class=\"ttdeci\">void registerIndexMergingStrategy(IndexMergingStrategy)</div></div>\n+<div class=\"ttc\" id=\"aa01411_html\"><div class=\"ttname\"><a href=\"a01411.html\">Dune::Functions::Concept::IndexMergingStrategy</a></div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:15</div></div>\n+<div class=\"ttc\" id=\"aa01411_html_a8552823d8c75d18bca5f41f36cd7b2dd\"><div class=\"ttname\"><a href=\"a01411.html#a8552823d8c75d18bca5f41f36cd7b2dd\">Dune::Functions::Concept::IndexMergingStrategy::require</a></div><div class=\"ttdeci\">auto require(T &&t) -> decltype(registerIndexMergingStrategy(t))</div></div>\n+<div class=\"ttc\" id=\"aa01415_html\"><div class=\"ttname\"><a href=\"a01415.html\">Dune::Functions::BasisFactory::IndexMergingStrategy</a></div><div class=\"ttdoc\">Base class for index merging strategies to simplify detection.</div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:44</div></div>\n+<div class=\"ttc\" id=\"aa01419_html\"><div class=\"ttname\"><a href=\"a01419.html\">Dune::Functions::BasisFactory::FlatLexicographic</a></div><div class=\"ttdoc\">Lexicographic merging of direct children without blocking.</div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:80</div></div>\n+<div class=\"ttc\" id=\"aa01423_html\"><div class=\"ttname\"><a href=\"a01423.html\">Dune::Functions::BasisFactory::FlatInterleaved</a></div><div class=\"ttdoc\">Interleaved merging of direct children without blocking.</div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:114</div></div>\n+<div class=\"ttc\" id=\"aa01427_html\"><div class=\"ttname\"><a href=\"a01427.html\">Dune::Functions::BasisFactory::BlockedLexicographic</a></div><div class=\"ttdoc\">Lexicographic merging of direct children with blocking (i.e. creating one block per direct child).</div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:148</div></div>\n+<div class=\"ttc\" id=\"aa01431_html\"><div class=\"ttname\"><a href=\"a01431.html\">Dune::Functions::BasisFactory::BlockedInterleaved</a></div><div class=\"ttdoc\">Interleaved merging of direct children with blocking (i.e. creating blocks at the leaves containing o...</div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:180</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,328 +5,149 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-hierarchicvectorwrapper.hh\n+basistags.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH\n- 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH\n+ 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH\n+ 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH\n 5\n- 6#include <dune/common/concept.hh>\n- 7#include <dune/common/hybridutilities.hh>\n- 8#include <dune/common/indices.hh>\n- 9\n- 10#include <dune/functions/common/indexaccess.hh>\n- 11#include <dune/functions/common/utility.hh>\n- 12#include <dune/functions/common/type_traits.hh>\n- 13#include <dune/functions/functionspacebases/concepts.hh>\n- 14\n- 15\n- 16namespace Dune {\n- 17namespace Functions {\n- 18\n- 19\n- 20\n- 21namespace Imp {\n- 22\n- 23 // Construct default coefficient type from vector and multiindex type\n- 24 // This requires that MultiIndex has a static size. Otherwise the\n- 25 // vector type itself is returned.\n- 26 template<class V, class MultiIndex>\n- 27 struct CoefficientType\n- 28 {\n- 29 template<class E, std::size_t size>\n- 30 struct DefaultCoefficientTypeHelper\n- 31 {\n- 32 using E0 = decltype(std::declval<E>()[Dune::Indices::_0]);\n- 33 using type = typename DefaultCoefficientTypeHelper<E0, size-1>::type;\n- 34 };\n+ 6#include <type_traits>\n+ 7#include <dune/common/concept.hh>\n+ 8\n+ 9namespace Dune {\n+ 10namespace Functions {\n+ 11\n+ 12 namespace Concept {\n+ 13\n+14 struct IndexMergingStrategy\n+ 15 {\n+ 16 template<typename T>\n+17 auto require(T&& t) -> decltype(\n+ 18 registerIndexMergingStrategy(t)\n+ 19 );\n+ 20 };\n+ 21\n+ 22 template<typename T>\n+23 static constexpr bool isIndexMergingStrategy()\n+ 24 {\n+ 25 return models<Concept::IndexMergingStrategy,T>();\n+ 26 }\n+ 27\n+ 28 template<typename T>\n+29 static constexpr bool isIndexMergingStrategy(T&& t)\n+ 30 {\n+ 31 return models<Concept::IndexMergingStrategy,std::decay_t<T>>();\n+ 32 }\n+ 33\n+ 34 } // namespace Concept\n 35\n- 36 template<class E>\n- 37 struct DefaultCoefficientTypeHelper<E, 0>\n- 38 {\n- 39 using type = E;\n- 40 };\n- 41\n- 42 template<class MI,\n- 43 typename std::enable_if<HasStaticSize<MI>::value, int>::type = 0>\n- 44 static constexpr std::size_t getStaticSizeOrZero()\n- 45 {\n- 46 return StaticSize<MI>::value;\n- 47 }\n- 48\n- 49 template<class MI,\n- 50 typename std::enable_if<not HasStaticSize<MI>::value, int>::type = 0>\n- 51 static constexpr std::size_t getStaticSizeOrZero()\n- 52 {\n- 53 return 0;\n- 54 }\n- 55\n- 56 using type = typename DefaultCoefficientTypeHelper<V,\n-getStaticSizeOrZero<MultiIndex>()>::type;\n- 57 };\n- 58\n- 59\n- 60\n- 61 // This tag class is used as Coefficient template parameter\n- 62 // for HierarchicVectorWrapper if the coefficient type should\n- 63 // be deduced.\n- 64 struct DeducedCoefficientTag {};\n- 65\n- 66} // namespace Imp\n- 67\n- 68\n- 69\n- 90template<class V, class CO=Imp::DeducedCoefficientTag>\n-91class HierarchicVectorWrapper\n- 92{\n- 93 template<class MultiIndex>\n- 94 using Coefficient = typename std::conditional< std::is_same<Imp::\n-DeducedCoefficientTag,CO>::value and HasStaticSize<MultiIndex>::value,\n- 95 typename Imp::CoefficientType<V, MultiIndex>::type,\n- 96 CO\n- 97 >::type;\n- 98\n- 99\n- 100 using size_type = std::size_t;\n- 101\n- 102 template<class C, class SizeProvider,\n- 103 typename std::enable_if< not models<Concept::HasResize, C>(), int>::type =\n-0,\n- 104 typename std::enable_if< not models<Concept::HasSizeMethod, C>(), int>::\n-type = 0>\n- 105 static void resizeHelper(C& c, const SizeProvider& sizeProvider, typename\n-SizeProvider::SizePrefix prefix)\n- 106 {\n- 107 auto size = sizeProvider.size(prefix);\n- 108 if (size != 0)\n- 109 DUNE_THROW(RangeError, \"Can't resize scalar vector entry v[\" << prefix <<\n-\"] to size(\" << prefix << \")=\" << size);\n- 110 }\n- 111\n- 112 struct StaticResizeHelper\n- 113 {\n- 114 template<class I, class C, class SizeProvider>\n- 115 static void apply(I&& i, C& c, const SizeProvider& sizeProvider, typename\n-SizeProvider::SizePrefix prefix)\n- 116 {\n- 117 prefix.back() = i;\n- 118 resizeHelper(c[i], sizeProvider, prefix);\n- 119 }\n- 120 };\n- 121\n- 122 template<class C, class SizeProvider,\n- 123 typename std::enable_if< not models<Concept::HasResize, C>(), int>::type =\n-0,\n- 124 typename std::enable_if< models<Concept::HasSizeMethod, C>(), int>::type =\n-0>\n- 125 static void resizeHelper(C& c, const SizeProvider& sizeProvider, typename\n-SizeProvider::SizePrefix prefix)\n- 126 {\n- 127 auto size = sizeProvider.size(prefix);\n- 128 if (size == 0)\n- 129 return;\n- 130\n- 131 if (c.size() != size)\n- 132 DUNE_THROW(RangeError, \"Can't resize statically sized vector entry v[\" <<\n-prefix << \"] of size \" << c.size() << \" to size(\" << prefix << \")=\" << size);\n- 133\n- 134 using namespace Dune::Hybrid;\n- 135 prefix.push_back(0);\n- 136 forEach(integralRange(Hybrid::size(c)), [&](auto&& i) {\n- 137 StaticResizeHelper::apply(i, c, sizeProvider, prefix);\n- 138 });\n- 139 }\n- 140\n- 141 template<class C, class SizeProvider,\n- 142 typename std::enable_if< models<Concept::HasResize, C>(), int>::type = 0>\n- 143 static void resizeHelper(C& c, const SizeProvider& sizeProvider, typename\n-SizeProvider::SizePrefix prefix)\n- 144 {\n- 145 auto size = sizeProvider.size(prefix);\n- 146 if (size==0)\n- 147 {\n- 148 if (c.size()==0)\n- 149 DUNE_THROW(RangeError, \"Can't resize dynamically sized vector entry v[\" <<\n-prefix << \"]. Its size is 0 but the target size is unknown due to size(\" <<\n-prefix << \")=0.\");\n- 150 else\n- 151 return;\n- 152 }\n- 153\n- 154 c.resize(size);\n- 155 prefix.push_back(0);\n- 156 for(std::size_t i=0; i<size; ++i)\n- 157 {\n- 158 prefix.back() = i;\n- 159 resizeHelper(c[i], sizeProvider, prefix);\n- 160 }\n- 161 }\n- 162\n- 163\n- 164\n- 165public:\n- 166\n-167 using Vector = V;\n- 168\n- 169 template<class MultiIndex>\n-170 using Entry = Coefficient<MultiIndex>;\n- 171\n-172 HierarchicVectorWrapper(Vector& vector) :\n- 173 vector_(&vector)\n- 174 {}\n- 175\n- 176 template<class SizeProvider>\n-177 void resize(const SizeProvider& sizeProvider)\n- 178 {\n- 179 typename SizeProvider::SizePrefix prefix;\n- 180 prefix.resize(0);\n- 181 resizeHelper(*vector_, sizeProvider, prefix);\n- 182 }\n- 183\n- 184 template<class MultiIndex>\n-185 const Entry<MultiIndex>& operator[](const MultiIndex& index) const\n- 186 {\n- 187 static_assert(not std::is_same<Imp::\n-DeducedCoefficientTag,Entry<MultiIndex>>::value, \"Coefficient type for\n-HierarchicVectorWrapper and given multi-index type cannot be determined\n-automatically!\");\n- 188 return hybridMultiIndexAccess<const Entry<MultiIndex>&>(*vector_, index);\n- 189 }\n- 190\n- 191 template<class MultiIndex>\n-192 Entry<MultiIndex>& operator[](const MultiIndex& index)\n- 193 {\n- 194 static_assert(not std::is_same<Imp::\n-DeducedCoefficientTag,Entry<MultiIndex>>::value, \"Coefficient type for\n-HierarchicVectorWrapper and given multi-index type cannot be determined\n-automatically!\");\n- 195 return hybridMultiIndexAccess<Entry<MultiIndex>&>(*vector_, index);\n- 196 }\n- 197\n- 198 template<class MultiIndex>\n-199 const Entry<MultiIndex>& operator()(const MultiIndex& index) const\n- 200 {\n- 201 static_assert(not std::is_same<Imp::\n-DeducedCoefficientTag,Entry<MultiIndex>>::value, \"Coefficient type for\n-HierarchicVectorWrapper and given multi-index type cannot be determined\n-automatically!\");\n- 202 return (*this)[index];\n- 203 }\n- 204\n- 205 template<class MultiIndex>\n-206 Entry<MultiIndex>& operator()(const MultiIndex& index)\n- 207 {\n- 208 static_assert(not std::is_same<Imp::\n-DeducedCoefficientTag,Entry<MultiIndex>>::value, \"Coefficient type for\n-HierarchicVectorWrapper and given multi-index type cannot be determined\n-automatically!\");\n- 209 return (*this)[index];\n- 210 }\n- 211\n-212 const Vector& vector() const\n- 213 {\n- 214 return *vector_;\n- 215 }\n- 216\n-217 Vector& vector()\n- 218 {\n- 219 return *vector_;\n- 220 }\n- 221\n- 222private:\n- 223\n- 224 Vector* vector_;\n- 225};\n- 226\n+ 36\n+37namespace BasisFactory {\n+ 38\n+44 struct IndexMergingStrategy {};\n+ 45\n+46 void registerIndexMergingStrategy(IndexMergingStrategy);\n+ 47\n+78 struct FlatLexicographic\n+ 79 : public IndexMergingStrategy\n+ 80 {};\n+ 81\n+112 struct FlatInterleaved\n+ 113 : public IndexMergingStrategy\n+ 114 {};\n+ 115\n+146 struct BlockedLexicographic\n+ 147 : public IndexMergingStrategy\n+ 148 {};\n+ 149\n+180 struct BlockedInterleaved : public IndexMergingStrategy {};\n+ 181\n+ 182\n+188 constexpr FlatLexicographic flatLexicographic()\n+ 189 {\n+ 190 return {};\n+ 191 }\n+ 192\n+198 constexpr FlatInterleaved flatInterleaved()\n+ 199 {\n+ 200 return {};\n+ 201 }\n+ 202\n+208 constexpr BlockedLexicographic blockedLexicographic()\n+ 209 {\n+ 210 return {};\n+ 211 }\n+ 212\n+218 constexpr BlockedInterleaved blockedInterleaved()\n+ 219 {\n+ 220 return {};\n+ 221 }\n+ 222\n+ 223} // end namespace BasisFactory\n+ 224\n+ 225// Backward compatibility\n+226namespace BasisBuilder {\n 227\n- 228\n+ 228 using namespace BasisFactory;\n 229\n- 230template<class V>\n-231HierarchicVectorWrapper<_V_> hierarchicVector(V& v)\n- 232{\n- 233 return HierarchicVectorWrapper<V>(v);\n- 234}\n+ 230}\n+ 231\n+ 232} // end namespace Functions\n+ 233} // end namespace Dune\n+ 234\n 235\n- 236\n- 237\n- 238template<class MultiIndex, class V,\n- 239 typename std::enable_if< models<Concept::HasIndexAccess, V, MultiIndex>(),\n-int>::type = 0>\n-240V& makeHierarchicVectorForMultiIndex(V& v)\n- 241{\n- 242 return v;\n- 243}\n- 244\n- 245\n- 246\n- 247template<class MultiIndex, class V,\n- 248 typename std::enable_if< not models<Concept::HasIndexAccess, V,\n-MultiIndex>(), int>::type = 0>\n-249HierarchicVectorWrapper<_V_> makeHierarchicVectorForMultiIndex(V& v)\n- 250{\n- 251 return HierarchicVectorWrapper<V>(v);\n- 252}\n- 253\n- 254\n- 255\n- 256} // namespace Dune::Functions\n- 257} // namespace Dune\n- 258\n- 259\n- 260#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH\n-indexaccess.hh\n-utility.hh\n-type_traits.hh\n+ 236#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH\n+Dune::Functions::BasisFactory::flatLexicographic\n+constexpr FlatLexicographic flatLexicographic()\n+Creates a lexicographic merging of direct children without blocking.\n+Definition: basistags.hh:188\n+Dune::Functions::BasisFactory::blockedInterleaved\n+constexpr BlockedInterleaved blockedInterleaved()\n+Creates an interleaved merging of direct children with blocking (i.e. creating\n+blocks at the leaves c...\n+Definition: basistags.hh:218\n+Dune::Functions::BasisFactory::flatInterleaved\n+constexpr FlatInterleaved flatInterleaved()\n+Creates an interleaved merging of direct children without blocking.\n+Definition: basistags.hh:198\n+Dune::Functions::BasisFactory::blockedLexicographic\n+constexpr BlockedLexicographic blockedLexicographic()\n+Creates a lexicographic merging of direct children with blocking (i.e. creating\n+one block per direct ...\n+Definition: basistags.hh:208\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::makeHierarchicVectorForMultiIndex\n-V & makeHierarchicVectorForMultiIndex(V &v)\n-Definition: hierarchicvectorwrapper.hh:240\n-Dune::Functions::hierarchicVector\n-HierarchicVectorWrapper< V > hierarchicVector(V &v)\n-Definition: hierarchicvectorwrapper.hh:231\n-Dune::Functions::HasStaticSize\n-Check if type is a statically sized container.\n-Definition: type_traits.hh:83\n-Dune::Functions::HierarchicVectorWrapper\n-A wrapper providing multiindex access to vector entries.\n-Definition: hierarchicvectorwrapper.hh:92\n-Dune::Functions::HierarchicVectorWrapper::operator()\n-Entry< MultiIndex > & operator()(const MultiIndex &index)\n-Definition: hierarchicvectorwrapper.hh:206\n-Dune::Functions::HierarchicVectorWrapper::operator[]\n-Entry< MultiIndex > & operator[](const MultiIndex &index)\n-Definition: hierarchicvectorwrapper.hh:192\n-Dune::Functions::HierarchicVectorWrapper::operator[]\n-const Entry< MultiIndex > & operator[](const MultiIndex &index) const\n-Definition: hierarchicvectorwrapper.hh:185\n-Dune::Functions::HierarchicVectorWrapper::vector\n-Vector & vector()\n-Definition: hierarchicvectorwrapper.hh:217\n-Dune::Functions::HierarchicVectorWrapper::Vector\n-V Vector\n-Definition: hierarchicvectorwrapper.hh:167\n-Dune::Functions::HierarchicVectorWrapper::Entry\n-Coefficient< MultiIndex > Entry\n-Definition: hierarchicvectorwrapper.hh:170\n-Dune::Functions::HierarchicVectorWrapper::vector\n-const Vector & vector() const\n-Definition: hierarchicvectorwrapper.hh:212\n-Dune::Functions::HierarchicVectorWrapper::HierarchicVectorWrapper\n-HierarchicVectorWrapper(Vector &vector)\n-Definition: hierarchicvectorwrapper.hh:172\n-Dune::Functions::HierarchicVectorWrapper::operator()\n-const Entry< MultiIndex > & operator()(const MultiIndex &index) const\n-Definition: hierarchicvectorwrapper.hh:199\n-Dune::Functions::HierarchicVectorWrapper::resize\n-void resize(const SizeProvider &sizeProvider)\n-Definition: hierarchicvectorwrapper.hh:177\n-concepts.hh\n+Dune::Functions::Concept::isIndexMergingStrategy\n+static constexpr bool isIndexMergingStrategy()\n+Definition: basistags.hh:23\n+Dune::Functions::BasisFactory::registerIndexMergingStrategy\n+void registerIndexMergingStrategy(IndexMergingStrategy)\n+Dune::Functions::Concept::IndexMergingStrategy\n+Definition: basistags.hh:15\n+Dune::Functions::Concept::IndexMergingStrategy::require\n+auto require(T &&t) -> decltype(registerIndexMergingStrategy(t))\n+Dune::Functions::BasisFactory::IndexMergingStrategy\n+Base class for index merging strategies to simplify detection.\n+Definition: basistags.hh:44\n+Dune::Functions::BasisFactory::FlatLexicographic\n+Lexicographic merging of direct children without blocking.\n+Definition: basistags.hh:80\n+Dune::Functions::BasisFactory::FlatInterleaved\n+Interleaved merging of direct children without blocking.\n+Definition: basistags.hh:114\n+Dune::Functions::BasisFactory::BlockedLexicographic\n+Lexicographic merging of direct children with blocking (i.e. creating one block\n+per direct child).\n+Definition: basistags.hh:148\n+Dune::Functions::BasisFactory::BlockedInterleaved\n+Interleaved merging of direct children with blocking (i.e. creating blocks at\n+the leaves containing o...\n+Definition: basistags.hh:180\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00161.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00161.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: transformedindexbasis.hh File Reference</title>\n+<title>dune-functions: raviartthomasbasis.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -65,71 +65,68 @@\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> |\n+<a href=\"#typedef-members\">Typedefs</a> |\n <a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">transformedindexbasis.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">raviartthomasbasis.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <tuple></code><br />\n-<code>#include <utility></code><br />\n-<code>#include <dune/common/std/apply.hh></code><br />\n-<code>#include <dune/common/hybridutilities.hh></code><br />\n-<code>#include <dune/common/reservedvector.hh></code><br />\n-<code>#include <dune/common/typeutilities.hh></code><br />\n-<code>#include <dune/typetree/compositenode.hh></code><br />\n-<code>#include <dune/typetree/utility.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00056_source.html\">dune/functions/common/staticforloop.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00092_source.html\">dune/functions/common/type_traits.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00050_source.html\">dune/functions/common/utility.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00179_source.html\">dune/functions/functionspacebases/basistags.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00191_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a02876_source.html\">dune/functions/functionspacebases/concepts.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00119_source.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></code><br />\n+<div class=\"textblock\"><code>#include <array></code><br />\n+<code>#include <dune/common/exceptions.hh></code><br />\n+<code>#include <dune/grid/common/capabilities.hh></code><br />\n+<code>#include <dune/grid/common/mcmgmapper.hh></code><br />\n+<code>#include <dune/localfunctions/common/localfiniteelementvariant.hh></code><br />\n+<code>#include <dune/localfunctions/raviartthomas.hh></code><br />\n+<code>#include <dune/localfunctions/raviartthomas/raviartthomas0cube2d.hh></code><br />\n+<code>#include <dune/localfunctions/raviartthomas/raviartthomas0cube3d.hh></code><br />\n+<code>#include <dune/localfunctions/raviartthomas/raviartthomas02d.hh></code><br />\n+<code>#include <dune/localfunctions/raviartthomas/raviartthomas03d.hh></code><br />\n+<code>#include <dune/localfunctions/raviartthomas/raviartthomas1cube2d.hh></code><br />\n+<code>#include <dune/localfunctions/raviartthomas/raviartthomas1cube3d.hh></code><br />\n+<code>#include <dune/localfunctions/raviartthomas/raviartthomas12d.hh></code><br />\n+<code>#include <dune/localfunctions/raviartthomas/raviartthomas2cube2d.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00137_source.html\">dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00179_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00152_source.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></code><br />\n </div>\n <p><a href=\"a00161_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01827.html\">Dune::Functions::Experimental::TransformedIndexPreBasis< RPB, T ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A pre-basis transforming multi-indices. <a href=\"a01827.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01795.html\">Dune::Functions::RaviartThomasPreBasis< GV, k ></a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01831.html\">Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation< IndexTransformation, SizeImplementation, minIS, maxIS ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A generic implementation of a transformation. <a href=\"a01831.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01791.html\">Dune::Functions::RaviartThomasNode< GV, k ></a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a00229\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00229.html\">Dune::Functions::Experimental</a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00224\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00224.html\">Dune::Functions::BasisFactory</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a00227\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00227.html\">Dune::Functions::BasisFactory::Experimental</a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+</table><table class=\"memberdecls\">\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"typedef-members\" name=\"typedef-members\"></a>\n+Typedefs</h2></td></tr>\n+<tr class=\"memitem:a79a7c0c6e2a4ba12c82164fcbbae6c63\"><td class=\"memTemplParams\" colspan=\"2\">template<typename GV , int k> </td></tr>\n+<tr class=\"memitem:a79a7c0c6e2a4ba12c82164fcbbae6c63\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a79a7c0c6e2a4ba12c82164fcbbae6c63\">Dune::Functions::RaviartThomasBasis</a> = DefaultGlobalBasis< RaviartThomasPreBasis< GV, k > ></td></tr>\n+<tr class=\"memdesc:a79a7c0c6e2a4ba12c82164fcbbae6c63\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Basis of a k-th-order Raviart Thomas finite element space. <a href=\"a00219.html#a79a7c0c6e2a4ba12c82164fcbbae6c63\">More...</a><br /></td></tr>\n+<tr class=\"separator:a79a7c0c6e2a4ba12c82164fcbbae6c63\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n Functions</h2></td></tr>\n-<tr class=\"memitem:a97702eea52e7ff7d9e66226034aee386\"><td class=\"memTemplParams\" colspan=\"2\">template<class RPB , class T > </td></tr>\n-<tr class=\"memitem:a97702eea52e7ff7d9e66226034aee386\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\"> </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00229.html#a97702eea52e7ff7d9e66226034aee386\">Dune::Functions::Experimental::TransformedIndexPreBasis</a> (RPB &&, T &&) -> TransformedIndexPreBasis< std::decay_t< RPB >, std::decay_t< T > ></td></tr>\n-<tr class=\"separator:a97702eea52e7ff7d9e66226034aee386\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a6b531a5d076e13881c59b75e505e808e\"><td class=\"memTemplParams\" colspan=\"2\">template<class RawPreBasisFactory , class Transformation > </td></tr>\n-<tr class=\"memitem:a6b531a5d076e13881c59b75e505e808e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00227.html#a6b531a5d076e13881c59b75e505e808e\">Dune::Functions::BasisFactory::Experimental::transformIndices</a> (RawPreBasisFactory &&preBasisFactory, Transformation &&transformation)</td></tr>\n-<tr class=\"memdesc:a6b531a5d076e13881c59b75e505e808e\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a TransformedIndexPreBasisFactory. <a href=\"a00227.html#a6b531a5d076e13881c59b75e505e808e\">More...</a><br /></td></tr>\n-<tr class=\"separator:a6b531a5d076e13881c59b75e505e808e\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:af76509ea5d22293cf990c33c3306992f\"><td class=\"memTemplParams\" colspan=\"2\">template<class IndexTransformation , class SizeImplementation , std::size_t minIndexSize, std::size_t maxIndexSize> </td></tr>\n-<tr class=\"memitem:af76509ea5d22293cf990c33c3306992f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00227.html#af76509ea5d22293cf990c33c3306992f\">Dune::Functions::BasisFactory::Experimental::indexTransformation</a> (IndexTransformation &&indexTransformation, SizeImplementation &&sizeImplementation, Dune::index_constant< minIndexSize >, Dune::index_constant< maxIndexSize >)</td></tr>\n-<tr class=\"memdesc:af76509ea5d22293cf990c33c3306992f\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A generic implementation of a transformation. <a href=\"a00227.html#af76509ea5d22293cf990c33c3306992f\">More...</a><br /></td></tr>\n-<tr class=\"separator:af76509ea5d22293cf990c33c3306992f\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:gac7c656af99728aa385381f5d78ae0b98\"><td class=\"memTemplParams\" colspan=\"2\">template<std::size_t k> </td></tr>\n+<tr class=\"memitem:gac7c656af99728aa385381f5d78ae0b98\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#gac7c656af99728aa385381f5d78ae0b98\">Dune::Functions::BasisFactory::raviartThomas</a> ()</td></tr>\n+<tr class=\"memdesc:gac7c656af99728aa385381f5d78ae0b98\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a pre-basis factory that can create a Raviart-Thomas pre-basis. <a href=\"a00213.html#gac7c656af99728aa385381f5d78ae0b98\">More...</a><br /></td></tr>\n+<tr class=\"separator:gac7c656af99728aa385381f5d78ae0b98\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,66 +5,54 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-Classes | Namespaces | Functions\n-transformedindexbasis.hh File Reference\n-#include <tuple>\n-#include <utility>\n-#include <dune/common/std/apply.hh>\n-#include <dune/common/hybridutilities.hh>\n-#include <dune/common/reservedvector.hh>\n-#include <dune/common/typeutilities.hh>\n-#include <dune/typetree/compositenode.hh>\n-#include <dune/typetree/utility.hh>\n-#include <dune/functions/common/staticforloop.hh>\n-#include <dune/functions/common/type_traits.hh>\n-#include <dune/functions/common/utility.hh>\n-#include <dune/functions/functionspacebases/basistags.hh>\n+Classes | Namespaces | Typedefs | Functions\n+raviartthomasbasis.hh File Reference\n+#include <array>\n+#include <dune/common/exceptions.hh>\n+#include <dune/grid/common/capabilities.hh>\n+#include <dune/grid/common/mcmgmapper.hh>\n+#include <dune/localfunctions/common/localfiniteelementvariant.hh>\n+#include <dune/localfunctions/raviartthomas.hh>\n+#include <dune/localfunctions/raviartthomas/raviartthomas0cube2d.hh>\n+#include <dune/localfunctions/raviartthomas/raviartthomas0cube3d.hh>\n+#include <dune/localfunctions/raviartthomas/raviartthomas02d.hh>\n+#include <dune/localfunctions/raviartthomas/raviartthomas03d.hh>\n+#include <dune/localfunctions/raviartthomas/raviartthomas1cube2d.hh>\n+#include <dune/localfunctions/raviartthomas/raviartthomas1cube3d.hh>\n+#include <dune/localfunctions/raviartthomas/raviartthomas12d.hh>\n+#include <dune/localfunctions/raviartthomas/raviartthomas2cube2d.hh>\n+#include <dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh>\n #include <dune/functions/functionspacebases/nodes.hh>\n-#include <dune/functions/functionspacebases/concepts.hh>\n #include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-class \u00a0Dune::Functions::Experimental::TransformedIndexPreBasis<_RPB,_T_>\n-\u00a0 A pre-basis transforming multi-indices. More...\n+class \u00a0Dune::Functions::RaviartThomasPreBasis<_GV,_k_>\n \u00a0\n-class \u00a0Dune::Functions::BasisFactory::Experimental::\n- GenericIndexingTransformation<_IndexTransformation,_SizeImplementation,\n- minIS,_maxIS_>\n-\u00a0 A generic implementation of a transformation. More...\n+class \u00a0Dune::Functions::RaviartThomasNode<_GV,_k_>\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n-namespace \u00a0Dune::Functions::Experimental\n-\u00a0\n namespace \u00a0Dune::Functions::BasisFactory\n \u00a0\n-namespace \u00a0Dune::Functions::BasisFactory::Experimental\n+ Typedefs\n+template<typename GV , int k>\n+using\u00a0Dune::Functions::RaviartThomasBasis = DefaultGlobalBasis<\n+ RaviartThomasPreBasis< GV, k > >\n+\u00a0 Basis of a k-th-order Raviart Thomas finite element space. More...\n \u00a0\n Functions\n-template<class RPB , class T >\n- \u00a0Dune::Functions::Experimental::TransformedIndexPreBasis (RPB &&, T &&) -\n- > TransformedIndexPreBasis< std::decay_t< RPB >, std::decay_t< T > >\n-\u00a0\n-template<class RawPreBasisFactory , class Transformation >\n-auto\u00a0Dune::Functions::BasisFactory::Experimental::transformIndices\n- (RawPreBasisFactory &&preBasisFactory, Transformation &&transformation)\n-\u00a0 Create a TransformedIndexPreBasisFactory. More...\n-\u00a0\n-template<class IndexTransformation , class SizeImplementation , std::size_t\n-minIndexSize, std::size_t maxIndexSize>\n-auto\u00a0Dune::Functions::BasisFactory::Experimental::indexTransformation\n- (IndexTransformation &&indexTransformation, SizeImplementation\n- &&sizeImplementation, Dune::index_constant< minIndexSize >, Dune::\n- index_constant< maxIndexSize >)\n-\u00a0 A generic implementation of a transformation. More...\n+template<std::size_t k>\n+auto\u00a0Dune::Functions::BasisFactory::raviartThomas ()\n+\u00a0 Create a pre-basis factory that can create a Raviart-Thomas pre-basis.\n+ More...\n \u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00161_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00161_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: transformedindexbasis.hh Source File</title>\n+<title>dune-functions: raviartthomasbasis.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,275 +62,445 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">transformedindexbasis.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">raviartthomasbasis.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00161.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <tuple></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <utility></span></div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <array></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <dune/common/exceptions.hh></span></div>\n <div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/common/std/apply.hh></span></div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/hybridutilities.hh></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/common/reservedvector.hh></span></div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <dune/common/typeutilities.hh></span></div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <dune/common/hybridutilities.hh></span></div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <dune/typetree/compositenode.hh></span></div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"preprocessor\">#include <dune/typetree/utility.hh></span></div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00056.html\">dune/functions/common/staticforloop.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00092.html\">dune/functions/common/type_traits.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00050.html\">dune/functions/common/utility.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00179.html\">dune/functions/functionspacebases/basistags.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00191.html\">dune/functions/functionspacebases/nodes.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a02876.html\">dune/functions/functionspacebases/concepts.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00119.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> </div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/grid/common/capabilities.hh></span></div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/grid/common/mcmgmapper.hh></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <dune/localfunctions/common/localfiniteelementvariant.hh></span></div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <dune/localfunctions/raviartthomas.hh></span></div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <dune/localfunctions/raviartthomas/raviartthomas0cube2d.hh></span></div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <dune/localfunctions/raviartthomas/raviartthomas0cube3d.hh></span></div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"preprocessor\">#include <dune/localfunctions/raviartthomas/raviartthomas02d.hh></span></div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"preprocessor\">#include <dune/localfunctions/raviartthomas/raviartthomas03d.hh></span></div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"preprocessor\">#include <dune/localfunctions/raviartthomas/raviartthomas1cube2d.hh></span></div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"preprocessor\">#include <dune/localfunctions/raviartthomas/raviartthomas1cube3d.hh></span></div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"preprocessor\">#include <dune/localfunctions/raviartthomas/raviartthomas12d.hh></span></div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"preprocessor\">#include <dune/localfunctions/raviartthomas/raviartthomas2cube2d.hh></span></div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> </div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00137.html\">dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00179.html\">dune/functions/functionspacebases/nodes.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00152.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></span></div>\n <div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> </div>\n <div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n <div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00229.html\"> 29</a></span><span class=\"keyword\">namespace </span>Experimental {</div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> </div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span><span class=\"comment\">// *****************************************************************************</span></div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span><span class=\"comment\">// *****************************************************************************</span></div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> </div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> RPB, <span class=\"keyword\">class</span> T></div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html\"> 51</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01827.html\">TransformedIndexPreBasis</a></div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span>{</div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> <span class=\"keyword\">using </span>Transformation = T;</div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> </div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01827.html\">This</a> = <a class=\"code hl_class\" href=\"a01827.html\">TransformedIndexPreBasis<RPB, T></a>;</div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span> </div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span><span class=\"keyword\">namespace </span>Impl {</div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> </div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> <span class=\"keyword\">template</span><<span class=\"keywordtype\">int</span> dim, <span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R, std::<span class=\"keywordtype\">size_t</span> k></div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> <span class=\"keyword\">struct </span>RaviartThomasSimplexLocalInfo</div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> {</div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> <span class=\"comment\">// Dummy type, must be something that we can have a std::unique_ptr to</span></div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> <span class=\"keyword\">using </span>FiniteElement = <span class=\"keywordtype\">void</span>*;</div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> };</div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> </div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R></div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> <span class=\"keyword\">struct </span>RaviartThomasSimplexLocalInfo<2,D,R,0></div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> {</div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> <span class=\"keyword\">using </span>FiniteElement = RT02DLocalFiniteElement<D,R>;</div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> };</div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> </div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R></div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> <span class=\"keyword\">struct </span>RaviartThomasSimplexLocalInfo<2,D,R,1></div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> {</div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> <span class=\"keyword\">using </span>FiniteElement = RT12DLocalFiniteElement<D,R>;</div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> };</div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> </div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R></div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> <span class=\"keyword\">struct </span>RaviartThomasSimplexLocalInfo<3,D,R,0></div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> {</div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> <span class=\"keyword\">using </span>FiniteElement = RT03DLocalFiniteElement<D,R>;</div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> };</div>\n <div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> </div>\n-<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> </div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a64aa0bf3453d3f749622b7ea521715ae\"> 59</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01827.html#a64aa0bf3453d3f749622b7ea521715ae\">RawPreBasis</a> = RPB;</div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> </div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a218ba207b64f73e09b2018d951f2dd54\"> 62</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01827.html#a218ba207b64f73e09b2018d951f2dd54\">GridView</a> = <span class=\"keyword\">typename</span> RawPreBasis::GridView;</div>\n+<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> <span class=\"keyword\">template</span><<span class=\"keywordtype\">int</span> dim, <span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R, std::<span class=\"keywordtype\">size_t</span> k></div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> <span class=\"keyword\">struct </span>RaviartThomasCubeLocalInfo</div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> {</div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> <span class=\"comment\">// Dummy type, must be something that we can have a std::unique_ptr to</span></div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> <span class=\"keyword\">using </span>FiniteElement = <span class=\"keywordtype\">void</span>*;</div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> };</div>\n <div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> </div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a9468d7e0817593e6b0e52b9b33f2a7ce\"> 65</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01827.html#a9468d7e0817593e6b0e52b9b33f2a7ce\">size_type</a> = std::size_t;</div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> </div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a3eec8056dfb98fa13397be1f6c3c5f61\"> 68</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01827.html#a3eec8056dfb98fa13397be1f6c3c5f61\">Node</a> = <span class=\"keyword\">typename</span> RawPreBasis::Node;</div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R></div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> <span class=\"keyword\">struct </span>RaviartThomasCubeLocalInfo<2,D,R,0></div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> {</div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> <span class=\"keyword\">using </span>FiniteElement = RT0Cube2DLocalFiniteElement<D,R>;</div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> };</div>\n <div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> </div>\n-<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a474968659bf3b30d623d6baceaceafac\"> 70</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01827.html#a9468d7e0817593e6b0e52b9b33f2a7ce\">size_type</a> <a class=\"code hl_variable\" href=\"a01827.html#a474968659bf3b30d623d6baceaceafac\">maxMultiIndexSize</a> = Transformation::maxIndexSize;</div>\n-<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#ae4b2655926fabb0a127584a701446958\"> 71</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01827.html#a9468d7e0817593e6b0e52b9b33f2a7ce\">size_type</a> <a class=\"code hl_variable\" href=\"a01827.html#ae4b2655926fabb0a127584a701446958\">minMultiIndexSize</a> = Transformation::minIndexSize;</div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#aa46fd3cb45543bee69dfd60429254ba4\"> 72</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01827.html#a9468d7e0817593e6b0e52b9b33f2a7ce\">size_type</a> <a class=\"code hl_variable\" href=\"a01827.html#aa46fd3cb45543bee69dfd60429254ba4\">multiIndexBufferSize</a> = std::max(RawPreBasis::multiIndexBufferSize, <a class=\"code hl_variable\" href=\"a01827.html#a474968659bf3b30d623d6baceaceafac\">maxMultiIndexSize</a>);</div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> </div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> RPB_R, <span class=\"keyword\">class</span> T_R></div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a415716e3d0436f2e9c44992ee79f6133\"> 80</a></span> <a class=\"code hl_function\" href=\"a01827.html#a415716e3d0436f2e9c44992ee79f6133\">TransformedIndexPreBasis</a>(RPB_R&& <a class=\"code hl_function\" href=\"a01827.html#ae05f9b7e9586b30e88d78c42737e4971\">rawPreBasis</a>, T_R&& transformation) :</div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> <a class=\"code hl_variable\" href=\"a01827.html#a363ac0b99c5fdbc380f259234ab757e2\">rawPreBasis_</a>(std::forward<RPB_R>(<a class=\"code hl_function\" href=\"a01827.html#ae05f9b7e9586b30e88d78c42737e4971\">rawPreBasis</a>)),</div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> <a class=\"code hl_variable\" href=\"a01827.html#a08d7fc8b1ea9546463ae3322605f4fd9\">transformation_</a>(std::forward<T_R>(transformation))</div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> {}</div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> </div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a1392b84bf237ce8c8be2b2ec7b9869f2\"> 86</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01827.html#a1392b84bf237ce8c8be2b2ec7b9869f2\">initializeIndices</a>()</div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> {</div>\n-<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> <a class=\"code hl_variable\" href=\"a01827.html#a363ac0b99c5fdbc380f259234ab757e2\">rawPreBasis_</a>.initializeIndices();</div>\n-<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> }</div>\n-<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> </div>\n-<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a594c7901fbeee33aed41098733345691\"> 92</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01827.html#a218ba207b64f73e09b2018d951f2dd54\">GridView</a>& <a class=\"code hl_function\" href=\"a01827.html#a594c7901fbeee33aed41098733345691\">gridView</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01827.html#a363ac0b99c5fdbc380f259234ab757e2\">rawPreBasis_</a>.gridView();</div>\n-<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> }</div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> </div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a573a82c3462477edff6bdcfab358894e\"> 98</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01827.html#a573a82c3462477edff6bdcfab358894e\">update</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01827.html#a218ba207b64f73e09b2018d951f2dd54\">GridView</a>& gv)</div>\n-<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> {</div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> <a class=\"code hl_variable\" href=\"a01827.html#a363ac0b99c5fdbc380f259234ab757e2\">rawPreBasis_</a>.update(gv);</div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> }</div>\n+<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R></div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> <span class=\"keyword\">struct </span>RaviartThomasCubeLocalInfo<2,D,R,1></div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> {</div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> <span class=\"keyword\">using </span>FiniteElement = RT1Cube2DLocalFiniteElement<D,R>;</div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> };</div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> </div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R></div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> <span class=\"keyword\">struct </span>RaviartThomasCubeLocalInfo<2,D,R,2></div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> {</div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> <span class=\"keyword\">using </span>FiniteElement = RT2Cube2DLocalFiniteElement<D,R>;</div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> };</div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> </div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R></div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> <span class=\"keyword\">struct </span>RaviartThomasCubeLocalInfo<3,D,R,0></div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> {</div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> <span class=\"keyword\">using </span>FiniteElement = RT0Cube3DLocalFiniteElement<D,R>;</div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> };</div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> </div>\n+<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R></div>\n+<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> <span class=\"keyword\">struct </span>RaviartThomasCubeLocalInfo<3,D,R,1></div>\n+<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> {</div>\n+<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> <span class=\"keyword\">using </span>FiniteElement = RT1Cube3DLocalFiniteElement<D,R>;</div>\n+<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> };</div>\n+<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> </div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> dim, <span class=\"keyword\">typename</span> R, std::<span class=\"keywordtype\">size_t</span> k></div>\n+<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> <span class=\"keyword\">class </span>RaviartThomasLocalFiniteElementMap</div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> {</div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> <span class=\"keyword\">using </span>D = <span class=\"keyword\">typename</span> GV::ctype;</div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> hasFixedElementType = Capabilities::hasSingleGeometryType<typename GV::Grid>::v;</div>\n+<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> </div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> <span class=\"keyword\">using </span>CubeFiniteElement = <span class=\"keyword\">typename</span> RaviartThomasCubeLocalInfo<dim, D, R, k>::FiniteElement;</div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> <span class=\"keyword\">using </span>SimplexFiniteElement = <span class=\"keyword\">typename</span> RaviartThomasSimplexLocalInfo<dim, D, R, k>::FiniteElement;</div>\n <div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> </div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a59112faa30a2466538b2f7bdf2f3b9f9\"> 113</a></span> <a class=\"code hl_typedef\" href=\"a01827.html#a3eec8056dfb98fa13397be1f6c3c5f61\">Node</a> <a class=\"code hl_function\" href=\"a01827.html#a59112faa30a2466538b2f7bdf2f3b9f9\">makeNode</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01827.html#a363ac0b99c5fdbc380f259234ab757e2\">rawPreBasis_</a>.makeNode();</div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> }</div>\n-<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> </div>\n-<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a683d388cba68feafc350d23c8078666b\"> 119</a></span> <a class=\"code hl_typedef\" href=\"a01827.html#a9468d7e0817593e6b0e52b9b33f2a7ce\">size_type</a> <a class=\"code hl_function\" href=\"a01827.html#a683d388cba68feafc350d23c8078666b\">size</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01827.html#a683d388cba68feafc350d23c8078666b\">size</a>(Dune::ReservedVector<size_type, multiIndexBufferSize>{});</div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> }</div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> </div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a60c39a7fbdc2f97ea2ca609523c917ad\"> 126</a></span> <a class=\"code hl_typedef\" href=\"a01827.html#a9468d7e0817593e6b0e52b9b33f2a7ce\">size_type</a> <a class=\"code hl_function\" href=\"a01827.html#a60c39a7fbdc2f97ea2ca609523c917ad\">size</a>(<span class=\"keyword\">const</span> SizePrefix& prefix)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01827.html#a08d7fc8b1ea9546463ae3322605f4fd9\">transformation_</a>.size(prefix, <a class=\"code hl_variable\" href=\"a01827.html#a363ac0b99c5fdbc380f259234ab757e2\">rawPreBasis_</a>);</div>\n-<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> }</div>\n-<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> </div>\n-<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#acb52b5e4d4d4b17e8bcabaa224e3e098\"> 132</a></span> <a class=\"code hl_typedef\" href=\"a01827.html#a9468d7e0817593e6b0e52b9b33f2a7ce\">size_type</a> <a class=\"code hl_function\" href=\"a01827.html#acb52b5e4d4d4b17e8bcabaa224e3e098\">dimension</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01827.html#a08d7fc8b1ea9546463ae3322605f4fd9\">transformation_</a>.dimension(<a class=\"code hl_variable\" href=\"a01827.html#a363ac0b99c5fdbc380f259234ab757e2\">rawPreBasis_</a>);</div>\n-<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> }</div>\n-<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> </div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a8120d9942ea893adcb6a1cb1e39634ae\"> 138</a></span> <a class=\"code hl_typedef\" href=\"a01827.html#a9468d7e0817593e6b0e52b9b33f2a7ce\">size_type</a> <a class=\"code hl_function\" href=\"a01827.html#a8120d9942ea893adcb6a1cb1e39634ae\">maxNodeSize</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01827.html#a363ac0b99c5fdbc380f259234ab757e2\">rawPreBasis_</a>.maxNodeSize();</div>\n-<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> }</div>\n-<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> </div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#ae05f9b7e9586b30e88d78c42737e4971\"> 143</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01827.html#a64aa0bf3453d3f749622b7ea521715ae\">RawPreBasis</a>& <a class=\"code hl_function\" href=\"a01827.html#ae05f9b7e9586b30e88d78c42737e4971\">rawPreBasis</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01827.html#a363ac0b99c5fdbc380f259234ab757e2\">rawPreBasis_</a>;</div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> }</div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> </div>\n-<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a44184e98f04f793b05c9c0bac7d0b2f7\"> 148</a></span> <a class=\"code hl_typedef\" href=\"a01827.html#a64aa0bf3453d3f749622b7ea521715ae\">RawPreBasis</a>& <a class=\"code hl_function\" href=\"a01827.html#a44184e98f04f793b05c9c0bac7d0b2f7\">rawPreBasis</a>()</div>\n-<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> {</div>\n-<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01827.html#a363ac0b99c5fdbc380f259234ab757e2\">rawPreBasis_</a>;</div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> }</div>\n+<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> <span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> </div>\n+<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> <span class=\"keyword\">using </span>T = LocalBasisTraits<D, dim, FieldVector<D,dim>, R, dim, FieldVector<R,dim>, FieldMatrix<D,dim,dim> >;</div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> </div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> topologyId = Capabilities::hasSingleGeometryType<typename GV::Grid>::topologyId; <span class=\"comment\">// meaningless if hasFixedElementType is false</span></div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">static</span> GeometryType type = GeometryType(topologyId, GV::dimension);</div>\n+<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> </div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> <span class=\"keyword\">using </span>FiniteElement = std::conditional_t<hasFixedElementType,</div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> std::conditional_t<type.isCube(),CubeFiniteElement,SimplexFiniteElement>,</div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> LocalFiniteElementVariant<CubeFiniteElement, SimplexFiniteElement> >;</div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> </div>\n+<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> <span class=\"comment\">// Each element facet can have its orientation reversed, hence there are</span></div>\n+<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> <span class=\"comment\">// 2^#facets different variants.</span></div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> <span class=\"keyword\">static</span> std::size_t numVariants(GeometryType type)</div>\n+<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> {</div>\n+<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> <span class=\"keyword\">auto</span> numFacets = referenceElement<D,dim>(type).size(1);</div>\n+<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00213.html#ga0d8eb549af76bc2563ab189e63668ee5\">power</a>(2,numFacets);</div>\n+<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> }</div>\n+<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> </div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> RaviartThomasLocalFiniteElementMap(<span class=\"keyword\">const</span> GV& gv)</div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> : elementMapper_(gv, mcmgElementLayout()),</div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> orient_(gv.size(0))</div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> {</div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> (hasFixedElementType)</div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> {</div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> variants_.resize(numVariants(type));</div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i = 0; i < numVariants(type); i++)</div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> variants_[i] = FiniteElement(i);</div>\n+<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> }</div>\n+<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> <span class=\"keywordflow\">else</span></div>\n+<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> {</div>\n+<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> <span class=\"comment\">// for mixed grids add offset for cubes</span></div>\n+<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> variants_.resize(numVariants(GeometryTypes::simplex(dim)) + numVariants(GeometryTypes::cube(dim)));</div>\n+<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i = 0; i < numVariants(GeometryTypes::simplex(dim)); i++)</div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> variants_[i] = SimplexFiniteElement(i);</div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i = 0; i < numVariants(GeometryTypes::cube(dim)); i++)</div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> variants_[i + numVariants(GeometryTypes::simplex(dim))] = CubeFiniteElement(i);</div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> }</div>\n+<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> </div>\n+<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& cell : elements(gv))</div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> {</div>\n+<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> myId = elementMapper_.index(cell);</div>\n+<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> orient_[myId] = 0;</div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> </div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> <span class=\"keywordflow\">for</span> (<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& intersection : intersections(gv,cell))</div>\n+<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> {</div>\n+<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> <span class=\"keywordflow\">if</span> (intersection.neighbor() && (elementMapper_.index(intersection.outside()) > myId))</div>\n+<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> orient_[myId] |= (1 << intersection.indexInInside());</div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> }</div>\n <div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> </div>\n-<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> MultiIndex></div>\n-<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a2be4ef5cda338039c85cd40553ff0b82\"> 154</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01827.html#a2be4ef5cda338039c85cd40553ff0b82\">transformIndex</a>(MultiIndex& multiIndex)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> <a class=\"code hl_variable\" href=\"a01827.html#a08d7fc8b1ea9546463ae3322605f4fd9\">transformation_</a>.transformIndex(multiIndex, <a class=\"code hl_variable\" href=\"a01827.html#a363ac0b99c5fdbc380f259234ab757e2\">rawPreBasis_</a>);</div>\n-<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> }</div>\n-<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> </div>\n-<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n-<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a03c263627a93eb69efb8bd129ddebbe6\"> 160</a></span> It <a class=\"code hl_function\" href=\"a01827.html#a03c263627a93eb69efb8bd129ddebbe6\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01827.html#a3eec8056dfb98fa13397be1f6c3c5f61\">Node</a>& node, It it)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> <a class=\"code hl_function\" href=\"a01827.html#ae05f9b7e9586b30e88d78c42737e4971\">rawPreBasis</a>().indices(node, it);</div>\n-<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> <span class=\"keywordflow\">for</span>(std::size_t i=0; i<node.size(); ++i)</div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> {</div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> <a class=\"code hl_function\" href=\"a01827.html#a2be4ef5cda338039c85cd40553ff0b82\">transformIndex</a>(*it);</div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> ++it;</div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> }</div>\n-<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> <span class=\"keywordflow\">return</span> it;</div>\n-<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> }</div>\n-<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> </div>\n-<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span><span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a363ac0b99c5fdbc380f259234ab757e2\"> 172</a></span> <a class=\"code hl_typedef\" href=\"a01827.html#a64aa0bf3453d3f749622b7ea521715ae\">RawPreBasis</a> <a class=\"code hl_variable\" href=\"a01827.html#a363ac0b99c5fdbc380f259234ab757e2\">rawPreBasis_</a>;</div>\n-<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a08d7fc8b1ea9546463ae3322605f4fd9\"> 173</a></span> Transformation <a class=\"code hl_variable\" href=\"a01827.html#a08d7fc8b1ea9546463ae3322605f4fd9\">transformation_</a>;</div>\n-<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span>};</div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> <span class=\"comment\">// for mixed grids add offset for cubes</span></div>\n+<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> (!hasFixedElementType)</div>\n+<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> <span class=\"keywordflow\">if</span> (cell.type().isCube())</div>\n+<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> orient_[myId] += numVariants(GeometryTypes::simplex(dim));</div>\n+<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> }</div>\n+<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> }</div>\n+<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> </div>\n+<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> EntityType></div>\n+<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> <span class=\"keyword\">const</span> FiniteElement& find(<span class=\"keyword\">const</span> EntityType& e)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> <span class=\"keywordflow\">return</span> variants_[orient_[elementMapper_.index(e)]];</div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> }</div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> </div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> <span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> std::vector<FiniteElement> variants_;</div>\n+<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> <span class=\"keyword\">const</span> Dune::MultipleCodimMultipleGeomTypeMapper<GV> elementMapper_;</div>\n+<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> std::vector<unsigned char> orient_;</div>\n+<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> };</div>\n+<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> </div>\n+<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> </div>\n+<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span>} <span class=\"comment\">// namespace Impl</span></div>\n+<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> </div>\n <div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> </div>\n-<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> RPB, <span class=\"keyword\">class</span> T></div>\n-<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00229.html#a97702eea52e7ff7d9e66226034aee386\"> 177</a></span><a class=\"code hl_function\" href=\"a00229.html#a97702eea52e7ff7d9e66226034aee386\">TransformedIndexPreBasis</a>(RPB&&, T&&) -> <a class=\"code hl_class\" href=\"a01827.html\">TransformedIndexPreBasis<std::decay_t<RPB></a>, std::decay_t<T>>;</div>\n-<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> </div>\n-<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> </div>\n-<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span>} <span class=\"comment\">// end namespace Experimental</span></div>\n-<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> </div>\n-<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> </div>\n-<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span><span class=\"keyword\">namespace </span>BasisFactory {</div>\n-<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span><span class=\"keyword\">namespace </span>Experimental {</div>\n-<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> </div>\n-<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> RawPreBasisFactory, <span class=\"keyword\">class</span> Transformation></div>\n-<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00227.html#a6b531a5d076e13881c59b75e505e808e\"> 198</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00227.html#a6b531a5d076e13881c59b75e505e808e\">transformIndices</a>(</div>\n-<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> RawPreBasisFactory&& preBasisFactory,</div>\n-<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> Transformation&& transformation)</div>\n-<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span>{</div>\n-<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> <span class=\"keywordflow\">return</span> [</div>\n-<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> preBasisFactory=std::forward<RawPreBasisFactory>(preBasisFactory),</div>\n-<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> transformation =std::forward<Transformation>(transformation)</div>\n-<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span> ](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridView) {</div>\n-<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00229.html#a97702eea52e7ff7d9e66226034aee386\">Dune::Functions::Experimental::TransformedIndexPreBasis</a>(preBasisFactory(gridView), std::move(transformation));</div>\n-<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> };</div>\n-<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span>}</div>\n-<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> </div>\n-<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> </div>\n-<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> </div>\n-<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> IndexTransformation, <span class=\"keyword\">class</span> SizeImplementation, std::<span class=\"keywordtype\">size_t</span> minIS, std::<span class=\"keywordtype\">size_t</span> maxIS></div>\n-<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01831.html\"> 231</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01831.html\">GenericIndexingTransformation</a></div>\n-<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span>{</div>\n-<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> </div>\n-<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01831.html#a8772949dfe0ebe2187cc594e2f706f9d\"> 235</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> std::size_t <a class=\"code hl_variable\" href=\"a01831.html#a8772949dfe0ebe2187cc594e2f706f9d\">minIndexSize</a> = minIS;</div>\n-<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01831.html#a826abc88d3f456e468a289a4d2dfb309\"> 236</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> std::size_t <a class=\"code hl_variable\" href=\"a01831.html#a826abc88d3f456e468a289a4d2dfb309\">maxIndexSize</a> = maxIS;</div>\n-<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span> </div>\n-<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> IT_R, <span class=\"keyword\">class</span> SI_R></div>\n-<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01831.html#a219750b8ee3e1c033ad682d97799025b\"> 239</a></span> <a class=\"code hl_function\" href=\"a01831.html#a219750b8ee3e1c033ad682d97799025b\">GenericIndexingTransformation</a>(IT_R&& <a class=\"code hl_function\" href=\"a00227.html#af76509ea5d22293cf990c33c3306992f\">indexTransformation</a>, SI_R&& sizeImplementation) :</div>\n-<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"> 240</span> indexTransformation_(std::forward<IT_R>(<a class=\"code hl_function\" href=\"a00227.html#af76509ea5d22293cf990c33c3306992f\">indexTransformation</a>)),</div>\n-<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span> sizeImplementation_(std::forward<SI_R>(sizeImplementation))</div>\n-<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span> {}</div>\n-<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> </div>\n-<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> MultiIndex, <span class=\"keyword\">class</span> PreBasis></div>\n-<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01831.html#a6023cfa399a887be2d3e61b254725e7c\"> 245</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01831.html#a6023cfa399a887be2d3e61b254725e7c\">transformIndex</a>(MultiIndex& multiIndex, <span class=\"keyword\">const</span> PreBasis& preBasis)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00247\" name=\"l00247\"></a><span class=\"lineno\"> 247</span> indexTransformation_(multiIndex, preBasis);</div>\n-<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"> 248</span> }</div>\n-<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span> </div>\n-<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Prefix, <span class=\"keyword\">class</span> PreBasis></div>\n-<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01831.html#ac46fea52b627866a38dff8e99d80944e\"> 251</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a01831.html#ac46fea52b627866a38dff8e99d80944e\">size</a>(<span class=\"keyword\">const</span> Prefix& prefix, <span class=\"keyword\">const</span> PreBasis& preBasis)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"> 253</span> <span class=\"keywordflow\">return</span> sizeImplementation_(prefix, preBasis);</div>\n-<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"> 254</span> }</div>\n-<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span> </div>\n-<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"> 256</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> PreBasis></div>\n-<div class=\"line\"><a id=\"l00257\" name=\"l00257\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01831.html#a1f53f5aa5d5136a9562e0eec99525a01\"> 257</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a01831.html#a1f53f5aa5d5136a9562e0eec99525a01\">dimension</a>(<span class=\"keyword\">const</span> PreBasis& preBasis)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00258\" name=\"l00258\"></a><span class=\"lineno\"> 258</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00259\" name=\"l00259\"></a><span class=\"lineno\"> 259</span> <span class=\"keywordflow\">return</span> preBasis.dimension();</div>\n-<div class=\"line\"><a id=\"l00260\" name=\"l00260\"></a><span class=\"lineno\"> 260</span> }</div>\n-<div class=\"line\"><a id=\"l00261\" name=\"l00261\"></a><span class=\"lineno\"> 261</span> </div>\n-<div class=\"line\"><a id=\"l00262\" name=\"l00262\"></a><span class=\"lineno\"> 262</span><span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00263\" name=\"l00263\"></a><span class=\"lineno\"> 263</span> IndexTransformation indexTransformation_;</div>\n-<div class=\"line\"><a id=\"l00264\" name=\"l00264\"></a><span class=\"lineno\"> 264</span> SizeImplementation sizeImplementation_;</div>\n-<div class=\"line\"><a id=\"l00265\" name=\"l00265\"></a><span class=\"lineno\"> 265</span>};</div>\n-<div class=\"line\"><a id=\"l00266\" name=\"l00266\"></a><span class=\"lineno\"> 266</span> </div>\n+<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span><span class=\"comment\">// This is the reusable part of the basis. It contains</span></div>\n+<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span><span class=\"comment\">//</span></div>\n+<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span><span class=\"comment\">// RaviartThomasPreBasis</span></div>\n+<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span><span class=\"comment\">// RaviartThomasNode</span></div>\n+<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span><span class=\"comment\">//</span></div>\n+<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span><span class=\"comment\">// The pre-basis allows to create the others and is the owner of possible shared</span></div>\n+<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span><span class=\"comment\">// state. These components do _not_ depend on the global basis and local view</span></div>\n+<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span><span class=\"comment\">// and can be used without a global basis.</span></div>\n+<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> </div>\n+<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k></div>\n+<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span><span class=\"keyword\">class </span>RaviartThomasNode;</div>\n+<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> </div>\n+<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k></div>\n+<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html\"> 191</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01795.html\">RaviartThomasPreBasis</a></div>\n+<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span>{</div>\n+<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dim = GV::dimension;</div>\n+<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> <span class=\"keyword\">using </span>FiniteElementMap = <span class=\"keyword\">typename</span> Impl::RaviartThomasLocalFiniteElementMap<GV, dim, double, k>;</div>\n+<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> </div>\n+<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> </div>\n+<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#ab389963ad645a85730a68ba538962d68\"> 199</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01795.html#ab389963ad645a85730a68ba538962d68\">GridView</a> = GV;</div>\n+<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#a3e54e4eb73680c37e4fc32475f49bd46\"> 200</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01795.html#a3e54e4eb73680c37e4fc32475f49bd46\">size_type</a> = std::size_t;</div>\n+<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> </div>\n+<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#a7ef89609261b6f013058db2d757c8265\"> 202</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01791.html\">Node</a> = <a class=\"code hl_class\" href=\"a01791.html\">RaviartThomasNode<GV, k></a>;</div>\n+<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> </div>\n+<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#a05de07d386bbf54c0b153c89c49168c7\"> 204</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01795.html#a3e54e4eb73680c37e4fc32475f49bd46\">size_type</a> <a class=\"code hl_variable\" href=\"a01795.html#a05de07d386bbf54c0b153c89c49168c7\">maxMultiIndexSize</a> = 1;</div>\n+<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#a000fee05b7887b6c7afaa7ad923651b2\"> 205</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01795.html#a3e54e4eb73680c37e4fc32475f49bd46\">size_type</a> <a class=\"code hl_variable\" href=\"a01795.html#a000fee05b7887b6c7afaa7ad923651b2\">minMultiIndexSize</a> = 1;</div>\n+<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#a5e51525127f5d27020a411c75c6dc3dc\"> 206</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01795.html#a3e54e4eb73680c37e4fc32475f49bd46\">size_type</a> <a class=\"code hl_variable\" href=\"a01795.html#a5e51525127f5d27020a411c75c6dc3dc\">multiIndexBufferSize</a> = 1;</div>\n+<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> </div>\n+<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#a3de5fb4d0f0ba9161f7eb874e038fa75\"> 209</a></span> <a class=\"code hl_function\" href=\"a01795.html#a3de5fb4d0f0ba9161f7eb874e038fa75\">RaviartThomasPreBasis</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01795.html#ab389963ad645a85730a68ba538962d68\">GridView</a>& gv) :</div>\n+<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> <a class=\"code hl_variable\" href=\"a01795.html#ac775393c2fa528f96a183c71e19fb7c4\">gridView_</a>(gv),</div>\n+<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> <a class=\"code hl_variable\" href=\"a01795.html#a6b79ac0c794d5c74cb5a547116b02515\">finiteElementMap_</a>(gv)</div>\n+<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"> 212</span> {</div>\n+<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span> <span class=\"comment\">// Currently there are some unresolved bugs with hybrid grids and higher order Raviart-Thomas elements</span></div>\n+<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> <span class=\"keywordflow\">if</span> (gv.indexSet().types(0).size() > 1 and k>0)</div>\n+<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"Raviart-Thomas basis with index k>0 is only implemented for grids with a single element type"</span>);</div>\n+<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span> </div>\n+<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">auto</span> type : gv.indexSet().types(0))</div>\n+<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> <span class=\"keywordflow\">if</span> (!type.isSimplex() && !type.isCube())</div>\n+<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"Raviart-Thomas elements are only implemented for grids with simplex or cube elements."</span>);</div>\n+<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span> </div>\n+<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> GeometryType type = gv.template begin<0>()->type();</div>\n+<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span> <span class=\"keyword\">const</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">int</span> dofsPerElement = type.isCube() ? ((dim == 2) ? k*(k+1)*dim : k*(k+1)*(k+1)*dim) : k*dim;</div>\n+<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> <span class=\"keyword\">const</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">int</span> dofsPerFace = type.isCube() ? (dim-2)*2*k+k+1 : (dim-1)*k+1 ;</div>\n+<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> </div>\n+<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span> <a class=\"code hl_variable\" href=\"a01795.html#a26fbdcf76c8e3839b40affdb2413f062\">dofsPerCodim_</a> = {{dofsPerElement, dofsPerFace}};</div>\n+<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> }</div>\n+<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> </div>\n+<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#afcd506e3ce47347b5f72c9b7a05207fc\"> 228</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01795.html#afcd506e3ce47347b5f72c9b7a05207fc\">initializeIndices</a>()</div>\n+<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> {</div>\n+<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span> <a class=\"code hl_variable\" href=\"a01795.html#afcd58520d4ca4871df729b8423aa78be\">codimOffset_</a>[0] = 0;</div>\n+<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span> <a class=\"code hl_variable\" href=\"a01795.html#afcd58520d4ca4871df729b8423aa78be\">codimOffset_</a>[1] = <a class=\"code hl_variable\" href=\"a01795.html#afcd58520d4ca4871df729b8423aa78be\">codimOffset_</a>[0] + <a class=\"code hl_variable\" href=\"a01795.html#a26fbdcf76c8e3839b40affdb2413f062\">dofsPerCodim_</a>[0] * <a class=\"code hl_variable\" href=\"a01795.html#ac775393c2fa528f96a183c71e19fb7c4\">gridView_</a>.size(0);</div>\n+<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> }</div>\n+<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> </div>\n+<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#a54aad1415b27afc80c12c87e4a5d595b\"> 236</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01795.html#ab389963ad645a85730a68ba538962d68\">GridView</a>& <a class=\"code hl_function\" href=\"a01795.html#a54aad1415b27afc80c12c87e4a5d595b\">gridView</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01795.html#ac775393c2fa528f96a183c71e19fb7c4\">gridView_</a>;</div>\n+<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span> }</div>\n+<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"> 240</span> </div>\n+<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span> <span class=\"comment\">/* \\brief Update the stored grid view, to be called if the grid has changed */</span></div>\n+<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#a3a7f6bee36aa3fa028b12ed7d7d6323c\"> 242</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01795.html#a3a7f6bee36aa3fa028b12ed7d7d6323c\">update</a> (<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01795.html#ab389963ad645a85730a68ba538962d68\">GridView</a>& gv)</div>\n+<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> {</div>\n+<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> <a class=\"code hl_variable\" href=\"a01795.html#ac775393c2fa528f96a183c71e19fb7c4\">gridView_</a> = gv;</div>\n+<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> }</div>\n+<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span> </div>\n+<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#a14a96e80dbb53e4afadfda189f81c4b0\"> 250</a></span> <a class=\"code hl_class\" href=\"a01791.html\">Node</a> <a class=\"code hl_function\" href=\"a01795.html#a14a96e80dbb53e4afadfda189f81c4b0\">makeNode</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01791.html\">Node</a>{&<a class=\"code hl_variable\" href=\"a01795.html#a6b79ac0c794d5c74cb5a547116b02515\">finiteElementMap_</a>};</div>\n+<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"> 253</span> }</div>\n+<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"> 254</span> </div>\n+<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#a89e848a1463225369fad477023293a5e\"> 255</a></span> <a class=\"code hl_typedef\" href=\"a01795.html#a3e54e4eb73680c37e4fc32475f49bd46\">size_type</a> <a class=\"code hl_function\" href=\"a01795.html#a89e848a1463225369fad477023293a5e\">size</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"> 256</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00257\" name=\"l00257\"></a><span class=\"lineno\"> 257</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01795.html#a26fbdcf76c8e3839b40affdb2413f062\">dofsPerCodim_</a>[0] * <a class=\"code hl_variable\" href=\"a01795.html#ac775393c2fa528f96a183c71e19fb7c4\">gridView_</a>.size(0) + <a class=\"code hl_variable\" href=\"a01795.html#a26fbdcf76c8e3839b40affdb2413f062\">dofsPerCodim_</a>[1] * <a class=\"code hl_variable\" href=\"a01795.html#ac775393c2fa528f96a183c71e19fb7c4\">gridView_</a>.size(1);</div>\n+<div class=\"line\"><a id=\"l00258\" name=\"l00258\"></a><span class=\"lineno\"> 258</span> }</div>\n+<div class=\"line\"><a id=\"l00259\" name=\"l00259\"></a><span class=\"lineno\"> 259</span> </div>\n+<div class=\"line\"><a id=\"l00261\" name=\"l00261\"></a><span class=\"lineno\"> 261</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n+<div class=\"line\"><a id=\"l00262\" name=\"l00262\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#ae92217c29c5ca4f9cf42c15a0805428a\"> 262</a></span> <a class=\"code hl_typedef\" href=\"a01795.html#a3e54e4eb73680c37e4fc32475f49bd46\">size_type</a> <a class=\"code hl_function\" href=\"a01795.html#ae92217c29c5ca4f9cf42c15a0805428a\">size</a>(<span class=\"keyword\">const</span> SizePrefix& prefix)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00263\" name=\"l00263\"></a><span class=\"lineno\"> 263</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00264\" name=\"l00264\"></a><span class=\"lineno\"> 264</span> assert(prefix.size() == 0 || prefix.size() == 1);</div>\n+<div class=\"line\"><a id=\"l00265\" name=\"l00265\"></a><span class=\"lineno\"> 265</span> <span class=\"keywordflow\">return</span> (prefix.size() == 0) ? <a class=\"code hl_function\" href=\"a01795.html#a89e848a1463225369fad477023293a5e\">size</a>() : 0;</div>\n+<div class=\"line\"><a id=\"l00266\" name=\"l00266\"></a><span class=\"lineno\"> 266</span> }</div>\n <div class=\"line\"><a id=\"l00267\" name=\"l00267\"></a><span class=\"lineno\"> 267</span> </div>\n-<div class=\"line\"><a id=\"l00268\" name=\"l00268\"></a><span class=\"lineno\"> 268</span> </div>\n-<div class=\"line\"><a id=\"l00287\" name=\"l00287\"></a><span class=\"lineno\"> 287</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> IndexTransformation, <span class=\"keyword\">class</span> SizeImplementation, std::<span class=\"keywordtype\">size_t</span> minIndexSize, std::<span class=\"keywordtype\">size_t</span> maxIndexSize></div>\n-<div class=\"line\"><a id=\"l00288\" name=\"l00288\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00227.html#af76509ea5d22293cf990c33c3306992f\"> 288</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00227.html#af76509ea5d22293cf990c33c3306992f\">indexTransformation</a>(IndexTransformation&& <a class=\"code hl_function\" href=\"a00227.html#af76509ea5d22293cf990c33c3306992f\">indexTransformation</a>, SizeImplementation&& sizeImplementation, Dune::index_constant<minIndexSize>, Dune::index_constant<maxIndexSize>)</div>\n-<div class=\"line\"><a id=\"l00289\" name=\"l00289\"></a><span class=\"lineno\"> 289</span>{</div>\n-<div class=\"line\"><a id=\"l00290\" name=\"l00290\"></a><span class=\"lineno\"> 290</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01831.html\">GenericIndexingTransformation</a><</div>\n-<div class=\"line\"><a id=\"l00291\" name=\"l00291\"></a><span class=\"lineno\"> 291</span> std::decay_t<IndexTransformation>,</div>\n-<div class=\"line\"><a id=\"l00292\" name=\"l00292\"></a><span class=\"lineno\"> 292</span> std::decay_t<SizeImplementation>,</div>\n-<div class=\"line\"><a id=\"l00293\" name=\"l00293\"></a><span class=\"lineno\"> 293</span> minIndexSize, maxIndexSize>(</div>\n-<div class=\"line\"><a id=\"l00294\" name=\"l00294\"></a><span class=\"lineno\"> 294</span> std::forward<IndexTransformation>(<a class=\"code hl_function\" href=\"a00227.html#af76509ea5d22293cf990c33c3306992f\">indexTransformation</a>),</div>\n-<div class=\"line\"><a id=\"l00295\" name=\"l00295\"></a><span class=\"lineno\"> 295</span> std::forward<SizeImplementation>(sizeImplementation));</div>\n-<div class=\"line\"><a id=\"l00296\" name=\"l00296\"></a><span class=\"lineno\"> 296</span>}</div>\n-<div class=\"line\"><a id=\"l00297\" name=\"l00297\"></a><span class=\"lineno\"> 297</span> </div>\n+<div class=\"line\"><a id=\"l00269\" name=\"l00269\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#a90d5d6569b24f1f109d09cb67aa7cde6\"> 269</a></span> <a class=\"code hl_typedef\" href=\"a01795.html#a3e54e4eb73680c37e4fc32475f49bd46\">size_type</a> <a class=\"code hl_function\" href=\"a01795.html#a90d5d6569b24f1f109d09cb67aa7cde6\">dimension</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00270\" name=\"l00270\"></a><span class=\"lineno\"> 270</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00271\" name=\"l00271\"></a><span class=\"lineno\"> 271</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01795.html#a89e848a1463225369fad477023293a5e\">size</a>();</div>\n+<div class=\"line\"><a id=\"l00272\" name=\"l00272\"></a><span class=\"lineno\"> 272</span> }</div>\n+<div class=\"line\"><a id=\"l00273\" name=\"l00273\"></a><span class=\"lineno\"> 273</span> </div>\n+<div class=\"line\"><a id=\"l00274\" name=\"l00274\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#ac364e0f8b7bf60bb69156385f1f02405\"> 274</a></span> <a class=\"code hl_typedef\" href=\"a01795.html#a3e54e4eb73680c37e4fc32475f49bd46\">size_type</a> <a class=\"code hl_function\" href=\"a01795.html#ac364e0f8b7bf60bb69156385f1f02405\">maxNodeSize</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00275\" name=\"l00275\"></a><span class=\"lineno\"> 275</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00276\" name=\"l00276\"></a><span class=\"lineno\"> 276</span> <a class=\"code hl_typedef\" href=\"a01795.html#a3e54e4eb73680c37e4fc32475f49bd46\">size_type</a> result = 0;</div>\n+<div class=\"line\"><a id=\"l00277\" name=\"l00277\"></a><span class=\"lineno\"> 277</span> <span class=\"keywordflow\">for</span> (<span class=\"keyword\">auto</span>&& type : <a class=\"code hl_variable\" href=\"a01795.html#ac775393c2fa528f96a183c71e19fb7c4\">gridView_</a>.indexSet().types(0))</div>\n+<div class=\"line\"><a id=\"l00278\" name=\"l00278\"></a><span class=\"lineno\"> 278</span> {</div>\n+<div class=\"line\"><a id=\"l00279\" name=\"l00279\"></a><span class=\"lineno\"> 279</span> <span class=\"keywordtype\">size_t</span> numFaces = ReferenceElements<double,dim>::general(type).size(1);</div>\n+<div class=\"line\"><a id=\"l00280\" name=\"l00280\"></a><span class=\"lineno\"> 280</span> <span class=\"keyword\">const</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">int</span> dofsPerElement = type.isCube() ? ((dim == 2) ? k*(k+1)*dim : k*(k+1)*(k+1)*dim) : k*dim;</div>\n+<div class=\"line\"><a id=\"l00281\" name=\"l00281\"></a><span class=\"lineno\"> 281</span> <span class=\"keyword\">const</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">int</span> dofsPerFace = type.isCube() ? (dim-2)*2*k+k+1 : (dim-1)*k+1 ;</div>\n+<div class=\"line\"><a id=\"l00282\" name=\"l00282\"></a><span class=\"lineno\"> 282</span> result = std::max(result, dofsPerElement + dofsPerFace * numFaces);</div>\n+<div class=\"line\"><a id=\"l00283\" name=\"l00283\"></a><span class=\"lineno\"> 283</span> }</div>\n+<div class=\"line\"><a id=\"l00284\" name=\"l00284\"></a><span class=\"lineno\"> 284</span> </div>\n+<div class=\"line\"><a id=\"l00285\" name=\"l00285\"></a><span class=\"lineno\"> 285</span> <span class=\"keywordflow\">return</span> result;</div>\n+<div class=\"line\"><a id=\"l00286\" name=\"l00286\"></a><span class=\"lineno\"> 286</span> }</div>\n+<div class=\"line\"><a id=\"l00287\" name=\"l00287\"></a><span class=\"lineno\"> 287</span> </div>\n+<div class=\"line\"><a id=\"l00293\" name=\"l00293\"></a><span class=\"lineno\"> 293</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n+<div class=\"line\"><a id=\"l00294\" name=\"l00294\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#a5c0fd8965f5d1ccdf8c064908a4cf019\"> 294</a></span> It <a class=\"code hl_function\" href=\"a01795.html#a5c0fd8965f5d1ccdf8c064908a4cf019\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01791.html\">Node</a>& node, It it)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00295\" name=\"l00295\"></a><span class=\"lineno\"> 295</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00296\" name=\"l00296\"></a><span class=\"lineno\"> 296</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridIndexSet = <a class=\"code hl_function\" href=\"a01795.html#a54aad1415b27afc80c12c87e4a5d595b\">gridView</a>().indexSet();</div>\n+<div class=\"line\"><a id=\"l00297\" name=\"l00297\"></a><span class=\"lineno\"> 297</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& element = node.<a class=\"code hl_function\" href=\"a01791.html#ab809e1789eaddc127bbf6912728da54a\">element</a>();</div>\n <div class=\"line\"><a id=\"l00298\" name=\"l00298\"></a><span class=\"lineno\"> 298</span> </div>\n-<div class=\"line\"><a id=\"l00299\" name=\"l00299\"></a><span class=\"lineno\"> 299</span>} <span class=\"comment\">// end namespace Experimental</span></div>\n-<div class=\"line\"><a id=\"l00300\" name=\"l00300\"></a><span class=\"lineno\"> 300</span>} <span class=\"comment\">// end namespace BasisFactory</span></div>\n-<div class=\"line\"><a id=\"l00301\" name=\"l00301\"></a><span class=\"lineno\"> 301</span>} <span class=\"comment\">// end namespace Functions</span></div>\n-<div class=\"line\"><a id=\"l00302\" name=\"l00302\"></a><span class=\"lineno\"> 302</span>} <span class=\"comment\">// end namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00303\" name=\"l00303\"></a><span class=\"lineno\"> 303</span> </div>\n-<div class=\"line\"><a id=\"l00304\" name=\"l00304\"></a><span class=\"lineno\"> 304</span> </div>\n-<div class=\"line\"><a id=\"l00305\" name=\"l00305\"></a><span class=\"lineno\"> 305</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH</span></div>\n-<div class=\"ttc\" id=\"aa00050_html\"><div class=\"ttname\"><a href=\"a00050.html\">utility.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00056_html\"><div class=\"ttname\"><a href=\"a00056.html\">staticforloop.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00092_html\"><div class=\"ttname\"><a href=\"a00092.html\">type_traits.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00119_html\"><div class=\"ttname\"><a href=\"a00119.html\">defaultglobalbasis.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00179_html\"><div class=\"ttname\"><a href=\"a00179.html\">basistags.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00191_html\"><div class=\"ttname\"><a href=\"a00191.html\">nodes.hh</a></div></div>\n+<div class=\"line\"><a id=\"l00299\" name=\"l00299\"></a><span class=\"lineno\"> 299</span> <span class=\"comment\">// throw if Element is not of predefined type</span></div>\n+<div class=\"line\"><a id=\"l00300\" name=\"l00300\"></a><span class=\"lineno\"> 300</span> <span class=\"keywordflow\">if</span> (not(element.type().isCube()) and not(element.type().isSimplex()))</div>\n+<div class=\"line\"><a id=\"l00301\" name=\"l00301\"></a><span class=\"lineno\"> 301</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"RaviartThomasBasis only implemented for cube and simplex elements."</span>);</div>\n+<div class=\"line\"><a id=\"l00302\" name=\"l00302\"></a><span class=\"lineno\"> 302</span> </div>\n+<div class=\"line\"><a id=\"l00303\" name=\"l00303\"></a><span class=\"lineno\"> 303</span> <span class=\"keywordflow\">for</span>(std::size_t i=0, end=node.<a class=\"code hl_function\" href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">size</a>(); i<end; ++i, ++it)</div>\n+<div class=\"line\"><a id=\"l00304\" name=\"l00304\"></a><span class=\"lineno\"> 304</span> {</div>\n+<div class=\"line\"><a id=\"l00305\" name=\"l00305\"></a><span class=\"lineno\"> 305</span> Dune::LocalKey localKey = node.<a class=\"code hl_function\" href=\"a01791.html#a5e34559e17159d8e217a3f101fdb330b\">finiteElement</a>().localCoefficients().localKey(i);</div>\n+<div class=\"line\"><a id=\"l00306\" name=\"l00306\"></a><span class=\"lineno\"> 306</span> </div>\n+<div class=\"line\"><a id=\"l00307\" name=\"l00307\"></a><span class=\"lineno\"> 307</span> <span class=\"comment\">// The dimension of the entity that the current dof is related to</span></div>\n+<div class=\"line\"><a id=\"l00308\" name=\"l00308\"></a><span class=\"lineno\"> 308</span> <span class=\"keywordtype\">size_t</span> subentity = localKey.subEntity();</div>\n+<div class=\"line\"><a id=\"l00309\" name=\"l00309\"></a><span class=\"lineno\"> 309</span> <span class=\"keywordtype\">size_t</span> codim = localKey.codim();</div>\n+<div class=\"line\"><a id=\"l00310\" name=\"l00310\"></a><span class=\"lineno\"> 310</span> </div>\n+<div class=\"line\"><a id=\"l00311\" name=\"l00311\"></a><span class=\"lineno\"> 311</span> <span class=\"keywordflow\">if</span> (not(codim==0 or codim==1))</div>\n+<div class=\"line\"><a id=\"l00312\" name=\"l00312\"></a><span class=\"lineno\"> 312</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"Grid contains elements not supported for the RaviartThomasBasis"</span>);</div>\n+<div class=\"line\"><a id=\"l00313\" name=\"l00313\"></a><span class=\"lineno\"> 313</span> </div>\n+<div class=\"line\"><a id=\"l00314\" name=\"l00314\"></a><span class=\"lineno\"> 314</span> *it = { <a class=\"code hl_variable\" href=\"a01795.html#afcd58520d4ca4871df729b8423aa78be\">codimOffset_</a>[codim] +</div>\n+<div class=\"line\"><a id=\"l00315\" name=\"l00315\"></a><span class=\"lineno\"> 315</span> <a class=\"code hl_variable\" href=\"a01795.html#a26fbdcf76c8e3839b40affdb2413f062\">dofsPerCodim_</a>[codim] * gridIndexSet.subIndex(element, subentity, codim) + localKey.index() };</div>\n+<div class=\"line\"><a id=\"l00316\" name=\"l00316\"></a><span class=\"lineno\"> 316</span> }</div>\n+<div class=\"line\"><a id=\"l00317\" name=\"l00317\"></a><span class=\"lineno\"> 317</span> </div>\n+<div class=\"line\"><a id=\"l00318\" name=\"l00318\"></a><span class=\"lineno\"> 318</span> <span class=\"keywordflow\">return</span> it;</div>\n+<div class=\"line\"><a id=\"l00319\" name=\"l00319\"></a><span class=\"lineno\"> 319</span> }</div>\n+<div class=\"line\"><a id=\"l00320\" name=\"l00320\"></a><span class=\"lineno\"> 320</span> </div>\n+<div class=\"line\"><a id=\"l00321\" name=\"l00321\"></a><span class=\"lineno\"> 321</span><span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00322\" name=\"l00322\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#ac775393c2fa528f96a183c71e19fb7c4\"> 322</a></span> <a class=\"code hl_typedef\" href=\"a01795.html#ab389963ad645a85730a68ba538962d68\">GridView</a> <a class=\"code hl_variable\" href=\"a01795.html#ac775393c2fa528f96a183c71e19fb7c4\">gridView_</a>;</div>\n+<div class=\"line\"><a id=\"l00323\" name=\"l00323\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#afcd58520d4ca4871df729b8423aa78be\"> 323</a></span> std::array<size_t,dim+1> <a class=\"code hl_variable\" href=\"a01795.html#afcd58520d4ca4871df729b8423aa78be\">codimOffset_</a>;</div>\n+<div class=\"line\"><a id=\"l00324\" name=\"l00324\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#a6b79ac0c794d5c74cb5a547116b02515\"> 324</a></span> FiniteElementMap <a class=\"code hl_variable\" href=\"a01795.html#a6b79ac0c794d5c74cb5a547116b02515\">finiteElementMap_</a>;</div>\n+<div class=\"line\"><a id=\"l00325\" name=\"l00325\"></a><span class=\"lineno\"> 325</span> <span class=\"comment\">// Number of dofs per entity type depending on the entity's codimension and type</span></div>\n+<div class=\"line\"><a id=\"l00326\" name=\"l00326\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01795.html#a26fbdcf76c8e3839b40affdb2413f062\"> 326</a></span> std::array<int,dim+1> <a class=\"code hl_variable\" href=\"a01795.html#a26fbdcf76c8e3839b40affdb2413f062\">dofsPerCodim_</a>;</div>\n+<div class=\"line\"><a id=\"l00327\" name=\"l00327\"></a><span class=\"lineno\"> 327</span>};</div>\n+<div class=\"line\"><a id=\"l00328\" name=\"l00328\"></a><span class=\"lineno\"> 328</span> </div>\n+<div class=\"line\"><a id=\"l00329\" name=\"l00329\"></a><span class=\"lineno\"> 329</span> </div>\n+<div class=\"line\"><a id=\"l00330\" name=\"l00330\"></a><span class=\"lineno\"> 330</span> </div>\n+<div class=\"line\"><a id=\"l00331\" name=\"l00331\"></a><span class=\"lineno\"> 331</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k></div>\n+<div class=\"line\"><a id=\"l00332\" name=\"l00332\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01791.html\"> 332</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01791.html\">RaviartThomasNode</a> :</div>\n+<div class=\"line\"><a id=\"l00333\" name=\"l00333\"></a><span class=\"lineno\"> 333</span> <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01711.html\">LeafBasisNode</a></div>\n+<div class=\"line\"><a id=\"l00334\" name=\"l00334\"></a><span class=\"lineno\"> 334</span>{</div>\n+<div class=\"line\"><a id=\"l00335\" name=\"l00335\"></a><span class=\"lineno\"> 335</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dim = GV::dimension;</div>\n+<div class=\"line\"><a id=\"l00336\" name=\"l00336\"></a><span class=\"lineno\"> 336</span> </div>\n+<div class=\"line\"><a id=\"l00337\" name=\"l00337\"></a><span class=\"lineno\"> 337</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00338\" name=\"l00338\"></a><span class=\"lineno\"> 338</span> </div>\n+<div class=\"line\"><a id=\"l00339\" name=\"l00339\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01791.html#a8b951e77b8017813eff57d47ec841d75\"> 339</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">size_type</a> = std::size_t;</div>\n+<div class=\"line\"><a id=\"l00340\" name=\"l00340\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01791.html#a5508276610b3022011979625761c54f1\"> 340</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01791.html#a5508276610b3022011979625761c54f1\">Element</a> = <span class=\"keyword\">typename</span> GV::template Codim<0>::Entity;</div>\n+<div class=\"line\"><a id=\"l00341\" name=\"l00341\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01791.html#a04da4619b4aa1def1345fbf02d7e3d11\"> 341</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01791.html#a04da4619b4aa1def1345fbf02d7e3d11\">FiniteElementMap</a> = <span class=\"keyword\">typename</span> Impl::RaviartThomasLocalFiniteElementMap<GV, dim, double, k>;</div>\n+<div class=\"line\"><a id=\"l00342\" name=\"l00342\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01791.html#a1f96631de9aa36157ca9f6880d9c3f6b\"> 342</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01791.html#a1f96631de9aa36157ca9f6880d9c3f6b\">FiniteElement</a> = Impl::GlobalValuedLocalFiniteElement<Impl::ContravariantPiolaTransformator,</div>\n+<div class=\"line\"><a id=\"l00343\" name=\"l00343\"></a><span class=\"lineno\"> 343</span> <span class=\"keyword\">typename</span> FiniteElementMap::FiniteElement,</div>\n+<div class=\"line\"><a id=\"l00344\" name=\"l00344\"></a><span class=\"lineno\"> 344</span> <a class=\"code hl_typedef\" href=\"a01791.html#a5508276610b3022011979625761c54f1\">Element</a>>;</div>\n+<div class=\"line\"><a id=\"l00345\" name=\"l00345\"></a><span class=\"lineno\"> 345</span> </div>\n+<div class=\"line\"><a id=\"l00346\" name=\"l00346\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01791.html#aac2cef6fa5a69ede4774780a389f32f7\"> 346</a></span> <a class=\"code hl_function\" href=\"a01791.html#aac2cef6fa5a69ede4774780a389f32f7\">RaviartThomasNode</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01791.html#a04da4619b4aa1def1345fbf02d7e3d11\">FiniteElementMap</a>* finiteElementMap) :</div>\n+<div class=\"line\"><a id=\"l00347\" name=\"l00347\"></a><span class=\"lineno\"> 347</span> <a class=\"code hl_variable\" href=\"a01791.html#a55e93eaa2cef54de86d914bbac53a678\">element_</a>(nullptr),</div>\n+<div class=\"line\"><a id=\"l00348\" name=\"l00348\"></a><span class=\"lineno\"> 348</span> <a class=\"code hl_variable\" href=\"a01791.html#ae5551ae5374e41f77b5f474901341c08\">finiteElementMap_</a>(finiteElementMap)</div>\n+<div class=\"line\"><a id=\"l00349\" name=\"l00349\"></a><span class=\"lineno\"> 349</span> { }</div>\n+<div class=\"line\"><a id=\"l00350\" name=\"l00350\"></a><span class=\"lineno\"> 350</span> </div>\n+<div class=\"line\"><a id=\"l00352\" name=\"l00352\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01791.html#ab809e1789eaddc127bbf6912728da54a\"> 352</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01791.html#a5508276610b3022011979625761c54f1\">Element</a>& <a class=\"code hl_function\" href=\"a01791.html#ab809e1789eaddc127bbf6912728da54a\">element</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00353\" name=\"l00353\"></a><span class=\"lineno\"> 353</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00354\" name=\"l00354\"></a><span class=\"lineno\"> 354</span> <span class=\"keywordflow\">return</span> *<a class=\"code hl_variable\" href=\"a01791.html#a55e93eaa2cef54de86d914bbac53a678\">element_</a>;</div>\n+<div class=\"line\"><a id=\"l00355\" name=\"l00355\"></a><span class=\"lineno\"> 355</span> }</div>\n+<div class=\"line\"><a id=\"l00356\" name=\"l00356\"></a><span class=\"lineno\"> 356</span> </div>\n+<div class=\"line\"><a id=\"l00361\" name=\"l00361\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01791.html#a5e34559e17159d8e217a3f101fdb330b\"> 361</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01791.html#a1f96631de9aa36157ca9f6880d9c3f6b\">FiniteElement</a>& <a class=\"code hl_function\" href=\"a01791.html#a5e34559e17159d8e217a3f101fdb330b\">finiteElement</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00362\" name=\"l00362\"></a><span class=\"lineno\"> 362</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00363\" name=\"l00363\"></a><span class=\"lineno\"> 363</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01791.html#ac02b19d7c9fb373fa5cef0866e548a06\">finiteElement_</a>;</div>\n+<div class=\"line\"><a id=\"l00364\" name=\"l00364\"></a><span class=\"lineno\"> 364</span> }</div>\n+<div class=\"line\"><a id=\"l00365\" name=\"l00365\"></a><span class=\"lineno\"> 365</span> </div>\n+<div class=\"line\"><a id=\"l00367\" name=\"l00367\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01791.html#a0924826eab72f86aad18127083df89ab\"> 367</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01791.html#a0924826eab72f86aad18127083df89ab\">bind</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01791.html#a5508276610b3022011979625761c54f1\">Element</a>& e)</div>\n+<div class=\"line\"><a id=\"l00368\" name=\"l00368\"></a><span class=\"lineno\"> 368</span> {</div>\n+<div class=\"line\"><a id=\"l00369\" name=\"l00369\"></a><span class=\"lineno\"> 369</span> <a class=\"code hl_variable\" href=\"a01791.html#a55e93eaa2cef54de86d914bbac53a678\">element_</a> = &e;</div>\n+<div class=\"line\"><a id=\"l00370\" name=\"l00370\"></a><span class=\"lineno\"> 370</span> <a class=\"code hl_variable\" href=\"a01791.html#ac02b19d7c9fb373fa5cef0866e548a06\">finiteElement_</a>.bind((<a class=\"code hl_variable\" href=\"a01791.html#ae5551ae5374e41f77b5f474901341c08\">finiteElementMap_</a>->find(*<a class=\"code hl_variable\" href=\"a01791.html#a55e93eaa2cef54de86d914bbac53a678\">element_</a>)), e);</div>\n+<div class=\"line\"><a id=\"l00371\" name=\"l00371\"></a><span class=\"lineno\"> 371</span> this-><a class=\"code hl_function\" href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\">setSize</a>(<a class=\"code hl_variable\" href=\"a01791.html#ac02b19d7c9fb373fa5cef0866e548a06\">finiteElement_</a>.size());</div>\n+<div class=\"line\"><a id=\"l00372\" name=\"l00372\"></a><span class=\"lineno\"> 372</span> }</div>\n+<div class=\"line\"><a id=\"l00373\" name=\"l00373\"></a><span class=\"lineno\"> 373</span> </div>\n+<div class=\"line\"><a id=\"l00374\" name=\"l00374\"></a><span class=\"lineno\"> 374</span><span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00375\" name=\"l00375\"></a><span class=\"lineno\"> 375</span> </div>\n+<div class=\"line\"><a id=\"l00376\" name=\"l00376\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01791.html#ac02b19d7c9fb373fa5cef0866e548a06\"> 376</a></span> <a class=\"code hl_typedef\" href=\"a01791.html#a1f96631de9aa36157ca9f6880d9c3f6b\">FiniteElement</a> <a class=\"code hl_variable\" href=\"a01791.html#ac02b19d7c9fb373fa5cef0866e548a06\">finiteElement_</a>;</div>\n+<div class=\"line\"><a id=\"l00377\" name=\"l00377\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01791.html#a55e93eaa2cef54de86d914bbac53a678\"> 377</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01791.html#a5508276610b3022011979625761c54f1\">Element</a>* <a class=\"code hl_variable\" href=\"a01791.html#a55e93eaa2cef54de86d914bbac53a678\">element_</a>;</div>\n+<div class=\"line\"><a id=\"l00378\" name=\"l00378\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01791.html#ae5551ae5374e41f77b5f474901341c08\"> 378</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01791.html#a04da4619b4aa1def1345fbf02d7e3d11\">FiniteElementMap</a>* <a class=\"code hl_variable\" href=\"a01791.html#ae5551ae5374e41f77b5f474901341c08\">finiteElementMap_</a>;</div>\n+<div class=\"line\"><a id=\"l00379\" name=\"l00379\"></a><span class=\"lineno\"> 379</span>};</div>\n+<div class=\"line\"><a id=\"l00380\" name=\"l00380\"></a><span class=\"lineno\"> 380</span> </div>\n+<div class=\"line\"><a id=\"l00381\" name=\"l00381\"></a><span class=\"lineno\"> 381</span><span class=\"keyword\">namespace </span>BasisFactory {</div>\n+<div class=\"line\"><a id=\"l00382\" name=\"l00382\"></a><span class=\"lineno\"> 382</span> </div>\n+<div class=\"line\"><a id=\"l00390\" name=\"l00390\"></a><span class=\"lineno\"> 390</span><span class=\"keyword\">template</span><std::<span class=\"keywordtype\">size_t</span> k></div>\n+<div class=\"line\"><a id=\"l00391\" name=\"l00391\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#gac7c656af99728aa385381f5d78ae0b98\"> 391</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00213.html#gac7c656af99728aa385381f5d78ae0b98\">raviartThomas</a>()</div>\n+<div class=\"line\"><a id=\"l00392\" name=\"l00392\"></a><span class=\"lineno\"> 392</span>{</div>\n+<div class=\"line\"><a id=\"l00393\" name=\"l00393\"></a><span class=\"lineno\"> 393</span> <span class=\"keywordflow\">return</span> [](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridView) {</div>\n+<div class=\"line\"><a id=\"l00394\" name=\"l00394\"></a><span class=\"lineno\"> 394</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01795.html\">RaviartThomasPreBasis</a><std::decay_t<<span class=\"keyword\">decltype</span>(gridView)>, k>(gridView);</div>\n+<div class=\"line\"><a id=\"l00395\" name=\"l00395\"></a><span class=\"lineno\"> 395</span> };</div>\n+<div class=\"line\"><a id=\"l00396\" name=\"l00396\"></a><span class=\"lineno\"> 396</span>}</div>\n+<div class=\"line\"><a id=\"l00397\" name=\"l00397\"></a><span class=\"lineno\"> 397</span> </div>\n+<div class=\"line\"><a id=\"l00398\" name=\"l00398\"></a><span class=\"lineno\"> 398</span>} <span class=\"comment\">// end namespace BasisFactory</span></div>\n+<div class=\"line\"><a id=\"l00399\" name=\"l00399\"></a><span class=\"lineno\"> 399</span> </div>\n+<div class=\"line\"><a id=\"l00400\" name=\"l00400\"></a><span class=\"lineno\"> 400</span> </div>\n+<div class=\"line\"><a id=\"l00401\" name=\"l00401\"></a><span class=\"lineno\"> 401</span> </div>\n+<div class=\"line\"><a id=\"l00402\" name=\"l00402\"></a><span class=\"lineno\"> 402</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00403\" name=\"l00403\"></a><span class=\"lineno\"> 403</span><span class=\"comment\">// This is the actual global basis implementation based on the reusable parts.</span></div>\n+<div class=\"line\"><a id=\"l00404\" name=\"l00404\"></a><span class=\"lineno\"> 404</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00405\" name=\"l00405\"></a><span class=\"lineno\"> 405</span> </div>\n+<div class=\"line\"><a id=\"l00413\" name=\"l00413\"></a><span class=\"lineno\"> 413</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k></div>\n+<div class=\"line\"><a id=\"l00414\" name=\"l00414\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a79a7c0c6e2a4ba12c82164fcbbae6c63\"> 414</a></span><span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01555.html\">RaviartThomasBasis</a> = <a class=\"code hl_class\" href=\"a01555.html\">DefaultGlobalBasis<RaviartThomasPreBasis<GV, k></a> >;</div>\n+<div class=\"line\"><a id=\"l00415\" name=\"l00415\"></a><span class=\"lineno\"> 415</span> </div>\n+<div class=\"line\"><a id=\"l00416\" name=\"l00416\"></a><span class=\"lineno\"> 416</span>} <span class=\"comment\">// end namespace Functions</span></div>\n+<div class=\"line\"><a id=\"l00417\" name=\"l00417\"></a><span class=\"lineno\"> 417</span>} <span class=\"comment\">// end namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00418\" name=\"l00418\"></a><span class=\"lineno\"> 418</span> </div>\n+<div class=\"line\"><a id=\"l00419\" name=\"l00419\"></a><span class=\"lineno\"> 419</span> </div>\n+<div class=\"line\"><a id=\"l00420\" name=\"l00420\"></a><span class=\"lineno\"> 420</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH</span></div>\n+<div class=\"ttc\" id=\"aa00137_html\"><div class=\"ttname\"><a href=\"a00137.html\">globalvaluedlocalfiniteelement.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00152_html\"><div class=\"ttname\"><a href=\"a00152.html\">defaultglobalbasis.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00179_html\"><div class=\"ttname\"><a href=\"a00179.html\">nodes.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00213_html_ga0d8eb549af76bc2563ab189e63668ee5\"><div class=\"ttname\"><a href=\"a00213.html#ga0d8eb549af76bc2563ab189e63668ee5\">Dune::Functions::BasisFactory::power</a></div><div class=\"ttdeci\">auto power(ChildPreBasisFactory &&childPreBasisFactory, const IndexMergingStrategy &)</div><div class=\"ttdoc\">Create a pre-basis factory that can build a PowerPreBasis.</div><div class=\"ttdef\"><b>Definition:</b> powerbasis.hh:369</div></div>\n+<div class=\"ttc\" id=\"aa00213_html_gac7c656af99728aa385381f5d78ae0b98\"><div class=\"ttname\"><a href=\"a00213.html#gac7c656af99728aa385381f5d78ae0b98\">Dune::Functions::BasisFactory::raviartThomas</a></div><div class=\"ttdeci\">auto raviartThomas()</div><div class=\"ttdoc\">Create a pre-basis factory that can create a Raviart-Thomas pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:391</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa00227_html_a6b531a5d076e13881c59b75e505e808e\"><div class=\"ttname\"><a href=\"a00227.html#a6b531a5d076e13881c59b75e505e808e\">Dune::Functions::BasisFactory::Experimental::transformIndices</a></div><div class=\"ttdeci\">auto transformIndices(RawPreBasisFactory &&preBasisFactory, Transformation &&transformation)</div><div class=\"ttdoc\">Create a TransformedIndexPreBasisFactory.</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:198</div></div>\n-<div class=\"ttc\" id=\"aa00227_html_af76509ea5d22293cf990c33c3306992f\"><div class=\"ttname\"><a href=\"a00227.html#af76509ea5d22293cf990c33c3306992f\">Dune::Functions::BasisFactory::Experimental::indexTransformation</a></div><div class=\"ttdeci\">auto indexTransformation(IndexTransformation &&indexTransformation, SizeImplementation &&sizeImplementation, Dune::index_constant< minIndexSize >, Dune::index_constant< maxIndexSize >)</div><div class=\"ttdoc\">A generic implementation of a transformation.</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:288</div></div>\n-<div class=\"ttc\" id=\"aa00229_html_a97702eea52e7ff7d9e66226034aee386\"><div class=\"ttname\"><a href=\"a00229.html#a97702eea52e7ff7d9e66226034aee386\">Dune::Functions::Experimental::TransformedIndexPreBasis</a></div><div class=\"ttdeci\">TransformedIndexPreBasis(RPB &&, T &&) -> TransformedIndexPreBasis< std::decay_t< RPB >, std::decay_t< T > ></div></div>\n-<div class=\"ttc\" id=\"aa01827_html\"><div class=\"ttname\"><a href=\"a01827.html\">Dune::Functions::Experimental::TransformedIndexPreBasis</a></div><div class=\"ttdoc\">A pre-basis transforming multi-indices.</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:52</div></div>\n-<div class=\"ttc\" id=\"aa01827_html_a03c263627a93eb69efb8bd129ddebbe6\"><div class=\"ttname\"><a href=\"a01827.html#a03c263627a93eb69efb8bd129ddebbe6\">Dune::Functions::Experimental::TransformedIndexPreBasis::indices</a></div><div class=\"ttdeci\">It indices(const Node &node, It it) const</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:160</div></div>\n-<div class=\"ttc\" id=\"aa01827_html_a08d7fc8b1ea9546463ae3322605f4fd9\"><div class=\"ttname\"><a href=\"a01827.html#a08d7fc8b1ea9546463ae3322605f4fd9\">Dune::Functions::Experimental::TransformedIndexPreBasis::transformation_</a></div><div class=\"ttdeci\">Transformation transformation_</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:173</div></div>\n-<div class=\"ttc\" id=\"aa01827_html_a1392b84bf237ce8c8be2b2ec7b9869f2\"><div class=\"ttname\"><a href=\"a01827.html#a1392b84bf237ce8c8be2b2ec7b9869f2\">Dune::Functions::Experimental::TransformedIndexPreBasis::initializeIndices</a></div><div class=\"ttdeci\">void initializeIndices()</div><div class=\"ttdoc\">Initialize the global indices.</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:86</div></div>\n-<div class=\"ttc\" id=\"aa01827_html_a218ba207b64f73e09b2018d951f2dd54\"><div class=\"ttname\"><a href=\"a01827.html#a218ba207b64f73e09b2018d951f2dd54\">Dune::Functions::Experimental::TransformedIndexPreBasis::GridView</a></div><div class=\"ttdeci\">typename RawPreBasis::GridView GridView</div><div class=\"ttdoc\">The grid view that the FE basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:62</div></div>\n-<div class=\"ttc\" id=\"aa01827_html_a2be4ef5cda338039c85cd40553ff0b82\"><div class=\"ttname\"><a href=\"a01827.html#a2be4ef5cda338039c85cd40553ff0b82\">Dune::Functions::Experimental::TransformedIndexPreBasis::transformIndex</a></div><div class=\"ttdeci\">void transformIndex(MultiIndex &multiIndex) const</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:154</div></div>\n-<div class=\"ttc\" id=\"aa01827_html_a363ac0b99c5fdbc380f259234ab757e2\"><div class=\"ttname\"><a href=\"a01827.html#a363ac0b99c5fdbc380f259234ab757e2\">Dune::Functions::Experimental::TransformedIndexPreBasis::rawPreBasis_</a></div><div class=\"ttdeci\">RawPreBasis rawPreBasis_</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:172</div></div>\n-<div class=\"ttc\" id=\"aa01827_html_a3eec8056dfb98fa13397be1f6c3c5f61\"><div class=\"ttname\"><a href=\"a01827.html#a3eec8056dfb98fa13397be1f6c3c5f61\">Dune::Functions::Experimental::TransformedIndexPreBasis::Node</a></div><div class=\"ttdeci\">typename RawPreBasis::Node Node</div><div class=\"ttdoc\">Template mapping root tree path to type of created tree node.</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:68</div></div>\n-<div class=\"ttc\" id=\"aa01827_html_a415716e3d0436f2e9c44992ee79f6133\"><div class=\"ttname\"><a href=\"a01827.html#a415716e3d0436f2e9c44992ee79f6133\">Dune::Functions::Experimental::TransformedIndexPreBasis::TransformedIndexPreBasis</a></div><div class=\"ttdeci\">TransformedIndexPreBasis(RPB_R &&rawPreBasis, T_R &&transformation)</div><div class=\"ttdoc\">Constructor for given child pre-basis objects.</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:80</div></div>\n-<div class=\"ttc\" id=\"aa01827_html_a44184e98f04f793b05c9c0bac7d0b2f7\"><div class=\"ttname\"><a href=\"a01827.html#a44184e98f04f793b05c9c0bac7d0b2f7\">Dune::Functions::Experimental::TransformedIndexPreBasis::rawPreBasis</a></div><div class=\"ttdeci\">RawPreBasis & rawPreBasis()</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:148</div></div>\n-<div class=\"ttc\" id=\"aa01827_html_a474968659bf3b30d623d6baceaceafac\"><div class=\"ttname\"><a href=\"a01827.html#a474968659bf3b30d623d6baceaceafac\">Dune::Functions::Experimental::TransformedIndexPreBasis::maxMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type maxMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:70</div></div>\n-<div class=\"ttc\" id=\"aa01827_html_a573a82c3462477edff6bdcfab358894e\"><div class=\"ttname\"><a href=\"a01827.html#a573a82c3462477edff6bdcfab358894e\">Dune::Functions::Experimental::TransformedIndexPreBasis::update</a></div><div class=\"ttdeci\">void update(const GridView &gv)</div><div class=\"ttdoc\">Update the stored grid view, to be called if the grid has changed.</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:98</div></div>\n-<div class=\"ttc\" id=\"aa01827_html_a59112faa30a2466538b2f7bdf2f3b9f9\"><div class=\"ttname\"><a href=\"a01827.html#a59112faa30a2466538b2f7bdf2f3b9f9\">Dune::Functions::Experimental::TransformedIndexPreBasis::makeNode</a></div><div class=\"ttdeci\">Node makeNode() const</div><div class=\"ttdoc\">Create tree node with given root tree path.</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:113</div></div>\n-<div class=\"ttc\" id=\"aa01827_html_a594c7901fbeee33aed41098733345691\"><div class=\"ttname\"><a href=\"a01827.html#a594c7901fbeee33aed41098733345691\">Dune::Functions::Experimental::TransformedIndexPreBasis::gridView</a></div><div class=\"ttdeci\">const GridView & gridView() const</div><div class=\"ttdoc\">Obtain the grid view that the basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:92</div></div>\n-<div class=\"ttc\" id=\"aa01827_html_a60c39a7fbdc2f97ea2ca609523c917ad\"><div class=\"ttname\"><a href=\"a01827.html#a60c39a7fbdc2f97ea2ca609523c917ad\">Dune::Functions::Experimental::TransformedIndexPreBasis::size</a></div><div class=\"ttdeci\">size_type size(const SizePrefix &prefix) const</div><div class=\"ttdoc\">Return number of possible values for next position in multi index.</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:126</div></div>\n-<div class=\"ttc\" id=\"aa01827_html_a64aa0bf3453d3f749622b7ea521715ae\"><div class=\"ttname\"><a href=\"a01827.html#a64aa0bf3453d3f749622b7ea521715ae\">Dune::Functions::Experimental::TransformedIndexPreBasis::RawPreBasis</a></div><div class=\"ttdeci\">RPB RawPreBasis</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:59</div></div>\n-<div class=\"ttc\" id=\"aa01827_html_a683d388cba68feafc350d23c8078666b\"><div class=\"ttname\"><a href=\"a01827.html#a683d388cba68feafc350d23c8078666b\">Dune::Functions::Experimental::TransformedIndexPreBasis::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdoc\">Same as size(prefix) with empty prefix.</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:119</div></div>\n-<div class=\"ttc\" id=\"aa01827_html_a8120d9942ea893adcb6a1cb1e39634ae\"><div class=\"ttname\"><a href=\"a01827.html#a8120d9942ea893adcb6a1cb1e39634ae\">Dune::Functions::Experimental::TransformedIndexPreBasis::maxNodeSize</a></div><div class=\"ttdeci\">size_type maxNodeSize() const</div><div class=\"ttdoc\">Get the maximal number of DOFs associated to node for any element.</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:138</div></div>\n-<div class=\"ttc\" id=\"aa01827_html_a9468d7e0817593e6b0e52b9b33f2a7ce\"><div class=\"ttname\"><a href=\"a01827.html#a9468d7e0817593e6b0e52b9b33f2a7ce\">Dune::Functions::Experimental::TransformedIndexPreBasis::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdoc\">Type used for indices and size information.</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:65</div></div>\n-<div class=\"ttc\" id=\"aa01827_html_aa46fd3cb45543bee69dfd60429254ba4\"><div class=\"ttname\"><a href=\"a01827.html#aa46fd3cb45543bee69dfd60429254ba4\">Dune::Functions::Experimental::TransformedIndexPreBasis::multiIndexBufferSize</a></div><div class=\"ttdeci\">static constexpr size_type multiIndexBufferSize</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:72</div></div>\n-<div class=\"ttc\" id=\"aa01827_html_acb52b5e4d4d4b17e8bcabaa224e3e098\"><div class=\"ttname\"><a href=\"a01827.html#acb52b5e4d4d4b17e8bcabaa224e3e098\">Dune::Functions::Experimental::TransformedIndexPreBasis::dimension</a></div><div class=\"ttdeci\">size_type dimension() const</div><div class=\"ttdoc\">Get the total dimension of the space spanned by this basis.</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:132</div></div>\n-<div class=\"ttc\" id=\"aa01827_html_ae05f9b7e9586b30e88d78c42737e4971\"><div class=\"ttname\"><a href=\"a01827.html#ae05f9b7e9586b30e88d78c42737e4971\">Dune::Functions::Experimental::TransformedIndexPreBasis::rawPreBasis</a></div><div class=\"ttdeci\">const RawPreBasis & rawPreBasis() const</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:143</div></div>\n-<div class=\"ttc\" id=\"aa01827_html_ae4b2655926fabb0a127584a701446958\"><div class=\"ttname\"><a href=\"a01827.html#ae4b2655926fabb0a127584a701446958\">Dune::Functions::Experimental::TransformedIndexPreBasis::minMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type minMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:71</div></div>\n-<div class=\"ttc\" id=\"aa01831_html\"><div class=\"ttname\"><a href=\"a01831.html\">Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation</a></div><div class=\"ttdoc\">A generic implementation of a transformation.</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:232</div></div>\n-<div class=\"ttc\" id=\"aa01831_html_a1f53f5aa5d5136a9562e0eec99525a01\"><div class=\"ttname\"><a href=\"a01831.html#a1f53f5aa5d5136a9562e0eec99525a01\">Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation::dimension</a></div><div class=\"ttdeci\">auto dimension(const PreBasis &preBasis) const</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:257</div></div>\n-<div class=\"ttc\" id=\"aa01831_html_a219750b8ee3e1c033ad682d97799025b\"><div class=\"ttname\"><a href=\"a01831.html#a219750b8ee3e1c033ad682d97799025b\">Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation::GenericIndexingTransformation</a></div><div class=\"ttdeci\">GenericIndexingTransformation(IT_R &&indexTransformation, SI_R &&sizeImplementation)</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:239</div></div>\n-<div class=\"ttc\" id=\"aa01831_html_a6023cfa399a887be2d3e61b254725e7c\"><div class=\"ttname\"><a href=\"a01831.html#a6023cfa399a887be2d3e61b254725e7c\">Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation::transformIndex</a></div><div class=\"ttdeci\">void transformIndex(MultiIndex &multiIndex, const PreBasis &preBasis) const</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:245</div></div>\n-<div class=\"ttc\" id=\"aa01831_html_a826abc88d3f456e468a289a4d2dfb309\"><div class=\"ttname\"><a href=\"a01831.html#a826abc88d3f456e468a289a4d2dfb309\">Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation::maxIndexSize</a></div><div class=\"ttdeci\">static constexpr std::size_t maxIndexSize</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:236</div></div>\n-<div class=\"ttc\" id=\"aa01831_html_a8772949dfe0ebe2187cc594e2f706f9d\"><div class=\"ttname\"><a href=\"a01831.html#a8772949dfe0ebe2187cc594e2f706f9d\">Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation::minIndexSize</a></div><div class=\"ttdeci\">static constexpr std::size_t minIndexSize</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:235</div></div>\n-<div class=\"ttc\" id=\"aa01831_html_ac46fea52b627866a38dff8e99d80944e\"><div class=\"ttname\"><a href=\"a01831.html#ac46fea52b627866a38dff8e99d80944e\">Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation::size</a></div><div class=\"ttdeci\">auto size(const Prefix &prefix, const PreBasis &preBasis) const</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:251</div></div>\n-<div class=\"ttc\" id=\"aa02876_html\"><div class=\"ttname\"><a href=\"a02876.html\">concepts.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa01555_html\"><div class=\"ttname\"><a href=\"a01555.html\">Dune::Functions::DefaultGlobalBasis</a></div><div class=\"ttdoc\">Global basis for given pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:46</div></div>\n+<div class=\"ttc\" id=\"aa01707_html_a859d50513645ef2ea0188d0779c1df30\"><div class=\"ttname\"><a href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">Dune::Functions::BasisNodeMixin::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:142</div></div>\n+<div class=\"ttc\" id=\"aa01707_html_aa8a0b9332c5d9fd44b680acc810502cd\"><div class=\"ttname\"><a href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">Dune::Functions::BasisNodeMixin::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:128</div></div>\n+<div class=\"ttc\" id=\"aa01707_html_ae93815e5c4012f7be5d11786f40d267a\"><div class=\"ttname\"><a href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\">Dune::Functions::BasisNodeMixin::setSize</a></div><div class=\"ttdeci\">void setSize(const size_type size)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:164</div></div>\n+<div class=\"ttc\" id=\"aa01711_html\"><div class=\"ttname\"><a href=\"a01711.html\">Dune::Functions::LeafBasisNode</a></div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:186</div></div>\n+<div class=\"ttc\" id=\"aa01791_html\"><div class=\"ttname\"><a href=\"a01791.html\">Dune::Functions::RaviartThomasNode</a></div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:334</div></div>\n+<div class=\"ttc\" id=\"aa01791_html_a04da4619b4aa1def1345fbf02d7e3d11\"><div class=\"ttname\"><a href=\"a01791.html#a04da4619b4aa1def1345fbf02d7e3d11\">Dune::Functions::RaviartThomasNode::FiniteElementMap</a></div><div class=\"ttdeci\">typename Impl::RaviartThomasLocalFiniteElementMap< GV, dim, double, k > FiniteElementMap</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:341</div></div>\n+<div class=\"ttc\" id=\"aa01791_html_a0924826eab72f86aad18127083df89ab\"><div class=\"ttname\"><a href=\"a01791.html#a0924826eab72f86aad18127083df89ab\">Dune::Functions::RaviartThomasNode::bind</a></div><div class=\"ttdeci\">void bind(const Element &e)</div><div class=\"ttdoc\">Bind to element.</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:367</div></div>\n+<div class=\"ttc\" id=\"aa01791_html_a1f96631de9aa36157ca9f6880d9c3f6b\"><div class=\"ttname\"><a href=\"a01791.html#a1f96631de9aa36157ca9f6880d9c3f6b\">Dune::Functions::RaviartThomasNode::FiniteElement</a></div><div class=\"ttdeci\">Impl::GlobalValuedLocalFiniteElement< Impl::ContravariantPiolaTransformator, typename FiniteElementMap::FiniteElement, Element > FiniteElement</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:344</div></div>\n+<div class=\"ttc\" id=\"aa01791_html_a5508276610b3022011979625761c54f1\"><div class=\"ttname\"><a href=\"a01791.html#a5508276610b3022011979625761c54f1\">Dune::Functions::RaviartThomasNode::Element</a></div><div class=\"ttdeci\">typename GV::template Codim< 0 >::Entity Element</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:340</div></div>\n+<div class=\"ttc\" id=\"aa01791_html_a55e93eaa2cef54de86d914bbac53a678\"><div class=\"ttname\"><a href=\"a01791.html#a55e93eaa2cef54de86d914bbac53a678\">Dune::Functions::RaviartThomasNode::element_</a></div><div class=\"ttdeci\">const Element * element_</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:377</div></div>\n+<div class=\"ttc\" id=\"aa01791_html_a5e34559e17159d8e217a3f101fdb330b\"><div class=\"ttname\"><a href=\"a01791.html#a5e34559e17159d8e217a3f101fdb330b\">Dune::Functions::RaviartThomasNode::finiteElement</a></div><div class=\"ttdeci\">const FiniteElement & finiteElement() const</div><div class=\"ttdoc\">Return the LocalFiniteElement for the element we are bound to.</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:361</div></div>\n+<div class=\"ttc\" id=\"aa01791_html_aac2cef6fa5a69ede4774780a389f32f7\"><div class=\"ttname\"><a href=\"a01791.html#aac2cef6fa5a69ede4774780a389f32f7\">Dune::Functions::RaviartThomasNode::RaviartThomasNode</a></div><div class=\"ttdeci\">RaviartThomasNode(const FiniteElementMap *finiteElementMap)</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:346</div></div>\n+<div class=\"ttc\" id=\"aa01791_html_ab809e1789eaddc127bbf6912728da54a\"><div class=\"ttname\"><a href=\"a01791.html#ab809e1789eaddc127bbf6912728da54a\">Dune::Functions::RaviartThomasNode::element</a></div><div class=\"ttdeci\">const Element & element() const</div><div class=\"ttdoc\">Return current element, throw if unbound.</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:352</div></div>\n+<div class=\"ttc\" id=\"aa01791_html_ac02b19d7c9fb373fa5cef0866e548a06\"><div class=\"ttname\"><a href=\"a01791.html#ac02b19d7c9fb373fa5cef0866e548a06\">Dune::Functions::RaviartThomasNode::finiteElement_</a></div><div class=\"ttdeci\">FiniteElement finiteElement_</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:376</div></div>\n+<div class=\"ttc\" id=\"aa01791_html_ae5551ae5374e41f77b5f474901341c08\"><div class=\"ttname\"><a href=\"a01791.html#ae5551ae5374e41f77b5f474901341c08\">Dune::Functions::RaviartThomasNode::finiteElementMap_</a></div><div class=\"ttdeci\">const FiniteElementMap * finiteElementMap_</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:378</div></div>\n+<div class=\"ttc\" id=\"aa01795_html\"><div class=\"ttname\"><a href=\"a01795.html\">Dune::Functions::RaviartThomasPreBasis</a></div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:192</div></div>\n+<div class=\"ttc\" id=\"aa01795_html_a000fee05b7887b6c7afaa7ad923651b2\"><div class=\"ttname\"><a href=\"a01795.html#a000fee05b7887b6c7afaa7ad923651b2\">Dune::Functions::RaviartThomasPreBasis::minMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type minMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:205</div></div>\n+<div class=\"ttc\" id=\"aa01795_html_a05de07d386bbf54c0b153c89c49168c7\"><div class=\"ttname\"><a href=\"a01795.html#a05de07d386bbf54c0b153c89c49168c7\">Dune::Functions::RaviartThomasPreBasis::maxMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type maxMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:204</div></div>\n+<div class=\"ttc\" id=\"aa01795_html_a14a96e80dbb53e4afadfda189f81c4b0\"><div class=\"ttname\"><a href=\"a01795.html#a14a96e80dbb53e4afadfda189f81c4b0\">Dune::Functions::RaviartThomasPreBasis::makeNode</a></div><div class=\"ttdeci\">Node makeNode() const</div><div class=\"ttdoc\">Create tree node.</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:250</div></div>\n+<div class=\"ttc\" id=\"aa01795_html_a26fbdcf76c8e3839b40affdb2413f062\"><div class=\"ttname\"><a href=\"a01795.html#a26fbdcf76c8e3839b40affdb2413f062\">Dune::Functions::RaviartThomasPreBasis::dofsPerCodim_</a></div><div class=\"ttdeci\">std::array< int, dim+1 > dofsPerCodim_</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:326</div></div>\n+<div class=\"ttc\" id=\"aa01795_html_a3a7f6bee36aa3fa028b12ed7d7d6323c\"><div class=\"ttname\"><a href=\"a01795.html#a3a7f6bee36aa3fa028b12ed7d7d6323c\">Dune::Functions::RaviartThomasPreBasis::update</a></div><div class=\"ttdeci\">void update(const GridView &gv)</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:242</div></div>\n+<div class=\"ttc\" id=\"aa01795_html_a3de5fb4d0f0ba9161f7eb874e038fa75\"><div class=\"ttname\"><a href=\"a01795.html#a3de5fb4d0f0ba9161f7eb874e038fa75\">Dune::Functions::RaviartThomasPreBasis::RaviartThomasPreBasis</a></div><div class=\"ttdeci\">RaviartThomasPreBasis(const GridView &gv)</div><div class=\"ttdoc\">Constructor for a given grid view object.</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:209</div></div>\n+<div class=\"ttc\" id=\"aa01795_html_a3e54e4eb73680c37e4fc32475f49bd46\"><div class=\"ttname\"><a href=\"a01795.html#a3e54e4eb73680c37e4fc32475f49bd46\">Dune::Functions::RaviartThomasPreBasis::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:200</div></div>\n+<div class=\"ttc\" id=\"aa01795_html_a54aad1415b27afc80c12c87e4a5d595b\"><div class=\"ttname\"><a href=\"a01795.html#a54aad1415b27afc80c12c87e4a5d595b\">Dune::Functions::RaviartThomasPreBasis::gridView</a></div><div class=\"ttdeci\">const GridView & gridView() const</div><div class=\"ttdoc\">Obtain the grid view that the basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:236</div></div>\n+<div class=\"ttc\" id=\"aa01795_html_a5c0fd8965f5d1ccdf8c064908a4cf019\"><div class=\"ttname\"><a href=\"a01795.html#a5c0fd8965f5d1ccdf8c064908a4cf019\">Dune::Functions::RaviartThomasPreBasis::indices</a></div><div class=\"ttdeci\">It indices(const Node &node, It it) const</div><div class=\"ttdoc\">Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:294</div></div>\n+<div class=\"ttc\" id=\"aa01795_html_a5e51525127f5d27020a411c75c6dc3dc\"><div class=\"ttname\"><a href=\"a01795.html#a5e51525127f5d27020a411c75c6dc3dc\">Dune::Functions::RaviartThomasPreBasis::multiIndexBufferSize</a></div><div class=\"ttdeci\">static constexpr size_type multiIndexBufferSize</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:206</div></div>\n+<div class=\"ttc\" id=\"aa01795_html_a6b79ac0c794d5c74cb5a547116b02515\"><div class=\"ttname\"><a href=\"a01795.html#a6b79ac0c794d5c74cb5a547116b02515\">Dune::Functions::RaviartThomasPreBasis::finiteElementMap_</a></div><div class=\"ttdeci\">FiniteElementMap finiteElementMap_</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:324</div></div>\n+<div class=\"ttc\" id=\"aa01795_html_a89e848a1463225369fad477023293a5e\"><div class=\"ttname\"><a href=\"a01795.html#a89e848a1463225369fad477023293a5e\">Dune::Functions::RaviartThomasPreBasis::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:255</div></div>\n+<div class=\"ttc\" id=\"aa01795_html_a90d5d6569b24f1f109d09cb67aa7cde6\"><div class=\"ttname\"><a href=\"a01795.html#a90d5d6569b24f1f109d09cb67aa7cde6\">Dune::Functions::RaviartThomasPreBasis::dimension</a></div><div class=\"ttdeci\">size_type dimension() const</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:269</div></div>\n+<div class=\"ttc\" id=\"aa01795_html_ab389963ad645a85730a68ba538962d68\"><div class=\"ttname\"><a href=\"a01795.html#ab389963ad645a85730a68ba538962d68\">Dune::Functions::RaviartThomasPreBasis::GridView</a></div><div class=\"ttdeci\">GV GridView</div><div class=\"ttdoc\">The grid view that the FE space is defined on.</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:199</div></div>\n+<div class=\"ttc\" id=\"aa01795_html_ac364e0f8b7bf60bb69156385f1f02405\"><div class=\"ttname\"><a href=\"a01795.html#ac364e0f8b7bf60bb69156385f1f02405\">Dune::Functions::RaviartThomasPreBasis::maxNodeSize</a></div><div class=\"ttdeci\">size_type maxNodeSize() const</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:274</div></div>\n+<div class=\"ttc\" id=\"aa01795_html_ac775393c2fa528f96a183c71e19fb7c4\"><div class=\"ttname\"><a href=\"a01795.html#ac775393c2fa528f96a183c71e19fb7c4\">Dune::Functions::RaviartThomasPreBasis::gridView_</a></div><div class=\"ttdeci\">GridView gridView_</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:322</div></div>\n+<div class=\"ttc\" id=\"aa01795_html_ae92217c29c5ca4f9cf42c15a0805428a\"><div class=\"ttname\"><a href=\"a01795.html#ae92217c29c5ca4f9cf42c15a0805428a\">Dune::Functions::RaviartThomasPreBasis::size</a></div><div class=\"ttdeci\">size_type size(const SizePrefix &prefix) const</div><div class=\"ttdoc\">Return number possible values for next position in multi index.</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:262</div></div>\n+<div class=\"ttc\" id=\"aa01795_html_afcd506e3ce47347b5f72c9b7a05207fc\"><div class=\"ttname\"><a href=\"a01795.html#afcd506e3ce47347b5f72c9b7a05207fc\">Dune::Functions::RaviartThomasPreBasis::initializeIndices</a></div><div class=\"ttdeci\">void initializeIndices()</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:228</div></div>\n+<div class=\"ttc\" id=\"aa01795_html_afcd58520d4ca4871df729b8423aa78be\"><div class=\"ttname\"><a href=\"a01795.html#afcd58520d4ca4871df729b8423aa78be\">Dune::Functions::RaviartThomasPreBasis::codimOffset_</a></div><div class=\"ttdeci\">std::array< size_t, dim+1 > codimOffset_</div><div class=\"ttdef\"><b>Definition:</b> raviartthomasbasis.hh:323</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,372 +5,566 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-transformedindexbasis.hh\n+raviartthomasbasis.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH\n- 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH\n+ 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH\n+ 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH\n 5\n- 6#include <tuple>\n- 7#include <utility>\n+ 6#include <array>\n+ 7#include <dune/common/exceptions.hh>\n 8\n- 9#include <dune/common/std/apply.hh>\n- 10#include <dune/common/hybridutilities.hh>\n- 11#include <dune/common/reservedvector.hh>\n- 12#include <dune/common/typeutilities.hh>\n- 13#include <dune/common/hybridutilities.hh>\n- 14\n- 15#include <dune/typetree/compositenode.hh>\n- 16#include <dune/typetree/utility.hh>\n- 17\n- 18#include <dune/functions/common/staticforloop.hh>\n- 19#include <dune/functions/common/type_traits.hh>\n- 20#include <dune/functions/common/utility.hh>\n- 21#include <dune/functions/functionspacebases/basistags.hh>\n- 22#include <dune/functions/functionspacebases/nodes.hh>\n- 23#include <dune/functions/functionspacebases/concepts.hh>\n- 24#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n- 25\n+ 9#include <dune/grid/common/capabilities.hh>\n+ 10#include <dune/grid/common/mcmgmapper.hh>\n+ 11\n+ 12#include <dune/localfunctions/common/localfiniteelementvariant.hh>\n+ 13#include <dune/localfunctions/raviartthomas.hh>\n+ 14#include <dune/localfunctions/raviartthomas/raviartthomas0cube2d.hh>\n+ 15#include <dune/localfunctions/raviartthomas/raviartthomas0cube3d.hh>\n+ 16#include <dune/localfunctions/raviartthomas/raviartthomas02d.hh>\n+ 17#include <dune/localfunctions/raviartthomas/raviartthomas03d.hh>\n+ 18#include <dune/localfunctions/raviartthomas/raviartthomas1cube2d.hh>\n+ 19#include <dune/localfunctions/raviartthomas/raviartthomas1cube3d.hh>\n+ 20#include <dune/localfunctions/raviartthomas/raviartthomas12d.hh>\n+ 21#include <dune/localfunctions/raviartthomas/raviartthomas2cube2d.hh>\n+ 22\n+ 23#include <dune/functions/functionspacebases/\n+globalvaluedlocalfiniteelement.hh>\n+ 24#include <dune/functions/functionspacebases/nodes.hh>\n+ 25#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n 26\n 27namespace Dune {\n 28namespace Functions {\n-29namespace Experimental {\n- 30\n- 31/\n-/ *****************************************************************************\n- 32/\n-/ *****************************************************************************\n- 33\n- 50template<class RPB, class T>\n-51class TransformedIndexPreBasis\n- 52{\n- 53 using Transformation = T;\n- 54\n- 55 using This = TransformedIndexPreBasis<RPB,_T>;\n+ 29\n+ 30namespace Impl {\n+ 31\n+ 32 template<int dim, typename D, typename R, std::size_t k>\n+ 33 struct RaviartThomasSimplexLocalInfo\n+ 34 {\n+ 35 // Dummy type, must be something that we can have a std::unique_ptr to\n+ 36 using FiniteElement = void*;\n+ 37 };\n+ 38\n+ 39 template<typename D, typename R>\n+ 40 struct RaviartThomasSimplexLocalInfo<2,D,R,0>\n+ 41 {\n+ 42 using FiniteElement = RT02DLocalFiniteElement<D,R>;\n+ 43 };\n+ 44\n+ 45 template<typename D, typename R>\n+ 46 struct RaviartThomasSimplexLocalInfo<2,D,R,1>\n+ 47 {\n+ 48 using FiniteElement = RT12DLocalFiniteElement<D,R>;\n+ 49 };\n+ 50\n+ 51 template<typename D, typename R>\n+ 52 struct RaviartThomasSimplexLocalInfo<3,D,R,0>\n+ 53 {\n+ 54 using FiniteElement = RT03DLocalFiniteElement<D,R>;\n+ 55 };\n 56\n- 57public:\n- 58\n-59 using RawPreBasis = RPB;\n- 60\n-62 using GridView = typename RawPreBasis::GridView;\n+ 57 template<int dim, typename D, typename R, std::size_t k>\n+ 58 struct RaviartThomasCubeLocalInfo\n+ 59 {\n+ 60 // Dummy type, must be something that we can have a std::unique_ptr to\n+ 61 using FiniteElement = void*;\n+ 62 };\n 63\n-65 using size_type = std::size_t;\n- 66\n-68 using Node = typename RawPreBasis::Node;\n+ 64 template<typename D, typename R>\n+ 65 struct RaviartThomasCubeLocalInfo<2,D,R,0>\n+ 66 {\n+ 67 using FiniteElement = RT0Cube2DLocalFiniteElement<D,R>;\n+ 68 };\n 69\n-70 static constexpr size_type maxMultiIndexSize = Transformation::maxIndexSize;\n-71 static constexpr size_type minMultiIndexSize = Transformation::minIndexSize;\n-72 static constexpr size_type multiIndexBufferSize = std::max(RawPreBasis::\n-multiIndexBufferSize, maxMultiIndexSize);\n- 73\n- 79 template<class RPB_R, class T_R>\n-80 TransformedIndexPreBasis(RPB_R&& rawPreBasis, T_R&& transformation) :\n- 81 rawPreBasis_(std::forward<RPB_R>(rawPreBasis)),\n- 82 transformation_(std::forward<T_R>(transformation))\n- 83 {}\n- 84\n-86 void initializeIndices()\n- 87 {\n- 88 rawPreBasis_.initializeIndices();\n- 89 }\n- 90\n-92 const GridView& gridView() const\n- 93 {\n- 94 return rawPreBasis_.gridView();\n- 95 }\n- 96\n-98 void update(const GridView& gv)\n- 99 {\n- 100 rawPreBasis_.update(gv);\n- 101 }\n+ 70 template<typename D, typename R>\n+ 71 struct RaviartThomasCubeLocalInfo<2,D,R,1>\n+ 72 {\n+ 73 using FiniteElement = RT1Cube2DLocalFiniteElement<D,R>;\n+ 74 };\n+ 75\n+ 76 template<typename D, typename R>\n+ 77 struct RaviartThomasCubeLocalInfo<2,D,R,2>\n+ 78 {\n+ 79 using FiniteElement = RT2Cube2DLocalFiniteElement<D,R>;\n+ 80 };\n+ 81\n+ 82 template<typename D, typename R>\n+ 83 struct RaviartThomasCubeLocalInfo<3,D,R,0>\n+ 84 {\n+ 85 using FiniteElement = RT0Cube3DLocalFiniteElement<D,R>;\n+ 86 };\n+ 87\n+ 88 template<typename D, typename R>\n+ 89 struct RaviartThomasCubeLocalInfo<3,D,R,1>\n+ 90 {\n+ 91 using FiniteElement = RT1Cube3DLocalFiniteElement<D,R>;\n+ 92 };\n+ 93\n+ 94 template<typename GV, int dim, typename R, std::size_t k>\n+ 95 class RaviartThomasLocalFiniteElementMap\n+ 96 {\n+ 97 using D = typename GV::ctype;\n+ 98 constexpr static bool hasFixedElementType = Capabilities::\n+hasSingleGeometryType<typename GV::Grid>::v;\n+ 99\n+ 100 using CubeFiniteElement = typename RaviartThomasCubeLocalInfo<dim, D, R,\n+k>::FiniteElement;\n+ 101 using SimplexFiniteElement = typename RaviartThomasSimplexLocalInfo<dim,\n+D, R, k>::FiniteElement;\n 102\n-113 Node makeNode() const\n- 114 {\n- 115 return rawPreBasis_.makeNode();\n- 116 }\n- 117\n-119 size_type size() const\n- 120 {\n- 121 return size(Dune::ReservedVector<size_type, multiIndexBufferSize>{});\n- 122 }\n- 123\n- 125 template<class SizePrefix>\n-126 size_type size(const SizePrefix& prefix) const\n+ 103 public:\n+ 104\n+ 105 using T = LocalBasisTraits<D, dim, FieldVector<D,dim>, R, dim,\n+FieldVector<R,dim>, FieldMatrix<D,dim,dim> >;\n+ 106\n+ 107 constexpr static unsigned int topologyId = Capabilities::\n+hasSingleGeometryType<typename GV::Grid>::topologyId; // meaningless if\n+hasFixedElementType is false\n+ 108 constexpr static GeometryType type = GeometryType(topologyId, GV::\n+dimension);\n+ 109\n+ 110 using FiniteElement = std::conditional_t<hasFixedElementType,\n+ 111 std::conditional_t<type.isCube(),CubeFiniteElement,SimplexFiniteElement>,\n+ 112 LocalFiniteElementVariant<CubeFiniteElement, SimplexFiniteElement> >;\n+ 113\n+ 114 // Each element facet can have its orientation reversed, hence there are\n+ 115 // 2^#facets different variants.\n+ 116 static std::size_t numVariants(GeometryType type)\n+ 117 {\n+ 118 auto numFacets = referenceElement<D,dim>(type).size(1);\n+ 119 return power(2,numFacets);\n+ 120 }\n+ 121\n+ 122 RaviartThomasLocalFiniteElementMap(const GV& gv)\n+ 123 : elementMapper_(gv, mcmgElementLayout()),\n+ 124 orient_(gv.size(0))\n+ 125 {\n+ 126 if constexpr (hasFixedElementType)\n 127 {\n- 128 return transformation_.size(prefix, rawPreBasis_);\n- 129 }\n- 130\n-132 size_type dimension() const\n+ 128 variants_.resize(numVariants(type));\n+ 129 for (size_t i = 0; i < numVariants(type); i++)\n+ 130 variants_[i] = FiniteElement(i);\n+ 131 }\n+ 132 else\n 133 {\n- 134 return transformation_.dimension(rawPreBasis_);\n- 135 }\n- 136\n-138 size_type maxNodeSize() const\n- 139 {\n- 140 return rawPreBasis_.maxNodeSize();\n- 141 }\n- 142\n-143 const RawPreBasis& rawPreBasis() const\n- 144 {\n- 145 return rawPreBasis_;\n- 146 }\n- 147\n-148 RawPreBasis& rawPreBasis()\n- 149 {\n- 150 return rawPreBasis_;\n+ 134 // for mixed grids add offset for cubes\n+ 135 variants_.resize(numVariants(GeometryTypes::simplex(dim)) + numVariants\n+(GeometryTypes::cube(dim)));\n+ 136 for (size_t i = 0; i < numVariants(GeometryTypes::simplex(dim)); i++)\n+ 137 variants_[i] = SimplexFiniteElement(i);\n+ 138 for (size_t i = 0; i < numVariants(GeometryTypes::cube(dim)); i++)\n+ 139 variants_[i + numVariants(GeometryTypes::simplex(dim))] =\n+CubeFiniteElement(i);\n+ 140 }\n+ 141\n+ 142 for(const auto& cell : elements(gv))\n+ 143 {\n+ 144 unsigned int myId = elementMapper_.index(cell);\n+ 145 orient_[myId] = 0;\n+ 146\n+ 147 for (const auto& intersection : intersections(gv,cell))\n+ 148 {\n+ 149 if (intersection.neighbor() && (elementMapper_.index(intersection.outside\n+()) > myId))\n+ 150 orient_[myId] |= (1 << intersection.indexInInside());\n 151 }\n 152\n- 153 template<class MultiIndex>\n-154 void transformIndex(MultiIndex& multiIndex) const\n- 155 {\n- 156 transformation_.transformIndex(multiIndex, rawPreBasis_);\n+ 153 // for mixed grids add offset for cubes\n+ 154 if constexpr (!hasFixedElementType)\n+ 155 if (cell.type().isCube())\n+ 156 orient_[myId] += numVariants(GeometryTypes::simplex(dim));\n 157 }\n- 158\n- 159 template<typename It>\n-160 It indices(const Node& node, It it) const\n- 161 {\n- 162 rawPreBasis().indices(node, it);\n- 163 for(std::size_t i=0; i<node.size(); ++i)\n- 164 {\n- 165 transformIndex(*it);\n- 166 ++it;\n- 167 }\n- 168 return it;\n- 169 }\n- 170\n- 171protected:\n-172 RawPreBasis rawPreBasis_;\n-173 Transformation transformation_;\n- 174};\n+ 158 }\n+ 159\n+ 160 template<class EntityType>\n+ 161 const FiniteElement& find(const EntityType& e) const\n+ 162 {\n+ 163 return variants_[orient_[elementMapper_.index(e)]];\n+ 164 }\n+ 165\n+ 166 private:\n+ 167 std::vector<FiniteElement> variants_;\n+ 168 const Dune::MultipleCodimMultipleGeomTypeMapper<GV> elementMapper_;\n+ 169 std::vector<unsigned char> orient_;\n+ 170 };\n+ 171\n+ 172\n+ 173} // namespace Impl\n+ 174\n 175\n- 176template<class RPB, class T>\n-177TransformedIndexPreBasis(RPB&&, T&&) -> TransformedIndexPreBasis<std::\n-decay_t<RPB>, std::decay_t<T>>;\n- 178\n- 179\n- 180} // end namespace Experimental\n- 181\n- 182\n- 183namespace BasisFactory {\n- 184namespace Experimental {\n- 185\n- 197template<class RawPreBasisFactory, class Transformation>\n-198auto transformIndices(\n- 199 RawPreBasisFactory&& preBasisFactory,\n- 200 Transformation&& transformation)\n- 201{\n- 202 return [\n- 203 preBasisFactory=std::forward<RawPreBasisFactory>(preBasisFactory),\n- 204 transformation =std::forward<Transformation>(transformation)\n- 205 ](const auto& gridView) {\n- 206 return Dune::Functions::Experimental::TransformedIndexPreBasis\n-(preBasisFactory(gridView), std::move(transformation));\n- 207 };\n- 208}\n- 209\n- 210\n- 211\n- 230template<class IndexTransformation, class SizeImplementation, std::size_t\n-minIS, std::size_t maxIS>\n-231class GenericIndexingTransformation\n- 232{\n- 233public:\n- 234\n-235 static constexpr std::size_t minIndexSize = minIS;\n-236 static constexpr std::size_t maxIndexSize = maxIS;\n- 237\n- 238 template<class IT_R, class SI_R>\n-239 GenericIndexingTransformation(IT_R&& indexTransformation, SI_R&&\n-sizeImplementation) :\n- 240 indexTransformation_(std::forward<IT_R>(indexTransformation)),\n- 241 sizeImplementation_(std::forward<SI_R>(sizeImplementation))\n- 242 {}\n- 243\n- 244 template<class MultiIndex, class PreBasis>\n-245 void transformIndex(MultiIndex& multiIndex, const PreBasis& preBasis) const\n- 246 {\n- 247 indexTransformation_(multiIndex, preBasis);\n- 248 }\n- 249\n- 250 template<class Prefix, class PreBasis>\n-251 auto size(const Prefix& prefix, const PreBasis& preBasis) const\n- 252 {\n- 253 return sizeImplementation_(prefix, preBasis);\n- 254 }\n- 255\n- 256 template<class PreBasis>\n-257 auto dimension(const PreBasis& preBasis) const\n- 258 {\n- 259 return preBasis.dimension();\n- 260 }\n- 261\n- 262private:\n- 263 IndexTransformation indexTransformation_;\n- 264 SizeImplementation sizeImplementation_;\n- 265};\n- 266\n+ 176/\n+/ *****************************************************************************\n+ 177// This is the reusable part of the basis. It contains\n+ 178//\n+ 179// RaviartThomasPreBasis\n+ 180// RaviartThomasNode\n+ 181//\n+ 182// The pre-basis allows to create the others and is the owner of possible\n+shared\n+ 183// state. These components do _not_ depend on the global basis and local\n+view\n+ 184// and can be used without a global basis.\n+ 185/\n+/ *****************************************************************************\n+ 186\n+ 187template<typename GV, int k>\n+ 188class RaviartThomasNode;\n+ 189\n+ 190template<typename GV, int k>\n+191class RaviartThomasPreBasis\n+ 192{\n+ 193 static const int dim = GV::dimension;\n+ 194 using FiniteElementMap = typename Impl::\n+RaviartThomasLocalFiniteElementMap<GV, dim, double, k>;\n+ 195\n+ 196public:\n+ 197\n+199 using GridView = GV;\n+200 using size_type = std::size_t;\n+ 201\n+202 using Node = RaviartThomasNode<GV,_k>;\n+ 203\n+204 static constexpr size_type maxMultiIndexSize = 1;\n+205 static constexpr size_type minMultiIndexSize = 1;\n+206 static constexpr size_type multiIndexBufferSize = 1;\n+ 207\n+209 RaviartThomasPreBasis(const GridView& gv) :\n+ 210 gridView_(gv),\n+ 211 finiteElementMap_(gv)\n+ 212 {\n+ 213 // Currently there are some unresolved bugs with hybrid grids and higher\n+order Raviart-Thomas elements\n+ 214 if (gv.indexSet().types(0).size() > 1 and k>0)\n+ 215 DUNE_THROW(Dune::NotImplemented, \"Raviart-Thomas basis with index k>0 is\n+only implemented for grids with a single element type\");\n+ 216\n+ 217 for(auto type : gv.indexSet().types(0))\n+ 218 if (!type.isSimplex() && !type.isCube())\n+ 219 DUNE_THROW(Dune::NotImplemented, \"Raviart-Thomas elements are only\n+implemented for grids with simplex or cube elements.\");\n+ 220\n+ 221 GeometryType type = gv.template begin<0>()->type();\n+ 222 const static int dofsPerElement = type.isCube() ? ((dim == 2) ? k*\n+(k+1)*dim : k*(k+1)*(k+1)*dim) : k*dim;\n+ 223 const static int dofsPerFace = type.isCube() ? (dim-2)*2*k+k+1 : (dim-\n+1)*k+1 ;\n+ 224\n+ 225 dofsPerCodim_ = {{dofsPerElement, dofsPerFace}};\n+ 226 }\n+ 227\n+228 void initializeIndices()\n+ 229 {\n+ 230 codimOffset_[0] = 0;\n+ 231 codimOffset_[1] = codimOffset_[0] + dofsPerCodim_[0] * gridView_.size(0);\n+ 232 }\n+ 233\n+236 const GridView& gridView() const\n+ 237 {\n+ 238 return gridView_;\n+ 239 }\n+ 240\n+ 241 /* \\brief Update the stored grid view, to be called if the grid has\n+changed */\n+242 void update (const GridView& gv)\n+ 243 {\n+ 244 gridView_ = gv;\n+ 245 }\n+ 246\n+250 Node makeNode() const\n+ 251 {\n+ 252 return Node{&finiteElementMap_};\n+ 253 }\n+ 254\n+255 size_type size() const\n+ 256 {\n+ 257 return dofsPerCodim_[0] * gridView_.size(0) + dofsPerCodim_[1] *\n+gridView_.size(1);\n+ 258 }\n+ 259\n+ 261 template<class SizePrefix>\n+262 size_type size(const SizePrefix& prefix) const\n+ 263 {\n+ 264 assert(prefix.size() == 0 || prefix.size() == 1);\n+ 265 return (prefix.size() == 0) ? size() : 0;\n+ 266 }\n 267\n- 268\n- 287template<class IndexTransformation, class SizeImplementation, std::size_t\n-minIndexSize, std::size_t maxIndexSize>\n-288auto indexTransformation(IndexTransformation&& indexTransformation,\n-SizeImplementation&& sizeImplementation, Dune::index_constant<minIndexSize>,\n-Dune::index_constant<maxIndexSize>)\n- 289{\n- 290 return GenericIndexingTransformation<\n- 291 std::decay_t<IndexTransformation>,\n- 292 std::decay_t<SizeImplementation>,\n- 293 minIndexSize, maxIndexSize>(\n- 294 std::forward<IndexTransformation>(indexTransformation),\n- 295 std::forward<SizeImplementation>(sizeImplementation));\n- 296}\n- 297\n+269 size_type dimension() const\n+ 270 {\n+ 271 return size();\n+ 272 }\n+ 273\n+274 size_type maxNodeSize() const\n+ 275 {\n+ 276 size_type result = 0;\n+ 277 for (auto&& type : gridView_.indexSet().types(0))\n+ 278 {\n+ 279 size_t numFaces = ReferenceElements<double,dim>::general(type).size(1);\n+ 280 const static int dofsPerElement = type.isCube() ? ((dim == 2) ? k*\n+(k+1)*dim : k*(k+1)*(k+1)*dim) : k*dim;\n+ 281 const static int dofsPerFace = type.isCube() ? (dim-2)*2*k+k+1 : (dim-\n+1)*k+1 ;\n+ 282 result = std::max(result, dofsPerElement + dofsPerFace * numFaces);\n+ 283 }\n+ 284\n+ 285 return result;\n+ 286 }\n+ 287\n+ 293 template<typename It>\n+294 It indices(const Node& node, It it) const\n+ 295 {\n+ 296 const auto& gridIndexSet = gridView().indexSet();\n+ 297 const auto& element = node.element();\n 298\n- 299} // end namespace Experimental\n- 300} // end namespace BasisFactory\n- 301} // end namespace Functions\n- 302} // end namespace Dune\n- 303\n- 304\n- 305#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH\n-utility.hh\n-staticforloop.hh\n-type_traits.hh\n+ 299 // throw if Element is not of predefined type\n+ 300 if (not(element.type().isCube()) and not(element.type().isSimplex()))\n+ 301 DUNE_THROW(Dune::NotImplemented, \"RaviartThomasBasis only implemented for\n+cube and simplex elements.\");\n+ 302\n+ 303 for(std::size_t i=0, end=node.size(); i<end; ++i, ++it)\n+ 304 {\n+ 305 Dune::LocalKey localKey = node.finiteElement().localCoefficients\n+().localKey(i);\n+ 306\n+ 307 // The dimension of the entity that the current dof is related to\n+ 308 size_t subentity = localKey.subEntity();\n+ 309 size_t codim = localKey.codim();\n+ 310\n+ 311 if (not(codim==0 or codim==1))\n+ 312 DUNE_THROW(Dune::NotImplemented, \"Grid contains elements not supported for\n+the RaviartThomasBasis\");\n+ 313\n+ 314 *it = { codimOffset_[codim] +\n+ 315 dofsPerCodim_[codim] * gridIndexSet.subIndex(element, subentity, codim) +\n+localKey.index() };\n+ 316 }\n+ 317\n+ 318 return it;\n+ 319 }\n+ 320\n+ 321protected:\n+322 GridView gridView_;\n+323 std::array<size_t,dim+1> codimOffset_;\n+324 FiniteElementMap finiteElementMap_;\n+ 325 // Number of dofs per entity type depending on the entity's codimension\n+and type\n+326 std::array<int,dim+1> dofsPerCodim_;\n+ 327};\n+ 328\n+ 329\n+ 330\n+ 331template<typename GV, int k>\n+332class RaviartThomasNode :\n+ 333 public LeafBasisNode\n+ 334{\n+ 335 static const int dim = GV::dimension;\n+ 336\n+ 337public:\n+ 338\n+339 using size_type = std::size_t;\n+340 using Element = typename GV::template Codim<0>::Entity;\n+341 using FiniteElementMap = typename Impl::\n+RaviartThomasLocalFiniteElementMap<GV, dim, double, k>;\n+342 using FiniteElement = Impl::GlobalValuedLocalFiniteElement<Impl::\n+ContravariantPiolaTransformator,\n+ 343 typename FiniteElementMap::FiniteElement,\n+ 344 Element>;\n+ 345\n+346 RaviartThomasNode(const FiniteElementMap* finiteElementMap) :\n+ 347 element_(nullptr),\n+ 348 finiteElementMap_(finiteElementMap)\n+ 349 { }\n+ 350\n+352 const Element& element() const\n+ 353 {\n+ 354 return *element_;\n+ 355 }\n+ 356\n+361 const FiniteElement& finiteElement() const\n+ 362 {\n+ 363 return finiteElement_;\n+ 364 }\n+ 365\n+367 void bind(const Element& e)\n+ 368 {\n+ 369 element_ = &e;\n+ 370 finiteElement_.bind((finiteElementMap_->find(*element_)), e);\n+ 371 this->setSize(finiteElement_.size());\n+ 372 }\n+ 373\n+ 374protected:\n+ 375\n+376 FiniteElement finiteElement_;\n+377 const Element* element_;\n+378 const FiniteElementMap* finiteElementMap_;\n+ 379};\n+ 380\n+ 381namespace BasisFactory {\n+ 382\n+ 390template<std::size_t k>\n+391auto raviartThomas()\n+ 392{\n+ 393 return [](const auto& gridView) {\n+ 394 return RaviartThomasPreBasis<std::decay_t<decltype(gridView)>, k>\n+(gridView);\n+ 395 };\n+ 396}\n+ 397\n+ 398} // end namespace BasisFactory\n+ 399\n+ 400\n+ 401\n+ 402/\n+/ *****************************************************************************\n+ 403// This is the actual global basis implementation based on the reusable\n+parts.\n+ 404/\n+/ *****************************************************************************\n+ 405\n+ 413template<typename GV, int k>\n+414using RaviartThomasBasis = DefaultGlobalBasis<RaviartThomasPreBasis<GV,_k>\n+>;\n+ 415\n+ 416} // end namespace Functions\n+ 417} // end namespace Dune\n+ 418\n+ 419\n+ 420#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RAVIARTTHOMASBASIS_HH\n+globalvaluedlocalfiniteelement.hh\n defaultglobalbasis.hh\n-basistags.hh\n nodes.hh\n+Dune::Functions::BasisFactory::power\n+auto power(ChildPreBasisFactory &&childPreBasisFactory, const\n+IndexMergingStrategy &)\n+Create a pre-basis factory that can build a PowerPreBasis.\n+Definition: powerbasis.hh:369\n+Dune::Functions::BasisFactory::raviartThomas\n+auto raviartThomas()\n+Create a pre-basis factory that can create a Raviart-Thomas pre-basis.\n+Definition: raviartthomasbasis.hh:391\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::BasisFactory::Experimental::transformIndices\n-auto transformIndices(RawPreBasisFactory &&preBasisFactory, Transformation\n-&&transformation)\n-Create a TransformedIndexPreBasisFactory.\n-Definition: transformedindexbasis.hh:198\n-Dune::Functions::BasisFactory::Experimental::indexTransformation\n-auto indexTransformation(IndexTransformation &&indexTransformation,\n-SizeImplementation &&sizeImplementation, Dune::index_constant< minIndexSize >,\n-Dune::index_constant< maxIndexSize >)\n-A generic implementation of a transformation.\n-Definition: transformedindexbasis.hh:288\n-Dune::Functions::Experimental::TransformedIndexPreBasis\n-TransformedIndexPreBasis(RPB &&, T &&) -> TransformedIndexPreBasis< std::\n-decay_t< RPB >, std::decay_t< T > >\n-Dune::Functions::Experimental::TransformedIndexPreBasis\n-A pre-basis transforming multi-indices.\n-Definition: transformedindexbasis.hh:52\n-Dune::Functions::Experimental::TransformedIndexPreBasis::indices\n-It indices(const Node &node, It it) const\n-Definition: transformedindexbasis.hh:160\n-Dune::Functions::Experimental::TransformedIndexPreBasis::transformation_\n-Transformation transformation_\n-Definition: transformedindexbasis.hh:173\n-Dune::Functions::Experimental::TransformedIndexPreBasis::initializeIndices\n-void initializeIndices()\n-Initialize the global indices.\n-Definition: transformedindexbasis.hh:86\n-Dune::Functions::Experimental::TransformedIndexPreBasis::GridView\n-typename RawPreBasis::GridView GridView\n-The grid view that the FE basis is defined on.\n-Definition: transformedindexbasis.hh:62\n-Dune::Functions::Experimental::TransformedIndexPreBasis::transformIndex\n-void transformIndex(MultiIndex &multiIndex) const\n-Definition: transformedindexbasis.hh:154\n-Dune::Functions::Experimental::TransformedIndexPreBasis::rawPreBasis_\n-RawPreBasis rawPreBasis_\n-Definition: transformedindexbasis.hh:172\n-Dune::Functions::Experimental::TransformedIndexPreBasis::Node\n-typename RawPreBasis::Node Node\n-Template mapping root tree path to type of created tree node.\n-Definition: transformedindexbasis.hh:68\n-Dune::Functions::Experimental::TransformedIndexPreBasis::\n-TransformedIndexPreBasis\n-TransformedIndexPreBasis(RPB_R &&rawPreBasis, T_R &&transformation)\n-Constructor for given child pre-basis objects.\n-Definition: transformedindexbasis.hh:80\n-Dune::Functions::Experimental::TransformedIndexPreBasis::rawPreBasis\n-RawPreBasis & rawPreBasis()\n-Definition: transformedindexbasis.hh:148\n-Dune::Functions::Experimental::TransformedIndexPreBasis::maxMultiIndexSize\n+Dune::Functions::DefaultGlobalBasis\n+Global basis for given pre-basis.\n+Definition: defaultglobalbasis.hh:46\n+Dune::Functions::BasisNodeMixin::size\n+size_type size() const\n+Definition: nodes.hh:142\n+Dune::Functions::BasisNodeMixin::size_type\n+std::size_t size_type\n+Definition: nodes.hh:128\n+Dune::Functions::BasisNodeMixin::setSize\n+void setSize(const size_type size)\n+Definition: nodes.hh:164\n+Dune::Functions::LeafBasisNode\n+Definition: nodes.hh:186\n+Dune::Functions::RaviartThomasNode\n+Definition: raviartthomasbasis.hh:334\n+Dune::Functions::RaviartThomasNode::FiniteElementMap\n+typename Impl::RaviartThomasLocalFiniteElementMap< GV, dim, double, k >\n+FiniteElementMap\n+Definition: raviartthomasbasis.hh:341\n+Dune::Functions::RaviartThomasNode::bind\n+void bind(const Element &e)\n+Bind to element.\n+Definition: raviartthomasbasis.hh:367\n+Dune::Functions::RaviartThomasNode::FiniteElement\n+Impl::GlobalValuedLocalFiniteElement< Impl::ContravariantPiolaTransformator,\n+typename FiniteElementMap::FiniteElement, Element > FiniteElement\n+Definition: raviartthomasbasis.hh:344\n+Dune::Functions::RaviartThomasNode::Element\n+typename GV::template Codim< 0 >::Entity Element\n+Definition: raviartthomasbasis.hh:340\n+Dune::Functions::RaviartThomasNode::element_\n+const Element * element_\n+Definition: raviartthomasbasis.hh:377\n+Dune::Functions::RaviartThomasNode::finiteElement\n+const FiniteElement & finiteElement() const\n+Return the LocalFiniteElement for the element we are bound to.\n+Definition: raviartthomasbasis.hh:361\n+Dune::Functions::RaviartThomasNode::RaviartThomasNode\n+RaviartThomasNode(const FiniteElementMap *finiteElementMap)\n+Definition: raviartthomasbasis.hh:346\n+Dune::Functions::RaviartThomasNode::element\n+const Element & element() const\n+Return current element, throw if unbound.\n+Definition: raviartthomasbasis.hh:352\n+Dune::Functions::RaviartThomasNode::finiteElement_\n+FiniteElement finiteElement_\n+Definition: raviartthomasbasis.hh:376\n+Dune::Functions::RaviartThomasNode::finiteElementMap_\n+const FiniteElementMap * finiteElementMap_\n+Definition: raviartthomasbasis.hh:378\n+Dune::Functions::RaviartThomasPreBasis\n+Definition: raviartthomasbasis.hh:192\n+Dune::Functions::RaviartThomasPreBasis::minMultiIndexSize\n+static constexpr size_type minMultiIndexSize\n+Definition: raviartthomasbasis.hh:205\n+Dune::Functions::RaviartThomasPreBasis::maxMultiIndexSize\n static constexpr size_type maxMultiIndexSize\n-Definition: transformedindexbasis.hh:70\n-Dune::Functions::Experimental::TransformedIndexPreBasis::update\n-void update(const GridView &gv)\n-Update the stored grid view, to be called if the grid has changed.\n-Definition: transformedindexbasis.hh:98\n-Dune::Functions::Experimental::TransformedIndexPreBasis::makeNode\n+Definition: raviartthomasbasis.hh:204\n+Dune::Functions::RaviartThomasPreBasis::makeNode\n Node makeNode() const\n-Create tree node with given root tree path.\n-Definition: transformedindexbasis.hh:113\n-Dune::Functions::Experimental::TransformedIndexPreBasis::gridView\n+Create tree node.\n+Definition: raviartthomasbasis.hh:250\n+Dune::Functions::RaviartThomasPreBasis::dofsPerCodim_\n+std::array< int, dim+1 > dofsPerCodim_\n+Definition: raviartthomasbasis.hh:326\n+Dune::Functions::RaviartThomasPreBasis::update\n+void update(const GridView &gv)\n+Definition: raviartthomasbasis.hh:242\n+Dune::Functions::RaviartThomasPreBasis::RaviartThomasPreBasis\n+RaviartThomasPreBasis(const GridView &gv)\n+Constructor for a given grid view object.\n+Definition: raviartthomasbasis.hh:209\n+Dune::Functions::RaviartThomasPreBasis::size_type\n+std::size_t size_type\n+Definition: raviartthomasbasis.hh:200\n+Dune::Functions::RaviartThomasPreBasis::gridView\n const GridView & gridView() const\n Obtain the grid view that the basis is defined on.\n-Definition: transformedindexbasis.hh:92\n-Dune::Functions::Experimental::TransformedIndexPreBasis::size\n-size_type size(const SizePrefix &prefix) const\n-Return number of possible values for next position in multi index.\n-Definition: transformedindexbasis.hh:126\n-Dune::Functions::Experimental::TransformedIndexPreBasis::RawPreBasis\n-RPB RawPreBasis\n-Definition: transformedindexbasis.hh:59\n-Dune::Functions::Experimental::TransformedIndexPreBasis::size\n-size_type size() const\n-Same as size(prefix) with empty prefix.\n-Definition: transformedindexbasis.hh:119\n-Dune::Functions::Experimental::TransformedIndexPreBasis::maxNodeSize\n-size_type maxNodeSize() const\n-Get the maximal number of DOFs associated to node for any element.\n-Definition: transformedindexbasis.hh:138\n-Dune::Functions::Experimental::TransformedIndexPreBasis::size_type\n-std::size_t size_type\n-Type used for indices and size information.\n-Definition: transformedindexbasis.hh:65\n-Dune::Functions::Experimental::TransformedIndexPreBasis::multiIndexBufferSize\n+Definition: raviartthomasbasis.hh:236\n+Dune::Functions::RaviartThomasPreBasis::indices\n+It indices(const Node &node, It it) const\n+Maps from subtree index set [0..size-1] to a globally unique multi index in\n+global basis.\n+Definition: raviartthomasbasis.hh:294\n+Dune::Functions::RaviartThomasPreBasis::multiIndexBufferSize\n static constexpr size_type multiIndexBufferSize\n-Definition: transformedindexbasis.hh:72\n-Dune::Functions::Experimental::TransformedIndexPreBasis::dimension\n+Definition: raviartthomasbasis.hh:206\n+Dune::Functions::RaviartThomasPreBasis::finiteElementMap_\n+FiniteElementMap finiteElementMap_\n+Definition: raviartthomasbasis.hh:324\n+Dune::Functions::RaviartThomasPreBasis::size\n+size_type size() const\n+Definition: raviartthomasbasis.hh:255\n+Dune::Functions::RaviartThomasPreBasis::dimension\n size_type dimension() const\n-Get the total dimension of the space spanned by this basis.\n-Definition: transformedindexbasis.hh:132\n-Dune::Functions::Experimental::TransformedIndexPreBasis::rawPreBasis\n-const RawPreBasis & rawPreBasis() const\n-Definition: transformedindexbasis.hh:143\n-Dune::Functions::Experimental::TransformedIndexPreBasis::minMultiIndexSize\n-static constexpr size_type minMultiIndexSize\n-Definition: transformedindexbasis.hh:71\n-Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation\n-A generic implementation of a transformation.\n-Definition: transformedindexbasis.hh:232\n-Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation::\n-dimension\n-auto dimension(const PreBasis &preBasis) const\n-Definition: transformedindexbasis.hh:257\n-Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation::\n-GenericIndexingTransformation\n-GenericIndexingTransformation(IT_R &&indexTransformation, SI_R\n-&&sizeImplementation)\n-Definition: transformedindexbasis.hh:239\n-Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation::\n-transformIndex\n-void transformIndex(MultiIndex &multiIndex, const PreBasis &preBasis) const\n-Definition: transformedindexbasis.hh:245\n-Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation::\n-maxIndexSize\n-static constexpr std::size_t maxIndexSize\n-Definition: transformedindexbasis.hh:236\n-Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation::\n-minIndexSize\n-static constexpr std::size_t minIndexSize\n-Definition: transformedindexbasis.hh:235\n-Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation::\n-size\n-auto size(const Prefix &prefix, const PreBasis &preBasis) const\n-Definition: transformedindexbasis.hh:251\n-concepts.hh\n+Definition: raviartthomasbasis.hh:269\n+Dune::Functions::RaviartThomasPreBasis::GridView\n+GV GridView\n+The grid view that the FE space is defined on.\n+Definition: raviartthomasbasis.hh:199\n+Dune::Functions::RaviartThomasPreBasis::maxNodeSize\n+size_type maxNodeSize() const\n+Definition: raviartthomasbasis.hh:274\n+Dune::Functions::RaviartThomasPreBasis::gridView_\n+GridView gridView_\n+Definition: raviartthomasbasis.hh:322\n+Dune::Functions::RaviartThomasPreBasis::size\n+size_type size(const SizePrefix &prefix) const\n+Return number possible values for next position in multi index.\n+Definition: raviartthomasbasis.hh:262\n+Dune::Functions::RaviartThomasPreBasis::initializeIndices\n+void initializeIndices()\n+Definition: raviartthomasbasis.hh:228\n+Dune::Functions::RaviartThomasPreBasis::codimOffset_\n+std::array< size_t, dim+1 > codimOffset_\n+Definition: raviartthomasbasis.hh:323\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00164.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00164.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: hierarchicnodetorangemap.hh File Reference</title>\n+<title>dune-functions: transformedindexbasis.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -64,38 +64,72 @@\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n-<a href=\"#namespaces\">Namespaces</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">hierarchicnodetorangemap.hh File Reference</div></div>\n+<a href=\"#namespaces\">Namespaces</a> |\n+<a href=\"#func-members\">Functions</a> </div>\n+ <div class=\"headertitle\"><div class=\"title\">transformedindexbasis.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <utility></code><br />\n-<code>#include <type_traits></code><br />\n-<code>#include <dune/common/concept.hh></code><br />\n+<div class=\"textblock\"><code>#include <tuple></code><br />\n+<code>#include <utility></code><br />\n+<code>#include <dune/common/std/apply.hh></code><br />\n+<code>#include <dune/common/hybridutilities.hh></code><br />\n+<code>#include <dune/common/reservedvector.hh></code><br />\n+<code>#include <dune/common/typeutilities.hh></code><br />\n+<code>#include <dune/typetree/compositenode.hh></code><br />\n+<code>#include <dune/typetree/utility.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00056_source.html\">dune/functions/common/staticforloop.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00029_source.html\">dune/functions/common/type_traits.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00041_source.html\">dune/functions/common/utility.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00158_source.html\">dune/functions/functionspacebases/basistags.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00179_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code><br />\n <code>#include <<a class=\"el\" href=\"a02876_source.html\">dune/functions/functionspacebases/concepts.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00041_source.html\">dune/functions/common/indexaccess.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00152_source.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></code><br />\n </div>\n <p><a href=\"a00164_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01627.html\">Dune::Functions::HierarchicNodeToRangeMap</a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A simple node to range map using the nested tree indices. <a href=\"a01627.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01827.html\">Dune::Functions::Experimental::TransformedIndexPreBasis< RPB, T ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A pre-basis transforming multi-indices. <a href=\"a01827.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01831.html\">Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation< IndexTransformation, SizeImplementation, minIS, maxIS ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A generic implementation of a transformation. <a href=\"a01831.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a00229\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00229.html\">Dune::Functions::Experimental</a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a00224\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00224.html\">Dune::Functions::BasisFactory</a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a00227\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00227.html\">Dune::Functions::BasisFactory::Experimental</a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+</table><table class=\"memberdecls\">\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n+Functions</h2></td></tr>\n+<tr class=\"memitem:a97702eea52e7ff7d9e66226034aee386\"><td class=\"memTemplParams\" colspan=\"2\">template<class RPB , class T > </td></tr>\n+<tr class=\"memitem:a97702eea52e7ff7d9e66226034aee386\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\"> </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00229.html#a97702eea52e7ff7d9e66226034aee386\">Dune::Functions::Experimental::TransformedIndexPreBasis</a> (RPB &&, T &&) -> TransformedIndexPreBasis< std::decay_t< RPB >, std::decay_t< T > ></td></tr>\n+<tr class=\"separator:a97702eea52e7ff7d9e66226034aee386\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a6b531a5d076e13881c59b75e505e808e\"><td class=\"memTemplParams\" colspan=\"2\">template<class RawPreBasisFactory , class Transformation > </td></tr>\n+<tr class=\"memitem:a6b531a5d076e13881c59b75e505e808e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00227.html#a6b531a5d076e13881c59b75e505e808e\">Dune::Functions::BasisFactory::Experimental::transformIndices</a> (RawPreBasisFactory &&preBasisFactory, Transformation &&transformation)</td></tr>\n+<tr class=\"memdesc:a6b531a5d076e13881c59b75e505e808e\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a TransformedIndexPreBasisFactory. <a href=\"a00227.html#a6b531a5d076e13881c59b75e505e808e\">More...</a><br /></td></tr>\n+<tr class=\"separator:a6b531a5d076e13881c59b75e505e808e\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:af76509ea5d22293cf990c33c3306992f\"><td class=\"memTemplParams\" colspan=\"2\">template<class IndexTransformation , class SizeImplementation , std::size_t minIndexSize, std::size_t maxIndexSize> </td></tr>\n+<tr class=\"memitem:af76509ea5d22293cf990c33c3306992f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00227.html#af76509ea5d22293cf990c33c3306992f\">Dune::Functions::BasisFactory::Experimental::indexTransformation</a> (IndexTransformation &&indexTransformation, SizeImplementation &&sizeImplementation, Dune::index_constant< minIndexSize >, Dune::index_constant< maxIndexSize >)</td></tr>\n+<tr class=\"memdesc:af76509ea5d22293cf990c33c3306992f\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A generic implementation of a transformation. <a href=\"a00227.html#af76509ea5d22293cf990c33c3306992f\">More...</a><br /></td></tr>\n+<tr class=\"separator:af76509ea5d22293cf990c33c3306992f\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,27 +5,66 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-Classes | Namespaces\n-hierarchicnodetorangemap.hh File Reference\n+Classes | Namespaces | Functions\n+transformedindexbasis.hh File Reference\n+#include <tuple>\n #include <utility>\n-#include <type_traits>\n-#include <dune/common/concept.hh>\n+#include <dune/common/std/apply.hh>\n+#include <dune/common/hybridutilities.hh>\n+#include <dune/common/reservedvector.hh>\n+#include <dune/common/typeutilities.hh>\n+#include <dune/typetree/compositenode.hh>\n+#include <dune/typetree/utility.hh>\n+#include <dune/functions/common/staticforloop.hh>\n+#include <dune/functions/common/type_traits.hh>\n+#include <dune/functions/common/utility.hh>\n+#include <dune/functions/functionspacebases/basistags.hh>\n+#include <dune/functions/functionspacebases/nodes.hh>\n #include <dune/functions/functionspacebases/concepts.hh>\n-#include <dune/functions/common/indexaccess.hh>\n+#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-struct \u00a0Dune::Functions::HierarchicNodeToRangeMap\n-\u00a0 A simple node to range map using the nested tree indices. More...\n+class \u00a0Dune::Functions::Experimental::TransformedIndexPreBasis<_RPB,_T_>\n+\u00a0 A pre-basis transforming multi-indices. More...\n+\u00a0\n+class \u00a0Dune::Functions::BasisFactory::Experimental::\n+ GenericIndexingTransformation<_IndexTransformation,_SizeImplementation,\n+ minIS,_maxIS_>\n+\u00a0 A generic implementation of a transformation. More...\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n+namespace \u00a0Dune::Functions::Experimental\n+\u00a0\n+namespace \u00a0Dune::Functions::BasisFactory\n+\u00a0\n+namespace \u00a0Dune::Functions::BasisFactory::Experimental\n+\u00a0\n+ Functions\n+template<class RPB , class T >\n+ \u00a0Dune::Functions::Experimental::TransformedIndexPreBasis (RPB &&, T &&) -\n+ > TransformedIndexPreBasis< std::decay_t< RPB >, std::decay_t< T > >\n+\u00a0\n+template<class RawPreBasisFactory , class Transformation >\n+auto\u00a0Dune::Functions::BasisFactory::Experimental::transformIndices\n+ (RawPreBasisFactory &&preBasisFactory, Transformation &&transformation)\n+\u00a0 Create a TransformedIndexPreBasisFactory. More...\n+\u00a0\n+template<class IndexTransformation , class SizeImplementation , std::size_t\n+minIndexSize, std::size_t maxIndexSize>\n+auto\u00a0Dune::Functions::BasisFactory::Experimental::indexTransformation\n+ (IndexTransformation &&indexTransformation, SizeImplementation\n+ &&sizeImplementation, Dune::index_constant< minIndexSize >, Dune::\n+ index_constant< maxIndexSize >)\n+\u00a0 A generic implementation of a transformation. More...\n+\u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00164_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00164_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: hierarchicnodetorangemap.hh Source File</title>\n+<title>dune-functions: transformedindexbasis.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,66 +62,274 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">hierarchicnodetorangemap.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">transformedindexbasis.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00164.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span> </div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <tuple></span></div>\n <div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <utility></span></div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <type_traits></span></div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/concept.hh></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a02876.html\">dune/functions/functionspacebases/concepts.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00041.html\">dune/functions/common/indexaccess.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/common/std/apply.hh></span></div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/hybridutilities.hh></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/common/reservedvector.hh></span></div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <dune/common/typeutilities.hh></span></div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <dune/common/hybridutilities.hh></span></div>\n <div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <dune/typetree/compositenode.hh></span></div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"preprocessor\">#include <dune/typetree/utility.hh></span></div>\n <div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01627.html\"> 29</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01627.html\">HierarchicNodeToRangeMap</a></div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span>{</div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>Node, <span class=\"keyword\">class </span>TreePath, <span class=\"keyword\">class </span>Range,</div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> std::enable_if_t< models<Concept::HasIndexAccess, Range, Dune::index_constant<0>>(), <span class=\"keywordtype\">int</span>> = 0></div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01627.html#a6bcd58a4ffb8c3d2ed7fb0a8e17f1e5a\"> 33</a></span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <a class=\"code hl_function\" href=\"a01627.html#a6bcd58a4ffb8c3d2ed7fb0a8e17f1e5a\">operator()</a>(<span class=\"keyword\">const</span> Node&, <span class=\"keyword\">const</span> TreePath& treePath, Range&& y)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00215.html#ga4cc6af2842348271c242c048e0411637\">resolveStaticMultiIndex</a>(y, treePath);</div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> }</div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> </div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>Node, <span class=\"keyword\">class </span>TreePath, <span class=\"keyword\">class </span>Range,</div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> std::enable_if_t<not models<Concept::HasIndexAccess, Range, Dune::index_constant<0>>(), <span class=\"keywordtype\">int</span>> = 0></div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01627.html#a7122457e9d3aad7c63a2184012f26566\"> 40</a></span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <a class=\"code hl_function\" href=\"a01627.html#a7122457e9d3aad7c63a2184012f26566\">operator()</a>(<span class=\"keyword\">const</span> Node&, <span class=\"keyword\">const</span> TreePath&, Range&& y)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> <span class=\"keywordflow\">return</span> std::forward<Range>(y);</div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> }</div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span>};</div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> </div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> </div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span>} <span class=\"comment\">// namespace Dune::Functions</span></div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span>} <span class=\"comment\">// namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> </div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> </div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH</span></div>\n-<div class=\"ttc\" id=\"aa00041_html\"><div class=\"ttname\"><a href=\"a00041.html\">indexaccess.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00215_html_ga4cc6af2842348271c242c048e0411637\"><div class=\"ttname\"><a href=\"a00215.html#ga4cc6af2842348271c242c048e0411637\">Dune::Functions::resolveStaticMultiIndex</a></div><div class=\"ttdeci\">constexpr decltype(auto) resolveStaticMultiIndex(C &&c, const MultiIndex &multiIndex)</div><div class=\"ttdoc\">Provide multi-index access by chaining operator[].</div><div class=\"ttdef\"><b>Definition:</b> indexaccess.hh:398</div></div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00056.html\">dune/functions/common/staticforloop.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00029.html\">dune/functions/common/type_traits.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00041.html\">dune/functions/common/utility.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00158.html\">dune/functions/functionspacebases/basistags.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00179.html\">dune/functions/functionspacebases/nodes.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a02876.html\">dune/functions/functionspacebases/concepts.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00152.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> </div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> </div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00229.html\"> 29</a></span><span class=\"keyword\">namespace </span>Experimental {</div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> </div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> </div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> RPB, <span class=\"keyword\">class</span> T></div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html\"> 51</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01827.html\">TransformedIndexPreBasis</a></div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span>{</div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> <span class=\"keyword\">using </span>Transformation = T;</div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> </div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01827.html\">This</a> = <a class=\"code hl_class\" href=\"a01827.html\">TransformedIndexPreBasis<RPB, T></a>;</div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> </div>\n+<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> </div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a64aa0bf3453d3f749622b7ea521715ae\"> 59</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01827.html#a64aa0bf3453d3f749622b7ea521715ae\">RawPreBasis</a> = RPB;</div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> </div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a218ba207b64f73e09b2018d951f2dd54\"> 62</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01827.html#a218ba207b64f73e09b2018d951f2dd54\">GridView</a> = <span class=\"keyword\">typename</span> RawPreBasis::GridView;</div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> </div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a9468d7e0817593e6b0e52b9b33f2a7ce\"> 65</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01827.html#a9468d7e0817593e6b0e52b9b33f2a7ce\">size_type</a> = std::size_t;</div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> </div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a3eec8056dfb98fa13397be1f6c3c5f61\"> 68</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01827.html#a3eec8056dfb98fa13397be1f6c3c5f61\">Node</a> = <span class=\"keyword\">typename</span> RawPreBasis::Node;</div>\n+<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> </div>\n+<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a474968659bf3b30d623d6baceaceafac\"> 70</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01827.html#a9468d7e0817593e6b0e52b9b33f2a7ce\">size_type</a> <a class=\"code hl_variable\" href=\"a01827.html#a474968659bf3b30d623d6baceaceafac\">maxMultiIndexSize</a> = Transformation::maxIndexSize;</div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#ae4b2655926fabb0a127584a701446958\"> 71</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01827.html#a9468d7e0817593e6b0e52b9b33f2a7ce\">size_type</a> <a class=\"code hl_variable\" href=\"a01827.html#ae4b2655926fabb0a127584a701446958\">minMultiIndexSize</a> = Transformation::minIndexSize;</div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#aa46fd3cb45543bee69dfd60429254ba4\"> 72</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01827.html#a9468d7e0817593e6b0e52b9b33f2a7ce\">size_type</a> <a class=\"code hl_variable\" href=\"a01827.html#aa46fd3cb45543bee69dfd60429254ba4\">multiIndexBufferSize</a> = std::max(RawPreBasis::multiIndexBufferSize, <a class=\"code hl_variable\" href=\"a01827.html#a474968659bf3b30d623d6baceaceafac\">maxMultiIndexSize</a>);</div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> </div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> RPB_R, <span class=\"keyword\">class</span> T_R></div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a415716e3d0436f2e9c44992ee79f6133\"> 80</a></span> <a class=\"code hl_function\" href=\"a01827.html#a415716e3d0436f2e9c44992ee79f6133\">TransformedIndexPreBasis</a>(RPB_R&& <a class=\"code hl_function\" href=\"a01827.html#ae05f9b7e9586b30e88d78c42737e4971\">rawPreBasis</a>, T_R&& transformation) :</div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> <a class=\"code hl_variable\" href=\"a01827.html#a363ac0b99c5fdbc380f259234ab757e2\">rawPreBasis_</a>(std::forward<RPB_R>(<a class=\"code hl_function\" href=\"a01827.html#ae05f9b7e9586b30e88d78c42737e4971\">rawPreBasis</a>)),</div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> <a class=\"code hl_variable\" href=\"a01827.html#a08d7fc8b1ea9546463ae3322605f4fd9\">transformation_</a>(std::forward<T_R>(transformation))</div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> {}</div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> </div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a1392b84bf237ce8c8be2b2ec7b9869f2\"> 86</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01827.html#a1392b84bf237ce8c8be2b2ec7b9869f2\">initializeIndices</a>()</div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> {</div>\n+<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> <a class=\"code hl_variable\" href=\"a01827.html#a363ac0b99c5fdbc380f259234ab757e2\">rawPreBasis_</a>.initializeIndices();</div>\n+<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> }</div>\n+<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> </div>\n+<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a594c7901fbeee33aed41098733345691\"> 92</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01827.html#a218ba207b64f73e09b2018d951f2dd54\">GridView</a>& <a class=\"code hl_function\" href=\"a01827.html#a594c7901fbeee33aed41098733345691\">gridView</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01827.html#a363ac0b99c5fdbc380f259234ab757e2\">rawPreBasis_</a>.gridView();</div>\n+<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> }</div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> </div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a573a82c3462477edff6bdcfab358894e\"> 98</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01827.html#a573a82c3462477edff6bdcfab358894e\">update</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01827.html#a218ba207b64f73e09b2018d951f2dd54\">GridView</a>& gv)</div>\n+<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> {</div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> <a class=\"code hl_variable\" href=\"a01827.html#a363ac0b99c5fdbc380f259234ab757e2\">rawPreBasis_</a>.update(gv);</div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> }</div>\n+<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> </div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a59112faa30a2466538b2f7bdf2f3b9f9\"> 113</a></span> <a class=\"code hl_typedef\" href=\"a01827.html#a3eec8056dfb98fa13397be1f6c3c5f61\">Node</a> <a class=\"code hl_function\" href=\"a01827.html#a59112faa30a2466538b2f7bdf2f3b9f9\">makeNode</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01827.html#a363ac0b99c5fdbc380f259234ab757e2\">rawPreBasis_</a>.makeNode();</div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> }</div>\n+<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> </div>\n+<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a683d388cba68feafc350d23c8078666b\"> 119</a></span> <a class=\"code hl_typedef\" href=\"a01827.html#a9468d7e0817593e6b0e52b9b33f2a7ce\">size_type</a> <a class=\"code hl_function\" href=\"a01827.html#a683d388cba68feafc350d23c8078666b\">size</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01827.html#a683d388cba68feafc350d23c8078666b\">size</a>(Dune::ReservedVector<size_type, multiIndexBufferSize>{});</div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> }</div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> </div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a60c39a7fbdc2f97ea2ca609523c917ad\"> 126</a></span> <a class=\"code hl_typedef\" href=\"a01827.html#a9468d7e0817593e6b0e52b9b33f2a7ce\">size_type</a> <a class=\"code hl_function\" href=\"a01827.html#a60c39a7fbdc2f97ea2ca609523c917ad\">size</a>(<span class=\"keyword\">const</span> SizePrefix& prefix)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01827.html#a08d7fc8b1ea9546463ae3322605f4fd9\">transformation_</a>.size(prefix, <a class=\"code hl_variable\" href=\"a01827.html#a363ac0b99c5fdbc380f259234ab757e2\">rawPreBasis_</a>);</div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> }</div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> </div>\n+<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#acb52b5e4d4d4b17e8bcabaa224e3e098\"> 132</a></span> <a class=\"code hl_typedef\" href=\"a01827.html#a9468d7e0817593e6b0e52b9b33f2a7ce\">size_type</a> <a class=\"code hl_function\" href=\"a01827.html#acb52b5e4d4d4b17e8bcabaa224e3e098\">dimension</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01827.html#a08d7fc8b1ea9546463ae3322605f4fd9\">transformation_</a>.dimension(<a class=\"code hl_variable\" href=\"a01827.html#a363ac0b99c5fdbc380f259234ab757e2\">rawPreBasis_</a>);</div>\n+<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> }</div>\n+<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> </div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a8120d9942ea893adcb6a1cb1e39634ae\"> 138</a></span> <a class=\"code hl_typedef\" href=\"a01827.html#a9468d7e0817593e6b0e52b9b33f2a7ce\">size_type</a> <a class=\"code hl_function\" href=\"a01827.html#a8120d9942ea893adcb6a1cb1e39634ae\">maxNodeSize</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01827.html#a363ac0b99c5fdbc380f259234ab757e2\">rawPreBasis_</a>.maxNodeSize();</div>\n+<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> }</div>\n+<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> </div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#ae05f9b7e9586b30e88d78c42737e4971\"> 143</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01827.html#a64aa0bf3453d3f749622b7ea521715ae\">RawPreBasis</a>& <a class=\"code hl_function\" href=\"a01827.html#ae05f9b7e9586b30e88d78c42737e4971\">rawPreBasis</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01827.html#a363ac0b99c5fdbc380f259234ab757e2\">rawPreBasis_</a>;</div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> }</div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> </div>\n+<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a44184e98f04f793b05c9c0bac7d0b2f7\"> 148</a></span> <a class=\"code hl_typedef\" href=\"a01827.html#a64aa0bf3453d3f749622b7ea521715ae\">RawPreBasis</a>& <a class=\"code hl_function\" href=\"a01827.html#a44184e98f04f793b05c9c0bac7d0b2f7\">rawPreBasis</a>()</div>\n+<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> {</div>\n+<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01827.html#a363ac0b99c5fdbc380f259234ab757e2\">rawPreBasis_</a>;</div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> }</div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> </div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> MultiIndex></div>\n+<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a2be4ef5cda338039c85cd40553ff0b82\"> 154</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01827.html#a2be4ef5cda338039c85cd40553ff0b82\">transformIndex</a>(MultiIndex& multiIndex)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> <a class=\"code hl_variable\" href=\"a01827.html#a08d7fc8b1ea9546463ae3322605f4fd9\">transformation_</a>.transformIndex(multiIndex, <a class=\"code hl_variable\" href=\"a01827.html#a363ac0b99c5fdbc380f259234ab757e2\">rawPreBasis_</a>);</div>\n+<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> }</div>\n+<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> </div>\n+<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n+<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a03c263627a93eb69efb8bd129ddebbe6\"> 160</a></span> It <a class=\"code hl_function\" href=\"a01827.html#a03c263627a93eb69efb8bd129ddebbe6\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01827.html#a3eec8056dfb98fa13397be1f6c3c5f61\">Node</a>& node, It it)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> <a class=\"code hl_function\" href=\"a01827.html#ae05f9b7e9586b30e88d78c42737e4971\">rawPreBasis</a>().indices(node, it);</div>\n+<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> <span class=\"keywordflow\">for</span>(std::size_t i=0; i<node.size(); ++i)</div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> {</div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> <a class=\"code hl_function\" href=\"a01827.html#a2be4ef5cda338039c85cd40553ff0b82\">transformIndex</a>(*it);</div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> ++it;</div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> }</div>\n+<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> <span class=\"keywordflow\">return</span> it;</div>\n+<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> }</div>\n+<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> </div>\n+<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span><span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a363ac0b99c5fdbc380f259234ab757e2\"> 172</a></span> <a class=\"code hl_typedef\" href=\"a01827.html#a64aa0bf3453d3f749622b7ea521715ae\">RawPreBasis</a> <a class=\"code hl_variable\" href=\"a01827.html#a363ac0b99c5fdbc380f259234ab757e2\">rawPreBasis_</a>;</div>\n+<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01827.html#a08d7fc8b1ea9546463ae3322605f4fd9\"> 173</a></span> Transformation <a class=\"code hl_variable\" href=\"a01827.html#a08d7fc8b1ea9546463ae3322605f4fd9\">transformation_</a>;</div>\n+<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span>};</div>\n+<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> </div>\n+<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> RPB, <span class=\"keyword\">class</span> T></div>\n+<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00229.html#a97702eea52e7ff7d9e66226034aee386\"> 177</a></span><a class=\"code hl_function\" href=\"a00229.html#a97702eea52e7ff7d9e66226034aee386\">TransformedIndexPreBasis</a>(RPB&&, T&&) -> <a class=\"code hl_class\" href=\"a01827.html\">TransformedIndexPreBasis<std::decay_t<RPB></a>, std::decay_t<T>>;</div>\n+<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> </div>\n+<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> </div>\n+<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span>} <span class=\"comment\">// end namespace Experimental</span></div>\n+<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> </div>\n+<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> </div>\n+<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span><span class=\"keyword\">namespace </span>BasisFactory {</div>\n+<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span><span class=\"keyword\">namespace </span>Experimental {</div>\n+<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> </div>\n+<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> RawPreBasisFactory, <span class=\"keyword\">class</span> Transformation></div>\n+<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00227.html#a6b531a5d076e13881c59b75e505e808e\"> 198</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00227.html#a6b531a5d076e13881c59b75e505e808e\">transformIndices</a>(</div>\n+<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> RawPreBasisFactory&& preBasisFactory,</div>\n+<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> Transformation&& transformation)</div>\n+<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span>{</div>\n+<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> <span class=\"keywordflow\">return</span> [</div>\n+<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> preBasisFactory=std::forward<RawPreBasisFactory>(preBasisFactory),</div>\n+<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> transformation =std::forward<Transformation>(transformation)</div>\n+<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span> ](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridView) {</div>\n+<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00229.html#a97702eea52e7ff7d9e66226034aee386\">Dune::Functions::Experimental::TransformedIndexPreBasis</a>(preBasisFactory(gridView), std::move(transformation));</div>\n+<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> };</div>\n+<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span>}</div>\n+<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> </div>\n+<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> </div>\n+<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> </div>\n+<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> IndexTransformation, <span class=\"keyword\">class</span> SizeImplementation, std::<span class=\"keywordtype\">size_t</span> minIS, std::<span class=\"keywordtype\">size_t</span> maxIS></div>\n+<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01831.html\"> 231</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01831.html\">GenericIndexingTransformation</a></div>\n+<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span>{</div>\n+<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> </div>\n+<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01831.html#a8772949dfe0ebe2187cc594e2f706f9d\"> 235</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> std::size_t <a class=\"code hl_variable\" href=\"a01831.html#a8772949dfe0ebe2187cc594e2f706f9d\">minIndexSize</a> = minIS;</div>\n+<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01831.html#a826abc88d3f456e468a289a4d2dfb309\"> 236</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> std::size_t <a class=\"code hl_variable\" href=\"a01831.html#a826abc88d3f456e468a289a4d2dfb309\">maxIndexSize</a> = maxIS;</div>\n+<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span> </div>\n+<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> IT_R, <span class=\"keyword\">class</span> SI_R></div>\n+<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01831.html#a219750b8ee3e1c033ad682d97799025b\"> 239</a></span> <a class=\"code hl_function\" href=\"a01831.html#a219750b8ee3e1c033ad682d97799025b\">GenericIndexingTransformation</a>(IT_R&& <a class=\"code hl_function\" href=\"a00227.html#af76509ea5d22293cf990c33c3306992f\">indexTransformation</a>, SI_R&& sizeImplementation) :</div>\n+<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"> 240</span> indexTransformation_(std::forward<IT_R>(<a class=\"code hl_function\" href=\"a00227.html#af76509ea5d22293cf990c33c3306992f\">indexTransformation</a>)),</div>\n+<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span> sizeImplementation_(std::forward<SI_R>(sizeImplementation))</div>\n+<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span> {}</div>\n+<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> </div>\n+<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> MultiIndex, <span class=\"keyword\">class</span> PreBasis></div>\n+<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01831.html#a6023cfa399a887be2d3e61b254725e7c\"> 245</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01831.html#a6023cfa399a887be2d3e61b254725e7c\">transformIndex</a>(MultiIndex& multiIndex, <span class=\"keyword\">const</span> PreBasis& preBasis)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00247\" name=\"l00247\"></a><span class=\"lineno\"> 247</span> indexTransformation_(multiIndex, preBasis);</div>\n+<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"> 248</span> }</div>\n+<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span> </div>\n+<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Prefix, <span class=\"keyword\">class</span> PreBasis></div>\n+<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01831.html#ac46fea52b627866a38dff8e99d80944e\"> 251</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a01831.html#ac46fea52b627866a38dff8e99d80944e\">size</a>(<span class=\"keyword\">const</span> Prefix& prefix, <span class=\"keyword\">const</span> PreBasis& preBasis)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"> 253</span> <span class=\"keywordflow\">return</span> sizeImplementation_(prefix, preBasis);</div>\n+<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"> 254</span> }</div>\n+<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span> </div>\n+<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"> 256</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> PreBasis></div>\n+<div class=\"line\"><a id=\"l00257\" name=\"l00257\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01831.html#a1f53f5aa5d5136a9562e0eec99525a01\"> 257</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a01831.html#a1f53f5aa5d5136a9562e0eec99525a01\">dimension</a>(<span class=\"keyword\">const</span> PreBasis& preBasis)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00258\" name=\"l00258\"></a><span class=\"lineno\"> 258</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00259\" name=\"l00259\"></a><span class=\"lineno\"> 259</span> <span class=\"keywordflow\">return</span> preBasis.dimension();</div>\n+<div class=\"line\"><a id=\"l00260\" name=\"l00260\"></a><span class=\"lineno\"> 260</span> }</div>\n+<div class=\"line\"><a id=\"l00261\" name=\"l00261\"></a><span class=\"lineno\"> 261</span> </div>\n+<div class=\"line\"><a id=\"l00262\" name=\"l00262\"></a><span class=\"lineno\"> 262</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00263\" name=\"l00263\"></a><span class=\"lineno\"> 263</span> IndexTransformation indexTransformation_;</div>\n+<div class=\"line\"><a id=\"l00264\" name=\"l00264\"></a><span class=\"lineno\"> 264</span> SizeImplementation sizeImplementation_;</div>\n+<div class=\"line\"><a id=\"l00265\" name=\"l00265\"></a><span class=\"lineno\"> 265</span>};</div>\n+<div class=\"line\"><a id=\"l00266\" name=\"l00266\"></a><span class=\"lineno\"> 266</span> </div>\n+<div class=\"line\"><a id=\"l00267\" name=\"l00267\"></a><span class=\"lineno\"> 267</span> </div>\n+<div class=\"line\"><a id=\"l00268\" name=\"l00268\"></a><span class=\"lineno\"> 268</span> </div>\n+<div class=\"line\"><a id=\"l00287\" name=\"l00287\"></a><span class=\"lineno\"> 287</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> IndexTransformation, <span class=\"keyword\">class</span> SizeImplementation, std::<span class=\"keywordtype\">size_t</span> minIndexSize, std::<span class=\"keywordtype\">size_t</span> maxIndexSize></div>\n+<div class=\"line\"><a id=\"l00288\" name=\"l00288\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00227.html#af76509ea5d22293cf990c33c3306992f\"> 288</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00227.html#af76509ea5d22293cf990c33c3306992f\">indexTransformation</a>(IndexTransformation&& <a class=\"code hl_function\" href=\"a00227.html#af76509ea5d22293cf990c33c3306992f\">indexTransformation</a>, SizeImplementation&& sizeImplementation, Dune::index_constant<minIndexSize>, Dune::index_constant<maxIndexSize>)</div>\n+<div class=\"line\"><a id=\"l00289\" name=\"l00289\"></a><span class=\"lineno\"> 289</span>{</div>\n+<div class=\"line\"><a id=\"l00290\" name=\"l00290\"></a><span class=\"lineno\"> 290</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01831.html\">GenericIndexingTransformation</a><</div>\n+<div class=\"line\"><a id=\"l00291\" name=\"l00291\"></a><span class=\"lineno\"> 291</span> std::decay_t<IndexTransformation>,</div>\n+<div class=\"line\"><a id=\"l00292\" name=\"l00292\"></a><span class=\"lineno\"> 292</span> std::decay_t<SizeImplementation>,</div>\n+<div class=\"line\"><a id=\"l00293\" name=\"l00293\"></a><span class=\"lineno\"> 293</span> minIndexSize, maxIndexSize>(</div>\n+<div class=\"line\"><a id=\"l00294\" name=\"l00294\"></a><span class=\"lineno\"> 294</span> std::forward<IndexTransformation>(<a class=\"code hl_function\" href=\"a00227.html#af76509ea5d22293cf990c33c3306992f\">indexTransformation</a>),</div>\n+<div class=\"line\"><a id=\"l00295\" name=\"l00295\"></a><span class=\"lineno\"> 295</span> std::forward<SizeImplementation>(sizeImplementation));</div>\n+<div class=\"line\"><a id=\"l00296\" name=\"l00296\"></a><span class=\"lineno\"> 296</span>}</div>\n+<div class=\"line\"><a id=\"l00297\" name=\"l00297\"></a><span class=\"lineno\"> 297</span> </div>\n+<div class=\"line\"><a id=\"l00298\" name=\"l00298\"></a><span class=\"lineno\"> 298</span> </div>\n+<div class=\"line\"><a id=\"l00299\" name=\"l00299\"></a><span class=\"lineno\"> 299</span>} <span class=\"comment\">// end namespace Experimental</span></div>\n+<div class=\"line\"><a id=\"l00300\" name=\"l00300\"></a><span class=\"lineno\"> 300</span>} <span class=\"comment\">// end namespace BasisFactory</span></div>\n+<div class=\"line\"><a id=\"l00301\" name=\"l00301\"></a><span class=\"lineno\"> 301</span>} <span class=\"comment\">// end namespace Functions</span></div>\n+<div class=\"line\"><a id=\"l00302\" name=\"l00302\"></a><span class=\"lineno\"> 302</span>} <span class=\"comment\">// end namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00303\" name=\"l00303\"></a><span class=\"lineno\"> 303</span> </div>\n+<div class=\"line\"><a id=\"l00304\" name=\"l00304\"></a><span class=\"lineno\"> 304</span> </div>\n+<div class=\"line\"><a id=\"l00305\" name=\"l00305\"></a><span class=\"lineno\"> 305</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH</span></div>\n+<div class=\"ttc\" id=\"aa00029_html\"><div class=\"ttname\"><a href=\"a00029.html\">type_traits.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00041_html\"><div class=\"ttname\"><a href=\"a00041.html\">utility.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00056_html\"><div class=\"ttname\"><a href=\"a00056.html\">staticforloop.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00152_html\"><div class=\"ttname\"><a href=\"a00152.html\">defaultglobalbasis.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00158_html\"><div class=\"ttname\"><a href=\"a00158.html\">basistags.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00179_html\"><div class=\"ttname\"><a href=\"a00179.html\">nodes.hh</a></div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa01627_html\"><div class=\"ttname\"><a href=\"a01627.html\">Dune::Functions::HierarchicNodeToRangeMap</a></div><div class=\"ttdoc\">A simple node to range map using the nested tree indices.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicnodetorangemap.hh:30</div></div>\n-<div class=\"ttc\" id=\"aa01627_html_a6bcd58a4ffb8c3d2ed7fb0a8e17f1e5a\"><div class=\"ttname\"><a href=\"a01627.html#a6bcd58a4ffb8c3d2ed7fb0a8e17f1e5a\">Dune::Functions::HierarchicNodeToRangeMap::operator()</a></div><div class=\"ttdeci\">decltype(auto) operator()(const Node &, const TreePath &treePath, Range &&y) const</div><div class=\"ttdef\"><b>Definition:</b> hierarchicnodetorangemap.hh:33</div></div>\n-<div class=\"ttc\" id=\"aa01627_html_a7122457e9d3aad7c63a2184012f26566\"><div class=\"ttname\"><a href=\"a01627.html#a7122457e9d3aad7c63a2184012f26566\">Dune::Functions::HierarchicNodeToRangeMap::operator()</a></div><div class=\"ttdeci\">decltype(auto) operator()(const Node &, const TreePath &, Range &&y) const</div><div class=\"ttdef\"><b>Definition:</b> hierarchicnodetorangemap.hh:40</div></div>\n+<div class=\"ttc\" id=\"aa00227_html_a6b531a5d076e13881c59b75e505e808e\"><div class=\"ttname\"><a href=\"a00227.html#a6b531a5d076e13881c59b75e505e808e\">Dune::Functions::BasisFactory::Experimental::transformIndices</a></div><div class=\"ttdeci\">auto transformIndices(RawPreBasisFactory &&preBasisFactory, Transformation &&transformation)</div><div class=\"ttdoc\">Create a TransformedIndexPreBasisFactory.</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:198</div></div>\n+<div class=\"ttc\" id=\"aa00227_html_af76509ea5d22293cf990c33c3306992f\"><div class=\"ttname\"><a href=\"a00227.html#af76509ea5d22293cf990c33c3306992f\">Dune::Functions::BasisFactory::Experimental::indexTransformation</a></div><div class=\"ttdeci\">auto indexTransformation(IndexTransformation &&indexTransformation, SizeImplementation &&sizeImplementation, Dune::index_constant< minIndexSize >, Dune::index_constant< maxIndexSize >)</div><div class=\"ttdoc\">A generic implementation of a transformation.</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:288</div></div>\n+<div class=\"ttc\" id=\"aa00229_html_a97702eea52e7ff7d9e66226034aee386\"><div class=\"ttname\"><a href=\"a00229.html#a97702eea52e7ff7d9e66226034aee386\">Dune::Functions::Experimental::TransformedIndexPreBasis</a></div><div class=\"ttdeci\">TransformedIndexPreBasis(RPB &&, T &&) -> TransformedIndexPreBasis< std::decay_t< RPB >, std::decay_t< T > ></div></div>\n+<div class=\"ttc\" id=\"aa01827_html\"><div class=\"ttname\"><a href=\"a01827.html\">Dune::Functions::Experimental::TransformedIndexPreBasis</a></div><div class=\"ttdoc\">A pre-basis transforming multi-indices.</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:52</div></div>\n+<div class=\"ttc\" id=\"aa01827_html_a03c263627a93eb69efb8bd129ddebbe6\"><div class=\"ttname\"><a href=\"a01827.html#a03c263627a93eb69efb8bd129ddebbe6\">Dune::Functions::Experimental::TransformedIndexPreBasis::indices</a></div><div class=\"ttdeci\">It indices(const Node &node, It it) const</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:160</div></div>\n+<div class=\"ttc\" id=\"aa01827_html_a08d7fc8b1ea9546463ae3322605f4fd9\"><div class=\"ttname\"><a href=\"a01827.html#a08d7fc8b1ea9546463ae3322605f4fd9\">Dune::Functions::Experimental::TransformedIndexPreBasis::transformation_</a></div><div class=\"ttdeci\">Transformation transformation_</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:173</div></div>\n+<div class=\"ttc\" id=\"aa01827_html_a1392b84bf237ce8c8be2b2ec7b9869f2\"><div class=\"ttname\"><a href=\"a01827.html#a1392b84bf237ce8c8be2b2ec7b9869f2\">Dune::Functions::Experimental::TransformedIndexPreBasis::initializeIndices</a></div><div class=\"ttdeci\">void initializeIndices()</div><div class=\"ttdoc\">Initialize the global indices.</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:86</div></div>\n+<div class=\"ttc\" id=\"aa01827_html_a218ba207b64f73e09b2018d951f2dd54\"><div class=\"ttname\"><a href=\"a01827.html#a218ba207b64f73e09b2018d951f2dd54\">Dune::Functions::Experimental::TransformedIndexPreBasis::GridView</a></div><div class=\"ttdeci\">typename RawPreBasis::GridView GridView</div><div class=\"ttdoc\">The grid view that the FE basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:62</div></div>\n+<div class=\"ttc\" id=\"aa01827_html_a2be4ef5cda338039c85cd40553ff0b82\"><div class=\"ttname\"><a href=\"a01827.html#a2be4ef5cda338039c85cd40553ff0b82\">Dune::Functions::Experimental::TransformedIndexPreBasis::transformIndex</a></div><div class=\"ttdeci\">void transformIndex(MultiIndex &multiIndex) const</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:154</div></div>\n+<div class=\"ttc\" id=\"aa01827_html_a363ac0b99c5fdbc380f259234ab757e2\"><div class=\"ttname\"><a href=\"a01827.html#a363ac0b99c5fdbc380f259234ab757e2\">Dune::Functions::Experimental::TransformedIndexPreBasis::rawPreBasis_</a></div><div class=\"ttdeci\">RawPreBasis rawPreBasis_</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:172</div></div>\n+<div class=\"ttc\" id=\"aa01827_html_a3eec8056dfb98fa13397be1f6c3c5f61\"><div class=\"ttname\"><a href=\"a01827.html#a3eec8056dfb98fa13397be1f6c3c5f61\">Dune::Functions::Experimental::TransformedIndexPreBasis::Node</a></div><div class=\"ttdeci\">typename RawPreBasis::Node Node</div><div class=\"ttdoc\">Template mapping root tree path to type of created tree node.</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:68</div></div>\n+<div class=\"ttc\" id=\"aa01827_html_a415716e3d0436f2e9c44992ee79f6133\"><div class=\"ttname\"><a href=\"a01827.html#a415716e3d0436f2e9c44992ee79f6133\">Dune::Functions::Experimental::TransformedIndexPreBasis::TransformedIndexPreBasis</a></div><div class=\"ttdeci\">TransformedIndexPreBasis(RPB_R &&rawPreBasis, T_R &&transformation)</div><div class=\"ttdoc\">Constructor for given child pre-basis objects.</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:80</div></div>\n+<div class=\"ttc\" id=\"aa01827_html_a44184e98f04f793b05c9c0bac7d0b2f7\"><div class=\"ttname\"><a href=\"a01827.html#a44184e98f04f793b05c9c0bac7d0b2f7\">Dune::Functions::Experimental::TransformedIndexPreBasis::rawPreBasis</a></div><div class=\"ttdeci\">RawPreBasis & rawPreBasis()</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:148</div></div>\n+<div class=\"ttc\" id=\"aa01827_html_a474968659bf3b30d623d6baceaceafac\"><div class=\"ttname\"><a href=\"a01827.html#a474968659bf3b30d623d6baceaceafac\">Dune::Functions::Experimental::TransformedIndexPreBasis::maxMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type maxMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:70</div></div>\n+<div class=\"ttc\" id=\"aa01827_html_a573a82c3462477edff6bdcfab358894e\"><div class=\"ttname\"><a href=\"a01827.html#a573a82c3462477edff6bdcfab358894e\">Dune::Functions::Experimental::TransformedIndexPreBasis::update</a></div><div class=\"ttdeci\">void update(const GridView &gv)</div><div class=\"ttdoc\">Update the stored grid view, to be called if the grid has changed.</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:98</div></div>\n+<div class=\"ttc\" id=\"aa01827_html_a59112faa30a2466538b2f7bdf2f3b9f9\"><div class=\"ttname\"><a href=\"a01827.html#a59112faa30a2466538b2f7bdf2f3b9f9\">Dune::Functions::Experimental::TransformedIndexPreBasis::makeNode</a></div><div class=\"ttdeci\">Node makeNode() const</div><div class=\"ttdoc\">Create tree node with given root tree path.</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:113</div></div>\n+<div class=\"ttc\" id=\"aa01827_html_a594c7901fbeee33aed41098733345691\"><div class=\"ttname\"><a href=\"a01827.html#a594c7901fbeee33aed41098733345691\">Dune::Functions::Experimental::TransformedIndexPreBasis::gridView</a></div><div class=\"ttdeci\">const GridView & gridView() const</div><div class=\"ttdoc\">Obtain the grid view that the basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:92</div></div>\n+<div class=\"ttc\" id=\"aa01827_html_a60c39a7fbdc2f97ea2ca609523c917ad\"><div class=\"ttname\"><a href=\"a01827.html#a60c39a7fbdc2f97ea2ca609523c917ad\">Dune::Functions::Experimental::TransformedIndexPreBasis::size</a></div><div class=\"ttdeci\">size_type size(const SizePrefix &prefix) const</div><div class=\"ttdoc\">Return number of possible values for next position in multi index.</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:126</div></div>\n+<div class=\"ttc\" id=\"aa01827_html_a64aa0bf3453d3f749622b7ea521715ae\"><div class=\"ttname\"><a href=\"a01827.html#a64aa0bf3453d3f749622b7ea521715ae\">Dune::Functions::Experimental::TransformedIndexPreBasis::RawPreBasis</a></div><div class=\"ttdeci\">RPB RawPreBasis</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:59</div></div>\n+<div class=\"ttc\" id=\"aa01827_html_a683d388cba68feafc350d23c8078666b\"><div class=\"ttname\"><a href=\"a01827.html#a683d388cba68feafc350d23c8078666b\">Dune::Functions::Experimental::TransformedIndexPreBasis::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdoc\">Same as size(prefix) with empty prefix.</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:119</div></div>\n+<div class=\"ttc\" id=\"aa01827_html_a8120d9942ea893adcb6a1cb1e39634ae\"><div class=\"ttname\"><a href=\"a01827.html#a8120d9942ea893adcb6a1cb1e39634ae\">Dune::Functions::Experimental::TransformedIndexPreBasis::maxNodeSize</a></div><div class=\"ttdeci\">size_type maxNodeSize() const</div><div class=\"ttdoc\">Get the maximal number of DOFs associated to node for any element.</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:138</div></div>\n+<div class=\"ttc\" id=\"aa01827_html_a9468d7e0817593e6b0e52b9b33f2a7ce\"><div class=\"ttname\"><a href=\"a01827.html#a9468d7e0817593e6b0e52b9b33f2a7ce\">Dune::Functions::Experimental::TransformedIndexPreBasis::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdoc\">Type used for indices and size information.</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:65</div></div>\n+<div class=\"ttc\" id=\"aa01827_html_aa46fd3cb45543bee69dfd60429254ba4\"><div class=\"ttname\"><a href=\"a01827.html#aa46fd3cb45543bee69dfd60429254ba4\">Dune::Functions::Experimental::TransformedIndexPreBasis::multiIndexBufferSize</a></div><div class=\"ttdeci\">static constexpr size_type multiIndexBufferSize</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:72</div></div>\n+<div class=\"ttc\" id=\"aa01827_html_acb52b5e4d4d4b17e8bcabaa224e3e098\"><div class=\"ttname\"><a href=\"a01827.html#acb52b5e4d4d4b17e8bcabaa224e3e098\">Dune::Functions::Experimental::TransformedIndexPreBasis::dimension</a></div><div class=\"ttdeci\">size_type dimension() const</div><div class=\"ttdoc\">Get the total dimension of the space spanned by this basis.</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:132</div></div>\n+<div class=\"ttc\" id=\"aa01827_html_ae05f9b7e9586b30e88d78c42737e4971\"><div class=\"ttname\"><a href=\"a01827.html#ae05f9b7e9586b30e88d78c42737e4971\">Dune::Functions::Experimental::TransformedIndexPreBasis::rawPreBasis</a></div><div class=\"ttdeci\">const RawPreBasis & rawPreBasis() const</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:143</div></div>\n+<div class=\"ttc\" id=\"aa01827_html_ae4b2655926fabb0a127584a701446958\"><div class=\"ttname\"><a href=\"a01827.html#ae4b2655926fabb0a127584a701446958\">Dune::Functions::Experimental::TransformedIndexPreBasis::minMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type minMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:71</div></div>\n+<div class=\"ttc\" id=\"aa01831_html\"><div class=\"ttname\"><a href=\"a01831.html\">Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation</a></div><div class=\"ttdoc\">A generic implementation of a transformation.</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:232</div></div>\n+<div class=\"ttc\" id=\"aa01831_html_a1f53f5aa5d5136a9562e0eec99525a01\"><div class=\"ttname\"><a href=\"a01831.html#a1f53f5aa5d5136a9562e0eec99525a01\">Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation::dimension</a></div><div class=\"ttdeci\">auto dimension(const PreBasis &preBasis) const</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:257</div></div>\n+<div class=\"ttc\" id=\"aa01831_html_a219750b8ee3e1c033ad682d97799025b\"><div class=\"ttname\"><a href=\"a01831.html#a219750b8ee3e1c033ad682d97799025b\">Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation::GenericIndexingTransformation</a></div><div class=\"ttdeci\">GenericIndexingTransformation(IT_R &&indexTransformation, SI_R &&sizeImplementation)</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:239</div></div>\n+<div class=\"ttc\" id=\"aa01831_html_a6023cfa399a887be2d3e61b254725e7c\"><div class=\"ttname\"><a href=\"a01831.html#a6023cfa399a887be2d3e61b254725e7c\">Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation::transformIndex</a></div><div class=\"ttdeci\">void transformIndex(MultiIndex &multiIndex, const PreBasis &preBasis) const</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:245</div></div>\n+<div class=\"ttc\" id=\"aa01831_html_a826abc88d3f456e468a289a4d2dfb309\"><div class=\"ttname\"><a href=\"a01831.html#a826abc88d3f456e468a289a4d2dfb309\">Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation::maxIndexSize</a></div><div class=\"ttdeci\">static constexpr std::size_t maxIndexSize</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:236</div></div>\n+<div class=\"ttc\" id=\"aa01831_html_a8772949dfe0ebe2187cc594e2f706f9d\"><div class=\"ttname\"><a href=\"a01831.html#a8772949dfe0ebe2187cc594e2f706f9d\">Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation::minIndexSize</a></div><div class=\"ttdeci\">static constexpr std::size_t minIndexSize</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:235</div></div>\n+<div class=\"ttc\" id=\"aa01831_html_ac46fea52b627866a38dff8e99d80944e\"><div class=\"ttname\"><a href=\"a01831.html#ac46fea52b627866a38dff8e99d80944e\">Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation::size</a></div><div class=\"ttdeci\">auto size(const Prefix &prefix, const PreBasis &preBasis) const</div><div class=\"ttdef\"><b>Definition:</b> transformedindexbasis.hh:251</div></div>\n <div class=\"ttc\" id=\"aa02876_html\"><div class=\"ttname\"><a href=\"a02876.html\">concepts.hh</a></div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,77 +5,372 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-hierarchicnodetorangemap.hh\n+transformedindexbasis.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH\n- 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH\n+ 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH\n+ 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH\n 5\n- 6\n+ 6#include <tuple>\n 7#include <utility>\n- 8#include <type_traits>\n- 9\n- 10#include <dune/common/concept.hh>\n- 11\n- 12#include <dune/functions/functionspacebases/concepts.hh>\n- 13#include <dune/functions/common/indexaccess.hh>\n+ 8\n+ 9#include <dune/common/std/apply.hh>\n+ 10#include <dune/common/hybridutilities.hh>\n+ 11#include <dune/common/reservedvector.hh>\n+ 12#include <dune/common/typeutilities.hh>\n+ 13#include <dune/common/hybridutilities.hh>\n 14\n- 15namespace Dune {\n- 16namespace Functions {\n+ 15#include <dune/typetree/compositenode.hh>\n+ 16#include <dune/typetree/utility.hh>\n 17\n- 18\n- 19\n-29struct HierarchicNodeToRangeMap\n- 30{\n- 31 template<class Node, class TreePath, class Range,\n- 32 std::enable_if_t< models<Concept::HasIndexAccess, Range, Dune::\n-index_constant<0>>(), int> = 0>\n-33 decltype(auto) operator()(const Node&, const TreePath& treePath, Range&& y)\n-const\n- 34 {\n- 35 return resolveStaticMultiIndex(y, treePath);\n- 36 }\n- 37\n- 38 template<class Node, class TreePath, class Range,\n- 39 std::enable_if_t<not models<Concept::HasIndexAccess, Range, Dune::\n-index_constant<0>>(), int> = 0>\n-40 decltype(auto) operator()(const Node&, const TreePath&, Range&& y) const\n- 41 {\n- 42 return std::forward<Range>(y);\n- 43 }\n- 44};\n- 45\n- 46\n- 47\n- 48} // namespace Dune::Functions\n- 49} // namespace Dune\n- 50\n- 51\n- 52#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH\n-indexaccess.hh\n-Dune::Functions::resolveStaticMultiIndex\n-constexpr decltype(auto) resolveStaticMultiIndex(C &&c, const MultiIndex\n-&multiIndex)\n-Provide multi-index access by chaining operator[].\n-Definition: indexaccess.hh:398\n+ 18#include <dune/functions/common/staticforloop.hh>\n+ 19#include <dune/functions/common/type_traits.hh>\n+ 20#include <dune/functions/common/utility.hh>\n+ 21#include <dune/functions/functionspacebases/basistags.hh>\n+ 22#include <dune/functions/functionspacebases/nodes.hh>\n+ 23#include <dune/functions/functionspacebases/concepts.hh>\n+ 24#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n+ 25\n+ 26\n+ 27namespace Dune {\n+ 28namespace Functions {\n+29namespace Experimental {\n+ 30\n+ 31/\n+/ *****************************************************************************\n+ 32/\n+/ *****************************************************************************\n+ 33\n+ 50template<class RPB, class T>\n+51class TransformedIndexPreBasis\n+ 52{\n+ 53 using Transformation = T;\n+ 54\n+ 55 using This = TransformedIndexPreBasis<RPB,_T>;\n+ 56\n+ 57public:\n+ 58\n+59 using RawPreBasis = RPB;\n+ 60\n+62 using GridView = typename RawPreBasis::GridView;\n+ 63\n+65 using size_type = std::size_t;\n+ 66\n+68 using Node = typename RawPreBasis::Node;\n+ 69\n+70 static constexpr size_type maxMultiIndexSize = Transformation::maxIndexSize;\n+71 static constexpr size_type minMultiIndexSize = Transformation::minIndexSize;\n+72 static constexpr size_type multiIndexBufferSize = std::max(RawPreBasis::\n+multiIndexBufferSize, maxMultiIndexSize);\n+ 73\n+ 79 template<class RPB_R, class T_R>\n+80 TransformedIndexPreBasis(RPB_R&& rawPreBasis, T_R&& transformation) :\n+ 81 rawPreBasis_(std::forward<RPB_R>(rawPreBasis)),\n+ 82 transformation_(std::forward<T_R>(transformation))\n+ 83 {}\n+ 84\n+86 void initializeIndices()\n+ 87 {\n+ 88 rawPreBasis_.initializeIndices();\n+ 89 }\n+ 90\n+92 const GridView& gridView() const\n+ 93 {\n+ 94 return rawPreBasis_.gridView();\n+ 95 }\n+ 96\n+98 void update(const GridView& gv)\n+ 99 {\n+ 100 rawPreBasis_.update(gv);\n+ 101 }\n+ 102\n+113 Node makeNode() const\n+ 114 {\n+ 115 return rawPreBasis_.makeNode();\n+ 116 }\n+ 117\n+119 size_type size() const\n+ 120 {\n+ 121 return size(Dune::ReservedVector<size_type, multiIndexBufferSize>{});\n+ 122 }\n+ 123\n+ 125 template<class SizePrefix>\n+126 size_type size(const SizePrefix& prefix) const\n+ 127 {\n+ 128 return transformation_.size(prefix, rawPreBasis_);\n+ 129 }\n+ 130\n+132 size_type dimension() const\n+ 133 {\n+ 134 return transformation_.dimension(rawPreBasis_);\n+ 135 }\n+ 136\n+138 size_type maxNodeSize() const\n+ 139 {\n+ 140 return rawPreBasis_.maxNodeSize();\n+ 141 }\n+ 142\n+143 const RawPreBasis& rawPreBasis() const\n+ 144 {\n+ 145 return rawPreBasis_;\n+ 146 }\n+ 147\n+148 RawPreBasis& rawPreBasis()\n+ 149 {\n+ 150 return rawPreBasis_;\n+ 151 }\n+ 152\n+ 153 template<class MultiIndex>\n+154 void transformIndex(MultiIndex& multiIndex) const\n+ 155 {\n+ 156 transformation_.transformIndex(multiIndex, rawPreBasis_);\n+ 157 }\n+ 158\n+ 159 template<typename It>\n+160 It indices(const Node& node, It it) const\n+ 161 {\n+ 162 rawPreBasis().indices(node, it);\n+ 163 for(std::size_t i=0; i<node.size(); ++i)\n+ 164 {\n+ 165 transformIndex(*it);\n+ 166 ++it;\n+ 167 }\n+ 168 return it;\n+ 169 }\n+ 170\n+ 171protected:\n+172 RawPreBasis rawPreBasis_;\n+173 Transformation transformation_;\n+ 174};\n+ 175\n+ 176template<class RPB, class T>\n+177TransformedIndexPreBasis(RPB&&, T&&) -> TransformedIndexPreBasis<std::\n+decay_t<RPB>, std::decay_t<T>>;\n+ 178\n+ 179\n+ 180} // end namespace Experimental\n+ 181\n+ 182\n+ 183namespace BasisFactory {\n+ 184namespace Experimental {\n+ 185\n+ 197template<class RawPreBasisFactory, class Transformation>\n+198auto transformIndices(\n+ 199 RawPreBasisFactory&& preBasisFactory,\n+ 200 Transformation&& transformation)\n+ 201{\n+ 202 return [\n+ 203 preBasisFactory=std::forward<RawPreBasisFactory>(preBasisFactory),\n+ 204 transformation =std::forward<Transformation>(transformation)\n+ 205 ](const auto& gridView) {\n+ 206 return Dune::Functions::Experimental::TransformedIndexPreBasis\n+(preBasisFactory(gridView), std::move(transformation));\n+ 207 };\n+ 208}\n+ 209\n+ 210\n+ 211\n+ 230template<class IndexTransformation, class SizeImplementation, std::size_t\n+minIS, std::size_t maxIS>\n+231class GenericIndexingTransformation\n+ 232{\n+ 233public:\n+ 234\n+235 static constexpr std::size_t minIndexSize = minIS;\n+236 static constexpr std::size_t maxIndexSize = maxIS;\n+ 237\n+ 238 template<class IT_R, class SI_R>\n+239 GenericIndexingTransformation(IT_R&& indexTransformation, SI_R&&\n+sizeImplementation) :\n+ 240 indexTransformation_(std::forward<IT_R>(indexTransformation)),\n+ 241 sizeImplementation_(std::forward<SI_R>(sizeImplementation))\n+ 242 {}\n+ 243\n+ 244 template<class MultiIndex, class PreBasis>\n+245 void transformIndex(MultiIndex& multiIndex, const PreBasis& preBasis) const\n+ 246 {\n+ 247 indexTransformation_(multiIndex, preBasis);\n+ 248 }\n+ 249\n+ 250 template<class Prefix, class PreBasis>\n+251 auto size(const Prefix& prefix, const PreBasis& preBasis) const\n+ 252 {\n+ 253 return sizeImplementation_(prefix, preBasis);\n+ 254 }\n+ 255\n+ 256 template<class PreBasis>\n+257 auto dimension(const PreBasis& preBasis) const\n+ 258 {\n+ 259 return preBasis.dimension();\n+ 260 }\n+ 261\n+ 262private:\n+ 263 IndexTransformation indexTransformation_;\n+ 264 SizeImplementation sizeImplementation_;\n+ 265};\n+ 266\n+ 267\n+ 268\n+ 287template<class IndexTransformation, class SizeImplementation, std::size_t\n+minIndexSize, std::size_t maxIndexSize>\n+288auto indexTransformation(IndexTransformation&& indexTransformation,\n+SizeImplementation&& sizeImplementation, Dune::index_constant<minIndexSize>,\n+Dune::index_constant<maxIndexSize>)\n+ 289{\n+ 290 return GenericIndexingTransformation<\n+ 291 std::decay_t<IndexTransformation>,\n+ 292 std::decay_t<SizeImplementation>,\n+ 293 minIndexSize, maxIndexSize>(\n+ 294 std::forward<IndexTransformation>(indexTransformation),\n+ 295 std::forward<SizeImplementation>(sizeImplementation));\n+ 296}\n+ 297\n+ 298\n+ 299} // end namespace Experimental\n+ 300} // end namespace BasisFactory\n+ 301} // end namespace Functions\n+ 302} // end namespace Dune\n+ 303\n+ 304\n+ 305#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TRANSFORMEDINDEXBASIS_HH\n+type_traits.hh\n+utility.hh\n+staticforloop.hh\n+defaultglobalbasis.hh\n+basistags.hh\n+nodes.hh\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::HierarchicNodeToRangeMap\n-A simple node to range map using the nested tree indices.\n-Definition: hierarchicnodetorangemap.hh:30\n-Dune::Functions::HierarchicNodeToRangeMap::operator()\n-decltype(auto) operator()(const Node &, const TreePath &treePath, Range &&y)\n-const\n-Definition: hierarchicnodetorangemap.hh:33\n-Dune::Functions::HierarchicNodeToRangeMap::operator()\n-decltype(auto) operator()(const Node &, const TreePath &, Range &&y) const\n-Definition: hierarchicnodetorangemap.hh:40\n+Dune::Functions::BasisFactory::Experimental::transformIndices\n+auto transformIndices(RawPreBasisFactory &&preBasisFactory, Transformation\n+&&transformation)\n+Create a TransformedIndexPreBasisFactory.\n+Definition: transformedindexbasis.hh:198\n+Dune::Functions::BasisFactory::Experimental::indexTransformation\n+auto indexTransformation(IndexTransformation &&indexTransformation,\n+SizeImplementation &&sizeImplementation, Dune::index_constant< minIndexSize >,\n+Dune::index_constant< maxIndexSize >)\n+A generic implementation of a transformation.\n+Definition: transformedindexbasis.hh:288\n+Dune::Functions::Experimental::TransformedIndexPreBasis\n+TransformedIndexPreBasis(RPB &&, T &&) -> TransformedIndexPreBasis< std::\n+decay_t< RPB >, std::decay_t< T > >\n+Dune::Functions::Experimental::TransformedIndexPreBasis\n+A pre-basis transforming multi-indices.\n+Definition: transformedindexbasis.hh:52\n+Dune::Functions::Experimental::TransformedIndexPreBasis::indices\n+It indices(const Node &node, It it) const\n+Definition: transformedindexbasis.hh:160\n+Dune::Functions::Experimental::TransformedIndexPreBasis::transformation_\n+Transformation transformation_\n+Definition: transformedindexbasis.hh:173\n+Dune::Functions::Experimental::TransformedIndexPreBasis::initializeIndices\n+void initializeIndices()\n+Initialize the global indices.\n+Definition: transformedindexbasis.hh:86\n+Dune::Functions::Experimental::TransformedIndexPreBasis::GridView\n+typename RawPreBasis::GridView GridView\n+The grid view that the FE basis is defined on.\n+Definition: transformedindexbasis.hh:62\n+Dune::Functions::Experimental::TransformedIndexPreBasis::transformIndex\n+void transformIndex(MultiIndex &multiIndex) const\n+Definition: transformedindexbasis.hh:154\n+Dune::Functions::Experimental::TransformedIndexPreBasis::rawPreBasis_\n+RawPreBasis rawPreBasis_\n+Definition: transformedindexbasis.hh:172\n+Dune::Functions::Experimental::TransformedIndexPreBasis::Node\n+typename RawPreBasis::Node Node\n+Template mapping root tree path to type of created tree node.\n+Definition: transformedindexbasis.hh:68\n+Dune::Functions::Experimental::TransformedIndexPreBasis::\n+TransformedIndexPreBasis\n+TransformedIndexPreBasis(RPB_R &&rawPreBasis, T_R &&transformation)\n+Constructor for given child pre-basis objects.\n+Definition: transformedindexbasis.hh:80\n+Dune::Functions::Experimental::TransformedIndexPreBasis::rawPreBasis\n+RawPreBasis & rawPreBasis()\n+Definition: transformedindexbasis.hh:148\n+Dune::Functions::Experimental::TransformedIndexPreBasis::maxMultiIndexSize\n+static constexpr size_type maxMultiIndexSize\n+Definition: transformedindexbasis.hh:70\n+Dune::Functions::Experimental::TransformedIndexPreBasis::update\n+void update(const GridView &gv)\n+Update the stored grid view, to be called if the grid has changed.\n+Definition: transformedindexbasis.hh:98\n+Dune::Functions::Experimental::TransformedIndexPreBasis::makeNode\n+Node makeNode() const\n+Create tree node with given root tree path.\n+Definition: transformedindexbasis.hh:113\n+Dune::Functions::Experimental::TransformedIndexPreBasis::gridView\n+const GridView & gridView() const\n+Obtain the grid view that the basis is defined on.\n+Definition: transformedindexbasis.hh:92\n+Dune::Functions::Experimental::TransformedIndexPreBasis::size\n+size_type size(const SizePrefix &prefix) const\n+Return number of possible values for next position in multi index.\n+Definition: transformedindexbasis.hh:126\n+Dune::Functions::Experimental::TransformedIndexPreBasis::RawPreBasis\n+RPB RawPreBasis\n+Definition: transformedindexbasis.hh:59\n+Dune::Functions::Experimental::TransformedIndexPreBasis::size\n+size_type size() const\n+Same as size(prefix) with empty prefix.\n+Definition: transformedindexbasis.hh:119\n+Dune::Functions::Experimental::TransformedIndexPreBasis::maxNodeSize\n+size_type maxNodeSize() const\n+Get the maximal number of DOFs associated to node for any element.\n+Definition: transformedindexbasis.hh:138\n+Dune::Functions::Experimental::TransformedIndexPreBasis::size_type\n+std::size_t size_type\n+Type used for indices and size information.\n+Definition: transformedindexbasis.hh:65\n+Dune::Functions::Experimental::TransformedIndexPreBasis::multiIndexBufferSize\n+static constexpr size_type multiIndexBufferSize\n+Definition: transformedindexbasis.hh:72\n+Dune::Functions::Experimental::TransformedIndexPreBasis::dimension\n+size_type dimension() const\n+Get the total dimension of the space spanned by this basis.\n+Definition: transformedindexbasis.hh:132\n+Dune::Functions::Experimental::TransformedIndexPreBasis::rawPreBasis\n+const RawPreBasis & rawPreBasis() const\n+Definition: transformedindexbasis.hh:143\n+Dune::Functions::Experimental::TransformedIndexPreBasis::minMultiIndexSize\n+static constexpr size_type minMultiIndexSize\n+Definition: transformedindexbasis.hh:71\n+Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation\n+A generic implementation of a transformation.\n+Definition: transformedindexbasis.hh:232\n+Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation::\n+dimension\n+auto dimension(const PreBasis &preBasis) const\n+Definition: transformedindexbasis.hh:257\n+Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation::\n+GenericIndexingTransformation\n+GenericIndexingTransformation(IT_R &&indexTransformation, SI_R\n+&&sizeImplementation)\n+Definition: transformedindexbasis.hh:239\n+Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation::\n+transformIndex\n+void transformIndex(MultiIndex &multiIndex, const PreBasis &preBasis) const\n+Definition: transformedindexbasis.hh:245\n+Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation::\n+maxIndexSize\n+static constexpr std::size_t maxIndexSize\n+Definition: transformedindexbasis.hh:236\n+Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation::\n+minIndexSize\n+static constexpr std::size_t minIndexSize\n+Definition: transformedindexbasis.hh:235\n+Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation::\n+size\n+auto size(const Prefix &prefix, const PreBasis &preBasis) const\n+Definition: transformedindexbasis.hh:251\n concepts.hh\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00167.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00167.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: rannacherturekbasis.hh File Reference</title>\n+<title>dune-functions: boundarydofs.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -63,61 +63,37 @@\n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n-<a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> |\n-<a href=\"#typedef-members\">Typedefs</a> |\n <a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">rannacherturekbasis.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">boundarydofs.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <dune/common/exceptions.hh></code><br />\n-<code>#include <dune/grid/common/capabilities.hh></code><br />\n-<code>#include <dune/localfunctions/common/localfiniteelementvariant.hh></code><br />\n-<code>#include <dune/localfunctions/rannacherturek.hh></code><br />\n-<code>#include <dune/localfunctions/crouzeixraviart.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00191_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00119_source.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></code><br />\n+<div class=\"textblock\"><code>#include <utility></code><br />\n+<code>#include <<a class=\"el\" href=\"a00113_source.html\">dune/functions/functionspacebases/subentitydofs.hh</a>></code><br />\n </div>\n <p><a href=\"a00167_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n-Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01743.html\">Dune::Functions::RannacherTurekPreBasis< GV ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Pre-basis for a Rannacher-Turek basis. <a href=\"a01743.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01739.html\">Dune::Functions::RannacherTurekNode< GV ></a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-</table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a00224\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00224.html\">Dune::Functions::BasisFactory</a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-</table><table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"typedef-members\" name=\"typedef-members\"></a>\n-Typedefs</h2></td></tr>\n-<tr class=\"memitem:ga3ad2af46f38ffff87851eb5734df272d\"><td class=\"memTemplParams\" colspan=\"2\">template<typename GV > </td></tr>\n-<tr class=\"memitem:ga3ad2af46f38ffff87851eb5734df272d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#ga3ad2af46f38ffff87851eb5734df272d\">Dune::Functions::RannacherTurekBasis</a> = DefaultGlobalBasis< RannacherTurekPreBasis< GV > ></td></tr>\n-<tr class=\"memdesc:ga3ad2af46f38ffff87851eb5734df272d\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Rannacher-Turek basis. <a href=\"a00213.html#ga3ad2af46f38ffff87851eb5734df272d\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga3ad2af46f38ffff87851eb5734df272d\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n Functions</h2></td></tr>\n-<tr class=\"memitem:ga366449c1a41fc29ff55fed0c1485f60b\"><td class=\"memTemplParams\" colspan=\"2\">template<class Dummy = void> </td></tr>\n-<tr class=\"memitem:ga366449c1a41fc29ff55fed0c1485f60b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#ga366449c1a41fc29ff55fed0c1485f60b\">Dune::Functions::BasisFactory::rannacherTurek</a> ()</td></tr>\n-<tr class=\"memdesc:ga366449c1a41fc29ff55fed0c1485f60b\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a pre-basis factory that can create a Rannacher-Turek pre-basis. <a href=\"a00213.html#ga366449c1a41fc29ff55fed0c1485f60b\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga366449c1a41fc29ff55fed0c1485f60b\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:gaa60b94e3da01aa62a555f6955a7f09e5\"><td class=\"memTemplParams\" colspan=\"2\">template<class Basis , class F , decltype(std::declval< std::decay_t< F > >()(0, std::declval< typename Basis::LocalView >(), std::declval< typename Basis::GridView::Intersection >()), 0) = 0> </td></tr>\n+<tr class=\"memitem:gaa60b94e3da01aa62a555f6955a7f09e5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00214.html#gaa60b94e3da01aa62a555f6955a7f09e5\">Dune::Functions::forEachBoundaryDOF</a> (const Basis &basis, F &&f)</td></tr>\n+<tr class=\"memdesc:gaa60b94e3da01aa62a555f6955a7f09e5\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Loop over all DOFs on the boundary. <a href=\"a00214.html#gaa60b94e3da01aa62a555f6955a7f09e5\">More...</a><br /></td></tr>\n+<tr class=\"separator:gaa60b94e3da01aa62a555f6955a7f09e5\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,45 +5,27 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-Classes | Namespaces | Typedefs | Functions\n-rannacherturekbasis.hh File Reference\n-#include <dune/common/exceptions.hh>\n-#include <dune/grid/common/capabilities.hh>\n-#include <dune/localfunctions/common/localfiniteelementvariant.hh>\n-#include <dune/localfunctions/rannacherturek.hh>\n-#include <dune/localfunctions/crouzeixraviart.hh>\n-#include <dune/functions/functionspacebases/nodes.hh>\n-#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n+Namespaces | Functions\n+boundarydofs.hh File Reference\n+#include <utility>\n+#include <dune/functions/functionspacebases/subentitydofs.hh>\n Go_to_the_source_code_of_this_file.\n- Classes\n-class \u00a0Dune::Functions::RannacherTurekPreBasis<_GV_>\n-\u00a0 Pre-basis for a Rannacher-Turek basis. More...\n-\u00a0\n-class \u00a0Dune::Functions::RannacherTurekNode<_GV_>\n-\u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n-namespace \u00a0Dune::Functions::BasisFactory\n-\u00a0\n- Typedefs\n-template<typename GV >\n-using\u00a0Dune::Functions::RannacherTurekBasis = DefaultGlobalBasis<\n- RannacherTurekPreBasis< GV > >\n-\u00a0 Rannacher-Turek basis. More...\n-\u00a0\n Functions\n-template<class Dummy = void>\n-auto\u00a0Dune::Functions::BasisFactory::rannacherTurek ()\n-\u00a0 Create a pre-basis factory that can create a Rannacher-Turek pre-basis.\n- More...\n+template<class Basis , class F , decltype(std::declval< std::decay_t< F > >()\n+(0, std::declval< typename Basis::LocalView >(), std::declval< typename\n+Basis::GridView::Intersection >()), 0) = 0>\n+void\u00a0Dune::Functions::forEachBoundaryDOF (const Basis &basis, F &&f)\n+\u00a0 Loop over all DOFs on the boundary. More...\n \u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00167_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00167_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: rannacherturekbasis.hh Source File</title>\n+<title>dune-functions: boundarydofs.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,251 +62,99 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">rannacherturekbasis.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">boundarydofs.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00167.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RANNACHERTUREKBASIS_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RANNACHERTUREKBASIS_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BOUNDARYDOFS_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BOUNDARYDOFS_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <dune/common/exceptions.hh></span></div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <utility></span></div>\n <div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span> </div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <dune/grid/common/capabilities.hh></span></div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00113.html\">dune/functions/functionspacebases/subentitydofs.hh</a>></span></div>\n <div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/localfunctions/common/localfiniteelementvariant.hh></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/localfunctions/rannacherturek.hh></span></div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <dune/localfunctions/crouzeixraviart.hh></span></div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n <div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00191.html\">dune/functions/functionspacebases/nodes.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00119.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span> </div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"comment\">// *****************************************************************************</span></div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"comment\">// This is the reusable part of the basis. It contains</span></div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"comment\">// RannacherTurekPreBasis</span></div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span><span class=\"comment\">// RannacherTurekNode</span></div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span><span class=\"comment\">// The pre-basis allows to create the others and is the owner of possible shared</span></div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span><span class=\"comment\">// state. These components do _not_ depend on the global basis and local view</span></div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span><span class=\"comment\">// and can be used without a global basis.</span></div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span><span class=\"comment\">// *****************************************************************************</span></div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> </div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV></div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span><span class=\"keyword\">class </span>RannacherTurekNode;</div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> </div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV></div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span><span class=\"keyword\">class </span>RannacherTurekPreBasis;</div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> </div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV></div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html\"> 51</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01743.html\">RannacherTurekPreBasis</a></div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span>{</div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dim = GV::dimension;</div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> </div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> </div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#a5c7c1da97270ba99143631790b29f558\"> 58</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01743.html#a5c7c1da97270ba99143631790b29f558\">GridView</a> = GV;</div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> </div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#a3d9ace6e885c64bfc5776f0273f06e3d\"> 61</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01743.html#a3d9ace6e885c64bfc5776f0273f06e3d\">size_type</a> = std::size_t;</div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> </div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#a8baece8242d5dd2a48373b3a881b4d1e\"> 64</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01739.html\">Node</a> = <a class=\"code hl_class\" href=\"a01739.html\">RannacherTurekNode<GV></a>;</div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> </div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#a1fb0d4aecaa56bf627e26d3aa10db05f\"> 66</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01743.html#a3d9ace6e885c64bfc5776f0273f06e3d\">size_type</a> <a class=\"code hl_variable\" href=\"a01743.html#a1fb0d4aecaa56bf627e26d3aa10db05f\">maxMultiIndexSize</a> = 1;</div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#a2207314a85448f44a5b4ec1b8cfa959b\"> 67</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01743.html#a3d9ace6e885c64bfc5776f0273f06e3d\">size_type</a> <a class=\"code hl_variable\" href=\"a01743.html#a2207314a85448f44a5b4ec1b8cfa959b\">minMultiIndexSize</a> = 1;</div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#a07cae145cee28936ff386f5c19f43d2b\"> 68</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01743.html#a3d9ace6e885c64bfc5776f0273f06e3d\">size_type</a> <a class=\"code hl_variable\" href=\"a01743.html#a07cae145cee28936ff386f5c19f43d2b\">multiIndexBufferSize</a> = 1;</div>\n-<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> </div>\n-<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#a84b73fe9692fdf3c6b10889d79c950eb\"> 71</a></span> <a class=\"code hl_function\" href=\"a01743.html#a84b73fe9692fdf3c6b10889d79c950eb\">RannacherTurekPreBasis</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01743.html#a5c7c1da97270ba99143631790b29f558\">GridView</a>& gv) :</div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> <a class=\"code hl_variable\" href=\"a01743.html#af0f9576a6cb9c4ae4f1b41ce0e4a9f8c\">gridView_</a>(gv)</div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> {</div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">auto</span> type : gv.indexSet().types(0))</div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> <span class=\"keywordflow\">if</span> (!type.isSimplex() && !type.isCube())</div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"Rannacher-Turek or Crouzeix-Raviart elements are only implemented for grids with simplex or cube elements."</span>);</div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> }</div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> </div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#a0ed55e98e0c70dc52075cc48f1371256\"> 80</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01743.html#a0ed55e98e0c70dc52075cc48f1371256\">initializeIndices</a>()</div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> {}</div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> </div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#a960b8283558fb35d91bd74d52e4cedf5\"> 84</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01743.html#a5c7c1da97270ba99143631790b29f558\">GridView</a>& <a class=\"code hl_function\" href=\"a01743.html#a960b8283558fb35d91bd74d52e4cedf5\">gridView</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01743.html#af0f9576a6cb9c4ae4f1b41ce0e4a9f8c\">gridView_</a>;</div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> }</div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>Basis, <span class=\"keyword\">class </span>F,</div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> <span class=\"keyword\">decltype</span>(std::declval<std::decay_t<F>>()(0, std::declval<typename Basis::LocalView>(),std::declval<typename Basis::GridView::Intersection>()), 0) = 0></div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00214.html#gaa60b94e3da01aa62a555f6955a7f09e5\"> 36</a></span><span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a00214.html#gaa60b94e3da01aa62a555f6955a7f09e5\">forEachBoundaryDOF</a>(<span class=\"keyword\">const</span> Basis& basis, F&& f)</div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span>{</div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> <span class=\"keyword\">auto</span> localView = basis.localView();</div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> <span class=\"keyword\">auto</span> seDOFs = <a class=\"code hl_function\" href=\"a00214.html#ga0b9da94fff21e98877d0e3fe1c1554c7\">subEntityDOFs</a>(basis);</div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridView = basis.gridView();</div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">auto</span>&& element : elements(gridView))</div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> <span class=\"keywordflow\">if</span> (element.hasBoundaryIntersections())</div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> {</div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> localView.bind(element);</div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& intersection: intersections(gridView, element))</div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> <span class=\"keywordflow\">if</span> (intersection.boundary())</div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">auto</span> localIndex: seDOFs.bind(localView,intersection))</div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> f(localIndex, localView, intersection);</div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> }</div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span>}</div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> </div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> </div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> </div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>Basis, <span class=\"keyword\">class </span>F,</div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> <span class=\"keyword\">decltype</span>(std::declval<std::decay_t<F>>()(0, std::declval<typename Basis::LocalView>()),0) = 0></div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span><span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a00214.html#gaa60b94e3da01aa62a555f6955a7f09e5\">forEachBoundaryDOF</a>(<span class=\"keyword\">const</span> Basis& basis, F&& f)</div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span>{</div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> <span class=\"keyword\">auto</span> localView = basis.localView();</div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> <span class=\"keyword\">auto</span> seDOFs = <a class=\"code hl_function\" href=\"a00214.html#ga0b9da94fff21e98877d0e3fe1c1554c7\">subEntityDOFs</a>(basis);</div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridView = basis.gridView();</div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">auto</span>&& element : elements(gridView))</div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> <span class=\"keywordflow\">if</span> (element.hasBoundaryIntersections())</div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> {</div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> localView.bind(element);</div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& intersection: intersections(gridView, element))</div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> <span class=\"keywordflow\">if</span> (intersection.boundary())</div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">auto</span> localIndex: seDOFs.bind(localView,intersection))</div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> f(localIndex, localView);</div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> }</div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span>}</div>\n <div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> </div>\n-<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#a3f70bfaa27f3b798c6580cf54d4d5d3e\"> 90</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01743.html#a3f70bfaa27f3b798c6580cf54d4d5d3e\">update</a> (<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01743.html#a5c7c1da97270ba99143631790b29f558\">GridView</a>& gv)</div>\n-<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> {</div>\n-<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> <a class=\"code hl_variable\" href=\"a01743.html#af0f9576a6cb9c4ae4f1b41ce0e4a9f8c\">gridView_</a> = gv;</div>\n-<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> }</div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> </div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#a3e7a4c632321e1a5052bfbb39325c436\"> 98</a></span> <a class=\"code hl_class\" href=\"a01739.html\">Node</a> <a class=\"code hl_function\" href=\"a01743.html#a3e7a4c632321e1a5052bfbb39325c436\">makeNode</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01739.html\">Node</a>{};</div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> }</div>\n-<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> </div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#a8cf6720c8ed670f281421f8aa2bfb357\"> 104</a></span> <a class=\"code hl_typedef\" href=\"a01743.html#a3d9ace6e885c64bfc5776f0273f06e3d\">size_type</a> <a class=\"code hl_function\" href=\"a01743.html#a8cf6720c8ed670f281421f8aa2bfb357\">size</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> <span class=\"keywordflow\">return</span> (<a class=\"code hl_typedef\" href=\"a01743.html#a3d9ace6e885c64bfc5776f0273f06e3d\">size_type</a>)(<a class=\"code hl_variable\" href=\"a01743.html#af0f9576a6cb9c4ae4f1b41ce0e4a9f8c\">gridView_</a>.size(1));</div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> }</div>\n-<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> </div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#a239f02b11282a9345e57e725e1de1a85\"> 111</a></span> <a class=\"code hl_typedef\" href=\"a01743.html#a3d9ace6e885c64bfc5776f0273f06e3d\">size_type</a> <a class=\"code hl_function\" href=\"a01743.html#a239f02b11282a9345e57e725e1de1a85\">size</a>(<span class=\"keyword\">const</span> SizePrefix prefix)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> assert(prefix.size() == 0 || prefix.size() == 1);</div>\n-<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> <span class=\"keywordflow\">return</span> (prefix.size() == 0) ? <a class=\"code hl_function\" href=\"a01743.html#a8cf6720c8ed670f281421f8aa2bfb357\">size</a>() : 0;</div>\n-<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> }</div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> </div>\n-<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#a7d1d523f4994837ef4d8630b5307d740\"> 118</a></span> <a class=\"code hl_typedef\" href=\"a01743.html#a3d9ace6e885c64bfc5776f0273f06e3d\">size_type</a> <a class=\"code hl_function\" href=\"a01743.html#a7d1d523f4994837ef4d8630b5307d740\">dimension</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01743.html#a8cf6720c8ed670f281421f8aa2bfb357\">size</a>();</div>\n-<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> }</div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> </div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#ab8a64c7e222db3908f784433f5d75d5a\"> 124</a></span> <a class=\"code hl_typedef\" href=\"a01743.html#a3d9ace6e885c64bfc5776f0273f06e3d\">size_type</a> <a class=\"code hl_function\" href=\"a01743.html#ab8a64c7e222db3908f784433f5d75d5a\">maxNodeSize</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> <span class=\"keywordflow\">return</span> 2*GV::dimension;</div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> }</div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> </div>\n-<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n-<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#a549dc350a01f60e289fd98a079f22e70\"> 130</a></span> It <a class=\"code hl_function\" href=\"a01743.html#a549dc350a01f60e289fd98a079f22e70\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01739.html\">Node</a>& node, It it)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> <span class=\"keywordflow\">for</span> (<a class=\"code hl_typedef\" href=\"a01743.html#a3d9ace6e885c64bfc5776f0273f06e3d\">size_type</a> i = 0, end = node.<a class=\"code hl_function\" href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">size</a>() ; i < end ; ++i, ++it)</div>\n-<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> {</div>\n-<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> Dune::LocalKey localKey = node.<a class=\"code hl_function\" href=\"a01739.html#ad5e9058f5914d22589a73b38f17002c3\">finiteElement</a>().localCoefficients().localKey(i);</div>\n-<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridIndexSet = <a class=\"code hl_function\" href=\"a01743.html#a960b8283558fb35d91bd74d52e4cedf5\">gridView</a>().indexSet();</div>\n-<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& element = node.<a class=\"code hl_function\" href=\"a01739.html#af9535c76766e944992fb2e4770c5ba07\">element</a>();</div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> </div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> *it = {{ (<a class=\"code hl_typedef\" href=\"a01743.html#a3d9ace6e885c64bfc5776f0273f06e3d\">size_type</a>)(gridIndexSet.subIndex(element,localKey.subEntity(),1)) }};</div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> }</div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> <span class=\"keywordflow\">return</span> it;</div>\n-<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> }</div>\n-<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> </div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span><span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#af0f9576a6cb9c4ae4f1b41ce0e4a9f8c\"> 144</a></span> <a class=\"code hl_typedef\" href=\"a01743.html#a5c7c1da97270ba99143631790b29f558\">GridView</a> <a class=\"code hl_variable\" href=\"a01743.html#af0f9576a6cb9c4ae4f1b41ce0e4a9f8c\">gridView_</a>;</div>\n-<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span>};</div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> </div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> </div>\n-<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> </div>\n-<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV></div>\n-<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01739.html\"> 150</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01739.html\">RannacherTurekNode</a> :</div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01711.html\">LeafBasisNode</a></div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span>{</div>\n-<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dim = GV::dimension;</div>\n-<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> maxSize = 2*dim;</div>\n-<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> </div>\n-<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> hasFixedElementType = Capabilities::hasSingleGeometryType<typename GV::Grid>::v;</div>\n-<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> </div>\n-<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> <span class=\"keyword\">using </span>CubeFiniteElement = RannacherTurekLocalFiniteElement<typename GV::ctype,double,dim>;</div>\n-<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> <span class=\"keyword\">using </span>SimplexFiniteElement = CrouzeixRaviartLocalFiniteElement<typename GV::ctype,double,dim>;</div>\n-<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> </div>\n-<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> topologyId = Capabilities::hasSingleGeometryType<typename GV::Grid>::topologyId; <span class=\"comment\">// meaningless if hasFixedElementType is false</span></div>\n-<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">static</span> GeometryType type = GeometryType(topologyId, GV::dimension);</div>\n-<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> </div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> </div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01739.html#a9dbe2c18666614408917636ee5cd7bec\"> 166</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">size_type</a> = std::size_t;</div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01739.html#aab9f789278d34c7b4aaa68ba1a13d779\"> 167</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01739.html#aab9f789278d34c7b4aaa68ba1a13d779\">Element</a> = <span class=\"keyword\">typename</span> GV::template Codim<0>::Entity;</div>\n-<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01739.html#a21e31af66b721afe385c0a16d7dd9c23\"> 168</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01739.html#a21e31af66b721afe385c0a16d7dd9c23\">FiniteElement</a> = std::conditional_t<hasFixedElementType,</div>\n-<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> std::conditional_t<type.isCube(),CubeFiniteElement,SimplexFiniteElement>,</div>\n-<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> LocalFiniteElementVariant<CubeFiniteElement, SimplexFiniteElement> >;</div>\n-<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> </div>\n-<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01739.html#ab74087a937bec260f15e9daa92babf87\"> 172</a></span> <a class=\"code hl_function\" href=\"a01739.html#ab74087a937bec260f15e9daa92babf87\">RannacherTurekNode</a>() :</div>\n-<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> <a class=\"code hl_variable\" href=\"a01739.html#a3846e648d27ba98f6ca857a62205cb3c\">finiteElement_</a>(),</div>\n-<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> <a class=\"code hl_variable\" href=\"a01739.html#ac0de4ad121f7e1e47bbfc818850c9746\">element_</a>(nullptr)</div>\n-<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> {}</div>\n-<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> </div>\n-<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01739.html#af9535c76766e944992fb2e4770c5ba07\"> 178</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01739.html#aab9f789278d34c7b4aaa68ba1a13d779\">Element</a>& <a class=\"code hl_function\" href=\"a01739.html#af9535c76766e944992fb2e4770c5ba07\">element</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> <span class=\"keywordflow\">return</span> *<a class=\"code hl_variable\" href=\"a01739.html#ac0de4ad121f7e1e47bbfc818850c9746\">element_</a>;</div>\n-<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> }</div>\n-<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> </div>\n-<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01739.html#ad5e9058f5914d22589a73b38f17002c3\"> 187</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01739.html#a21e31af66b721afe385c0a16d7dd9c23\">FiniteElement</a>& <a class=\"code hl_function\" href=\"a01739.html#ad5e9058f5914d22589a73b38f17002c3\">finiteElement</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01739.html#a3846e648d27ba98f6ca857a62205cb3c\">finiteElement_</a>;</div>\n-<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span> }</div>\n-<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> </div>\n-<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01739.html#a22e762e4542d8c55291b31ae2098428e\"> 193</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01739.html#a22e762e4542d8c55291b31ae2098428e\">bind</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01739.html#aab9f789278d34c7b4aaa68ba1a13d779\">Element</a>& e)</div>\n-<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> {</div>\n-<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> <a class=\"code hl_variable\" href=\"a01739.html#ac0de4ad121f7e1e47bbfc818850c9746\">element_</a> = &e;</div>\n-<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> (!hasFixedElementType)</div>\n-<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> <a class=\"code hl_variable\" href=\"a01739.html#a3846e648d27ba98f6ca857a62205cb3c\">finiteElement_</a> = e.type().isCube() ? <span class=\"keyword\">static_cast<</span><a class=\"code hl_typedef\" href=\"a01739.html#a21e31af66b721afe385c0a16d7dd9c23\">FiniteElement</a><span class=\"keyword\">></span>(CubeFiniteElement())</div>\n-<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> : <span class=\"keyword\">static_cast<</span><a class=\"code hl_typedef\" href=\"a01739.html#a21e31af66b721afe385c0a16d7dd9c23\">FiniteElement</a><span class=\"keyword\">></span>(SimplexFiniteElement()) ;</div>\n-<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> this-><a class=\"code hl_function\" href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\">setSize</a>(<a class=\"code hl_variable\" href=\"a01739.html#a3846e648d27ba98f6ca857a62205cb3c\">finiteElement_</a>.size());</div>\n-<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> }</div>\n-<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> </div>\n-<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span><span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> </div>\n-<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01739.html#a3846e648d27ba98f6ca857a62205cb3c\"> 204</a></span> <a class=\"code hl_typedef\" href=\"a01739.html#a21e31af66b721afe385c0a16d7dd9c23\">FiniteElement</a> <a class=\"code hl_variable\" href=\"a01739.html#a3846e648d27ba98f6ca857a62205cb3c\">finiteElement_</a>;</div>\n-<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01739.html#ac0de4ad121f7e1e47bbfc818850c9746\"> 205</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01739.html#aab9f789278d34c7b4aaa68ba1a13d779\">Element</a>* <a class=\"code hl_variable\" href=\"a01739.html#ac0de4ad121f7e1e47bbfc818850c9746\">element_</a>;</div>\n-<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span>};</div>\n-<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> </div>\n-<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span> </div>\n-<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> </div>\n-<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span><span class=\"keyword\">namespace </span>BasisFactory {</div>\n-<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> </div>\n-<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Dummy=<span class=\"keywordtype\">void</span>></div>\n-<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#ga366449c1a41fc29ff55fed0c1485f60b\"> 218</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00213.html#ga366449c1a41fc29ff55fed0c1485f60b\">rannacherTurek</a>()</div>\n-<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span>{</div>\n-<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span> <span class=\"keywordflow\">return</span> [](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridView) {</div>\n-<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01743.html\">RannacherTurekPreBasis</a><std::decay_t<<span class=\"keyword\">decltype</span>(gridView)>>(gridView);</div>\n-<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span> };</div>\n-<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span>}</div>\n-<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> </div>\n-<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span>} <span class=\"comment\">// end namespace BasisFactory</span></div>\n-<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> </div>\n-<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> </div>\n-<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> </div>\n-<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> </div>\n-<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV></div>\n-<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#ga3ad2af46f38ffff87851eb5734df272d\"> 242</a></span><span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01555.html\">RannacherTurekBasis</a> = <a class=\"code hl_class\" href=\"a01555.html\">DefaultGlobalBasis<RannacherTurekPreBasis<GV></a> >;</div>\n-<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> </div>\n-<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span>} <span class=\"comment\">// end namespace Functions</span></div>\n-<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span>} <span class=\"comment\">// end namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span> </div>\n-<div class=\"line\"><a id=\"l00247\" name=\"l00247\"></a><span class=\"lineno\"> 247</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RANNACHERTUREKBASIS_HH</span></div>\n-<div class=\"ttc\" id=\"aa00119_html\"><div class=\"ttname\"><a href=\"a00119.html\">defaultglobalbasis.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00191_html\"><div class=\"ttname\"><a href=\"a00191.html\">nodes.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00213_html_ga366449c1a41fc29ff55fed0c1485f60b\"><div class=\"ttname\"><a href=\"a00213.html#ga366449c1a41fc29ff55fed0c1485f60b\">Dune::Functions::BasisFactory::rannacherTurek</a></div><div class=\"ttdeci\">auto rannacherTurek()</div><div class=\"ttdoc\">Create a pre-basis factory that can create a Rannacher-Turek pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:218</div></div>\n+<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> </div>\n+<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> </div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>Basis, <span class=\"keyword\">class </span>F,</div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> <span class=\"keyword\">decltype</span>(std::declval<std::decay_t<F>>()(std::declval<typename Basis::MultiIndex>()),0) = 0></div>\n+<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span><span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a00214.html#gaa60b94e3da01aa62a555f6955a7f09e5\">forEachBoundaryDOF</a>(<span class=\"keyword\">const</span> Basis& basis, F&& f)</div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span>{</div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> <span class=\"keyword\">auto</span> localView = basis.localView();</div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> <span class=\"keyword\">auto</span> seDOFs = <a class=\"code hl_function\" href=\"a00214.html#ga0b9da94fff21e98877d0e3fe1c1554c7\">subEntityDOFs</a>(basis);</div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridView = basis.gridView();</div>\n+<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">auto</span>&& element : elements(gridView))</div>\n+<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> <span class=\"keywordflow\">if</span> (element.hasBoundaryIntersections())</div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> {</div>\n+<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> localView.bind(element);</div>\n+<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& intersection: intersections(gridView, element))</div>\n+<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> <span class=\"keywordflow\">if</span> (intersection.boundary())</div>\n+<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">auto</span> localIndex: seDOFs.bind(localView,intersection))</div>\n+<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> f(localView.index(localIndex));</div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> }</div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span>}</div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> </div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> </div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> </div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span>} <span class=\"comment\">// namespace Functions</span></div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span>} <span class=\"comment\">// namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> </div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BOUNDARYDOFS_HH</span></div>\n+<div class=\"ttc\" id=\"aa00113_html\"><div class=\"ttname\"><a href=\"a00113.html\">subentitydofs.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00214_html_ga0b9da94fff21e98877d0e3fe1c1554c7\"><div class=\"ttname\"><a href=\"a00214.html#ga0b9da94fff21e98877d0e3fe1c1554c7\">Dune::Functions::subEntityDOFs</a></div><div class=\"ttdeci\">auto subEntityDOFs(const T &)</div><div class=\"ttdoc\">Create SubEntityDOFs object.</div><div class=\"ttdef\"><b>Definition:</b> subentitydofs.hh:160</div></div>\n+<div class=\"ttc\" id=\"aa00214_html_gaa60b94e3da01aa62a555f6955a7f09e5\"><div class=\"ttname\"><a href=\"a00214.html#gaa60b94e3da01aa62a555f6955a7f09e5\">Dune::Functions::forEachBoundaryDOF</a></div><div class=\"ttdeci\">void forEachBoundaryDOF(const Basis &basis, F &&f)</div><div class=\"ttdoc\">Loop over all DOFs on the boundary.</div><div class=\"ttdef\"><b>Definition:</b> boundarydofs.hh:36</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa01555_html\"><div class=\"ttname\"><a href=\"a01555.html\">Dune::Functions::DefaultGlobalBasis</a></div><div class=\"ttdoc\">Global basis for given pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:46</div></div>\n-<div class=\"ttc\" id=\"aa01707_html_a859d50513645ef2ea0188d0779c1df30\"><div class=\"ttname\"><a href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">Dune::Functions::BasisNodeMixin::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:142</div></div>\n-<div class=\"ttc\" id=\"aa01707_html_aa8a0b9332c5d9fd44b680acc810502cd\"><div class=\"ttname\"><a href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">Dune::Functions::BasisNodeMixin::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:128</div></div>\n-<div class=\"ttc\" id=\"aa01707_html_ae93815e5c4012f7be5d11786f40d267a\"><div class=\"ttname\"><a href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\">Dune::Functions::BasisNodeMixin::setSize</a></div><div class=\"ttdeci\">void setSize(const size_type size)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:164</div></div>\n-<div class=\"ttc\" id=\"aa01711_html\"><div class=\"ttname\"><a href=\"a01711.html\">Dune::Functions::LeafBasisNode</a></div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:186</div></div>\n-<div class=\"ttc\" id=\"aa01739_html\"><div class=\"ttname\"><a href=\"a01739.html\">Dune::Functions::RannacherTurekNode</a></div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:152</div></div>\n-<div class=\"ttc\" id=\"aa01739_html_a21e31af66b721afe385c0a16d7dd9c23\"><div class=\"ttname\"><a href=\"a01739.html#a21e31af66b721afe385c0a16d7dd9c23\">Dune::Functions::RannacherTurekNode::FiniteElement</a></div><div class=\"ttdeci\">std::conditional_t< hasFixedElementType, std::conditional_t< type.isCube(), CubeFiniteElement, SimplexFiniteElement >, LocalFiniteElementVariant< CubeFiniteElement, SimplexFiniteElement > > FiniteElement</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:170</div></div>\n-<div class=\"ttc\" id=\"aa01739_html_a22e762e4542d8c55291b31ae2098428e\"><div class=\"ttname\"><a href=\"a01739.html#a22e762e4542d8c55291b31ae2098428e\">Dune::Functions::RannacherTurekNode::bind</a></div><div class=\"ttdeci\">void bind(const Element &e)</div><div class=\"ttdoc\">Bind to element.</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:193</div></div>\n-<div class=\"ttc\" id=\"aa01739_html_a3846e648d27ba98f6ca857a62205cb3c\"><div class=\"ttname\"><a href=\"a01739.html#a3846e648d27ba98f6ca857a62205cb3c\">Dune::Functions::RannacherTurekNode::finiteElement_</a></div><div class=\"ttdeci\">FiniteElement finiteElement_</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:204</div></div>\n-<div class=\"ttc\" id=\"aa01739_html_aab9f789278d34c7b4aaa68ba1a13d779\"><div class=\"ttname\"><a href=\"a01739.html#aab9f789278d34c7b4aaa68ba1a13d779\">Dune::Functions::RannacherTurekNode::Element</a></div><div class=\"ttdeci\">typename GV::template Codim< 0 >::Entity Element</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:167</div></div>\n-<div class=\"ttc\" id=\"aa01739_html_ab74087a937bec260f15e9daa92babf87\"><div class=\"ttname\"><a href=\"a01739.html#ab74087a937bec260f15e9daa92babf87\">Dune::Functions::RannacherTurekNode::RannacherTurekNode</a></div><div class=\"ttdeci\">RannacherTurekNode()</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:172</div></div>\n-<div class=\"ttc\" id=\"aa01739_html_ac0de4ad121f7e1e47bbfc818850c9746\"><div class=\"ttname\"><a href=\"a01739.html#ac0de4ad121f7e1e47bbfc818850c9746\">Dune::Functions::RannacherTurekNode::element_</a></div><div class=\"ttdeci\">const Element * element_</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:205</div></div>\n-<div class=\"ttc\" id=\"aa01739_html_ad5e9058f5914d22589a73b38f17002c3\"><div class=\"ttname\"><a href=\"a01739.html#ad5e9058f5914d22589a73b38f17002c3\">Dune::Functions::RannacherTurekNode::finiteElement</a></div><div class=\"ttdeci\">const FiniteElement & finiteElement() const</div><div class=\"ttdoc\">Return the LocalFiniteElement for the element we are bound to.</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:187</div></div>\n-<div class=\"ttc\" id=\"aa01739_html_af9535c76766e944992fb2e4770c5ba07\"><div class=\"ttname\"><a href=\"a01739.html#af9535c76766e944992fb2e4770c5ba07\">Dune::Functions::RannacherTurekNode::element</a></div><div class=\"ttdeci\">const Element & element() const</div><div class=\"ttdoc\">Return current element, throw if unbound.</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:178</div></div>\n-<div class=\"ttc\" id=\"aa01743_html\"><div class=\"ttname\"><a href=\"a01743.html\">Dune::Functions::RannacherTurekPreBasis</a></div><div class=\"ttdoc\">Pre-basis for a Rannacher-Turek basis.</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:52</div></div>\n-<div class=\"ttc\" id=\"aa01743_html_a07cae145cee28936ff386f5c19f43d2b\"><div class=\"ttname\"><a href=\"a01743.html#a07cae145cee28936ff386f5c19f43d2b\">Dune::Functions::RannacherTurekPreBasis::multiIndexBufferSize</a></div><div class=\"ttdeci\">static constexpr size_type multiIndexBufferSize</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:68</div></div>\n-<div class=\"ttc\" id=\"aa01743_html_a0ed55e98e0c70dc52075cc48f1371256\"><div class=\"ttname\"><a href=\"a01743.html#a0ed55e98e0c70dc52075cc48f1371256\">Dune::Functions::RannacherTurekPreBasis::initializeIndices</a></div><div class=\"ttdeci\">void initializeIndices()</div><div class=\"ttdoc\">Initialize the global indices.</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:80</div></div>\n-<div class=\"ttc\" id=\"aa01743_html_a1fb0d4aecaa56bf627e26d3aa10db05f\"><div class=\"ttname\"><a href=\"a01743.html#a1fb0d4aecaa56bf627e26d3aa10db05f\">Dune::Functions::RannacherTurekPreBasis::maxMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type maxMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:66</div></div>\n-<div class=\"ttc\" id=\"aa01743_html_a2207314a85448f44a5b4ec1b8cfa959b\"><div class=\"ttname\"><a href=\"a01743.html#a2207314a85448f44a5b4ec1b8cfa959b\">Dune::Functions::RannacherTurekPreBasis::minMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type minMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:67</div></div>\n-<div class=\"ttc\" id=\"aa01743_html_a239f02b11282a9345e57e725e1de1a85\"><div class=\"ttname\"><a href=\"a01743.html#a239f02b11282a9345e57e725e1de1a85\">Dune::Functions::RannacherTurekPreBasis::size</a></div><div class=\"ttdeci\">size_type size(const SizePrefix prefix) const</div><div class=\"ttdoc\">Return number of possible values for next position in multi index.</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:111</div></div>\n-<div class=\"ttc\" id=\"aa01743_html_a3d9ace6e885c64bfc5776f0273f06e3d\"><div class=\"ttname\"><a href=\"a01743.html#a3d9ace6e885c64bfc5776f0273f06e3d\">Dune::Functions::RannacherTurekPreBasis::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdoc\">Type used for indices and size information.</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:61</div></div>\n-<div class=\"ttc\" id=\"aa01743_html_a3e7a4c632321e1a5052bfbb39325c436\"><div class=\"ttname\"><a href=\"a01743.html#a3e7a4c632321e1a5052bfbb39325c436\">Dune::Functions::RannacherTurekPreBasis::makeNode</a></div><div class=\"ttdeci\">Node makeNode() const</div><div class=\"ttdoc\">Create tree node.</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:98</div></div>\n-<div class=\"ttc\" id=\"aa01743_html_a3f70bfaa27f3b798c6580cf54d4d5d3e\"><div class=\"ttname\"><a href=\"a01743.html#a3f70bfaa27f3b798c6580cf54d4d5d3e\">Dune::Functions::RannacherTurekPreBasis::update</a></div><div class=\"ttdeci\">void update(const GridView &gv)</div><div class=\"ttdoc\">Update the stored grid view, to be called if the grid has changed.</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:90</div></div>\n-<div class=\"ttc\" id=\"aa01743_html_a549dc350a01f60e289fd98a079f22e70\"><div class=\"ttname\"><a href=\"a01743.html#a549dc350a01f60e289fd98a079f22e70\">Dune::Functions::RannacherTurekPreBasis::indices</a></div><div class=\"ttdeci\">It indices(const Node &node, It it) const</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:130</div></div>\n-<div class=\"ttc\" id=\"aa01743_html_a5c7c1da97270ba99143631790b29f558\"><div class=\"ttname\"><a href=\"a01743.html#a5c7c1da97270ba99143631790b29f558\">Dune::Functions::RannacherTurekPreBasis::GridView</a></div><div class=\"ttdeci\">GV GridView</div><div class=\"ttdoc\">The grid view that the FE basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:58</div></div>\n-<div class=\"ttc\" id=\"aa01743_html_a7d1d523f4994837ef4d8630b5307d740\"><div class=\"ttname\"><a href=\"a01743.html#a7d1d523f4994837ef4d8630b5307d740\">Dune::Functions::RannacherTurekPreBasis::dimension</a></div><div class=\"ttdeci\">size_type dimension() const</div><div class=\"ttdoc\">Get the total dimension of the space spanned by this basis.</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:118</div></div>\n-<div class=\"ttc\" id=\"aa01743_html_a84b73fe9692fdf3c6b10889d79c950eb\"><div class=\"ttname\"><a href=\"a01743.html#a84b73fe9692fdf3c6b10889d79c950eb\">Dune::Functions::RannacherTurekPreBasis::RannacherTurekPreBasis</a></div><div class=\"ttdeci\">RannacherTurekPreBasis(const GridView &gv)</div><div class=\"ttdoc\">Constructor for a given grid view object.</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:71</div></div>\n-<div class=\"ttc\" id=\"aa01743_html_a8cf6720c8ed670f281421f8aa2bfb357\"><div class=\"ttname\"><a href=\"a01743.html#a8cf6720c8ed670f281421f8aa2bfb357\">Dune::Functions::RannacherTurekPreBasis::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdoc\">Same as size(prefix) with empty prefix.</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:104</div></div>\n-<div class=\"ttc\" id=\"aa01743_html_a960b8283558fb35d91bd74d52e4cedf5\"><div class=\"ttname\"><a href=\"a01743.html#a960b8283558fb35d91bd74d52e4cedf5\">Dune::Functions::RannacherTurekPreBasis::gridView</a></div><div class=\"ttdeci\">const GridView & gridView() const</div><div class=\"ttdoc\">Obtain the grid view that the basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:84</div></div>\n-<div class=\"ttc\" id=\"aa01743_html_ab8a64c7e222db3908f784433f5d75d5a\"><div class=\"ttname\"><a href=\"a01743.html#ab8a64c7e222db3908f784433f5d75d5a\">Dune::Functions::RannacherTurekPreBasis::maxNodeSize</a></div><div class=\"ttdeci\">size_type maxNodeSize() const</div><div class=\"ttdoc\">Get the maximal number of DOFs associated to node for any element.</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:124</div></div>\n-<div class=\"ttc\" id=\"aa01743_html_af0f9576a6cb9c4ae4f1b41ce0e4a9f8c\"><div class=\"ttname\"><a href=\"a01743.html#af0f9576a6cb9c4ae4f1b41ce0e4a9f8c\">Dune::Functions::RannacherTurekPreBasis::gridView_</a></div><div class=\"ttdeci\">GridView gridView_</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:144</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,340 +5,104 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-rannacherturekbasis.hh\n+boundarydofs.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RANNACHERTUREKBASIS_HH\n- 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RANNACHERTUREKBASIS_HH\n+ 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BOUNDARYDOFS_HH\n+ 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BOUNDARYDOFS_HH\n 5\n- 6#include <dune/common/exceptions.hh>\n+ 6#include <utility>\n 7\n- 8#include <dune/grid/common/capabilities.hh>\n+ 8#include <dune/functions/functionspacebases/subentitydofs.hh>\n 9\n- 10#include <dune/localfunctions/common/localfiniteelementvariant.hh>\n- 11#include <dune/localfunctions/rannacherturek.hh>\n- 12#include <dune/localfunctions/crouzeixraviart.hh>\n+ 10namespace Dune {\n+ 11namespace Functions {\n+ 12\n 13\n- 14#include <dune/functions/functionspacebases/nodes.hh>\n- 15#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n- 16\n- 17\n- 18namespace Dune {\n- 19namespace Functions {\n- 20\n- 21/\n-/ *****************************************************************************\n- 22// This is the reusable part of the basis. It contains\n- 23//\n- 24// RannacherTurekPreBasis\n- 25// RannacherTurekNode\n- 26//\n- 27// The pre-basis allows to create the others and is the owner of possible\n-shared\n- 28// state. These components do _not_ depend on the global basis and local\n-view\n- 29// and can be used without a global basis.\n- 30/\n-/ *****************************************************************************\n- 31\n- 32template<typename GV>\n- 33class RannacherTurekNode;\n- 34\n- 35template<typename GV>\n- 36class RannacherTurekPreBasis;\n- 37\n- 50template<typename GV>\n-51class RannacherTurekPreBasis\n- 52{\n- 53 static const int dim = GV::dimension;\n- 54\n- 55public:\n- 56\n-58 using GridView = GV;\n- 59\n-61 using size_type = std::size_t;\n- 62\n-64 using Node = RannacherTurekNode<GV>;\n- 65\n-66 static constexpr size_type maxMultiIndexSize = 1;\n-67 static constexpr size_type minMultiIndexSize = 1;\n-68 static constexpr size_type multiIndexBufferSize = 1;\n- 69\n-71 RannacherTurekPreBasis(const GridView& gv) :\n- 72 gridView_(gv)\n- 73 {\n- 74 for(auto type : gv.indexSet().types(0))\n- 75 if (!type.isSimplex() && !type.isCube())\n- 76 DUNE_THROW(Dune::NotImplemented, \"Rannacher-Turek or Crouzeix-Raviart\n-elements are only implemented for grids with simplex or cube elements.\");\n- 77 }\n- 78\n-80 void initializeIndices()\n- 81 {}\n- 82\n-84 const GridView& gridView() const\n- 85 {\n- 86 return gridView_;\n- 87 }\n+ 14\n+ 34template<class Basis, class F,\n+ 35 decltype(std::declval<std::decay_t<F>>()(0, std::declval<typename Basis::\n+LocalView>(),std::declval<typename Basis::GridView::Intersection>()), 0) = 0>\n+36void forEachBoundaryDOF(const Basis& basis, F&& f)\n+ 37{\n+ 38 auto localView = basis.localView();\n+ 39 auto seDOFs = subEntityDOFs(basis);\n+ 40 const auto& gridView = basis.gridView();\n+ 41 for(auto&& element : elements(gridView))\n+ 42 if (element.hasBoundaryIntersections())\n+ 43 {\n+ 44 localView.bind(element);\n+ 45 for(const auto& intersection: intersections(gridView, element))\n+ 46 if (intersection.boundary())\n+ 47 for(auto localIndex: seDOFs.bind(localView,intersection))\n+ 48 f(localIndex, localView, intersection);\n+ 49 }\n+ 50}\n+ 51\n+ 52\n+ 53\n+ 71template<class Basis, class F,\n+ 72 decltype(std::declval<std::decay_t<F>>()(0, std::declval<typename Basis::\n+LocalView>()),0) = 0>\n+ 73void forEachBoundaryDOF(const Basis& basis, F&& f)\n+ 74{\n+ 75 auto localView = basis.localView();\n+ 76 auto seDOFs = subEntityDOFs(basis);\n+ 77 const auto& gridView = basis.gridView();\n+ 78 for(auto&& element : elements(gridView))\n+ 79 if (element.hasBoundaryIntersections())\n+ 80 {\n+ 81 localView.bind(element);\n+ 82 for(const auto& intersection: intersections(gridView, element))\n+ 83 if (intersection.boundary())\n+ 84 for(auto localIndex: seDOFs.bind(localView,intersection))\n+ 85 f(localIndex, localView);\n+ 86 }\n+ 87}\n 88\n-90 void update (const GridView& gv)\n- 91 {\n- 92 gridView_ = gv;\n- 93 }\n- 94\n-98 Node makeNode() const\n- 99 {\n- 100 return Node{};\n- 101 }\n- 102\n-104 size_type size() const\n- 105 {\n- 106 return (size_type)(gridView_.size(1));\n- 107 }\n- 108\n- 110 template<class SizePrefix>\n-111 size_type size(const SizePrefix prefix) const\n- 112 {\n- 113 assert(prefix.size() == 0 || prefix.size() == 1);\n- 114 return (prefix.size() == 0) ? size() : 0;\n- 115 }\n- 116\n-118 size_type dimension() const\n- 119 {\n- 120 return size();\n- 121 }\n- 122\n-124 size_type maxNodeSize() const\n- 125 {\n- 126 return 2*GV::dimension;\n- 127 }\n- 128\n- 129 template<typename It>\n-130 It indices(const Node& node, It it) const\n- 131 {\n- 132 for (size_type i = 0, end = node.size() ; i < end ; ++i, ++it)\n- 133 {\n- 134 Dune::LocalKey localKey = node.finiteElement().localCoefficients\n-().localKey(i);\n- 135 const auto& gridIndexSet = gridView().indexSet();\n- 136 const auto& element = node.element();\n- 137\n- 138 *it = {{ (size_type)(gridIndexSet.subIndex(element,localKey.subEntity\n-(),1)) }};\n- 139 }\n- 140 return it;\n- 141 }\n- 142\n- 143protected:\n-144 GridView gridView_;\n- 145};\n- 146\n- 147\n- 148\n- 149template<typename GV>\n-150class RannacherTurekNode :\n- 151 public LeafBasisNode\n- 152{\n- 153 static const int dim = GV::dimension;\n- 154 static const int maxSize = 2*dim;\n- 155\n- 156 constexpr static bool hasFixedElementType = Capabilities::\n-hasSingleGeometryType<typename GV::Grid>::v;\n- 157\n- 158 using CubeFiniteElement = RannacherTurekLocalFiniteElement<typename GV::\n-ctype,double,dim>;\n- 159 using SimplexFiniteElement = CrouzeixRaviartLocalFiniteElement<typename\n-GV::ctype,double,dim>;\n- 160\n- 161 constexpr static unsigned int topologyId = Capabilities::\n-hasSingleGeometryType<typename GV::Grid>::topologyId; // meaningless if\n-hasFixedElementType is false\n- 162 constexpr static GeometryType type = GeometryType(topologyId, GV::\n-dimension);\n- 163\n- 164public:\n- 165\n-166 using size_type = std::size_t;\n-167 using Element = typename GV::template Codim<0>::Entity;\n-168 using FiniteElement = std::conditional_t<hasFixedElementType,\n- 169 std::conditional_t<type.isCube(),CubeFiniteElement,SimplexFiniteElement>,\n- 170 LocalFiniteElementVariant<CubeFiniteElement, SimplexFiniteElement> >;\n- 171\n-172 RannacherTurekNode() :\n- 173 finiteElement_(),\n- 174 element_(nullptr)\n- 175 {}\n- 176\n-178 const Element& element() const\n- 179 {\n- 180 return *element_;\n- 181 }\n- 182\n-187 const FiniteElement& finiteElement() const\n- 188 {\n- 189 return finiteElement_;\n- 190 }\n- 191\n-193 void bind(const Element& e)\n- 194 {\n- 195 element_ = &e;\n- 196 if constexpr (!hasFixedElementType)\n- 197 finiteElement_ = e.type().isCube() ? static_cast<FiniteElement>\n-(CubeFiniteElement())\n- 198 : static_cast<FiniteElement>(SimplexFiniteElement()) ;\n- 199 this->setSize(finiteElement_.size());\n- 200 }\n- 201\n- 202protected:\n- 203\n-204 FiniteElement finiteElement_;\n-205 const Element* element_;\n- 206};\n- 207\n- 208\n- 209\n- 210namespace BasisFactory {\n- 211\n- 217template<class Dummy=void>\n-218auto rannacherTurek()\n- 219{\n- 220 return [](const auto& gridView) {\n- 221 return RannacherTurekPreBasis<std::decay_t<decltype(gridView)>>(gridView);\n- 222 };\n- 223}\n- 224\n- 225} // end namespace BasisFactory\n- 226\n- 227\n- 228\n- 229\n- 241template<typename GV>\n-242using RannacherTurekBasis = DefaultGlobalBasis<RannacherTurekPreBasis<GV> >;\n- 243\n- 244} // end namespace Functions\n- 245} // end namespace Dune\n- 246\n- 247#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RANNACHERTUREKBASIS_HH\n-defaultglobalbasis.hh\n-nodes.hh\n-Dune::Functions::BasisFactory::rannacherTurek\n-auto rannacherTurek()\n-Create a pre-basis factory that can create a Rannacher-Turek pre-basis.\n-Definition: rannacherturekbasis.hh:218\n+ 89\n+ 90\n+ 107template<class Basis, class F,\n+ 108 decltype(std::declval<std::decay_t<F>>()(std::declval<typename Basis::\n+MultiIndex>()),0) = 0>\n+ 109void forEachBoundaryDOF(const Basis& basis, F&& f)\n+ 110{\n+ 111 auto localView = basis.localView();\n+ 112 auto seDOFs = subEntityDOFs(basis);\n+ 113 const auto& gridView = basis.gridView();\n+ 114 for(auto&& element : elements(gridView))\n+ 115 if (element.hasBoundaryIntersections())\n+ 116 {\n+ 117 localView.bind(element);\n+ 118 for(const auto& intersection: intersections(gridView, element))\n+ 119 if (intersection.boundary())\n+ 120 for(auto localIndex: seDOFs.bind(localView,intersection))\n+ 121 f(localView.index(localIndex));\n+ 122 }\n+ 123}\n+ 124\n+ 125\n+ 126\n+ 127} // namespace Functions\n+ 128} // namespace Dune\n+ 129\n+ 130#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BOUNDARYDOFS_HH\n+subentitydofs.hh\n+Dune::Functions::subEntityDOFs\n+auto subEntityDOFs(const T &)\n+Create SubEntityDOFs object.\n+Definition: subentitydofs.hh:160\n+Dune::Functions::forEachBoundaryDOF\n+void forEachBoundaryDOF(const Basis &basis, F &&f)\n+Loop over all DOFs on the boundary.\n+Definition: boundarydofs.hh:36\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::DefaultGlobalBasis\n-Global basis for given pre-basis.\n-Definition: defaultglobalbasis.hh:46\n-Dune::Functions::BasisNodeMixin::size\n-size_type size() const\n-Definition: nodes.hh:142\n-Dune::Functions::BasisNodeMixin::size_type\n-std::size_t size_type\n-Definition: nodes.hh:128\n-Dune::Functions::BasisNodeMixin::setSize\n-void setSize(const size_type size)\n-Definition: nodes.hh:164\n-Dune::Functions::LeafBasisNode\n-Definition: nodes.hh:186\n-Dune::Functions::RannacherTurekNode\n-Definition: rannacherturekbasis.hh:152\n-Dune::Functions::RannacherTurekNode::FiniteElement\n-std::conditional_t< hasFixedElementType, std::conditional_t< type.isCube(),\n-CubeFiniteElement, SimplexFiniteElement >, LocalFiniteElementVariant<\n-CubeFiniteElement, SimplexFiniteElement > > FiniteElement\n-Definition: rannacherturekbasis.hh:170\n-Dune::Functions::RannacherTurekNode::bind\n-void bind(const Element &e)\n-Bind to element.\n-Definition: rannacherturekbasis.hh:193\n-Dune::Functions::RannacherTurekNode::finiteElement_\n-FiniteElement finiteElement_\n-Definition: rannacherturekbasis.hh:204\n-Dune::Functions::RannacherTurekNode::Element\n-typename GV::template Codim< 0 >::Entity Element\n-Definition: rannacherturekbasis.hh:167\n-Dune::Functions::RannacherTurekNode::RannacherTurekNode\n-RannacherTurekNode()\n-Definition: rannacherturekbasis.hh:172\n-Dune::Functions::RannacherTurekNode::element_\n-const Element * element_\n-Definition: rannacherturekbasis.hh:205\n-Dune::Functions::RannacherTurekNode::finiteElement\n-const FiniteElement & finiteElement() const\n-Return the LocalFiniteElement for the element we are bound to.\n-Definition: rannacherturekbasis.hh:187\n-Dune::Functions::RannacherTurekNode::element\n-const Element & element() const\n-Return current element, throw if unbound.\n-Definition: rannacherturekbasis.hh:178\n-Dune::Functions::RannacherTurekPreBasis\n-Pre-basis for a Rannacher-Turek basis.\n-Definition: rannacherturekbasis.hh:52\n-Dune::Functions::RannacherTurekPreBasis::multiIndexBufferSize\n-static constexpr size_type multiIndexBufferSize\n-Definition: rannacherturekbasis.hh:68\n-Dune::Functions::RannacherTurekPreBasis::initializeIndices\n-void initializeIndices()\n-Initialize the global indices.\n-Definition: rannacherturekbasis.hh:80\n-Dune::Functions::RannacherTurekPreBasis::maxMultiIndexSize\n-static constexpr size_type maxMultiIndexSize\n-Definition: rannacherturekbasis.hh:66\n-Dune::Functions::RannacherTurekPreBasis::minMultiIndexSize\n-static constexpr size_type minMultiIndexSize\n-Definition: rannacherturekbasis.hh:67\n-Dune::Functions::RannacherTurekPreBasis::size\n-size_type size(const SizePrefix prefix) const\n-Return number of possible values for next position in multi index.\n-Definition: rannacherturekbasis.hh:111\n-Dune::Functions::RannacherTurekPreBasis::size_type\n-std::size_t size_type\n-Type used for indices and size information.\n-Definition: rannacherturekbasis.hh:61\n-Dune::Functions::RannacherTurekPreBasis::makeNode\n-Node makeNode() const\n-Create tree node.\n-Definition: rannacherturekbasis.hh:98\n-Dune::Functions::RannacherTurekPreBasis::update\n-void update(const GridView &gv)\n-Update the stored grid view, to be called if the grid has changed.\n-Definition: rannacherturekbasis.hh:90\n-Dune::Functions::RannacherTurekPreBasis::indices\n-It indices(const Node &node, It it) const\n-Definition: rannacherturekbasis.hh:130\n-Dune::Functions::RannacherTurekPreBasis::GridView\n-GV GridView\n-The grid view that the FE basis is defined on.\n-Definition: rannacherturekbasis.hh:58\n-Dune::Functions::RannacherTurekPreBasis::dimension\n-size_type dimension() const\n-Get the total dimension of the space spanned by this basis.\n-Definition: rannacherturekbasis.hh:118\n-Dune::Functions::RannacherTurekPreBasis::RannacherTurekPreBasis\n-RannacherTurekPreBasis(const GridView &gv)\n-Constructor for a given grid view object.\n-Definition: rannacherturekbasis.hh:71\n-Dune::Functions::RannacherTurekPreBasis::size\n-size_type size() const\n-Same as size(prefix) with empty prefix.\n-Definition: rannacherturekbasis.hh:104\n-Dune::Functions::RannacherTurekPreBasis::gridView\n-const GridView & gridView() const\n-Obtain the grid view that the basis is defined on.\n-Definition: rannacherturekbasis.hh:84\n-Dune::Functions::RannacherTurekPreBasis::maxNodeSize\n-size_type maxNodeSize() const\n-Get the maximal number of DOFs associated to node for any element.\n-Definition: rannacherturekbasis.hh:124\n-Dune::Functions::RannacherTurekPreBasis::gridView_\n-GridView gridView_\n-Definition: rannacherturekbasis.hh:144\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00170.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00170.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: interpolate.hh File Reference</title>\n+<title>dune-functions: hierarchicnodetorangemap.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -63,57 +63,39 @@\n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n-<a href=\"#namespaces\">Namespaces</a> |\n-<a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">interpolate.hh File Reference</div></div>\n+<a href=\"#nested-classes\">Classes</a> |\n+<a href=\"#namespaces\">Namespaces</a> </div>\n+ <div class=\"headertitle\"><div class=\"title\">hierarchicnodetorangemap.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <memory></code><br />\n-<code>#include <vector></code><br />\n-<code>#include <dune/common/exceptions.hh></code><br />\n-<code>#include <dune/common/bitsetvector.hh></code><br />\n-<code>#include <dune/typetree/childextraction.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00038_source.html\">dune/functions/gridfunctions/gridviewfunction.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00053_source.html\">dune/functions/common/functionconcepts.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a02873_source.html\">dune/functions/backends/concepts.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00011_source.html\">dune/functions/backends/istlvectorbackend.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00155_source.html\">dune/functions/functionspacebases/sizeinfo.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00128_source.html\">dune/functions/functionspacebases/flatvectorview.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00164_source.html\">dune/functions/functionspacebases/hierarchicnodetorangemap.hh</a>></code><br />\n-<code>#include <dune/typetree/traversal.hh></code><br />\n-<code>#include <dune/typetree/visitor.hh></code><br />\n+<div class=\"textblock\"><code>#include <utility></code><br />\n+<code>#include <type_traits></code><br />\n+<code>#include <dune/common/concept.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a02876_source.html\">dune/functions/functionspacebases/concepts.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00062_source.html\">dune/functions/common/indexaccess.hh</a>></code><br />\n </div>\n <p><a href=\"a00170_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n+Classes</h2></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01627.html\">Dune::Functions::HierarchicNodeToRangeMap</a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A simple node to range map using the nested tree indices. <a href=\"a01627.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+</table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-</table><table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n-Functions</h2></td></tr>\n-<tr class=\"memitem:a13b0c6bf02d744e7b2078d1a535b5211\"><td class=\"memTemplParams\" colspan=\"2\">template<class B , class C , class F , class BV , class NTRE > </td></tr>\n-<tr class=\"memitem:a13b0c6bf02d744e7b2078d1a535b5211\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a13b0c6bf02d744e7b2078d1a535b5211\">Dune::Functions::interpolate</a> (const B &basis, C &&coeff, const F &f, const BV &bv, const NTRE &nodeToRangeEntry)</td></tr>\n-<tr class=\"memdesc:a13b0c6bf02d744e7b2078d1a535b5211\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Interpolate given function in discrete function space. <a href=\"a00219.html#a13b0c6bf02d744e7b2078d1a535b5211\">More...</a><br /></td></tr>\n-<tr class=\"separator:a13b0c6bf02d744e7b2078d1a535b5211\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:ae167dc7b5ace0ff9617a3205b05744b5\"><td class=\"memTemplParams\" colspan=\"2\">template<class B , class C , class F , class BV > </td></tr>\n-<tr class=\"memitem:ae167dc7b5ace0ff9617a3205b05744b5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#ae167dc7b5ace0ff9617a3205b05744b5\">Dune::Functions::interpolate</a> (const B &basis, C &&coeff, const F &f, const BV &bitVector)</td></tr>\n-<tr class=\"memdesc:ae167dc7b5ace0ff9617a3205b05744b5\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Interpolate given function in discrete function space. <a href=\"a00219.html#ae167dc7b5ace0ff9617a3205b05744b5\">More...</a><br /></td></tr>\n-<tr class=\"separator:ae167dc7b5ace0ff9617a3205b05744b5\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a2e34859322800ae26a292903910ef9f7\"><td class=\"memTemplParams\" colspan=\"2\">template<class B , class C , class F > </td></tr>\n-<tr class=\"memitem:a2e34859322800ae26a292903910ef9f7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a2e34859322800ae26a292903910ef9f7\">Dune::Functions::interpolate</a> (const B &basis, C &&coeff, const F &f)</td></tr>\n-<tr class=\"memdesc:a2e34859322800ae26a292903910ef9f7\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Interpolate given function in discrete function space. <a href=\"a00219.html#a2e34859322800ae26a292903910ef9f7\">More...</a><br /></td></tr>\n-<tr class=\"separator:a2e34859322800ae26a292903910ef9f7\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,47 +5,27 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-Namespaces | Functions\n-interpolate.hh File Reference\n-#include <memory>\n-#include <vector>\n-#include <dune/common/exceptions.hh>\n-#include <dune/common/bitsetvector.hh>\n-#include <dune/typetree/childextraction.hh>\n-#include <dune/functions/gridfunctions/gridviewfunction.hh>\n-#include <dune/functions/common/functionconcepts.hh>\n-#include <dune/functions/backends/concepts.hh>\n-#include <dune/functions/backends/istlvectorbackend.hh>\n-#include <dune/functions/functionspacebases/sizeinfo.hh>\n-#include <dune/functions/functionspacebases/flatvectorview.hh>\n-#include <dune/functions/functionspacebases/hierarchicnodetorangemap.hh>\n-#include <dune/typetree/traversal.hh>\n-#include <dune/typetree/visitor.hh>\n+Classes | Namespaces\n+hierarchicnodetorangemap.hh File Reference\n+#include <utility>\n+#include <type_traits>\n+#include <dune/common/concept.hh>\n+#include <dune/functions/functionspacebases/concepts.hh>\n+#include <dune/functions/common/indexaccess.hh>\n Go_to_the_source_code_of_this_file.\n+ Classes\n+struct \u00a0Dune::Functions::HierarchicNodeToRangeMap\n+\u00a0 A simple node to range map using the nested tree indices. More...\n+\u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n- Functions\n-template<class B , class C , class F , class BV , class NTRE >\n-void\u00a0Dune::Functions::interpolate (const B &basis, C &&coeff, const F &f,\n- const BV &bv, const NTRE &nodeToRangeEntry)\n-\u00a0 Interpolate given function in discrete function space. More...\n-\u00a0\n-template<class B , class C , class F , class BV >\n-void\u00a0Dune::Functions::interpolate (const B &basis, C &&coeff, const F &f,\n- const BV &bitVector)\n-\u00a0 Interpolate given function in discrete function space. More...\n-\u00a0\n-template<class B , class C , class F >\n-void\u00a0Dune::Functions::interpolate (const B &basis, C &&coeff, const F &f)\n-\u00a0 Interpolate given function in discrete function space. More...\n-\u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00170_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00170_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: interpolate.hh Source File</title>\n+<title>dune-functions: hierarchicnodetorangemap.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,286 +62,67 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">interpolate.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">hierarchicnodetorangemap.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00170.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <memory></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <vector></span></div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/common/exceptions.hh></span></div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/bitsetvector.hh></span></div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span> </div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <utility></span></div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <type_traits></span></div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/concept.hh></span></div>\n <div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <dune/typetree/childextraction.hh></span></div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00038.html\">dune/functions/gridfunctions/gridviewfunction.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00053.html\">dune/functions/common/functionconcepts.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a02873.html\">dune/functions/backends/concepts.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00011.html\">dune/functions/backends/istlvectorbackend.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00155.html\">dune/functions/functionspacebases/sizeinfo.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00128.html\">dune/functions/functionspacebases/flatvectorview.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00164.html\">dune/functions/functionspacebases/hierarchicnodetorangemap.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> </div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"preprocessor\">#include <dune/typetree/traversal.hh></span></div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"preprocessor\">#include <dune/typetree/visitor.hh></span></div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> </div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> </div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span><span class=\"keyword\">namespace </span>Imp {</div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> </div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span><span class=\"keyword\">struct </span>AllTrueBitSetVector</div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span>{</div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> <span class=\"keyword\">struct </span>AllTrueBitSet</div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> {</div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> <span class=\"keywordtype\">bool</span> test(<span class=\"keywordtype\">int</span>)<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>; }</div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> } allTrue_;</div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a02876.html\">dune/functions/functionspacebases/concepts.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00062.html\">dune/functions/common/indexaccess.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01627.html\"> 29</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01627.html\">HierarchicNodeToRangeMap</a></div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span>{</div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>Node, <span class=\"keyword\">class </span>TreePath, <span class=\"keyword\">class </span>Range,</div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> std::enable_if_t< models<Concept::HasIndexAccess, Range, Dune::index_constant<0>>(), <span class=\"keywordtype\">int</span>> = 0></div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01627.html#a6bcd58a4ffb8c3d2ed7fb0a8e17f1e5a\"> 33</a></span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <a class=\"code hl_function\" href=\"a01627.html#a6bcd58a4ffb8c3d2ed7fb0a8e17f1e5a\">operator()</a>(<span class=\"keyword\">const</span> Node&, <span class=\"keyword\">const</span> TreePath& treePath, Range&& y)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00215.html#ga4cc6af2842348271c242c048e0411637\">resolveStaticMultiIndex</a>(y, treePath);</div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> }</div>\n <div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> </div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> <span class=\"keyword\">operator</span> bool()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> }</div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> </div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> I></div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> <span class=\"keyword\">const</span> AllTrueBitSetVector& operator[](<span class=\"keyword\">const</span> I&)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>;</div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> }</div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> </div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SP></div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> <span class=\"keywordtype\">void</span> resize(<span class=\"keyword\">const</span> SP&)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span><span class=\"keyword\"> </span>{}</div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> </div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span>};</div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> </div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> </div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> </div>\n-<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span><span class=\"keyword\">template</span> <<span class=\"keyword\">class</span> B, <span class=\"keyword\">class</span> T, <span class=\"keyword\">class</span> NTRE, <span class=\"keyword\">class</span> HV, <span class=\"keyword\">class</span> LF, <span class=\"keyword\">class</span> HBV></div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span><span class=\"keyword\">class </span>LocalInterpolateVisitor</div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> : <span class=\"keyword\">public</span> TypeTree::TreeVisitor</div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> , <span class=\"keyword\">public</span> TypeTree::DynamicTraversal</div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span>{</div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> </div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> </div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> <span class=\"keyword\">using </span>Basis = B;</div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> <span class=\"keyword\">using </span>LocalView = <span class=\"keyword\">typename</span> B::LocalView;</div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> <span class=\"keyword\">using </span>MultiIndex = <span class=\"keyword\">typename</span> LocalView::MultiIndex;</div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> </div>\n-<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> <span class=\"keyword\">using </span>LocalFunction = LF;</div>\n-<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> </div>\n-<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> <span class=\"keyword\">using </span>Tree = T;</div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> </div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> <span class=\"keyword\">using </span>VectorBackend = HV;</div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> <span class=\"keyword\">using </span>BitVectorBackend = HBV;</div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> </div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> <span class=\"keyword\">using </span>NodeToRangeEntry = NTRE;</div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> </div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> <span class=\"keyword\">using </span>GridView = <span class=\"keyword\">typename</span> Basis::GridView;</div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> <span class=\"keyword\">using </span>Element = <span class=\"keyword\">typename</span> GridView::template Codim<0>::Entity;</div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> </div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> <span class=\"keyword\">using </span>LocalDomain = <span class=\"keyword\">typename</span> Element::Geometry::LocalCoordinate;</div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> </div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> <span class=\"keyword\">using </span>GlobalDomain = <span class=\"keyword\">typename</span> Element::Geometry::GlobalCoordinate;</div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> </div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> LocalInterpolateVisitor(<span class=\"keyword\">const</span> B& <span class=\"comment\">/*basis*/</span>, HV& coeff, <span class=\"keyword\">const</span> HBV& bitVector, <span class=\"keyword\">const</span> LF& localF, <span class=\"keyword\">const</span> LocalView& localView, <span class=\"keyword\">const</span> NodeToRangeEntry& nodeToRangeEntry) :</div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> vector_(coeff),</div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> localF_(localF),</div>\n-<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> bitVector_(bitVector),</div>\n-<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> localView_(localView),</div>\n-<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> nodeToRangeEntry_(nodeToRangeEntry)</div>\n-<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> {</div>\n-<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> <span class=\"keyword\">static_assert</span>(Dune::Functions::Concept::isCallable<LocalFunction, LocalDomain>(), <span class=\"stringliteral\">"Function passed to LocalInterpolateVisitor does not model the Callable<LocalCoordinate> concept"</span>);</div>\n-<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> }</div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> </div>\n-<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath></div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> <span class=\"keywordtype\">void</span> pre(Node&, TreePath)</div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> {}</div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> </div>\n-<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath></div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> <span class=\"keywordtype\">void</span> post(Node&, TreePath)</div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> {}</div>\n-<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> </div>\n-<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath></div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> <span class=\"keywordtype\">void</span> leaf(Node& node, TreePath treePath)</div>\n-<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> {</div>\n-<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> <span class=\"keyword\">using </span>FiniteElement = <span class=\"keyword\">typename</span> Node::FiniteElement;</div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> <span class=\"keyword\">using </span>FiniteElementRange = <span class=\"keyword\">typename</span> FiniteElement::Traits::LocalBasisType::Traits::RangeType;</div>\n-<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> <span class=\"keyword\">using </span>FiniteElementRangeField = <span class=\"keyword\">typename</span> FiniteElement::Traits::LocalBasisType::Traits::RangeFieldType;</div>\n-<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> </div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> <span class=\"keyword\">auto</span> interpolationCoefficients = std::vector<FiniteElementRangeField>();</div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> <span class=\"keyword\">auto</span>&& fe = node.finiteElement();</div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> </div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> <span class=\"comment\">// backward compatibility: for scalar basis functions and possibly vector valued coefficients</span></div>\n-<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> <span class=\"comment\">// (like used in dune-fufem for power bases) loop over the components</span></div>\n-<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> <span class=\"comment\">// of the coefficients</span></div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> ( FiniteElement::Traits::LocalBasisType::Traits::dimRange == 1 )</div>\n-<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> {</div>\n-<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> <span class=\"comment\">// Note that we capture j by reference. Hence we can switch</span></div>\n-<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> <span class=\"comment\">// the selected component later on by modifying j. Maybe we</span></div>\n-<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> <span class=\"comment\">// should avoid this naughty statefull lambda hack in favor</span></div>\n-<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> <span class=\"comment\">// of a separate helper class.</span></div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> std::size_t j=0;</div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> <span class=\"keyword\">auto</span> localFj = [&](<span class=\"keyword\">const</span> LocalDomain& x){</div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& y = localF_(x);</div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> <span class=\"keywordflow\">return</span> FiniteElementRange(<a class=\"code hl_function\" href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\">flatVectorView</a>(nodeToRangeEntry_(node, treePath, y))[j]);</div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> };</div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> </div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> <span class=\"comment\">// We loop over j defined above and thus over the components of the</span></div>\n-<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> <span class=\"comment\">// range type of localF_.</span></div>\n-<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> </div>\n-<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> <span class=\"keyword\">auto</span> blockSize = <a class=\"code hl_function\" href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\">flatVectorView</a>(vector_[localView_.index(0)]).size();</div>\n-<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> </div>\n-<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> <span class=\"keywordflow\">for</span>(j=0; j<blockSize; ++j)</div>\n-<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> {</div>\n-<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> fe.localInterpolation().interpolate(localFj, interpolationCoefficients);</div>\n-<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<fe.localBasis().size(); ++i)</div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> {</div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> <span class=\"keyword\">auto</span> multiIndex = localView_.index(node.localIndex(i));</div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> <span class=\"keyword\">auto</span> bitVectorBlock = <a class=\"code hl_function\" href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\">flatVectorView</a>(bitVector_[multiIndex]);</div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> <span class=\"keywordflow\">if</span> (bitVectorBlock[j])</div>\n-<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> {</div>\n-<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> <span class=\"keyword\">auto</span> vectorBlock = <a class=\"code hl_function\" href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\">flatVectorView</a>(vector_[multiIndex]);</div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> vectorBlock[j] = interpolationCoefficients[i];</div>\n-<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> }</div>\n-<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> }</div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> }</div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> }</div>\n-<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> <span class=\"keywordflow\">else</span> <span class=\"comment\">// ( FiniteElement::Traits::LocalBasisType::Traits::dimRange != 1 )</span></div>\n-<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> {</div>\n-<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> <span class=\"comment\">// for all other finite elements: use the FiniteElementRange directly for the interpolation</span></div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> <span class=\"keyword\">auto</span> localF = [&](<span class=\"keyword\">const</span> LocalDomain& x){</div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& y = localF_(x);</div>\n-<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> <span class=\"keywordflow\">return</span> FiniteElementRange(nodeToRangeEntry_(node, treePath, y));</div>\n-<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> };</div>\n-<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> </div>\n-<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> fe.localInterpolation().interpolate(localF, interpolationCoefficients);</div>\n-<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<fe.localBasis().size(); ++i)</div>\n-<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> {</div>\n-<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> <span class=\"keyword\">auto</span> multiIndex = localView_.index(node.localIndex(i));</div>\n-<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> <span class=\"keywordflow\">if</span> ( bitVector_[multiIndex] )</div>\n-<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> {</div>\n-<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> vector_[multiIndex] = interpolationCoefficients[i];</div>\n-<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> }</div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> }</div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> }</div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> }</div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> </div>\n-<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> </div>\n-<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span><span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> </div>\n-<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> VectorBackend& vector_;</div>\n-<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> <span class=\"keyword\">const</span> LocalFunction& localF_;</div>\n-<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> <span class=\"keyword\">const</span> BitVectorBackend& bitVector_;</div>\n-<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> <span class=\"keyword\">const</span> LocalView& localView_;</div>\n-<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> <span class=\"keyword\">const</span> NodeToRangeEntry& nodeToRangeEntry_;</div>\n-<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span>};</div>\n-<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> </div>\n-<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> </div>\n-<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span>} <span class=\"comment\">// namespace Imp</span></div>\n-<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> </div>\n-<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> </div>\n-<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> </div>\n-<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span> </div>\n-<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span><span class=\"keyword\">template</span> <<span class=\"keyword\">class</span> B, <span class=\"keyword\">class</span> C, <span class=\"keyword\">class</span> F, <span class=\"keyword\">class</span> BV, <span class=\"keyword\">class</span> NTRE></div>\n-<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a13b0c6bf02d744e7b2078d1a535b5211\"> 202</a></span><span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a00219.html#a13b0c6bf02d744e7b2078d1a535b5211\">interpolate</a>(<span class=\"keyword\">const</span> B& basis, C&& coeff, <span class=\"keyword\">const</span> F& f, <span class=\"keyword\">const</span> BV& bv, <span class=\"keyword\">const</span> NTRE& nodeToRangeEntry)</div>\n-<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span>{</div>\n-<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> <span class=\"keyword\">using </span>GridView = <span class=\"keyword\">typename</span> B::GridView;</div>\n-<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span> <span class=\"keyword\">using </span>Element = <span class=\"keyword\">typename</span> GridView::template Codim<0>::Entity;</div>\n-<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> </div>\n-<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> <span class=\"keyword\">using </span>Tree = <span class=\"keyword\">typename</span> B::LocalView::Tree;</div>\n-<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span> </div>\n-<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> <span class=\"keyword\">using </span>GlobalDomain = <span class=\"keyword\">typename</span> Element::Geometry::GlobalCoordinate;</div>\n-<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> </div>\n-<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> <span class=\"keyword\">static_assert</span>(Dune::Functions::Concept::isCallable<F, GlobalDomain>(), <span class=\"stringliteral\">"Function passed to interpolate does not model the Callable<GlobalCoordinate> concept"</span>);</div>\n-<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"> 212</span> </div>\n-<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span> <span class=\"keyword\">auto</span>&& gridView = basis.gridView();</div>\n-<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> </div>\n-<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> <span class=\"comment\">// Small helper functions to wrap vectors using istlVectorBackend</span></div>\n-<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span> <span class=\"comment\">// if they do not already satisfy the VectorBackend interface.</span></div>\n-<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> <span class=\"keyword\">auto</span> toVectorBackend = [&](<span class=\"keyword\">auto</span>& v) -> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) {</div>\n-<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> (models<Concept::VectorBackend<B>, <span class=\"keyword\">decltype</span>(v)>()) {</div>\n-<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> <span class=\"keywordflow\">return</span> v;</div>\n-<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span> } <span class=\"keywordflow\">else</span> {</div>\n-<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00214.html#gae5b9f62f85e3d638423142695a74d056\">istlVectorBackend</a>(v);</div>\n-<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span> }</div>\n-<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> };</div>\n-<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> </div>\n-<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span> <span class=\"keyword\">auto</span> toConstVectorBackend = [&](<span class=\"keyword\">auto</span>& v) -> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) {</div>\n-<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> (models<Concept::ConstVectorBackend<B>, <span class=\"keyword\">decltype</span>(v)>()) {</div>\n-<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> <span class=\"keywordflow\">return</span> v;</div>\n-<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> } <span class=\"keywordflow\">else</span> {</div>\n-<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00214.html#gae5b9f62f85e3d638423142695a74d056\">istlVectorBackend</a>(v);</div>\n-<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span> }</div>\n-<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span> };</div>\n-<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> </div>\n-<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> <span class=\"keyword\">auto</span>&& bitVector = toConstVectorBackend(bv);</div>\n-<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> <span class=\"keyword\">auto</span>&& vector = toVectorBackend(coeff);</div>\n-<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> vector.resize(<a class=\"code hl_function\" href=\"a00219.html#abd7e25a89325dbe2232b17308dae45f2\">sizeInfo</a>(basis));</div>\n-<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span> </div>\n-<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span> </div>\n-<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span> </div>\n-<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span> <span class=\"comment\">// Make a grid function supporting local evaluation out of f</span></div>\n-<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"> 240</span> <span class=\"keyword\">auto</span> gf = <a class=\"code hl_function\" href=\"a00219.html#ab31121faf1c753f425b7360cedeb9a6a\">makeGridViewFunction</a>(f, gridView);</div>\n-<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span> </div>\n-<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span> <span class=\"comment\">// Obtain a local view of f</span></div>\n-<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> <span class=\"keyword\">auto</span> localF = localFunction(gf);</div>\n-<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> </div>\n-<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> <span class=\"keyword\">auto</span> localView = basis.localView();</div>\n-<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span> </div>\n-<div class=\"line\"><a id=\"l00247\" name=\"l00247\"></a><span class=\"lineno\"> 247</span> <span class=\"keywordflow\">for</span> (<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& e : elements(gridView))</div>\n-<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"> 248</span> {</div>\n-<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span> localView.bind(e);</div>\n-<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span> localF.bind(e);</div>\n-<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span> </div>\n-<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span> Imp::LocalInterpolateVisitor<B, Tree, NTRE, <span class=\"keyword\">decltype</span>(vector), <span class=\"keyword\">decltype</span>(localF), <span class=\"keyword\">decltype</span>(bitVector)> localInterpolateVisitor(basis, vector, bitVector, localF, localView, nodeToRangeEntry);</div>\n-<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"> 253</span> TypeTree::applyToTree(localView.tree(),localInterpolateVisitor);</div>\n-<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"> 254</span> }</div>\n-<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span>}</div>\n-<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"> 256</span> </div>\n-<div class=\"line\"><a id=\"l00273\" name=\"l00273\"></a><span class=\"lineno\"> 273</span><span class=\"keyword\">template</span> <<span class=\"keyword\">class</span> B, <span class=\"keyword\">class</span> C, <span class=\"keyword\">class</span> F, <span class=\"keyword\">class</span> BV></div>\n-<div class=\"line\"><a id=\"l00274\" name=\"l00274\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#ae167dc7b5ace0ff9617a3205b05744b5\"> 274</a></span><span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a00219.html#a13b0c6bf02d744e7b2078d1a535b5211\">interpolate</a>(<span class=\"keyword\">const</span> B& basis, C&& coeff, <span class=\"keyword\">const</span> F& f, <span class=\"keyword\">const</span> BV& bitVector)</div>\n-<div class=\"line\"><a id=\"l00275\" name=\"l00275\"></a><span class=\"lineno\"> 275</span>{</div>\n-<div class=\"line\"><a id=\"l00276\" name=\"l00276\"></a><span class=\"lineno\"> 276</span> <a class=\"code hl_function\" href=\"a00219.html#a13b0c6bf02d744e7b2078d1a535b5211\">interpolate</a>(basis, coeff, f, bitVector, <a class=\"code hl_struct\" href=\"a01627.html\">HierarchicNodeToRangeMap</a>());</div>\n-<div class=\"line\"><a id=\"l00277\" name=\"l00277\"></a><span class=\"lineno\"> 277</span>}</div>\n-<div class=\"line\"><a id=\"l00278\" name=\"l00278\"></a><span class=\"lineno\"> 278</span> </div>\n-<div class=\"line\"><a id=\"l00293\" name=\"l00293\"></a><span class=\"lineno\"> 293</span><span class=\"keyword\">template</span> <<span class=\"keyword\">class</span> B, <span class=\"keyword\">class</span> C, <span class=\"keyword\">class</span> F></div>\n-<div class=\"line\"><a id=\"l00294\" name=\"l00294\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a2e34859322800ae26a292903910ef9f7\"> 294</a></span><span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a00219.html#a13b0c6bf02d744e7b2078d1a535b5211\">interpolate</a>(<span class=\"keyword\">const</span> B& basis, C&& coeff, <span class=\"keyword\">const</span> F& f)</div>\n-<div class=\"line\"><a id=\"l00295\" name=\"l00295\"></a><span class=\"lineno\"> 295</span>{</div>\n-<div class=\"line\"><a id=\"l00296\" name=\"l00296\"></a><span class=\"lineno\"> 296</span> <a class=\"code hl_function\" href=\"a00219.html#a13b0c6bf02d744e7b2078d1a535b5211\">interpolate</a> (basis, coeff, f, Imp::AllTrueBitSetVector(), <a class=\"code hl_struct\" href=\"a01627.html\">HierarchicNodeToRangeMap</a>());</div>\n-<div class=\"line\"><a id=\"l00297\" name=\"l00297\"></a><span class=\"lineno\"> 297</span>}</div>\n-<div class=\"line\"><a id=\"l00298\" name=\"l00298\"></a><span class=\"lineno\"> 298</span> </div>\n-<div class=\"line\"><a id=\"l00299\" name=\"l00299\"></a><span class=\"lineno\"> 299</span>} <span class=\"comment\">// namespace Functions</span></div>\n-<div class=\"line\"><a id=\"l00300\" name=\"l00300\"></a><span class=\"lineno\"> 300</span>} <span class=\"comment\">// namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00301\" name=\"l00301\"></a><span class=\"lineno\"> 301</span> </div>\n-<div class=\"line\"><a id=\"l00302\" name=\"l00302\"></a><span class=\"lineno\"> 302</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH</span></div>\n-<div class=\"ttc\" id=\"aa00011_html\"><div class=\"ttname\"><a href=\"a00011.html\">istlvectorbackend.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00038_html\"><div class=\"ttname\"><a href=\"a00038.html\">gridviewfunction.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00053_html\"><div class=\"ttname\"><a href=\"a00053.html\">functionconcepts.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00128_html\"><div class=\"ttname\"><a href=\"a00128.html\">flatvectorview.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00155_html\"><div class=\"ttname\"><a href=\"a00155.html\">sizeinfo.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00164_html\"><div class=\"ttname\"><a href=\"a00164.html\">hierarchicnodetorangemap.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00214_html_gae5b9f62f85e3d638423142695a74d056\"><div class=\"ttname\"><a href=\"a00214.html#gae5b9f62f85e3d638423142695a74d056\">Dune::Functions::istlVectorBackend</a></div><div class=\"ttdeci\">auto istlVectorBackend(Vector &v)</div><div class=\"ttdoc\">Return a vector backend wrapping non-const ISTL like containers.</div><div class=\"ttdef\"><b>Definition:</b> istlvectorbackend.hh:346</div></div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>Node, <span class=\"keyword\">class </span>TreePath, <span class=\"keyword\">class </span>Range,</div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> std::enable_if_t<not models<Concept::HasIndexAccess, Range, Dune::index_constant<0>>(), <span class=\"keywordtype\">int</span>> = 0></div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01627.html#a7122457e9d3aad7c63a2184012f26566\"> 40</a></span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <a class=\"code hl_function\" href=\"a01627.html#a7122457e9d3aad7c63a2184012f26566\">operator()</a>(<span class=\"keyword\">const</span> Node&, <span class=\"keyword\">const</span> TreePath&, Range&& y)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> <span class=\"keywordflow\">return</span> std::forward<Range>(y);</div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> }</div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span>};</div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> </div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> </div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span>} <span class=\"comment\">// namespace Dune::Functions</span></div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span>} <span class=\"comment\">// namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> </div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> </div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH</span></div>\n+<div class=\"ttc\" id=\"aa00062_html\"><div class=\"ttname\"><a href=\"a00062.html\">indexaccess.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00215_html_ga4cc6af2842348271c242c048e0411637\"><div class=\"ttname\"><a href=\"a00215.html#ga4cc6af2842348271c242c048e0411637\">Dune::Functions::resolveStaticMultiIndex</a></div><div class=\"ttdeci\">constexpr decltype(auto) resolveStaticMultiIndex(C &&c, const MultiIndex &multiIndex)</div><div class=\"ttdoc\">Provide multi-index access by chaining operator[].</div><div class=\"ttdef\"><b>Definition:</b> indexaccess.hh:398</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa00219_html_a13b0c6bf02d744e7b2078d1a535b5211\"><div class=\"ttname\"><a href=\"a00219.html#a13b0c6bf02d744e7b2078d1a535b5211\">Dune::Functions::interpolate</a></div><div class=\"ttdeci\">void interpolate(const B &basis, C &&coeff, const F &f, const BV &bv, const NTRE &nodeToRangeEntry)</div><div class=\"ttdoc\">Interpolate given function in discrete function space.</div><div class=\"ttdef\"><b>Definition:</b> interpolate.hh:202</div></div>\n-<div class=\"ttc\" id=\"aa00219_html_ab31121faf1c753f425b7360cedeb9a6a\"><div class=\"ttname\"><a href=\"a00219.html#ab31121faf1c753f425b7360cedeb9a6a\">Dune::Functions::makeGridViewFunction</a></div><div class=\"ttdeci\">std::decay< F >::type makeGridViewFunction(F &&f, const GridView &gridView)</div><div class=\"ttdoc\">Construct a function modeling GridViewFunction from function and grid view.</div><div class=\"ttdef\"><b>Definition:</b> gridviewfunction.hh:68</div></div>\n-<div class=\"ttc\" id=\"aa00219_html_abd7e25a89325dbe2232b17308dae45f2\"><div class=\"ttname\"><a href=\"a00219.html#abd7e25a89325dbe2232b17308dae45f2\">Dune::Functions::sizeInfo</a></div><div class=\"ttdeci\">SizeInfo< Basis > sizeInfo(const Basis &basis)</div><div class=\"ttdef\"><b>Definition:</b> sizeinfo.hh:69</div></div>\n-<div class=\"ttc\" id=\"aa00219_html_ad98b265d97ebd619e7732df6a8d1f7da\"><div class=\"ttname\"><a href=\"a00219.html#ad98b265d97ebd619e7732df6a8d1f7da\">Dune::Functions::flatVectorView</a></div><div class=\"ttdeci\">auto flatVectorView(T &t)</div><div class=\"ttdoc\">Create flat vector view of passed mutable container.</div><div class=\"ttdef\"><b>Definition:</b> flatvectorview.hh:179</div></div>\n <div class=\"ttc\" id=\"aa01627_html\"><div class=\"ttname\"><a href=\"a01627.html\">Dune::Functions::HierarchicNodeToRangeMap</a></div><div class=\"ttdoc\">A simple node to range map using the nested tree indices.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicnodetorangemap.hh:30</div></div>\n-<div class=\"ttc\" id=\"aa02873_html\"><div class=\"ttname\"><a href=\"a02873.html\">concepts.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa01627_html_a6bcd58a4ffb8c3d2ed7fb0a8e17f1e5a\"><div class=\"ttname\"><a href=\"a01627.html#a6bcd58a4ffb8c3d2ed7fb0a8e17f1e5a\">Dune::Functions::HierarchicNodeToRangeMap::operator()</a></div><div class=\"ttdeci\">decltype(auto) operator()(const Node &, const TreePath &treePath, Range &&y) const</div><div class=\"ttdef\"><b>Definition:</b> hierarchicnodetorangemap.hh:33</div></div>\n+<div class=\"ttc\" id=\"aa01627_html_a7122457e9d3aad7c63a2184012f26566\"><div class=\"ttname\"><a href=\"a01627.html#a7122457e9d3aad7c63a2184012f26566\">Dune::Functions::HierarchicNodeToRangeMap::operator()</a></div><div class=\"ttdeci\">decltype(auto) operator()(const Node &, const TreePath &, Range &&y) const</div><div class=\"ttdef\"><b>Definition:</b> hierarchicnodetorangemap.hh:40</div></div>\n+<div class=\"ttc\" id=\"aa02876_html\"><div class=\"ttname\"><a href=\"a02876.html\">concepts.hh</a></div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,315 +5,77 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-interpolate.hh\n+hierarchicnodetorangemap.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH\n- 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH\n+ 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH\n+ 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH\n 5\n- 6#include <memory>\n- 7#include <vector>\n- 8\n- 9#include <dune/common/exceptions.hh>\n- 10#include <dune/common/bitsetvector.hh>\n+ 6\n+ 7#include <utility>\n+ 8#include <type_traits>\n+ 9\n+ 10#include <dune/common/concept.hh>\n 11\n- 12#include <dune/typetree/childextraction.hh>\n- 13\n- 14#include <dune/functions/gridfunctions/gridviewfunction.hh>\n- 15#include <dune/functions/common/functionconcepts.hh>\n- 16\n- 17#include <dune/functions/backends/concepts.hh>\n- 18#include <dune/functions/backends/istlvectorbackend.hh>\n- 19#include <dune/functions/functionspacebases/sizeinfo.hh>\n- 20#include <dune/functions/functionspacebases/flatvectorview.hh>\n- 21#include <dune/functions/functionspacebases/hierarchicnodetorangemap.hh>\n- 22\n- 23#include <dune/typetree/traversal.hh>\n- 24#include <dune/typetree/visitor.hh>\n- 25\n- 26namespace Dune {\n- 27namespace Functions {\n- 28\n- 29namespace Imp {\n- 30\n- 31struct AllTrueBitSetVector\n- 32{\n- 33 struct AllTrueBitSet\n+ 12#include <dune/functions/functionspacebases/concepts.hh>\n+ 13#include <dune/functions/common/indexaccess.hh>\n+ 14\n+ 15namespace Dune {\n+ 16namespace Functions {\n+ 17\n+ 18\n+ 19\n+29struct HierarchicNodeToRangeMap\n+ 30{\n+ 31 template<class Node, class TreePath, class Range,\n+ 32 std::enable_if_t< models<Concept::HasIndexAccess, Range, Dune::\n+index_constant<0>>(), int> = 0>\n+33 decltype(auto) operator()(const Node&, const TreePath& treePath, Range&& y)\n+const\n 34 {\n- 35 bool test(int) const { return true; }\n- 36 } allTrue_;\n+ 35 return resolveStaticMultiIndex(y, treePath);\n+ 36 }\n 37\n- 38 operator bool() const\n- 39 {\n- 40 return true;\n- 41 }\n- 42\n- 43 template<class I>\n- 44 const AllTrueBitSetVector& operator[](const I&) const\n- 45 {\n- 46 return *this;\n- 47 }\n- 48\n- 49 template<class SP>\n- 50 void resize(const SP&) const\n- 51 {}\n- 52\n- 53};\n- 54\n- 55\n- 56\n- 57template <class B, class T, class NTRE, class HV, class LF, class HBV>\n- 58class LocalInterpolateVisitor\n- 59 : public TypeTree::TreeVisitor\n- 60 , public TypeTree::DynamicTraversal\n- 61{\n- 62\n- 63public:\n- 64\n- 65 using Basis = B;\n- 66 using LocalView = typename B::LocalView;\n- 67 using MultiIndex = typename LocalView::MultiIndex;\n- 68\n- 69 using LocalFunction = LF;\n- 70\n- 71 using Tree = T;\n- 72\n- 73 using VectorBackend = HV;\n- 74 using BitVectorBackend = HBV;\n- 75\n- 76 using NodeToRangeEntry = NTRE;\n- 77\n- 78 using GridView = typename Basis::GridView;\n- 79 using Element = typename GridView::template Codim<0>::Entity;\n- 80\n- 81 using LocalDomain = typename Element::Geometry::LocalCoordinate;\n- 82\n- 83 using GlobalDomain = typename Element::Geometry::GlobalCoordinate;\n- 84\n- 85 LocalInterpolateVisitor(const B& /*basis*/, HV& coeff, const HBV&\n-bitVector, const LF& localF, const LocalView& localView, const\n-NodeToRangeEntry& nodeToRangeEntry) :\n- 86 vector_(coeff),\n- 87 localF_(localF),\n- 88 bitVector_(bitVector),\n- 89 localView_(localView),\n- 90 nodeToRangeEntry_(nodeToRangeEntry)\n- 91 {\n- 92 static_assert(Dune::Functions::Concept::isCallable<LocalFunction,\n-LocalDomain>(), \"Function passed to LocalInterpolateVisitor does not model the\n-Callable<LocalCoordinate> concept\");\n- 93 }\n- 94\n- 95 template<typename Node, typename TreePath>\n- 96 void pre(Node&, TreePath)\n- 97 {}\n- 98\n- 99 template<typename Node, typename TreePath>\n- 100 void post(Node&, TreePath)\n- 101 {}\n- 102\n- 103 template<typename Node, typename TreePath>\n- 104 void leaf(Node& node, TreePath treePath)\n- 105 {\n- 106 using FiniteElement = typename Node::FiniteElement;\n- 107 using FiniteElementRange = typename FiniteElement::Traits::\n-LocalBasisType::Traits::RangeType;\n- 108 using FiniteElementRangeField = typename FiniteElement::Traits::\n-LocalBasisType::Traits::RangeFieldType;\n- 109\n- 110 auto interpolationCoefficients = std::vector<FiniteElementRangeField>();\n- 111 auto&& fe = node.finiteElement();\n- 112\n- 113 // backward compatibility: for scalar basis functions and possibly vector\n-valued coefficients\n- 114 // (like used in dune-fufem for power bases) loop over the components\n- 115 // of the coefficients\n- 116 if constexpr ( FiniteElement::Traits::LocalBasisType::Traits::dimRange ==\n-1 )\n- 117 {\n- 118 // Note that we capture j by reference. Hence we can switch\n- 119 // the selected component later on by modifying j. Maybe we\n- 120 // should avoid this naughty statefull lambda hack in favor\n- 121 // of a separate helper class.\n- 122 std::size_t j=0;\n- 123 auto localFj = [&](const LocalDomain& x){\n- 124 const auto& y = localF_(x);\n- 125 return FiniteElementRange(flatVectorView(nodeToRangeEntry_(node, treePath,\n-y))[j]);\n- 126 };\n- 127\n- 128 // We loop over j defined above and thus over the components of the\n- 129 // range type of localF_.\n- 130\n- 131 auto blockSize = flatVectorView(vector_[localView_.index(0)]).size();\n- 132\n- 133 for(j=0; j<blockSize; ++j)\n- 134 {\n- 135 fe.localInterpolation().interpolate(localFj, interpolationCoefficients);\n- 136 for (size_t i=0; i<fe.localBasis().size(); ++i)\n- 137 {\n- 138 auto multiIndex = localView_.index(node.localIndex(i));\n- 139 auto bitVectorBlock = flatVectorView(bitVector_[multiIndex]);\n- 140 if (bitVectorBlock[j])\n- 141 {\n- 142 auto vectorBlock = flatVectorView(vector_[multiIndex]);\n- 143 vectorBlock[j] = interpolationCoefficients[i];\n- 144 }\n- 145 }\n- 146 }\n- 147 }\n- 148 else // ( FiniteElement::Traits::LocalBasisType::Traits::dimRange != 1 )\n- 149 {\n- 150 // for all other finite elements: use the FiniteElementRange directly for\n-the interpolation\n- 151 auto localF = [&](const LocalDomain& x){\n- 152 const auto& y = localF_(x);\n- 153 return FiniteElementRange(nodeToRangeEntry_(node, treePath, y));\n- 154 };\n- 155\n- 156 fe.localInterpolation().interpolate(localF, interpolationCoefficients);\n- 157 for (size_t i=0; i<fe.localBasis().size(); ++i)\n- 158 {\n- 159 auto multiIndex = localView_.index(node.localIndex(i));\n- 160 if ( bitVector_[multiIndex] )\n- 161 {\n- 162 vector_[multiIndex] = interpolationCoefficients[i];\n- 163 }\n- 164 }\n- 165 }\n- 166 }\n- 167\n- 168\n- 169protected:\n- 170\n- 171 VectorBackend& vector_;\n- 172 const LocalFunction& localF_;\n- 173 const BitVectorBackend& bitVector_;\n- 174 const LocalView& localView_;\n- 175 const NodeToRangeEntry& nodeToRangeEntry_;\n- 176};\n- 177\n- 178\n- 179} // namespace Imp\n- 180\n- 181\n- 182\n- 183\n- 201template <class B, class C, class F, class BV, class NTRE>\n-202void interpolate(const B& basis, C&& coeff, const F& f, const BV& bv, const\n-NTRE& nodeToRangeEntry)\n- 203{\n- 204 using GridView = typename B::GridView;\n- 205 using Element = typename GridView::template Codim<0>::Entity;\n- 206\n- 207 using Tree = typename B::LocalView::Tree;\n- 208\n- 209 using GlobalDomain = typename Element::Geometry::GlobalCoordinate;\n- 210\n- 211 static_assert(Dune::Functions::Concept::isCallable<F, GlobalDomain>(),\n-\"Function passed to interpolate does not model the Callable<GlobalCoordinate>\n-concept\");\n- 212\n- 213 auto&& gridView = basis.gridView();\n- 214\n- 215 // Small helper functions to wrap vectors using istlVectorBackend\n- 216 // if they do not already satisfy the VectorBackend interface.\n- 217 auto toVectorBackend = [&](auto& v) -> decltype(auto) {\n- 218 if constexpr (models<Concept::VectorBackend<B>, decltype(v)>()) {\n- 219 return v;\n- 220 } else {\n- 221 return istlVectorBackend(v);\n- 222 }\n- 223 };\n- 224\n- 225 auto toConstVectorBackend = [&](auto& v) -> decltype(auto) {\n- 226 if constexpr (models<Concept::ConstVectorBackend<B>, decltype(v)>()) {\n- 227 return v;\n- 228 } else {\n- 229 return istlVectorBackend(v);\n- 230 }\n- 231 };\n- 232\n- 233 auto&& bitVector = toConstVectorBackend(bv);\n- 234 auto&& vector = toVectorBackend(coeff);\n- 235 vector.resize(sizeInfo(basis));\n- 236\n- 237\n- 238\n- 239 // Make a grid function supporting local evaluation out of f\n- 240 auto gf = makeGridViewFunction(f, gridView);\n- 241\n- 242 // Obtain a local view of f\n- 243 auto localF = localFunction(gf);\n- 244\n- 245 auto localView = basis.localView();\n- 246\n- 247 for (const auto& e : elements(gridView))\n- 248 {\n- 249 localView.bind(e);\n- 250 localF.bind(e);\n- 251\n- 252 Imp::LocalInterpolateVisitor<B, Tree, NTRE, decltype(vector), decltype\n-(localF), decltype(bitVector)> localInterpolateVisitor(basis, vector,\n-bitVector, localF, localView, nodeToRangeEntry);\n- 253 TypeTree::applyToTree(localView.tree(),localInterpolateVisitor);\n- 254 }\n- 255}\n- 256\n- 273template <class B, class C, class F, class BV>\n-274void interpolate(const B& basis, C&& coeff, const F& f, const BV& bitVector)\n- 275{\n- 276 interpolate(basis, coeff, f, bitVector, HierarchicNodeToRangeMap());\n- 277}\n- 278\n- 293template <class B, class C, class F>\n-294void interpolate(const B& basis, C&& coeff, const F& f)\n- 295{\n- 296 interpolate (basis, coeff, f, Imp::AllTrueBitSetVector(),\n-HierarchicNodeToRangeMap());\n- 297}\n- 298\n- 299} // namespace Functions\n- 300} // namespace Dune\n- 301\n- 302#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_INTERPOLATE_HH\n-istlvectorbackend.hh\n-gridviewfunction.hh\n-functionconcepts.hh\n-flatvectorview.hh\n-sizeinfo.hh\n-hierarchicnodetorangemap.hh\n-Dune::Functions::istlVectorBackend\n-auto istlVectorBackend(Vector &v)\n-Return a vector backend wrapping non-const ISTL like containers.\n-Definition: istlvectorbackend.hh:346\n+ 38 template<class Node, class TreePath, class Range,\n+ 39 std::enable_if_t<not models<Concept::HasIndexAccess, Range, Dune::\n+index_constant<0>>(), int> = 0>\n+40 decltype(auto) operator()(const Node&, const TreePath&, Range&& y) const\n+ 41 {\n+ 42 return std::forward<Range>(y);\n+ 43 }\n+ 44};\n+ 45\n+ 46\n+ 47\n+ 48} // namespace Dune::Functions\n+ 49} // namespace Dune\n+ 50\n+ 51\n+ 52#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICNODETORANGEMAP_HH\n+indexaccess.hh\n+Dune::Functions::resolveStaticMultiIndex\n+constexpr decltype(auto) resolveStaticMultiIndex(C &&c, const MultiIndex\n+&multiIndex)\n+Provide multi-index access by chaining operator[].\n+Definition: indexaccess.hh:398\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::interpolate\n-void interpolate(const B &basis, C &&coeff, const F &f, const BV &bv, const\n-NTRE &nodeToRangeEntry)\n-Interpolate given function in discrete function space.\n-Definition: interpolate.hh:202\n-Dune::Functions::makeGridViewFunction\n-std::decay< F >::type makeGridViewFunction(F &&f, const GridView &gridView)\n-Construct a function modeling GridViewFunction from function and grid view.\n-Definition: gridviewfunction.hh:68\n-Dune::Functions::sizeInfo\n-SizeInfo< Basis > sizeInfo(const Basis &basis)\n-Definition: sizeinfo.hh:69\n-Dune::Functions::flatVectorView\n-auto flatVectorView(T &t)\n-Create flat vector view of passed mutable container.\n-Definition: flatvectorview.hh:179\n Dune::Functions::HierarchicNodeToRangeMap\n A simple node to range map using the nested tree indices.\n Definition: hierarchicnodetorangemap.hh:30\n+Dune::Functions::HierarchicNodeToRangeMap::operator()\n+decltype(auto) operator()(const Node &, const TreePath &treePath, Range &&y)\n+const\n+Definition: hierarchicnodetorangemap.hh:33\n+Dune::Functions::HierarchicNodeToRangeMap::operator()\n+decltype(auto) operator()(const Node &, const TreePath &, Range &&y) const\n+Definition: hierarchicnodetorangemap.hh:40\n concepts.hh\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00173.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00173.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: defaultnodetorangemap.hh File Reference</title>\n+<title>dune-functions: hierarchicvectorwrapper.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -66,47 +66,51 @@\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> |\n <a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">defaultnodetorangemap.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">hierarchicvectorwrapper.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <div class=\"textblock\"><code>#include <dune/common/concept.hh></code><br />\n+<code>#include <dune/common/hybridutilities.hh></code><br />\n+<code>#include <dune/common/indices.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00062_source.html\">dune/functions/common/indexaccess.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00041_source.html\">dune/functions/common/utility.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00029_source.html\">dune/functions/common/type_traits.hh</a>></code><br />\n <code>#include <<a class=\"el\" href=\"a02876_source.html\">dune/functions/functionspacebases/concepts.hh</a>></code><br />\n-<code>#include <dune/typetree/traversal.hh></code><br />\n-<code>#include <dune/typetree/visitor.hh></code><br />\n </div>\n <p><a href=\"a00173_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01563.html\">Dune::Functions::DefaultNodeToRangeMap< Tree ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A simple node to range map using lexicographic ordering. <a href=\"a01563.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01567.html\">Dune::Functions::DefaultNodeToRangeMap< Tree >::Visitor</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01647.html\">Dune::Functions::HierarchicVectorWrapper< V, CO ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A wrapper providing multiindex access to vector entries. <a href=\"a01647.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n Functions</h2></td></tr>\n-<tr class=\"memitem:a37dfd0fc94784b1ffe3050d87b37ad76\"><td class=\"memTemplParams\" colspan=\"2\">template<class Tree > </td></tr>\n-<tr class=\"memitem:a37dfd0fc94784b1ffe3050d87b37ad76\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">DefaultNodeToRangeMap< Tree > </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a37dfd0fc94784b1ffe3050d87b37ad76\">Dune::Functions::makeDefaultNodeToRangeMap</a> (const Tree &tree)</td></tr>\n-<tr class=\"separator:a37dfd0fc94784b1ffe3050d87b37ad76\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:ad5971c4cc40d4d8a400ef5fe9e596350\"><td class=\"memTemplParams\" colspan=\"2\">template<class Basis , class TreePath > </td></tr>\n-<tr class=\"memitem:ad5971c4cc40d4d8a400ef5fe9e596350\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#ad5971c4cc40d4d8a400ef5fe9e596350\">Dune::Functions::makeDefaultNodeToRangeMap</a> (const Basis &basis, TreePath &&treePath) -> decltype(makeDefaultNodeToRangeMap(TypeTree::child(basis.localView().tree(), treePath)))</td></tr>\n-<tr class=\"separator:ad5971c4cc40d4d8a400ef5fe9e596350\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:aa74497c764d8ce0b365abae3637dadc8\"><td class=\"memTemplParams\" colspan=\"2\">template<class V > </td></tr>\n+<tr class=\"memitem:aa74497c764d8ce0b365abae3637dadc8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">HierarchicVectorWrapper< V > </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#aa74497c764d8ce0b365abae3637dadc8\">Dune::Functions::hierarchicVector</a> (V &v)</td></tr>\n+<tr class=\"separator:aa74497c764d8ce0b365abae3637dadc8\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a5c705706be679d2a462e38b08274ad33\"><td class=\"memTemplParams\" colspan=\"2\">template<class MultiIndex , class V , typename std::enable_if< models< Concept::HasIndexAccess, V, MultiIndex >(), int >::type = 0> </td></tr>\n+<tr class=\"memitem:a5c705706be679d2a462e38b08274ad33\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">V & </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a5c705706be679d2a462e38b08274ad33\">Dune::Functions::makeHierarchicVectorForMultiIndex</a> (V &v)</td></tr>\n+<tr class=\"separator:a5c705706be679d2a462e38b08274ad33\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ae48bf799daaf0751086b47457350675e\"><td class=\"memTemplParams\" colspan=\"2\">template<class MultiIndex , class V , typename std::enable_if< not models< Concept::HasIndexAccess, V, MultiIndex >(), int >::type = 0> </td></tr>\n+<tr class=\"memitem:ae48bf799daaf0751086b47457350675e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">HierarchicVectorWrapper< V > </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#ae48bf799daaf0751086b47457350675e\">Dune::Functions::makeHierarchicVectorForMultiIndex</a> (V &v)</td></tr>\n+<tr class=\"separator:ae48bf799daaf0751086b47457350675e\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -6,38 +6,42 @@\n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n Classes | Namespaces | Functions\n-defaultnodetorangemap.hh File Reference\n+hierarchicvectorwrapper.hh File Reference\n #include <dune/common/concept.hh>\n+#include <dune/common/hybridutilities.hh>\n+#include <dune/common/indices.hh>\n+#include <dune/functions/common/indexaccess.hh>\n+#include <dune/functions/common/utility.hh>\n+#include <dune/functions/common/type_traits.hh>\n #include <dune/functions/functionspacebases/concepts.hh>\n-#include <dune/typetree/traversal.hh>\n-#include <dune/typetree/visitor.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-struct \u00a0Dune::Functions::DefaultNodeToRangeMap<_Tree_>\n-\u00a0 A simple node to range map using lexicographic ordering. More...\n-\u00a0\n-struct \u00a0Dune::Functions::DefaultNodeToRangeMap<_Tree_>::Visitor\n+class \u00a0Dune::Functions::HierarchicVectorWrapper<_V,_CO_>\n+\u00a0 A wrapper providing multiindex access to vector entries. More...\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n Functions\n-template<class Tree >\n-DefaultNodeToRangeMap< Tree >\u00a0Dune::Functions::makeDefaultNodeToRangeMap\n- (const Tree &tree)\n-\u00a0\n-template<class Basis , class TreePath >\n- auto\u00a0Dune::Functions::makeDefaultNodeToRangeMap\n- (const Basis &basis, TreePath &&treePath) -\n- > decltype(makeDefaultNodeToRangeMap(TypeTree::\n- child(basis.localView().tree(), treePath)))\n+template<class V >\n+HierarchicVectorWrapper< V >\u00a0Dune::Functions::hierarchicVector (V &v)\n+\u00a0\n+template<class MultiIndex , class V , typename std::enable_if< models<\n+Concept::HasIndexAccess, V, MultiIndex >(), int >::type = 0>\n+ V &\u00a0Dune::Functions::\n+ makeHierarchicVectorForMultiIndex (V &v)\n+\u00a0\n+template<class MultiIndex , class V , typename std::enable_if< not models<\n+Concept::HasIndexAccess, V, MultiIndex >(), int >::type = 0>\n+HierarchicVectorWrapper< V >\u00a0Dune::Functions::\n+ makeHierarchicVectorForMultiIndex (V &v)\n \u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00173_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00173_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: defaultnodetorangemap.hh Source File</title>\n+<title>dune-functions: hierarchicvectorwrapper.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,126 +62,275 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">defaultnodetorangemap.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">hierarchicvectorwrapper.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00173.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span> </div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <dune/common/concept.hh></span></div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a02876.html\">dune/functions/functionspacebases/concepts.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span> </div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/typetree/traversal.hh></span></div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <dune/typetree/visitor.hh></span></div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <dune/common/concept.hh></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <dune/common/hybridutilities.hh></span></div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <dune/common/indices.hh></span></div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00062.html\">dune/functions/common/indexaccess.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00041.html\">dune/functions/common/utility.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00029.html\">dune/functions/common/type_traits.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a02876.html\">dune/functions/functionspacebases/concepts.hh</a>></span></div>\n <div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"keyword\">namespace </span>Functions {</div>\n <div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n <div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Tree></div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01563.html\"> 38</a></span><span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01563.html\">DefaultNodeToRangeMap</a></div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span>{</div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> </div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> <span class=\"comment\">// A simple visitor for computing lexicographic</span></div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> <span class=\"comment\">// subtree indices. To identify a leaf node</span></div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> <span class=\"comment\">// we use its treeIndex() which is unique</span></div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> <span class=\"comment\">// wrt the whole tree and store the computed</span></div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> <span class=\"comment\">// index in a vector indexed by the tree indices.</span></div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01567.html\"> 46</a></span> <span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01567.html\">Visitor</a></div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> : <span class=\"keyword\">public</span> TypeTree::TreeVisitor</div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> , <span class=\"keyword\">public</span> TypeTree::DynamicTraversal</div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> {</div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01567.html#a31bda2d0d2a6e6caaad0c4b54833baaa\"> 50</a></span> <a class=\"code hl_function\" href=\"a01567.html#a31bda2d0d2a6e6caaad0c4b54833baaa\">Visitor</a>(std::vector<std::size_t>& indices) :</div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> <a class=\"code hl_variable\" href=\"a01567.html#ad27dd745d2d84fd89675da8e7a706963\">indices_</a>(indices),</div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> <a class=\"code hl_variable\" href=\"a01567.html#a776d43a445def9066a5ad7b7d524d640\">counter_</a>(0)</div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> {}</div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> </div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath></div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01567.html#a6fa6002b8649337f257a1ba63f487638\"> 56</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01567.html#a6fa6002b8649337f257a1ba63f487638\">leaf</a>(Node& node, TreePath treePath)</div>\n-<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> {</div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> <span class=\"keywordflow\">if</span> (<a class=\"code hl_variable\" href=\"a01567.html#ad27dd745d2d84fd89675da8e7a706963\">indices_</a>.size() < node.treeIndex()+1)</div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> <a class=\"code hl_variable\" href=\"a01567.html#ad27dd745d2d84fd89675da8e7a706963\">indices_</a>.resize(node.treeIndex()+1);</div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> <a class=\"code hl_variable\" href=\"a01567.html#ad27dd745d2d84fd89675da8e7a706963\">indices_</a>[node.treeIndex()] = <a class=\"code hl_variable\" href=\"a01567.html#a776d43a445def9066a5ad7b7d524d640\">counter_</a>;</div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> ++<a class=\"code hl_variable\" href=\"a01567.html#a776d43a445def9066a5ad7b7d524d640\">counter_</a>;</div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> }</div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> </div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01567.html#ad27dd745d2d84fd89675da8e7a706963\"> 64</a></span> std::vector<std::size_t>& <a class=\"code hl_variable\" href=\"a01567.html#ad27dd745d2d84fd89675da8e7a706963\">indices_</a>;</div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01567.html#a776d43a445def9066a5ad7b7d524d640\"> 65</a></span> std::size_t <a class=\"code hl_variable\" href=\"a01567.html#a776d43a445def9066a5ad7b7d524d640\">counter_</a>;</div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> };</div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span> </div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"keyword\">namespace </span>Imp {</div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> </div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span> <span class=\"comment\">// Construct default coefficient type from vector and multiindex type</span></div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> <span class=\"comment\">// This requires that MultiIndex has a static size. Otherwise the</span></div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> <span class=\"comment\">// vector type itself is returned.</span></div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> V, <span class=\"keyword\">class</span> MultiIndex></div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> <span class=\"keyword\">struct </span>CoefficientType</div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> {</div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> E, std::<span class=\"keywordtype\">size_t</span> size></div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> <span class=\"keyword\">struct </span>DefaultCoefficientTypeHelper</div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> {</div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> <span class=\"keyword\">using </span>E0 = <span class=\"keyword\">decltype</span>(std::declval<E>()[Dune::Indices::_0]);</div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> <span class=\"keyword\">using </span>type = <span class=\"keyword\">typename</span> DefaultCoefficientTypeHelper<E0, size-1>::type;</div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> };</div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> </div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> E></div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> <span class=\"keyword\">struct </span>DefaultCoefficientTypeHelper<E, 0></div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> {</div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> <span class=\"keyword\">using </span>type = E;</div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> };</div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> </div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>MI,</div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> <span class=\"keyword\">typename</span> std::enable_if<HasStaticSize<MI>::value, <span class=\"keywordtype\">int</span>>::type = 0></div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> std::size_t getStaticSizeOrZero()</div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> {</div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> <span class=\"keywordflow\">return</span> StaticSize<MI>::value;</div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> }</div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> </div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>MI,</div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> <span class=\"keyword\">typename</span> std::enable_if<not HasStaticSize<MI>::value, <span class=\"keywordtype\">int</span>>::type = 0></div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> std::size_t getStaticSizeOrZero()</div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> {</div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> <span class=\"keywordflow\">return</span> 0;</div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> }</div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> </div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> <span class=\"keyword\">using </span>type = <span class=\"keyword\">typename</span> DefaultCoefficientTypeHelper<V, getStaticSizeOrZero<MultiIndex>()>::type;</div>\n+<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> };</div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> </div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> </div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> </div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> <span class=\"comment\">// This tag class is used as Coefficient template parameter</span></div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> <span class=\"comment\">// for HierarchicVectorWrapper if the coefficient type should</span></div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> <span class=\"comment\">// be deduced.</span></div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> <span class=\"keyword\">struct </span>DeducedCoefficientTag {};</div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> </div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span>} <span class=\"comment\">// namespace Imp</span></div>\n <div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> </div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01563.html#a1f05cfc19a0fd6aeddd0fd441f0e0718\"> 78</a></span> <a class=\"code hl_function\" href=\"a01563.html#a1f05cfc19a0fd6aeddd0fd441f0e0718\">DefaultNodeToRangeMap</a>(<span class=\"keyword\">const</span> Tree& tree)</div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> {</div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> TypeTree::applyToTree(tree, <a class=\"code hl_struct\" href=\"a01567.html\">Visitor</a>(<a class=\"code hl_variable\" href=\"a01563.html#a125d091dadb6d9cd180e65ae5fe93bee\">indices_</a>));</div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> }</div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> </div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>Node, <span class=\"keyword\">class </span>TreePath, <span class=\"keyword\">class </span>Range,</div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> std::enable_if_t<models<Concept::HasIndexAccess, Range, decltype(std::declval<Node>().treeIndex())>() and not Tree::isLeaf, <span class=\"keywordtype\">int</span>> = 0></div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01563.html#aae4c40b619bba5f520878a6288fb702a\"> 85</a></span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <span class=\"keyword\">operator</span>()(<span class=\"keyword\">const</span> Node& node, <span class=\"keyword\">const</span> TreePath& treePath, Range&& y) <span class=\"keyword\">const</span></div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> {</div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> <span class=\"keywordflow\">return</span> y[<a class=\"code hl_variable\" href=\"a01563.html#a125d091dadb6d9cd180e65ae5fe93bee\">indices_</a>[node.treeIndex()]];</div>\n-<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> }</div>\n-<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> </div>\n-<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>Node, <span class=\"keyword\">class </span>TreePath, <span class=\"keyword\">class </span>Range,</div>\n-<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> std::enable_if_t< not models<Concept::HasIndexAccess, Range, decltype(std::declval<Node>().treeIndex())>() or Tree::isLeaf, <span class=\"keywordtype\">int</span>> = 0></div>\n-<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01563.html#aae4c40b619bba5f520878a6288fb702a\"> 92</a></span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <span class=\"keyword\">operator</span>()(<span class=\"keyword\">const</span> Node& node, <span class=\"keyword\">const</span> TreePath& treePath, Range&& y) <span class=\"keyword\">const</span></div>\n-<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> {</div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> <span class=\"keywordflow\">return</span> std::forward<Range>(y);</div>\n-<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> }</div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> </div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01563.html#a125d091dadb6d9cd180e65ae5fe93bee\"> 97</a></span> std::vector<std::size_t> <a class=\"code hl_variable\" href=\"a01563.html#a125d091dadb6d9cd180e65ae5fe93bee\">indices_</a>;</div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span>};</div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> </div>\n+<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> </div>\n+<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> V, <span class=\"keyword\">class</span> CO=Imp::DeducedCoefficientTag></div>\n+<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01647.html\"> 91</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01647.html\">HierarchicVectorWrapper</a></div>\n+<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span>{</div>\n+<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> MultiIndex></div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> <span class=\"keyword\">using </span>Coefficient = <span class=\"keyword\">typename</span> std::conditional< std::is_same<Imp::DeducedCoefficientTag,CO>::value and <a class=\"code hl_struct\" href=\"a01331.html\">HasStaticSize<MultiIndex>::value</a>,</div>\n+<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> <span class=\"keyword\">typename</span> Imp::CoefficientType<V, MultiIndex>::type,</div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> CO</div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> >::type;</div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> </div>\n <div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> </div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> </div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> <span class=\"keyword\">using </span>size_type = std::size_t;</div>\n <div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> </div>\n-<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Tree></div>\n-<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a37dfd0fc94784b1ffe3050d87b37ad76\"> 103</a></span><a class=\"code hl_struct\" href=\"a01563.html\">DefaultNodeToRangeMap<Tree></a> <a class=\"code hl_function\" href=\"a00219.html#a37dfd0fc94784b1ffe3050d87b37ad76\">makeDefaultNodeToRangeMap</a>(<span class=\"keyword\">const</span> Tree& tree)</div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span>{</div>\n-<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_struct\" href=\"a01563.html\">DefaultNodeToRangeMap<Tree></a>(tree);</div>\n-<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span>}</div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> </div>\n-<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> </div>\n-<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> </div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Basis, <span class=\"keyword\">class</span> TreePath></div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#ad5971c4cc40d4d8a400ef5fe9e596350\"> 111</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00219.html#a37dfd0fc94784b1ffe3050d87b37ad76\">makeDefaultNodeToRangeMap</a>(<span class=\"keyword\">const</span> Basis& basis, TreePath&& treePath)</div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> -> <span class=\"keyword\">decltype</span>(<a class=\"code hl_function\" href=\"a00219.html#a37dfd0fc94784b1ffe3050d87b37ad76\">makeDefaultNodeToRangeMap</a>(TypeTree::child(basis.localView().tree(),treePath)))</div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span>{</div>\n-<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> <span class=\"keyword\">auto</span>&& localView = basis.localView();</div>\n-<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> localView.bind(*basis.gridView().template begin<0>());</div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> <span class=\"keyword\">auto</span>&& tree = TypeTree::child(localView.tree(),treePath);</div>\n-<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00219.html#a37dfd0fc94784b1ffe3050d87b37ad76\">makeDefaultNodeToRangeMap</a>(tree);</div>\n-<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span>}</div>\n-<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> </div>\n-<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> </div>\n+<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>C, <span class=\"keyword\">class </span>SizeProvider,</div>\n+<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> <span class=\"keyword\">typename</span> std::enable_if< not models<Concept::HasResize, C>(), <span class=\"keywordtype\">int</span>>::type = 0,</div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> <span class=\"keyword\">typename</span> std::enable_if< not models<Concept::HasSizeMethod, C>(), <span class=\"keywordtype\">int</span>>::type = 0></div>\n+<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> resizeHelper(C& c, <span class=\"keyword\">const</span> SizeProvider& sizeProvider, <span class=\"keyword\">typename</span> SizeProvider::SizePrefix prefix)</div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> {</div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> <span class=\"keyword\">auto</span> size = sizeProvider.size(prefix);</div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> <span class=\"keywordflow\">if</span> (size != 0)</div>\n+<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> DUNE_THROW(RangeError, <span class=\"stringliteral\">"Can't resize scalar vector entry v["</span> << prefix << <span class=\"stringliteral\">"] to size("</span> << prefix << <span class=\"stringliteral\">")="</span> << size);</div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> }</div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> </div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> <span class=\"keyword\">struct </span>StaticResizeHelper</div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> {</div>\n+<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> I, <span class=\"keyword\">class</span> C, <span class=\"keyword\">class</span> SizeProv<span class=\"keywordtype\">id</span>er></div>\n+<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> apply(I&& i, C& c, <span class=\"keyword\">const</span> SizeProvider& sizeProvider, <span class=\"keyword\">typename</span> SizeProvider::SizePrefix prefix)</div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> {</div>\n+<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> prefix.back() = i;</div>\n+<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> resizeHelper(c[i], sizeProvider, prefix);</div>\n+<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> }</div>\n+<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> };</div>\n <div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> </div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span>} <span class=\"comment\">// namespace Dune::Functions</span></div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span>} <span class=\"comment\">// namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> </div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> </div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH</span></div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>C, <span class=\"keyword\">class </span>SizeProvider,</div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> <span class=\"keyword\">typename</span> std::enable_if< not models<Concept::HasResize, C>(), <span class=\"keywordtype\">int</span>>::type = 0,</div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> <span class=\"keyword\">typename</span> std::enable_if< models<Concept::HasSizeMethod, C>(), <span class=\"keywordtype\">int</span>>::type = 0></div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> resizeHelper(C& c, <span class=\"keyword\">const</span> SizeProvider& sizeProvider, <span class=\"keyword\">typename</span> SizeProvider::SizePrefix prefix)</div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> {</div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> <span class=\"keyword\">auto</span> size = sizeProvider.size(prefix);</div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> <span class=\"keywordflow\">if</span> (size == 0)</div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> <span class=\"keywordflow\">return</span>;</div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> </div>\n+<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> <span class=\"keywordflow\">if</span> (c.size() != size)</div>\n+<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> DUNE_THROW(RangeError, <span class=\"stringliteral\">"Can't resize statically sized vector entry v["</span> << prefix << <span class=\"stringliteral\">"] of size "</span> << c.size() << <span class=\"stringliteral\">" to size("</span> << prefix << <span class=\"stringliteral\">")="</span> << size);</div>\n+<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> </div>\n+<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> <span class=\"keyword\">using namespace </span>Dune::Hybrid;</div>\n+<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> prefix.push_back(0);</div>\n+<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> forEach(integralRange(Hybrid::size(c)), [&](<span class=\"keyword\">auto</span>&& i) {</div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> StaticResizeHelper::apply(i, c, sizeProvider, prefix);</div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> });</div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> }</div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> </div>\n+<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>C, <span class=\"keyword\">class </span>SizeProvider,</div>\n+<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> <span class=\"keyword\">typename</span> std::enable_if< models<Concept::HasResize, C>(), <span class=\"keywordtype\">int</span>>::type = 0></div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> resizeHelper(C& c, <span class=\"keyword\">const</span> SizeProvider& sizeProvider, <span class=\"keyword\">typename</span> SizeProvider::SizePrefix prefix)</div>\n+<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> {</div>\n+<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> <span class=\"keyword\">auto</span> size = sizeProvider.size(prefix);</div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> <span class=\"keywordflow\">if</span> (size==0)</div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> {</div>\n+<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> <span class=\"keywordflow\">if</span> (c.size()==0)</div>\n+<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> DUNE_THROW(RangeError, <span class=\"stringliteral\">"Can't resize dynamically sized vector entry v["</span> << prefix << <span class=\"stringliteral\">"]. Its size is 0 but the target size is unknown due to size("</span> << prefix << <span class=\"stringliteral\">")=0."</span>);</div>\n+<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> <span class=\"keywordflow\">else</span></div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> <span class=\"keywordflow\">return</span>;</div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> }</div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> </div>\n+<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> c.resize(size);</div>\n+<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> prefix.push_back(0);</div>\n+<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> <span class=\"keywordflow\">for</span>(std::size_t i=0; i<size; ++i)</div>\n+<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> {</div>\n+<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> prefix.back() = i;</div>\n+<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> resizeHelper(c[i], sizeProvider, prefix);</div>\n+<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> }</div>\n+<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> }</div>\n+<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> </div>\n+<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> </div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> </div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> </div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01647.html#a7662d9e57bc2b8e522f4d423c9bbe750\"> 167</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01647.html#a7662d9e57bc2b8e522f4d423c9bbe750\">Vector</a> = V;</div>\n+<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> </div>\n+<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> MultiIndex></div>\n+<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01647.html#a84a850d0e5587fc6f14179ec3f15da5c\"> 170</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01647.html#a84a850d0e5587fc6f14179ec3f15da5c\">Entry</a> = Coefficient<MultiIndex>;</div>\n+<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> </div>\n+<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01647.html#ac303d31978320b6a3fc4f17f2db0d938\"> 172</a></span> <a class=\"code hl_function\" href=\"a01647.html#ac303d31978320b6a3fc4f17f2db0d938\">HierarchicVectorWrapper</a>(<a class=\"code hl_typedef\" href=\"a01647.html#a7662d9e57bc2b8e522f4d423c9bbe750\">Vector</a>& <a class=\"code hl_function\" href=\"a01647.html#aa87d301d268493db3421a6eb5b9b307e\">vector</a>) :</div>\n+<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> vector_(&<a class=\"code hl_function\" href=\"a01647.html#aa87d301d268493db3421a6eb5b9b307e\">vector</a>)</div>\n+<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> {}</div>\n+<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> </div>\n+<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizeProv<span class=\"keywordtype\">id</span>er></div>\n+<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01647.html#ae7c4ff9e9c573813493c8f36607037c3\"> 177</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01647.html#ae7c4ff9e9c573813493c8f36607037c3\">resize</a>(<span class=\"keyword\">const</span> SizeProvider& sizeProvider)</div>\n+<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> {</div>\n+<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> <span class=\"keyword\">typename</span> SizeProvider::SizePrefix prefix;</div>\n+<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> prefix.resize(0);</div>\n+<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> resizeHelper(*vector_, sizeProvider, prefix);</div>\n+<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> }</div>\n+<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span> </div>\n+<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> MultiIndex></div>\n+<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01647.html#a5c3c358453d3e57b1bdc2a2343dde827\"> 185</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01647.html#a84a850d0e5587fc6f14179ec3f15da5c\">Entry<MultiIndex></a>& <a class=\"code hl_function\" href=\"a01647.html#a5c3c358453d3e57b1bdc2a2343dde827\">operator[]</a>(<span class=\"keyword\">const</span> MultiIndex& index)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> <span class=\"keyword\">static_assert</span>(not std::is_same<Imp::DeducedCoefficientTag,Entry<MultiIndex>>::value, <span class=\"stringliteral\">"Coefficient type for HierarchicVectorWrapper and given multi-index type cannot be determined automatically!"</span>);</div>\n+<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> <span class=\"keywordflow\">return</span> hybridMultiIndexAccess<const Entry<MultiIndex>&>(*vector_, index);</div>\n+<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> }</div>\n+<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span> </div>\n+<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> MultiIndex></div>\n+<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01647.html#a5416072b233a9bef7e81d670de156bb7\"> 192</a></span> <a class=\"code hl_typedef\" href=\"a01647.html#a84a850d0e5587fc6f14179ec3f15da5c\">Entry<MultiIndex></a>& <a class=\"code hl_function\" href=\"a01647.html#a5416072b233a9bef7e81d670de156bb7\">operator[]</a>(<span class=\"keyword\">const</span> MultiIndex& index)</div>\n+<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> {</div>\n+<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> <span class=\"keyword\">static_assert</span>(not std::is_same<Imp::DeducedCoefficientTag,Entry<MultiIndex>>::value, <span class=\"stringliteral\">"Coefficient type for HierarchicVectorWrapper and given multi-index type cannot be determined automatically!"</span>);</div>\n+<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> <span class=\"keywordflow\">return</span> hybridMultiIndexAccess<Entry<MultiIndex>&>(*vector_, index);</div>\n+<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> }</div>\n+<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> </div>\n+<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> MultiIndex></div>\n+<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01647.html#ae31a684e42b25f20767987da090212ef\"> 199</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01647.html#a84a850d0e5587fc6f14179ec3f15da5c\">Entry<MultiIndex></a>& <a class=\"code hl_function\" href=\"a01647.html#ae31a684e42b25f20767987da090212ef\">operator()</a>(<span class=\"keyword\">const</span> MultiIndex& index)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> <span class=\"keyword\">static_assert</span>(not std::is_same<Imp::DeducedCoefficientTag,Entry<MultiIndex>>::value, <span class=\"stringliteral\">"Coefficient type for HierarchicVectorWrapper and given multi-index type cannot be determined automatically!"</span>);</div>\n+<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> <span class=\"keywordflow\">return</span> (*<span class=\"keyword\">this</span>)[index];</div>\n+<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> }</div>\n+<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> </div>\n+<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> MultiIndex></div>\n+<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01647.html#a120c2f9cb951f4af18b61a3d8d3b320d\"> 206</a></span> <a class=\"code hl_typedef\" href=\"a01647.html#a84a850d0e5587fc6f14179ec3f15da5c\">Entry<MultiIndex></a>& <a class=\"code hl_function\" href=\"a01647.html#a120c2f9cb951f4af18b61a3d8d3b320d\">operator()</a>(<span class=\"keyword\">const</span> MultiIndex& index)</div>\n+<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> {</div>\n+<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span> <span class=\"keyword\">static_assert</span>(not std::is_same<Imp::DeducedCoefficientTag,Entry<MultiIndex>>::value, <span class=\"stringliteral\">"Coefficient type for HierarchicVectorWrapper and given multi-index type cannot be determined automatically!"</span>);</div>\n+<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> <span class=\"keywordflow\">return</span> (*<span class=\"keyword\">this</span>)[index];</div>\n+<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> }</div>\n+<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> </div>\n+<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01647.html#aa87d301d268493db3421a6eb5b9b307e\"> 212</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01647.html#a7662d9e57bc2b8e522f4d423c9bbe750\">Vector</a>& <a class=\"code hl_function\" href=\"a01647.html#aa87d301d268493db3421a6eb5b9b307e\">vector</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> <span class=\"keywordflow\">return</span> *vector_;</div>\n+<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> }</div>\n+<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span> </div>\n+<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01647.html#a63d1ba934a2e49657400ae410ecd2660\"> 217</a></span> <a class=\"code hl_typedef\" href=\"a01647.html#a7662d9e57bc2b8e522f4d423c9bbe750\">Vector</a>& <a class=\"code hl_function\" href=\"a01647.html#a63d1ba934a2e49657400ae410ecd2660\">vector</a>()</div>\n+<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> {</div>\n+<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> <span class=\"keywordflow\">return</span> *vector_;</div>\n+<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span> }</div>\n+<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> </div>\n+<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> </div>\n+<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> <a class=\"code hl_typedef\" href=\"a01647.html#a7662d9e57bc2b8e522f4d423c9bbe750\">Vector</a>* vector_;</div>\n+<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span>};</div>\n+<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> </div>\n+<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> </div>\n+<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> </div>\n+<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> </div>\n+<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> V></div>\n+<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#aa74497c764d8ce0b365abae3637dadc8\"> 231</a></span><a class=\"code hl_class\" href=\"a01647.html\">HierarchicVectorWrapper< V ></a> <a class=\"code hl_function\" href=\"a00219.html#aa74497c764d8ce0b365abae3637dadc8\">hierarchicVector</a>(V& v)</div>\n+<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span>{</div>\n+<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01647.html\">HierarchicVectorWrapper<V></a>(v);</div>\n+<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span>}</div>\n+<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> </div>\n+<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span> </div>\n+<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span> </div>\n+<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>MultiIndex, <span class=\"keyword\">class </span>V,</div>\n+<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span> <span class=\"keyword\">typename</span> std::enable_if< models<Concept::HasIndexAccess, V, MultiIndex>(), <span class=\"keywordtype\">int</span>>::type = 0></div>\n+<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a5c705706be679d2a462e38b08274ad33\"> 240</a></span>V& <a class=\"code hl_function\" href=\"a00219.html#a5c705706be679d2a462e38b08274ad33\">makeHierarchicVectorForMultiIndex</a>(V& v)</div>\n+<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span>{</div>\n+<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span> <span class=\"keywordflow\">return</span> v;</div>\n+<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span>}</div>\n+<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> </div>\n+<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> </div>\n+<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span> </div>\n+<div class=\"line\"><a id=\"l00247\" name=\"l00247\"></a><span class=\"lineno\"> 247</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>MultiIndex, <span class=\"keyword\">class </span>V,</div>\n+<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"> 248</span> <span class=\"keyword\">typename</span> std::enable_if< not models<Concept::HasIndexAccess, V, MultiIndex>(), <span class=\"keywordtype\">int</span>>::type = 0></div>\n+<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#ae48bf799daaf0751086b47457350675e\"> 249</a></span><a class=\"code hl_class\" href=\"a01647.html\">HierarchicVectorWrapper< V ></a> <a class=\"code hl_function\" href=\"a00219.html#a5c705706be679d2a462e38b08274ad33\">makeHierarchicVectorForMultiIndex</a>(V& v)</div>\n+<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span>{</div>\n+<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01647.html\">HierarchicVectorWrapper<V></a>(v);</div>\n+<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span>}</div>\n+<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"> 253</span> </div>\n+<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"> 254</span> </div>\n+<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span> </div>\n+<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"> 256</span>} <span class=\"comment\">// namespace Dune::Functions</span></div>\n+<div class=\"line\"><a id=\"l00257\" name=\"l00257\"></a><span class=\"lineno\"> 257</span>} <span class=\"comment\">// namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00258\" name=\"l00258\"></a><span class=\"lineno\"> 258</span> </div>\n+<div class=\"line\"><a id=\"l00259\" name=\"l00259\"></a><span class=\"lineno\"> 259</span> </div>\n+<div class=\"line\"><a id=\"l00260\" name=\"l00260\"></a><span class=\"lineno\"> 260</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH</span></div>\n+<div class=\"ttc\" id=\"aa00029_html\"><div class=\"ttname\"><a href=\"a00029.html\">type_traits.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00041_html\"><div class=\"ttname\"><a href=\"a00041.html\">utility.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00062_html\"><div class=\"ttname\"><a href=\"a00062.html\">indexaccess.hh</a></div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa00219_html_a37dfd0fc94784b1ffe3050d87b37ad76\"><div class=\"ttname\"><a href=\"a00219.html#a37dfd0fc94784b1ffe3050d87b37ad76\">Dune::Functions::makeDefaultNodeToRangeMap</a></div><div class=\"ttdeci\">DefaultNodeToRangeMap< Tree > makeDefaultNodeToRangeMap(const Tree &tree)</div><div class=\"ttdef\"><b>Definition:</b> defaultnodetorangemap.hh:103</div></div>\n-<div class=\"ttc\" id=\"aa01563_html\"><div class=\"ttname\"><a href=\"a01563.html\">Dune::Functions::DefaultNodeToRangeMap</a></div><div class=\"ttdoc\">A simple node to range map using lexicographic ordering.</div><div class=\"ttdef\"><b>Definition:</b> defaultnodetorangemap.hh:39</div></div>\n-<div class=\"ttc\" id=\"aa01563_html_a125d091dadb6d9cd180e65ae5fe93bee\"><div class=\"ttname\"><a href=\"a01563.html#a125d091dadb6d9cd180e65ae5fe93bee\">Dune::Functions::DefaultNodeToRangeMap::indices_</a></div><div class=\"ttdeci\">std::vector< std::size_t > indices_</div><div class=\"ttdef\"><b>Definition:</b> defaultnodetorangemap.hh:97</div></div>\n-<div class=\"ttc\" id=\"aa01563_html_a1f05cfc19a0fd6aeddd0fd441f0e0718\"><div class=\"ttname\"><a href=\"a01563.html#a1f05cfc19a0fd6aeddd0fd441f0e0718\">Dune::Functions::DefaultNodeToRangeMap::DefaultNodeToRangeMap</a></div><div class=\"ttdeci\">DefaultNodeToRangeMap(const Tree &tree)</div><div class=\"ttdoc\">Construct DefaultNodeToRangeMap.</div><div class=\"ttdef\"><b>Definition:</b> defaultnodetorangemap.hh:78</div></div>\n-<div class=\"ttc\" id=\"aa01567_html\"><div class=\"ttname\"><a href=\"a01567.html\">Dune::Functions::DefaultNodeToRangeMap::Visitor</a></div><div class=\"ttdef\"><b>Definition:</b> defaultnodetorangemap.hh:49</div></div>\n-<div class=\"ttc\" id=\"aa01567_html_a31bda2d0d2a6e6caaad0c4b54833baaa\"><div class=\"ttname\"><a href=\"a01567.html#a31bda2d0d2a6e6caaad0c4b54833baaa\">Dune::Functions::DefaultNodeToRangeMap::Visitor::Visitor</a></div><div class=\"ttdeci\">Visitor(std::vector< std::size_t > &indices)</div><div class=\"ttdef\"><b>Definition:</b> defaultnodetorangemap.hh:50</div></div>\n-<div class=\"ttc\" id=\"aa01567_html_a6fa6002b8649337f257a1ba63f487638\"><div class=\"ttname\"><a href=\"a01567.html#a6fa6002b8649337f257a1ba63f487638\">Dune::Functions::DefaultNodeToRangeMap::Visitor::leaf</a></div><div class=\"ttdeci\">void leaf(Node &node, TreePath treePath)</div><div class=\"ttdef\"><b>Definition:</b> defaultnodetorangemap.hh:56</div></div>\n-<div class=\"ttc\" id=\"aa01567_html_a776d43a445def9066a5ad7b7d524d640\"><div class=\"ttname\"><a href=\"a01567.html#a776d43a445def9066a5ad7b7d524d640\">Dune::Functions::DefaultNodeToRangeMap::Visitor::counter_</a></div><div class=\"ttdeci\">std::size_t counter_</div><div class=\"ttdef\"><b>Definition:</b> defaultnodetorangemap.hh:65</div></div>\n-<div class=\"ttc\" id=\"aa01567_html_ad27dd745d2d84fd89675da8e7a706963\"><div class=\"ttname\"><a href=\"a01567.html#ad27dd745d2d84fd89675da8e7a706963\">Dune::Functions::DefaultNodeToRangeMap::Visitor::indices_</a></div><div class=\"ttdeci\">std::vector< std::size_t > & indices_</div><div class=\"ttdef\"><b>Definition:</b> defaultnodetorangemap.hh:64</div></div>\n+<div class=\"ttc\" id=\"aa00219_html_a5c705706be679d2a462e38b08274ad33\"><div class=\"ttname\"><a href=\"a00219.html#a5c705706be679d2a462e38b08274ad33\">Dune::Functions::makeHierarchicVectorForMultiIndex</a></div><div class=\"ttdeci\">V & makeHierarchicVectorForMultiIndex(V &v)</div><div class=\"ttdef\"><b>Definition:</b> hierarchicvectorwrapper.hh:240</div></div>\n+<div class=\"ttc\" id=\"aa00219_html_aa74497c764d8ce0b365abae3637dadc8\"><div class=\"ttname\"><a href=\"a00219.html#aa74497c764d8ce0b365abae3637dadc8\">Dune::Functions::hierarchicVector</a></div><div class=\"ttdeci\">HierarchicVectorWrapper< V > hierarchicVector(V &v)</div><div class=\"ttdef\"><b>Definition:</b> hierarchicvectorwrapper.hh:231</div></div>\n+<div class=\"ttc\" id=\"aa01331_html\"><div class=\"ttname\"><a href=\"a01331.html\">Dune::Functions::HasStaticSize</a></div><div class=\"ttdoc\">Check if type is a statically sized container.</div><div class=\"ttdef\"><b>Definition:</b> type_traits.hh:83</div></div>\n+<div class=\"ttc\" id=\"aa01647_html\"><div class=\"ttname\"><a href=\"a01647.html\">Dune::Functions::HierarchicVectorWrapper</a></div><div class=\"ttdoc\">A wrapper providing multiindex access to vector entries.</div><div class=\"ttdef\"><b>Definition:</b> hierarchicvectorwrapper.hh:92</div></div>\n+<div class=\"ttc\" id=\"aa01647_html_a120c2f9cb951f4af18b61a3d8d3b320d\"><div class=\"ttname\"><a href=\"a01647.html#a120c2f9cb951f4af18b61a3d8d3b320d\">Dune::Functions::HierarchicVectorWrapper::operator()</a></div><div class=\"ttdeci\">Entry< MultiIndex > & operator()(const MultiIndex &index)</div><div class=\"ttdef\"><b>Definition:</b> hierarchicvectorwrapper.hh:206</div></div>\n+<div class=\"ttc\" id=\"aa01647_html_a5416072b233a9bef7e81d670de156bb7\"><div class=\"ttname\"><a href=\"a01647.html#a5416072b233a9bef7e81d670de156bb7\">Dune::Functions::HierarchicVectorWrapper::operator[]</a></div><div class=\"ttdeci\">Entry< MultiIndex > & operator[](const MultiIndex &index)</div><div class=\"ttdef\"><b>Definition:</b> hierarchicvectorwrapper.hh:192</div></div>\n+<div class=\"ttc\" id=\"aa01647_html_a5c3c358453d3e57b1bdc2a2343dde827\"><div class=\"ttname\"><a href=\"a01647.html#a5c3c358453d3e57b1bdc2a2343dde827\">Dune::Functions::HierarchicVectorWrapper::operator[]</a></div><div class=\"ttdeci\">const Entry< MultiIndex > & operator[](const MultiIndex &index) const</div><div class=\"ttdef\"><b>Definition:</b> hierarchicvectorwrapper.hh:185</div></div>\n+<div class=\"ttc\" id=\"aa01647_html_a63d1ba934a2e49657400ae410ecd2660\"><div class=\"ttname\"><a href=\"a01647.html#a63d1ba934a2e49657400ae410ecd2660\">Dune::Functions::HierarchicVectorWrapper::vector</a></div><div class=\"ttdeci\">Vector & vector()</div><div class=\"ttdef\"><b>Definition:</b> hierarchicvectorwrapper.hh:217</div></div>\n+<div class=\"ttc\" id=\"aa01647_html_a7662d9e57bc2b8e522f4d423c9bbe750\"><div class=\"ttname\"><a href=\"a01647.html#a7662d9e57bc2b8e522f4d423c9bbe750\">Dune::Functions::HierarchicVectorWrapper::Vector</a></div><div class=\"ttdeci\">V Vector</div><div class=\"ttdef\"><b>Definition:</b> hierarchicvectorwrapper.hh:167</div></div>\n+<div class=\"ttc\" id=\"aa01647_html_a84a850d0e5587fc6f14179ec3f15da5c\"><div class=\"ttname\"><a href=\"a01647.html#a84a850d0e5587fc6f14179ec3f15da5c\">Dune::Functions::HierarchicVectorWrapper::Entry</a></div><div class=\"ttdeci\">Coefficient< MultiIndex > Entry</div><div class=\"ttdef\"><b>Definition:</b> hierarchicvectorwrapper.hh:170</div></div>\n+<div class=\"ttc\" id=\"aa01647_html_aa87d301d268493db3421a6eb5b9b307e\"><div class=\"ttname\"><a href=\"a01647.html#aa87d301d268493db3421a6eb5b9b307e\">Dune::Functions::HierarchicVectorWrapper::vector</a></div><div class=\"ttdeci\">const Vector & vector() const</div><div class=\"ttdef\"><b>Definition:</b> hierarchicvectorwrapper.hh:212</div></div>\n+<div class=\"ttc\" id=\"aa01647_html_ac303d31978320b6a3fc4f17f2db0d938\"><div class=\"ttname\"><a href=\"a01647.html#ac303d31978320b6a3fc4f17f2db0d938\">Dune::Functions::HierarchicVectorWrapper::HierarchicVectorWrapper</a></div><div class=\"ttdeci\">HierarchicVectorWrapper(Vector &vector)</div><div class=\"ttdef\"><b>Definition:</b> hierarchicvectorwrapper.hh:172</div></div>\n+<div class=\"ttc\" id=\"aa01647_html_ae31a684e42b25f20767987da090212ef\"><div class=\"ttname\"><a href=\"a01647.html#ae31a684e42b25f20767987da090212ef\">Dune::Functions::HierarchicVectorWrapper::operator()</a></div><div class=\"ttdeci\">const Entry< MultiIndex > & operator()(const MultiIndex &index) const</div><div class=\"ttdef\"><b>Definition:</b> hierarchicvectorwrapper.hh:199</div></div>\n+<div class=\"ttc\" id=\"aa01647_html_ae7c4ff9e9c573813493c8f36607037c3\"><div class=\"ttname\"><a href=\"a01647.html#ae7c4ff9e9c573813493c8f36607037c3\">Dune::Functions::HierarchicVectorWrapper::resize</a></div><div class=\"ttdeci\">void resize(const SizeProvider &sizeProvider)</div><div class=\"ttdef\"><b>Definition:</b> hierarchicvectorwrapper.hh:177</div></div>\n <div class=\"ttc\" id=\"aa02876_html\"><div class=\"ttname\"><a href=\"a02876.html\">concepts.hh</a></div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,146 +5,328 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-defaultnodetorangemap.hh\n+hierarchicvectorwrapper.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH\n- 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH\n+ 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH\n+ 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH\n 5\n- 6\n- 7#include <dune/common/concept.hh>\n- 8\n- 9#include <dune/functions/functionspacebases/concepts.hh>\n- 10\n- 11#include <dune/typetree/traversal.hh>\n- 12#include <dune/typetree/visitor.hh>\n- 13\n+ 6#include <dune/common/concept.hh>\n+ 7#include <dune/common/hybridutilities.hh>\n+ 8#include <dune/common/indices.hh>\n+ 9\n+ 10#include <dune/functions/common/indexaccess.hh>\n+ 11#include <dune/functions/common/utility.hh>\n+ 12#include <dune/functions/common/type_traits.hh>\n+ 13#include <dune/functions/functionspacebases/concepts.hh>\n 14\n- 15namespace Dune {\n- 16namespace Functions {\n- 17\n+ 15\n+ 16namespace Dune {\n+ 17namespace Functions {\n 18\n 19\n- 37template<class Tree>\n-38struct DefaultNodeToRangeMap\n- 39{\n- 40\n- 41 // A simple visitor for computing lexicographic\n- 42 // subtree indices. To identify a leaf node\n- 43 // we use its treeIndex() which is unique\n- 44 // wrt the whole tree and store the computed\n- 45 // index in a vector indexed by the tree indices.\n-46 struct Visitor\n- 47 : public TypeTree::TreeVisitor\n- 48 , public TypeTree::DynamicTraversal\n- 49 {\n-50 Visitor(std::vector<std::size_t>& indices) :\n- 51 indices_(indices),\n- 52 counter_(0)\n- 53 {}\n- 54\n- 55 template<typename Node, typename TreePath>\n-56 void leaf(Node& node, TreePath treePath)\n- 57 {\n- 58 if (indices_.size() < node.treeIndex()+1)\n- 59 indices_.resize(node.treeIndex()+1);\n- 60 indices_[node.treeIndex()] = counter_;\n- 61 ++counter_;\n- 62 }\n- 63\n-64 std::vector<std::size_t>& indices_;\n-65 std::size_t counter_;\n- 66 };\n+ 20\n+ 21namespace Imp {\n+ 22\n+ 23 // Construct default coefficient type from vector and multiindex type\n+ 24 // This requires that MultiIndex has a static size. Otherwise the\n+ 25 // vector type itself is returned.\n+ 26 template<class V, class MultiIndex>\n+ 27 struct CoefficientType\n+ 28 {\n+ 29 template<class E, std::size_t size>\n+ 30 struct DefaultCoefficientTypeHelper\n+ 31 {\n+ 32 using E0 = decltype(std::declval<E>()[Dune::Indices::_0]);\n+ 33 using type = typename DefaultCoefficientTypeHelper<E0, size-1>::type;\n+ 34 };\n+ 35\n+ 36 template<class E>\n+ 37 struct DefaultCoefficientTypeHelper<E, 0>\n+ 38 {\n+ 39 using type = E;\n+ 40 };\n+ 41\n+ 42 template<class MI,\n+ 43 typename std::enable_if<HasStaticSize<MI>::value, int>::type = 0>\n+ 44 static constexpr std::size_t getStaticSizeOrZero()\n+ 45 {\n+ 46 return StaticSize<MI>::value;\n+ 47 }\n+ 48\n+ 49 template<class MI,\n+ 50 typename std::enable_if<not HasStaticSize<MI>::value, int>::type = 0>\n+ 51 static constexpr std::size_t getStaticSizeOrZero()\n+ 52 {\n+ 53 return 0;\n+ 54 }\n+ 55\n+ 56 using type = typename DefaultCoefficientTypeHelper<V,\n+getStaticSizeOrZero<MultiIndex>()>::type;\n+ 57 };\n+ 58\n+ 59\n+ 60\n+ 61 // This tag class is used as Coefficient template parameter\n+ 62 // for HierarchicVectorWrapper if the coefficient type should\n+ 63 // be deduced.\n+ 64 struct DeducedCoefficientTag {};\n+ 65\n+ 66} // namespace Imp\n 67\n-78 DefaultNodeToRangeMap(const Tree& tree)\n- 79 {\n- 80 TypeTree::applyToTree(tree, Visitor(indices_));\n- 81 }\n- 82\n- 83 template<class Node, class TreePath, class Range,\n- 84 std::enable_if_t<models<Concept::HasIndexAccess, Range, decltype(std::\n-declval<Node>().treeIndex())>() and not Tree::isLeaf, int> = 0>\n-85 decltype(auto) operator()(const Node& node, const TreePath& treePath,\n-Range&& y) const\n- 86 {\n- 87 return y[indices_[node.treeIndex()]];\n- 88 }\n- 89\n- 90 template<class Node, class TreePath, class Range,\n- 91 std::enable_if_t< not models<Concept::HasIndexAccess, Range, decltype(std::\n-declval<Node>().treeIndex())>() or Tree::isLeaf, int> = 0>\n-92 decltype(auto) operator()(const Node& node, const TreePath& treePath,\n-Range&& y) const\n- 93 {\n- 94 return std::forward<Range>(y);\n- 95 }\n- 96\n-97 std::vector<std::size_t> indices_;\n- 98};\n+ 68\n+ 69\n+ 90template<class V, class CO=Imp::DeducedCoefficientTag>\n+91class HierarchicVectorWrapper\n+ 92{\n+ 93 template<class MultiIndex>\n+ 94 using Coefficient = typename std::conditional< std::is_same<Imp::\n+DeducedCoefficientTag,CO>::value and HasStaticSize<MultiIndex>::value,\n+ 95 typename Imp::CoefficientType<V, MultiIndex>::type,\n+ 96 CO\n+ 97 >::type;\n+ 98\n 99\n- 100\n+ 100 using size_type = std::size_t;\n 101\n- 102template<class Tree>\n-103DefaultNodeToRangeMap<Tree> makeDefaultNodeToRangeMap(const Tree& tree)\n- 104{\n- 105 return DefaultNodeToRangeMap<Tree>(tree);\n- 106}\n- 107\n- 108\n- 109\n- 110template<class Basis, class TreePath>\n-111auto makeDefaultNodeToRangeMap(const Basis& basis, TreePath&& treePath)\n- 112 -> decltype(makeDefaultNodeToRangeMap(TypeTree::child(basis.localView\n-().tree(),treePath)))\n- 113{\n- 114 auto&& localView = basis.localView();\n- 115 localView.bind(*basis.gridView().template begin<0>());\n- 116 auto&& tree = TypeTree::child(localView.tree(),treePath);\n- 117 return makeDefaultNodeToRangeMap(tree);\n- 118}\n- 119\n- 120\n+ 102 template<class C, class SizeProvider,\n+ 103 typename std::enable_if< not models<Concept::HasResize, C>(), int>::type =\n+0,\n+ 104 typename std::enable_if< not models<Concept::HasSizeMethod, C>(), int>::\n+type = 0>\n+ 105 static void resizeHelper(C& c, const SizeProvider& sizeProvider, typename\n+SizeProvider::SizePrefix prefix)\n+ 106 {\n+ 107 auto size = sizeProvider.size(prefix);\n+ 108 if (size != 0)\n+ 109 DUNE_THROW(RangeError, \"Can't resize scalar vector entry v[\" << prefix <<\n+\"] to size(\" << prefix << \")=\" << size);\n+ 110 }\n+ 111\n+ 112 struct StaticResizeHelper\n+ 113 {\n+ 114 template<class I, class C, class SizeProvider>\n+ 115 static void apply(I&& i, C& c, const SizeProvider& sizeProvider, typename\n+SizeProvider::SizePrefix prefix)\n+ 116 {\n+ 117 prefix.back() = i;\n+ 118 resizeHelper(c[i], sizeProvider, prefix);\n+ 119 }\n+ 120 };\n 121\n- 122} // namespace Dune::Functions\n- 123} // namespace Dune\n- 124\n- 125\n- 126#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTNODETORANGEMAP_HH\n+ 122 template<class C, class SizeProvider,\n+ 123 typename std::enable_if< not models<Concept::HasResize, C>(), int>::type =\n+0,\n+ 124 typename std::enable_if< models<Concept::HasSizeMethod, C>(), int>::type =\n+0>\n+ 125 static void resizeHelper(C& c, const SizeProvider& sizeProvider, typename\n+SizeProvider::SizePrefix prefix)\n+ 126 {\n+ 127 auto size = sizeProvider.size(prefix);\n+ 128 if (size == 0)\n+ 129 return;\n+ 130\n+ 131 if (c.size() != size)\n+ 132 DUNE_THROW(RangeError, \"Can't resize statically sized vector entry v[\" <<\n+prefix << \"] of size \" << c.size() << \" to size(\" << prefix << \")=\" << size);\n+ 133\n+ 134 using namespace Dune::Hybrid;\n+ 135 prefix.push_back(0);\n+ 136 forEach(integralRange(Hybrid::size(c)), [&](auto&& i) {\n+ 137 StaticResizeHelper::apply(i, c, sizeProvider, prefix);\n+ 138 });\n+ 139 }\n+ 140\n+ 141 template<class C, class SizeProvider,\n+ 142 typename std::enable_if< models<Concept::HasResize, C>(), int>::type = 0>\n+ 143 static void resizeHelper(C& c, const SizeProvider& sizeProvider, typename\n+SizeProvider::SizePrefix prefix)\n+ 144 {\n+ 145 auto size = sizeProvider.size(prefix);\n+ 146 if (size==0)\n+ 147 {\n+ 148 if (c.size()==0)\n+ 149 DUNE_THROW(RangeError, \"Can't resize dynamically sized vector entry v[\" <<\n+prefix << \"]. Its size is 0 but the target size is unknown due to size(\" <<\n+prefix << \")=0.\");\n+ 150 else\n+ 151 return;\n+ 152 }\n+ 153\n+ 154 c.resize(size);\n+ 155 prefix.push_back(0);\n+ 156 for(std::size_t i=0; i<size; ++i)\n+ 157 {\n+ 158 prefix.back() = i;\n+ 159 resizeHelper(c[i], sizeProvider, prefix);\n+ 160 }\n+ 161 }\n+ 162\n+ 163\n+ 164\n+ 165public:\n+ 166\n+167 using Vector = V;\n+ 168\n+ 169 template<class MultiIndex>\n+170 using Entry = Coefficient<MultiIndex>;\n+ 171\n+172 HierarchicVectorWrapper(Vector& vector) :\n+ 173 vector_(&vector)\n+ 174 {}\n+ 175\n+ 176 template<class SizeProvider>\n+177 void resize(const SizeProvider& sizeProvider)\n+ 178 {\n+ 179 typename SizeProvider::SizePrefix prefix;\n+ 180 prefix.resize(0);\n+ 181 resizeHelper(*vector_, sizeProvider, prefix);\n+ 182 }\n+ 183\n+ 184 template<class MultiIndex>\n+185 const Entry<MultiIndex>& operator[](const MultiIndex& index) const\n+ 186 {\n+ 187 static_assert(not std::is_same<Imp::\n+DeducedCoefficientTag,Entry<MultiIndex>>::value, \"Coefficient type for\n+HierarchicVectorWrapper and given multi-index type cannot be determined\n+automatically!\");\n+ 188 return hybridMultiIndexAccess<const Entry<MultiIndex>&>(*vector_, index);\n+ 189 }\n+ 190\n+ 191 template<class MultiIndex>\n+192 Entry<MultiIndex>& operator[](const MultiIndex& index)\n+ 193 {\n+ 194 static_assert(not std::is_same<Imp::\n+DeducedCoefficientTag,Entry<MultiIndex>>::value, \"Coefficient type for\n+HierarchicVectorWrapper and given multi-index type cannot be determined\n+automatically!\");\n+ 195 return hybridMultiIndexAccess<Entry<MultiIndex>&>(*vector_, index);\n+ 196 }\n+ 197\n+ 198 template<class MultiIndex>\n+199 const Entry<MultiIndex>& operator()(const MultiIndex& index) const\n+ 200 {\n+ 201 static_assert(not std::is_same<Imp::\n+DeducedCoefficientTag,Entry<MultiIndex>>::value, \"Coefficient type for\n+HierarchicVectorWrapper and given multi-index type cannot be determined\n+automatically!\");\n+ 202 return (*this)[index];\n+ 203 }\n+ 204\n+ 205 template<class MultiIndex>\n+206 Entry<MultiIndex>& operator()(const MultiIndex& index)\n+ 207 {\n+ 208 static_assert(not std::is_same<Imp::\n+DeducedCoefficientTag,Entry<MultiIndex>>::value, \"Coefficient type for\n+HierarchicVectorWrapper and given multi-index type cannot be determined\n+automatically!\");\n+ 209 return (*this)[index];\n+ 210 }\n+ 211\n+212 const Vector& vector() const\n+ 213 {\n+ 214 return *vector_;\n+ 215 }\n+ 216\n+217 Vector& vector()\n+ 218 {\n+ 219 return *vector_;\n+ 220 }\n+ 221\n+ 222private:\n+ 223\n+ 224 Vector* vector_;\n+ 225};\n+ 226\n+ 227\n+ 228\n+ 229\n+ 230template<class V>\n+231HierarchicVectorWrapper<_V_> hierarchicVector(V& v)\n+ 232{\n+ 233 return HierarchicVectorWrapper<V>(v);\n+ 234}\n+ 235\n+ 236\n+ 237\n+ 238template<class MultiIndex, class V,\n+ 239 typename std::enable_if< models<Concept::HasIndexAccess, V, MultiIndex>(),\n+int>::type = 0>\n+240V& makeHierarchicVectorForMultiIndex(V& v)\n+ 241{\n+ 242 return v;\n+ 243}\n+ 244\n+ 245\n+ 246\n+ 247template<class MultiIndex, class V,\n+ 248 typename std::enable_if< not models<Concept::HasIndexAccess, V,\n+MultiIndex>(), int>::type = 0>\n+249HierarchicVectorWrapper<_V_> makeHierarchicVectorForMultiIndex(V& v)\n+ 250{\n+ 251 return HierarchicVectorWrapper<V>(v);\n+ 252}\n+ 253\n+ 254\n+ 255\n+ 256} // namespace Dune::Functions\n+ 257} // namespace Dune\n+ 258\n+ 259\n+ 260#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_HIERARCHICVECTORWRAPPER_HH\n+type_traits.hh\n+utility.hh\n+indexaccess.hh\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::makeDefaultNodeToRangeMap\n-DefaultNodeToRangeMap< Tree > makeDefaultNodeToRangeMap(const Tree &tree)\n-Definition: defaultnodetorangemap.hh:103\n-Dune::Functions::DefaultNodeToRangeMap\n-A simple node to range map using lexicographic ordering.\n-Definition: defaultnodetorangemap.hh:39\n-Dune::Functions::DefaultNodeToRangeMap::indices_\n-std::vector< std::size_t > indices_\n-Definition: defaultnodetorangemap.hh:97\n-Dune::Functions::DefaultNodeToRangeMap::DefaultNodeToRangeMap\n-DefaultNodeToRangeMap(const Tree &tree)\n-Construct DefaultNodeToRangeMap.\n-Definition: defaultnodetorangemap.hh:78\n-Dune::Functions::DefaultNodeToRangeMap::Visitor\n-Definition: defaultnodetorangemap.hh:49\n-Dune::Functions::DefaultNodeToRangeMap::Visitor::Visitor\n-Visitor(std::vector< std::size_t > &indices)\n-Definition: defaultnodetorangemap.hh:50\n-Dune::Functions::DefaultNodeToRangeMap::Visitor::leaf\n-void leaf(Node &node, TreePath treePath)\n-Definition: defaultnodetorangemap.hh:56\n-Dune::Functions::DefaultNodeToRangeMap::Visitor::counter_\n-std::size_t counter_\n-Definition: defaultnodetorangemap.hh:65\n-Dune::Functions::DefaultNodeToRangeMap::Visitor::indices_\n-std::vector< std::size_t > & indices_\n-Definition: defaultnodetorangemap.hh:64\n+Dune::Functions::makeHierarchicVectorForMultiIndex\n+V & makeHierarchicVectorForMultiIndex(V &v)\n+Definition: hierarchicvectorwrapper.hh:240\n+Dune::Functions::hierarchicVector\n+HierarchicVectorWrapper< V > hierarchicVector(V &v)\n+Definition: hierarchicvectorwrapper.hh:231\n+Dune::Functions::HasStaticSize\n+Check if type is a statically sized container.\n+Definition: type_traits.hh:83\n+Dune::Functions::HierarchicVectorWrapper\n+A wrapper providing multiindex access to vector entries.\n+Definition: hierarchicvectorwrapper.hh:92\n+Dune::Functions::HierarchicVectorWrapper::operator()\n+Entry< MultiIndex > & operator()(const MultiIndex &index)\n+Definition: hierarchicvectorwrapper.hh:206\n+Dune::Functions::HierarchicVectorWrapper::operator[]\n+Entry< MultiIndex > & operator[](const MultiIndex &index)\n+Definition: hierarchicvectorwrapper.hh:192\n+Dune::Functions::HierarchicVectorWrapper::operator[]\n+const Entry< MultiIndex > & operator[](const MultiIndex &index) const\n+Definition: hierarchicvectorwrapper.hh:185\n+Dune::Functions::HierarchicVectorWrapper::vector\n+Vector & vector()\n+Definition: hierarchicvectorwrapper.hh:217\n+Dune::Functions::HierarchicVectorWrapper::Vector\n+V Vector\n+Definition: hierarchicvectorwrapper.hh:167\n+Dune::Functions::HierarchicVectorWrapper::Entry\n+Coefficient< MultiIndex > Entry\n+Definition: hierarchicvectorwrapper.hh:170\n+Dune::Functions::HierarchicVectorWrapper::vector\n+const Vector & vector() const\n+Definition: hierarchicvectorwrapper.hh:212\n+Dune::Functions::HierarchicVectorWrapper::HierarchicVectorWrapper\n+HierarchicVectorWrapper(Vector &vector)\n+Definition: hierarchicvectorwrapper.hh:172\n+Dune::Functions::HierarchicVectorWrapper::operator()\n+const Entry< MultiIndex > & operator()(const MultiIndex &index) const\n+Definition: hierarchicvectorwrapper.hh:199\n+Dune::Functions::HierarchicVectorWrapper::resize\n+void resize(const SizeProvider &sizeProvider)\n+Definition: hierarchicvectorwrapper.hh:177\n concepts.hh\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00176.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00176.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: subspacebasis.hh File Reference</title>\n+<title>dune-functions: bsplinebasis.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -65,55 +65,79 @@\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> |\n+<a href=\"#typedef-members\">Typedefs</a> |\n <a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">subspacebasis.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">bsplinebasis.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <dune/common/reservedvector.hh></code><br />\n-<code>#include <dune/common/typeutilities.hh></code><br />\n-<code>#include <dune/common/concept.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00092_source.html\">dune/functions/common/type_traits.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00146_source.html\">dune/functions/functionspacebases/subspacelocalview.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a02876_source.html\">dune/functions/functionspacebases/concepts.hh</a>></code><br />\n+\n+<p>The B-spline global function space basis. \n+<a href=\"#details\">More...</a></p>\n+<div class=\"textblock\"><code>#include <array></code><br />\n+<code>#include <numeric></code><br />\n+<code>#include <dune/common/dynmatrix.hh></code><br />\n+<code>#include <dune/localfunctions/common/localbasis.hh></code><br />\n+<code>#include <dune/common/diagonalmatrix.hh></code><br />\n+<code>#include <dune/localfunctions/common/localkey.hh></code><br />\n+<code>#include <dune/localfunctions/common/localfiniteelementtraits.hh></code><br />\n+<code>#include <dune/geometry/type.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00179_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00152_source.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></code><br />\n </div>\n <p><a href=\"a00176_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01807.html\">Dune::Functions::SubspaceBasis< RB, TP ></a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01483.html\">Dune::Functions::BSplineLocalBasis< GV, R ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">LocalBasis class in the sense of dune-localfunctions, presenting the restriction of a B-spline patch to a knot span. <a href=\"a01483.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01487.html\">Dune::Functions::BSplineLocalCoefficients< dim ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Attaches a shape function to an entity. <a href=\"a01487.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01491.html\">Dune::Functions::BSplineLocalInterpolation< dim, LB ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Local interpolation in the sense of dune-localfunctions, for the B-spline basis on tensor-product grids. <a href=\"a01491.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01475.html\">Dune::Functions::BSplineLocalFiniteElement< GV, R ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">LocalFiniteElement in the sense of dune-localfunctions, for the B-spline basis on tensor-product grids. <a href=\"a01475.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01479.html\">Dune::Functions::BSplinePreBasis< GV ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Pre-basis for B-spline basis. <a href=\"a01479.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01495.html\">Dune::Functions::BSplineNode< GV ></a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a00224\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00224.html\">Dune::Functions::BasisFactory</a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+</table><table class=\"memberdecls\">\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"typedef-members\" name=\"typedef-members\"></a>\n+Typedefs</h2></td></tr>\n+<tr class=\"memitem:ga189243b64e66543614a954706d70ce4a\"><td class=\"memTemplParams\" colspan=\"2\">template<typename GV > </td></tr>\n+<tr class=\"memitem:ga189243b64e66543614a954706d70ce4a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#ga189243b64e66543614a954706d70ce4a\">Dune::Functions::BSplineBasis</a> = DefaultGlobalBasis< BSplinePreBasis< GV > ></td></tr>\n+<tr class=\"memdesc:ga189243b64e66543614a954706d70ce4a\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A global B-spline basis. <a href=\"a00213.html#ga189243b64e66543614a954706d70ce4a\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga189243b64e66543614a954706d70ce4a\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n Functions</h2></td></tr>\n-<tr class=\"memitem:a17589fdc18b015644525c7ad037e6441\"><td class=\"memTemplParams\" colspan=\"2\">template<class RB , class TP > </td></tr>\n-<tr class=\"memitem:a17589fdc18b015644525c7ad037e6441\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\"> </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a17589fdc18b015644525c7ad037e6441\">Dune::Functions::SubspaceBasis</a> (const RB &, const TP) -> SubspaceBasis< RB, TP ></td></tr>\n-<tr class=\"separator:a17589fdc18b015644525c7ad037e6441\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:ae3d703ee72289b3936eb24255fc52694\"><td class=\"memTemplParams\" colspan=\"2\">template<class RootRootBasis , class InnerTP , class OuterTP > </td></tr>\n-<tr class=\"memitem:ae3d703ee72289b3936eb24255fc52694\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\"> </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#ae3d703ee72289b3936eb24255fc52694\">Dune::Functions::SubspaceBasis</a> (const SubspaceBasis< RootRootBasis, InnerTP > &rootBasis, const OuterTP &prefixPath) -> SubspaceBasis< std::decay_t< decltype(rootBasis.rootBasis())>, Impl::JoinTreePath_t< InnerTP, OuterTP > ></td></tr>\n-<tr class=\"separator:ae3d703ee72289b3936eb24255fc52694\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a9effbb98da0e9104a60979fa734c1220\"><td class=\"memTemplParams\" colspan=\"2\">template<class RootBasis , class... PrefixTreeIndices> </td></tr>\n-<tr class=\"memitem:a9effbb98da0e9104a60979fa734c1220\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a9effbb98da0e9104a60979fa734c1220\">Dune::Functions::subspaceBasis</a> (const RootBasis &rootBasis, const TypeTree::HybridTreePath< PrefixTreeIndices... > &prefixPath)</td></tr>\n-<tr class=\"memdesc:a9effbb98da0e9104a60979fa734c1220\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create <a class=\"el\" href=\"a01807.html\">SubspaceBasis</a> from a root basis and a prefixPath. <a href=\"a00219.html#a9effbb98da0e9104a60979fa734c1220\">More...</a><br /></td></tr>\n-<tr class=\"separator:a9effbb98da0e9104a60979fa734c1220\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:abb8781cf3fb98ca29446be66bcf65ac4\"><td class=\"memTemplParams\" colspan=\"2\">template<class RootBasis , class... PrefixTreeIndices> </td></tr>\n-<tr class=\"memitem:abb8781cf3fb98ca29446be66bcf65ac4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#abb8781cf3fb98ca29446be66bcf65ac4\">Dune::Functions::subspaceBasis</a> (const RootBasis &rootBasis, const PrefixTreeIndices &... prefixTreeIndices)</td></tr>\n-<tr class=\"separator:abb8781cf3fb98ca29446be66bcf65ac4\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga63a9701af71fffbbb851a38cb8cf886f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#ga63a9701af71fffbbb851a38cb8cf886f\">Dune::Functions::BasisFactory::bSpline</a> (const std::vector< double > &knotVector, unsigned int order, bool makeOpen=true)</td></tr>\n+<tr class=\"memdesc:ga63a9701af71fffbbb851a38cb8cf886f\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a pre-basis factory that can create a B-spline pre-basis. <a href=\"a00213.html#ga63a9701af71fffbbb851a38cb8cf886f\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga63a9701af71fffbbb851a38cb8cf886f\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n-</div><!-- contents -->\n+<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n+<div class=\"textblock\"><p >The B-spline global function space basis. </p>\n+</div></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,47 +5,65 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-Classes | Namespaces | Functions\n-subspacebasis.hh File Reference\n-#include <dune/common/reservedvector.hh>\n-#include <dune/common/typeutilities.hh>\n-#include <dune/common/concept.hh>\n-#include <dune/functions/common/type_traits.hh>\n-#include <dune/functions/functionspacebases/subspacelocalview.hh>\n-#include <dune/functions/functionspacebases/concepts.hh>\n+Classes | Namespaces | Typedefs | Functions\n+bsplinebasis.hh File Reference\n+The B-spline global function space basis. More...\n+#include <array>\n+#include <numeric>\n+#include <dune/common/dynmatrix.hh>\n+#include <dune/localfunctions/common/localbasis.hh>\n+#include <dune/common/diagonalmatrix.hh>\n+#include <dune/localfunctions/common/localkey.hh>\n+#include <dune/localfunctions/common/localfiniteelementtraits.hh>\n+#include <dune/geometry/type.hh>\n+#include <dune/functions/functionspacebases/nodes.hh>\n+#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-class \u00a0Dune::Functions::SubspaceBasis<_RB,_TP_>\n+class \u00a0Dune::Functions::BSplineLocalBasis<_GV,_R_>\n+\u00a0 LocalBasis class in the sense of dune-localfunctions, presenting the\n+ restriction of a B-spline patch to a knot span. More...\n+\u00a0\n+class \u00a0Dune::Functions::BSplineLocalCoefficients<_dim_>\n+\u00a0 Attaches a shape function to an entity. More...\n+\u00a0\n+class \u00a0Dune::Functions::BSplineLocalInterpolation<_dim,_LB_>\n+\u00a0 Local interpolation in the sense of dune-localfunctions, for the B-\n+ spline basis on tensor-product grids. More...\n+\u00a0\n+class \u00a0Dune::Functions::BSplineLocalFiniteElement<_GV,_R_>\n+\u00a0 LocalFiniteElement in the sense of dune-localfunctions, for the B-\n+ spline basis on tensor-product grids. More...\n+\u00a0\n+class \u00a0Dune::Functions::BSplinePreBasis<_GV_>\n+\u00a0 Pre-basis for B-spline basis. More...\n+\u00a0\n+class \u00a0Dune::Functions::BSplineNode<_GV_>\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n+namespace \u00a0Dune::Functions::BasisFactory\n+\u00a0\n+ Typedefs\n+template<typename GV >\n+using\u00a0Dune::Functions::BSplineBasis = DefaultGlobalBasis< BSplinePreBasis< GV\n+ > >\n+\u00a0 A global B-spline basis. More...\n+\u00a0\n Functions\n-template<class RB , class TP >\n- \u00a0Dune::Functions::SubspaceBasis (const RB &, const TP) -> SubspaceBasis<\n- RB, TP >\n-\u00a0\n-template<class RootRootBasis , class InnerTP , class OuterTP >\n- \u00a0Dune::Functions::SubspaceBasis (const SubspaceBasis< RootRootBasis,\n- InnerTP > &rootBasis, const OuterTP &prefixPath) -> SubspaceBasis< std::\n- decay_t< decltype(rootBasis.rootBasis())>, Impl::JoinTreePath_t< InnerTP,\n- OuterTP > >\n-\u00a0\n-template<class RootBasis , class... PrefixTreeIndices>\n-auto\u00a0Dune::Functions::subspaceBasis (const RootBasis &rootBasis, const\n- TypeTree::HybridTreePath< PrefixTreeIndices... > &prefixPath)\n-\u00a0 Create SubspaceBasis from a root basis and a prefixPath. More...\n-\u00a0\n-template<class RootBasis , class... PrefixTreeIndices>\n-auto\u00a0Dune::Functions::subspaceBasis (const RootBasis &rootBasis, const\n- PrefixTreeIndices &... prefixTreeIndices)\n+auto\u00a0Dune::Functions::BasisFactory::bSpline (const std::vector< double >\n+ &knotVector, unsigned int order, bool makeOpen=true)\n+\u00a0 Create a pre-basis factory that can create a B-spline pre-basis. More...\n \u00a0\n+***** Detailed Description *****\n+The B-spline global function space basis.\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00176_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00176_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: subspacebasis.hh Source File</title>\n+<title>dune-functions: bsplinebasis.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,184 +62,1209 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">subspacebasis.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">bsplinebasis.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<a href=\"a00176.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n+<a href=\"a00176.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01483.html#a0866963a2c58b8b1f281a50722b9f3da\"> 1</a></span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <dune/common/reservedvector.hh></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <dune/common/typeutilities.hh></span></div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <dune/common/concept.hh></span></div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00092.html\">dune/functions/common/type_traits.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00146.html\">dune/functions/functionspacebases/subspacelocalview.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a02876.html\">dune/functions/functionspacebases/concepts.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <array></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <numeric></span></div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <dune/common/dynmatrix.hh></span></div>\n <div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span> </div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"keyword\">namespace </span>Impl {</div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> </div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>... Inner, <span class=\"keyword\">class</span>... Outer></div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> <span class=\"keyword\">auto</span> joinTreePaths(<span class=\"keyword\">const</span> TypeTree::HybridTreePath<Inner...>& inner, <span class=\"keyword\">const</span> TypeTree::HybridTreePath<Outer...> outer)</div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> {</div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> <span class=\"keywordflow\">return</span> TypeTree::HybridTreePath<Inner..., Outer...>(std::tuple_cat(inner._data, outer._data));</div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> }</div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> </div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> InnerTP, <span class=\"keyword\">class</span> OuterTP></div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> <span class=\"keyword\">using </span>JoinTreePath_t = std::decay_t<decltype(joinTreePaths(std::declval<InnerTP>(), std::declval<OuterTP>()))>;</div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"preprocessor\">#include <dune/localfunctions/common/localbasis.hh></span></div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"preprocessor\">#include <dune/common/diagonalmatrix.hh></span></div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"preprocessor\">#include <dune/localfunctions/common/localkey.hh></span></div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"preprocessor\">#include <dune/localfunctions/common/localfiniteelementtraits.hh></span></div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"preprocessor\">#include <dune/geometry/type.hh></span></div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00179.html\">dune/functions/functionspacebases/nodes.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00152.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span> </div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a></div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span>{</div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> </div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span><span class=\"comment\">// A maze of dependencies between the different parts of this. We need a few forward declarations</span></div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keyword\">typename</span> R></div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01475.html\">BSplineLocalFiniteElement</a>;</div>\n <div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> </div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span>}</div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> </div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV></div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01479.html\">BSplinePreBasis</a>;</div>\n <div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> </div>\n <div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> </div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> RB, <span class=\"keyword\">class</span> TP></div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html\"> 37</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01807.html\">SubspaceBasis</a></div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span>{</div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> </div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#aaa9c058bcb0bc05bdba112801201f281\"> 41</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01807.html#aaa9c058bcb0bc05bdba112801201f281\">RootBasis</a> = RB;</div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> </div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#a00d424aa40e6c051f610a308317cc57e\"> 43</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01807.html#a00d424aa40e6c051f610a308317cc57e\">RootLocalView</a> = <span class=\"keyword\">typename</span> RootBasis::LocalView;</div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> </div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#a5dcb19c46539c51ce32a6fdc55738387\"> 45</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01807.html#a5dcb19c46539c51ce32a6fdc55738387\">PrefixPath</a> = TP;</div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> </div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#a6e7dd708494382dad7cc288ce6cfe6b8\"> 48</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01807.html#a6e7dd708494382dad7cc288ce6cfe6b8\">GridView</a> = <span class=\"keyword\">typename</span> RootBasis::GridView;</div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> </div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#acb8fddcafde83205b67e57926c84ace5\"> 51</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01807.html#acb8fddcafde83205b67e57926c84ace5\">MultiIndex</a> = <span class=\"keyword\">typename</span> RootBasis::MultiIndex;</div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> GV, <span class=\"keyword\">class</span> R></div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01483.html\"> 45</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01483.html\">BSplineLocalBasis</a></div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span>{</div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> <span class=\"keyword\">friend</span> <span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01475.html\">BSplineLocalFiniteElement</a><GV,R>;</div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> </div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> <span class=\"keyword\">typedef</span> <span class=\"keyword\">typename</span> GV::ctype D;</div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> <span class=\"keyword\">enum</span> {dim = GV::dimension};</div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span><span class=\"keyword\">public</span>:</div>\n <div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> </div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#ad328a135f42bb2a6b9bf60983f61f254\"> 53</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01807.html#ad328a135f42bb2a6b9bf60983f61f254\">size_type</a> = std::size_t;</div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> </div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#a616eaadc3d1d8706041ab1b0d03510bc\"> 56</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01811.html\">LocalView</a> = <a class=\"code hl_class\" href=\"a01811.html\">SubspaceLocalView<RootLocalView, PrefixPath></a>;</div>\n-<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> </div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#a330b42b7087eca7afb92ec40eba36440\"> 58</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01807.html#a330b42b7087eca7afb92ec40eba36440\">SizePrefix</a> = <span class=\"keyword\">typename</span> RootBasis::SizePrefix;</div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> </div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> </div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#aee8689dac160442b891bc738c55c1087\"> 62</a></span> <a class=\"code hl_function\" href=\"a01807.html#aee8689dac160442b891bc738c55c1087\">SubspaceBasis</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01807.html#aaa9c058bcb0bc05bdba112801201f281\">RootBasis</a>& <a class=\"code hl_function\" href=\"a01807.html#ac6fc5a04ad73460ae55c73bb8f515712\">rootBasis</a>, <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01807.html#a5dcb19c46539c51ce32a6fdc55738387\">PrefixPath</a>& <a class=\"code hl_function\" href=\"a01807.html#a7c1756f78b770fbbe6937b8a146cdc81\">prefixPath</a>) :</div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> <a class=\"code hl_variable\" href=\"a01807.html#a2f6185785e7ee3ad97f7239fed6f3e39\">rootBasis_</a>(&<a class=\"code hl_function\" href=\"a01807.html#ac6fc5a04ad73460ae55c73bb8f515712\">rootBasis</a>),</div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> <a class=\"code hl_variable\" href=\"a01807.html#ab3509a847b8dfb33032f14ca666c13bb\">prefixPath_</a>(<a class=\"code hl_function\" href=\"a01807.html#a7c1756f78b770fbbe6937b8a146cdc81\">prefixPath</a>)</div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> <span class=\"keyword\">typedef</span> LocalBasisTraits<D,dim,FieldVector<D,dim>,R,1,FieldVector<R,1>,</div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01483.html#a0ec676c23af5cfb27d18260102af08ca\"> 55</a></span> FieldMatrix<R,1,dim> > <a class=\"code hl_typedef\" href=\"a01483.html#a0ec676c23af5cfb27d18260102af08ca\">Traits</a>;</div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> </div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01483.html#ab66fbd26ea34c67071da5c0fa9504191\"> 61</a></span> <a class=\"code hl_function\" href=\"a01483.html#ab66fbd26ea34c67071da5c0fa9504191\">BSplineLocalBasis</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01479.html\">BSplinePreBasis<GV></a>& preBasis,</div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01475.html\">BSplineLocalFiniteElement<GV,R></a>& lFE)</div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> : preBasis_(preBasis),</div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> lFE_(lFE)</div>\n <div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> {}</div>\n <div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> </div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> RootRootBasis, <span class=\"keyword\">class</span> InnerTP, <span class=\"keyword\">class</span> OuterTP></div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#a8994e4c3215b21b9b4d4e1b09a97f4c4\"> 73</a></span> <a class=\"code hl_function\" href=\"a01807.html#a8994e4c3215b21b9b4d4e1b09a97f4c4\">SubspaceBasis</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01807.html\">SubspaceBasis<RootRootBasis, InnerTP></a>& <a class=\"code hl_function\" href=\"a01807.html#ac6fc5a04ad73460ae55c73bb8f515712\">rootBasis</a>, <span class=\"keyword\">const</span> OuterTP& <a class=\"code hl_function\" href=\"a01807.html#a7c1756f78b770fbbe6937b8a146cdc81\">prefixPath</a>) :</div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> <a class=\"code hl_class\" href=\"a01807.html\">SubspaceBasis</a>(<a class=\"code hl_function\" href=\"a01807.html#ac6fc5a04ad73460ae55c73bb8f515712\">rootBasis</a>.<a class=\"code hl_function\" href=\"a01807.html#ac6fc5a04ad73460ae55c73bb8f515712\">rootBasis</a>(), Impl::joinTreePaths(<a class=\"code hl_function\" href=\"a01807.html#ac6fc5a04ad73460ae55c73bb8f515712\">rootBasis</a>.<a class=\"code hl_function\" href=\"a01807.html#a7c1756f78b770fbbe6937b8a146cdc81\">prefixPath</a>(), <a class=\"code hl_function\" href=\"a01807.html#a7c1756f78b770fbbe6937b8a146cdc81\">prefixPath</a>))</div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> {}</div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> </div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> </div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#a8ce8499d3a9117e5138f1ba231a80fcf\"> 80</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01807.html#a6e7dd708494382dad7cc288ce6cfe6b8\">GridView</a>& <a class=\"code hl_function\" href=\"a01807.html#a8ce8499d3a9117e5138f1ba231a80fcf\">gridView</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01807.html#a2f6185785e7ee3ad97f7239fed6f3e39\">rootBasis_</a>->gridView();</div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> }</div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> </div>\n-<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#acbfda46d0971e6f82b7649e195663702\"> 88</a></span> <a class=\"code hl_typedef\" href=\"a01807.html#ad328a135f42bb2a6b9bf60983f61f254\">size_type</a> <a class=\"code hl_function\" href=\"a01807.html#acbfda46d0971e6f82b7649e195663702\">dimension</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01807.html#a2f6185785e7ee3ad97f7239fed6f3e39\">rootBasis_</a>->dimension();</div>\n-<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> }</div>\n-<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> </div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#abe1c4a616c0acdf861fbbc5f52046645\"> 94</a></span> <a class=\"code hl_typedef\" href=\"a01807.html#ad328a135f42bb2a6b9bf60983f61f254\">size_type</a> <a class=\"code hl_function\" href=\"a01807.html#abe1c4a616c0acdf861fbbc5f52046645\">size</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01807.html#a2f6185785e7ee3ad97f7239fed6f3e39\">rootBasis_</a>->size();</div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> }</div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> </div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#a658452a597522c630fab82679da0a167\"> 100</a></span> <a class=\"code hl_typedef\" href=\"a01807.html#ad328a135f42bb2a6b9bf60983f61f254\">size_type</a> <a class=\"code hl_function\" href=\"a01807.html#a658452a597522c630fab82679da0a167\">size</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01807.html#a330b42b7087eca7afb92ec40eba36440\">SizePrefix</a>& prefix)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01807.html#a2f6185785e7ee3ad97f7239fed6f3e39\">rootBasis_</a>->size(prefix);</div>\n-<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> }</div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> </div>\n-<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#a14c47ee1637a33fa73dbac78dd93b4e6\"> 108</a></span> <a class=\"code hl_class\" href=\"a01811.html\">LocalView</a> <a class=\"code hl_function\" href=\"a01807.html#a14c47ee1637a33fa73dbac78dd93b4e6\">localView</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_typedef\" href=\"a01807.html#a616eaadc3d1d8706041ab1b0d03510bc\">LocalView</a>(*<span class=\"keyword\">this</span>, <a class=\"code hl_variable\" href=\"a01807.html#ab3509a847b8dfb33032f14ca666c13bb\">prefixPath_</a>);</div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> }</div>\n+<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01483.html#a6f6f0d5f6137fc30c687a913a9794ef9\"> 70</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01483.html#a6f6f0d5f6137fc30c687a913a9794ef9\">evaluateFunction</a> (<span class=\"keyword\">const</span> FieldVector<D,dim>& in,</div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> std::vector<FieldVector<R,1> >& out)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> FieldVector<D,dim> globalIn = offset_;</div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> scaling_.umv(in,globalIn);</div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> </div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> preBasis_.evaluateFunction(globalIn, out, lFE_.currentKnotSpan_);</div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> }</div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> </div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01483.html#a7bece6d4241e57b2f43e52f4427c7c7c\"> 82</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01483.html#a7bece6d4241e57b2f43e52f4427c7c7c\">evaluateJacobian</a> (<span class=\"keyword\">const</span> FieldVector<D,dim>& in,</div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> std::vector<FieldMatrix<D,1,dim> >& out)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> FieldVector<D,dim> globalIn = offset_;</div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> scaling_.umv(in,globalIn);</div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> </div>\n+<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> preBasis_.evaluateJacobian(globalIn, out, lFE_.currentKnotSpan_);</div>\n+<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> </div>\n+<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<out.size(); i++)</div>\n+<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> j=0; j<dim; j++)</div>\n+<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> out[i][0][j] *= scaling_[j][j];</div>\n+<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> }</div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> </div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> <span class=\"keyword\">template</span><<span class=\"keywordtype\">size_t</span> k></div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01483.html#a515832d188de13e946d113c4b562fb0f\"> 97</a></span> <span class=\"keyword\">inline</span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01483.html#a515832d188de13e946d113c4b562fb0f\">evaluate</a> (<span class=\"keyword\">const</span> <span class=\"keyword\">typename</span> std::array<int,k>& directions,</div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> <span class=\"keyword\">const</span> <span class=\"keyword\">typename</span> Traits::DomainType& in,</div>\n+<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> std::vector<typename Traits::RangeType>& out)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> <span class=\"keywordflow\">switch</span>(k)</div>\n+<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> {</div>\n+<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> <span class=\"keywordflow\">case</span> 0:</div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> <a class=\"code hl_function\" href=\"a01483.html#a6f6f0d5f6137fc30c687a913a9794ef9\">evaluateFunction</a>(in, out);</div>\n+<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> <span class=\"keywordflow\">break</span>;</div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> <span class=\"keywordflow\">case</span> 1:</div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> {</div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> FieldVector<D,dim> globalIn = offset_;</div>\n+<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> scaling_.umv(in,globalIn);</div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> </div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> preBasis_.evaluate(directions, globalIn, out, lFE_.currentKnotSpan_);</div>\n <div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> </div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#ac6fc5a04ad73460ae55c73bb8f515712\"> 113</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01807.html#aaa9c058bcb0bc05bdba112801201f281\">RootBasis</a>& <a class=\"code hl_function\" href=\"a01807.html#ac6fc5a04ad73460ae55c73bb8f515712\">rootBasis</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> <span class=\"keywordflow\">return</span> *<a class=\"code hl_variable\" href=\"a01807.html#a2f6185785e7ee3ad97f7239fed6f3e39\">rootBasis_</a>;</div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> }</div>\n-<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> </div>\n-<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#a7c1756f78b770fbbe6937b8a146cdc81\"> 118</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01807.html#a5dcb19c46539c51ce32a6fdc55738387\">PrefixPath</a>& <a class=\"code hl_function\" href=\"a01807.html#a7c1756f78b770fbbe6937b8a146cdc81\">prefixPath</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01807.html#ab3509a847b8dfb33032f14ca666c13bb\">prefixPath_</a>;</div>\n-<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> }</div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> </div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span><span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#a2f6185785e7ee3ad97f7239fed6f3e39\"> 124</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01807.html#aaa9c058bcb0bc05bdba112801201f281\">RootBasis</a>* <a class=\"code hl_variable\" href=\"a01807.html#a2f6185785e7ee3ad97f7239fed6f3e39\">rootBasis_</a>;</div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01807.html#ab3509a847b8dfb33032f14ca666c13bb\"> 125</a></span> <a class=\"code hl_typedef\" href=\"a01807.html#a5dcb19c46539c51ce32a6fdc55738387\">PrefixPath</a> <a class=\"code hl_variable\" href=\"a01807.html#ab3509a847b8dfb33032f14ca666c13bb\">prefixPath_</a>;</div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span>};</div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> </div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> </div>\n-<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span><span class=\"comment\">// CTAD guide for a non-SubspaceBasis root basis</span></div>\n-<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> RB, <span class=\"keyword\">class</span> TP></div>\n-<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a17589fdc18b015644525c7ad037e6441\"> 131</a></span><a class=\"code hl_function\" href=\"a00219.html#a17589fdc18b015644525c7ad037e6441\">SubspaceBasis</a>(<span class=\"keyword\">const</span> RB&, <span class=\"keyword\">const</span> TP) -> <a class=\"code hl_class\" href=\"a01807.html\">SubspaceBasis<RB, TP></a>;</div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<out.size(); i++)</div>\n+<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> out[i][0] *= scaling_[directions[0]][directions[0]];</div>\n+<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> <span class=\"keywordflow\">break</span>;</div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> }</div>\n+<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> <span class=\"keywordflow\">case</span> 2:</div>\n+<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> {</div>\n+<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> FieldVector<D,dim> globalIn = offset_;</div>\n+<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> scaling_.umv(in,globalIn);</div>\n+<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> </div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> preBasis_.evaluate(directions, globalIn, out, lFE_.currentKnotSpan_);</div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> </div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<out.size(); i++)</div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> out[i][0] *= scaling_[directions[0]][directions[0]]*scaling_[directions[1]][directions[1]];</div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> <span class=\"keywordflow\">break</span>;</div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> }</div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> <span class=\"keywordflow\">default</span>:</div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> DUNE_THROW(NotImplemented, <span class=\"stringliteral\">"B-Spline derivatives of order "</span> << k << <span class=\"stringliteral\">" not implemented yet!"</span>);</div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> }</div>\n+<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> }</div>\n <div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> </div>\n-<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span><span class=\"comment\">// CTAD guide for a SubspaceBasis root basis</span></div>\n-<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> RootRootBasis, <span class=\"keyword\">class</span> InnerTP, <span class=\"keyword\">class</span> OuterTP></div>\n-<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#ae3d703ee72289b3936eb24255fc52694\"> 135</a></span><a class=\"code hl_function\" href=\"a00219.html#a17589fdc18b015644525c7ad037e6441\">SubspaceBasis</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01807.html\">SubspaceBasis<RootRootBasis, InnerTP></a>& rootBasis, <span class=\"keyword\">const</span> OuterTP& prefixPath)</div>\n-<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> -> <a class=\"code hl_class\" href=\"a01807.html\">SubspaceBasis</a><std::decay_t<<span class=\"keyword\">decltype</span>(rootBasis.rootBasis())>, Impl::JoinTreePath_t<InnerTP, OuterTP>>;</div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> </div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> </div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> </div>\n-<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>RootBasis, <span class=\"keyword\">class</span>... PrefixTreeIndices></div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a9effbb98da0e9104a60979fa734c1220\"> 151</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00219.html#a9effbb98da0e9104a60979fa734c1220\">subspaceBasis</a>(<span class=\"keyword\">const</span> RootBasis& rootBasis, <span class=\"keyword\">const</span> TypeTree::HybridTreePath<PrefixTreeIndices...>& prefixPath)</div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span>{</div>\n-<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00219.html#a17589fdc18b015644525c7ad037e6441\">SubspaceBasis</a>(rootBasis, prefixPath);</div>\n-<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span>}</div>\n-<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> </div>\n-<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>RootBasis, <span class=\"keyword\">class</span>... PrefixTreeIndices></div>\n-<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#abb8781cf3fb98ca29446be66bcf65ac4\"> 157</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00219.html#a9effbb98da0e9104a60979fa734c1220\">subspaceBasis</a>(<span class=\"keyword\">const</span> RootBasis& rootBasis, <span class=\"keyword\">const</span> PrefixTreeIndices&... prefixTreeIndices)</div>\n-<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span>{</div>\n-<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00219.html#a9effbb98da0e9104a60979fa734c1220\">subspaceBasis</a>(rootBasis, TypeTree::hybridTreePath(prefixTreeIndices...));</div>\n-<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span>}</div>\n-<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> </div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01483.html#a34a29cc9e1ac3d7f03fadb568014a847\"> 140</a></span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_function\" href=\"a01483.html#a34a29cc9e1ac3d7f03fadb568014a847\">order</a> ()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> <span class=\"keywordflow\">return</span> *std::max_element(preBasis_.order_.begin(), preBasis_.order_.end());</div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> }</div>\n+<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> </div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01483.html#a35462641ee16ccfd06c65d692b9b309f\"> 147</a></span> std::size_t <a class=\"code hl_function\" href=\"a01483.html#a35462641ee16ccfd06c65d692b9b309f\">size</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> <span class=\"keywordflow\">return</span> lFE_.size();</div>\n+<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> }</div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> </div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01479.html\">BSplinePreBasis<GV></a>& preBasis_;</div>\n+<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> </div>\n+<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01475.html\">BSplineLocalFiniteElement<GV,R></a>& lFE_;</div>\n+<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> </div>\n+<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> <span class=\"comment\">// Coordinates in a single knot span differ from coordinates on the B-spline patch</span></div>\n+<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> <span class=\"comment\">// by an affine transformation. This transformation is stored in offset_ and scaling_.</span></div>\n+<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> FieldVector<D,dim> offset_;</div>\n+<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> DiagonalMatrix<D,dim> scaling_;</div>\n+<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span>};</div>\n <div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> </div>\n-<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> </div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span>} <span class=\"comment\">// end namespace Functions</span></div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span>} <span class=\"comment\">// end namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> </div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> </div>\n-<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> </div>\n-<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH</span></div>\n-<div class=\"ttc\" id=\"aa00092_html\"><div class=\"ttname\"><a href=\"a00092.html\">type_traits.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00146_html\"><div class=\"ttname\"><a href=\"a00146.html\">subspacelocalview.hh</a></div></div>\n+<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span><span class=\"keyword\">template</span><<span class=\"keywordtype\">int</span> dim></div>\n+<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01487.html\"> 177</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01487.html\">BSplineLocalCoefficients</a></div>\n+<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span>{</div>\n+<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> <span class=\"comment\">// Return i as a d-digit number in the (k+1)-nary system</span></div>\n+<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> std::array<unsigned int,dim> multiindex (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> i)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> std::array<unsigned int,dim> alpha;</div>\n+<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> j=0; j<dim; j++)</div>\n+<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span> {</div>\n+<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> alpha[j] = i % sizes_[j];</div>\n+<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> i = i/sizes_[j];</div>\n+<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> }</div>\n+<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> <span class=\"keywordflow\">return</span> alpha;</div>\n+<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> }</div>\n+<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span> </div>\n+<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> <span class=\"keywordtype\">void</span> setup1d(std::vector<unsigned int>& subEntity)</div>\n+<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> {</div>\n+<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> <span class=\"keywordflow\">if</span> (sizes_[0]==1)</div>\n+<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> {</div>\n+<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> subEntity[0] = 0;</div>\n+<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> <span class=\"keywordflow\">return</span>;</div>\n+<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> }</div>\n+<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> </div>\n+<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> <span class=\"comment\">/* edge and vertex numbering</span></div>\n+<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span><span class=\"comment\"> 0----0----1</span></div>\n+<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span><span class=\"comment\"> */</span></div>\n+<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> <span class=\"keywordtype\">unsigned</span> lastIndex=0;</div>\n+<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> subEntity[lastIndex++] = 0; <span class=\"comment\">// corner 0</span></div>\n+<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">unsigned</span> i = 0; i < sizes_[0] - 2; ++i)</div>\n+<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> subEntity[lastIndex++] = 0; <span class=\"comment\">// inner dofs of element (0)</span></div>\n+<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> </div>\n+<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span> subEntity[lastIndex++] = 1; <span class=\"comment\">// corner 1</span></div>\n+<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> </div>\n+<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> assert(<a class=\"code hl_function\" href=\"a01487.html#acee2241933e75ae41972b3ce44ceb0c1\">size</a>()==lastIndex);</div>\n+<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> }</div>\n+<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"> 212</span> </div>\n+<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span> <span class=\"keywordtype\">void</span> setup2d(std::vector<unsigned int>& subEntity)</div>\n+<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> {</div>\n+<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> <span class=\"keywordtype\">unsigned</span> lastIndex=0;</div>\n+<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span> </div>\n+<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> <span class=\"comment\">// LocalKey: entity number , entity codim, dof indices within each entity</span></div>\n+<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> <span class=\"comment\">/* edge and vertex numbering</span></div>\n+<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span><span class=\"comment\"> 2----3----3</span></div>\n+<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span><span class=\"comment\"> | |</span></div>\n+<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span><span class=\"comment\"> | |</span></div>\n+<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span><span class=\"comment\"> 0 1</span></div>\n+<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span><span class=\"comment\"> | |</span></div>\n+<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span><span class=\"comment\"> | |</span></div>\n+<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span><span class=\"comment\"> 0----2----1</span></div>\n+<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span><span class=\"comment\"> */</span></div>\n+<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> </div>\n+<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> <span class=\"comment\">// lower edge (2)</span></div>\n+<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> subEntity[lastIndex++] = 0; <span class=\"comment\">// corner 0</span></div>\n+<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">unsigned</span> i = 0; i < sizes_[0]-2; ++i)</div>\n+<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span> subEntity[lastIndex++] = 2; <span class=\"comment\">// inner dofs of lower edge (2)</span></div>\n+<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> </div>\n+<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> subEntity[lastIndex++] = 1; <span class=\"comment\">// corner 1</span></div>\n+<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> </div>\n+<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> <span class=\"comment\">// iterate from bottom to top over inner edge dofs</span></div>\n+<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">unsigned</span> e = 0; e < sizes_[1]-2; ++e)</div>\n+<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span> {</div>\n+<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span> subEntity[lastIndex++] = 0; <span class=\"comment\">// left edge (0)</span></div>\n+<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">unsigned</span> i = 0; i < sizes_[0]-2; ++i)</div>\n+<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"> 240</span> subEntity[lastIndex++] = 0; <span class=\"comment\">// face dofs</span></div>\n+<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span> subEntity[lastIndex++] = 1; <span class=\"comment\">// right edge (1)</span></div>\n+<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span> }</div>\n+<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> </div>\n+<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> <span class=\"comment\">// upper edge (3)</span></div>\n+<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> subEntity[lastIndex++] = 2; <span class=\"comment\">// corner 2</span></div>\n+<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">unsigned</span> i = 0; i < sizes_[0]-2; ++i)</div>\n+<div class=\"line\"><a id=\"l00247\" name=\"l00247\"></a><span class=\"lineno\"> 247</span> subEntity[lastIndex++] = 3; <span class=\"comment\">// inner dofs of upper edge (3)</span></div>\n+<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"> 248</span> </div>\n+<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span> subEntity[lastIndex++] = 3; <span class=\"comment\">// corner 3</span></div>\n+<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span> </div>\n+<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span> assert(<a class=\"code hl_function\" href=\"a01487.html#acee2241933e75ae41972b3ce44ceb0c1\">size</a>()==lastIndex);</div>\n+<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span> }</div>\n+<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"> 253</span> </div>\n+<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"> 254</span> </div>\n+<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01487.html#a73ed6bc866499e512d96cb6d6c315c6f\"> 256</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01487.html#a73ed6bc866499e512d96cb6d6c315c6f\">init</a>(<span class=\"keyword\">const</span> std::array<unsigned,dim>& sizes)</div>\n+<div class=\"line\"><a id=\"l00257\" name=\"l00257\"></a><span class=\"lineno\"> 257</span> {</div>\n+<div class=\"line\"><a id=\"l00258\" name=\"l00258\"></a><span class=\"lineno\"> 258</span> sizes_ = sizes;</div>\n+<div class=\"line\"><a id=\"l00259\" name=\"l00259\"></a><span class=\"lineno\"> 259</span> </div>\n+<div class=\"line\"><a id=\"l00260\" name=\"l00260\"></a><span class=\"lineno\"> 260</span> li_.resize(<a class=\"code hl_function\" href=\"a01487.html#acee2241933e75ae41972b3ce44ceb0c1\">size</a>());</div>\n+<div class=\"line\"><a id=\"l00261\" name=\"l00261\"></a><span class=\"lineno\"> 261</span> </div>\n+<div class=\"line\"><a id=\"l00262\" name=\"l00262\"></a><span class=\"lineno\"> 262</span> <span class=\"comment\">// Set up array of codimension-per-dof-number</span></div>\n+<div class=\"line\"><a id=\"l00263\" name=\"l00263\"></a><span class=\"lineno\"> 263</span> std::vector<unsigned int> codim(li_.size());</div>\n+<div class=\"line\"><a id=\"l00264\" name=\"l00264\"></a><span class=\"lineno\"> 264</span> </div>\n+<div class=\"line\"><a id=\"l00265\" name=\"l00265\"></a><span class=\"lineno\"> 265</span> <span class=\"keywordflow\">for</span> (std::size_t i=0; i<codim.size(); i++)</div>\n+<div class=\"line\"><a id=\"l00266\" name=\"l00266\"></a><span class=\"lineno\"> 266</span> {</div>\n+<div class=\"line\"><a id=\"l00267\" name=\"l00267\"></a><span class=\"lineno\"> 267</span> codim[i] = 0;</div>\n+<div class=\"line\"><a id=\"l00268\" name=\"l00268\"></a><span class=\"lineno\"> 268</span> <span class=\"comment\">// Codimension gets increased by 1 for each coordinate direction</span></div>\n+<div class=\"line\"><a id=\"l00269\" name=\"l00269\"></a><span class=\"lineno\"> 269</span> <span class=\"comment\">// where dof is on boundary</span></div>\n+<div class=\"line\"><a id=\"l00270\" name=\"l00270\"></a><span class=\"lineno\"> 270</span> std::array<unsigned int,dim> mIdx = multiindex(i);</div>\n+<div class=\"line\"><a id=\"l00271\" name=\"l00271\"></a><span class=\"lineno\"> 271</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> j=0; j<dim; j++)</div>\n+<div class=\"line\"><a id=\"l00272\" name=\"l00272\"></a><span class=\"lineno\"> 272</span> <span class=\"keywordflow\">if</span> (mIdx[j]==0 or mIdx[j]==sizes[j]-1)</div>\n+<div class=\"line\"><a id=\"l00273\" name=\"l00273\"></a><span class=\"lineno\"> 273</span> codim[i]++;</div>\n+<div class=\"line\"><a id=\"l00274\" name=\"l00274\"></a><span class=\"lineno\"> 274</span> }</div>\n+<div class=\"line\"><a id=\"l00275\" name=\"l00275\"></a><span class=\"lineno\"> 275</span> </div>\n+<div class=\"line\"><a id=\"l00276\" name=\"l00276\"></a><span class=\"lineno\"> 276</span> <span class=\"comment\">// Set up index vector (the index of the dof in the set of dofs of a given subentity)</span></div>\n+<div class=\"line\"><a id=\"l00277\" name=\"l00277\"></a><span class=\"lineno\"> 277</span> <span class=\"comment\">// Algorithm: the 'index' has the same ordering as the dof number 'i'.</span></div>\n+<div class=\"line\"><a id=\"l00278\" name=\"l00278\"></a><span class=\"lineno\"> 278</span> <span class=\"comment\">// To make it consecutive we interpret 'i' in the (k+1)-adic system, omit all digits</span></div>\n+<div class=\"line\"><a id=\"l00279\" name=\"l00279\"></a><span class=\"lineno\"> 279</span> <span class=\"comment\">// that correspond to axes where the dof is on the element boundary, and transform the</span></div>\n+<div class=\"line\"><a id=\"l00280\" name=\"l00280\"></a><span class=\"lineno\"> 280</span> <span class=\"comment\">// rest to the (k-1)-adic system.</span></div>\n+<div class=\"line\"><a id=\"l00281\" name=\"l00281\"></a><span class=\"lineno\"> 281</span> std::vector<unsigned int> index(<a class=\"code hl_function\" href=\"a01487.html#acee2241933e75ae41972b3ce44ceb0c1\">size</a>());</div>\n+<div class=\"line\"><a id=\"l00282\" name=\"l00282\"></a><span class=\"lineno\"> 282</span> </div>\n+<div class=\"line\"><a id=\"l00283\" name=\"l00283\"></a><span class=\"lineno\"> 283</span> <span class=\"keywordflow\">for</span> (std::size_t i=0; i<index.size(); i++)</div>\n+<div class=\"line\"><a id=\"l00284\" name=\"l00284\"></a><span class=\"lineno\"> 284</span> {</div>\n+<div class=\"line\"><a id=\"l00285\" name=\"l00285\"></a><span class=\"lineno\"> 285</span> index[i] = 0;</div>\n+<div class=\"line\"><a id=\"l00286\" name=\"l00286\"></a><span class=\"lineno\"> 286</span> </div>\n+<div class=\"line\"><a id=\"l00287\" name=\"l00287\"></a><span class=\"lineno\"> 287</span> std::array<unsigned int,dim> mIdx = multiindex(i);</div>\n+<div class=\"line\"><a id=\"l00288\" name=\"l00288\"></a><span class=\"lineno\"> 288</span> </div>\n+<div class=\"line\"><a id=\"l00289\" name=\"l00289\"></a><span class=\"lineno\"> 289</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> j=dim-1; j>=0; j--)</div>\n+<div class=\"line\"><a id=\"l00290\" name=\"l00290\"></a><span class=\"lineno\"> 290</span> <span class=\"keywordflow\">if</span> (mIdx[j]>0 and mIdx[j]<sizes[j]-1)</div>\n+<div class=\"line\"><a id=\"l00291\" name=\"l00291\"></a><span class=\"lineno\"> 291</span> index[i] = (sizes[j]-1)*index[i] + (mIdx[j]-1);</div>\n+<div class=\"line\"><a id=\"l00292\" name=\"l00292\"></a><span class=\"lineno\"> 292</span> }</div>\n+<div class=\"line\"><a id=\"l00293\" name=\"l00293\"></a><span class=\"lineno\"> 293</span> </div>\n+<div class=\"line\"><a id=\"l00294\" name=\"l00294\"></a><span class=\"lineno\"> 294</span> <span class=\"comment\">// Set up entity and dof numbers for each (supported) dimension separately</span></div>\n+<div class=\"line\"><a id=\"l00295\" name=\"l00295\"></a><span class=\"lineno\"> 295</span> std::vector<unsigned int> subEntity(li_.size());</div>\n+<div class=\"line\"><a id=\"l00296\" name=\"l00296\"></a><span class=\"lineno\"> 296</span> </div>\n+<div class=\"line\"><a id=\"l00297\" name=\"l00297\"></a><span class=\"lineno\"> 297</span> <span class=\"keywordflow\">if</span> (subEntity.size() > 0)</div>\n+<div class=\"line\"><a id=\"l00298\" name=\"l00298\"></a><span class=\"lineno\"> 298</span> {</div>\n+<div class=\"line\"><a id=\"l00299\" name=\"l00299\"></a><span class=\"lineno\"> 299</span> <span class=\"keywordflow\">if</span> (dim==1) {</div>\n+<div class=\"line\"><a id=\"l00300\" name=\"l00300\"></a><span class=\"lineno\"> 300</span> </div>\n+<div class=\"line\"><a id=\"l00301\" name=\"l00301\"></a><span class=\"lineno\"> 301</span> setup1d(subEntity);</div>\n+<div class=\"line\"><a id=\"l00302\" name=\"l00302\"></a><span class=\"lineno\"> 302</span> </div>\n+<div class=\"line\"><a id=\"l00303\" name=\"l00303\"></a><span class=\"lineno\"> 303</span> } <span class=\"keywordflow\">else</span> <span class=\"keywordflow\">if</span> (dim==2 and sizes_[0]>1 and sizes_[1]>1) {</div>\n+<div class=\"line\"><a id=\"l00304\" name=\"l00304\"></a><span class=\"lineno\"> 304</span> </div>\n+<div class=\"line\"><a id=\"l00305\" name=\"l00305\"></a><span class=\"lineno\"> 305</span> setup2d(subEntity);</div>\n+<div class=\"line\"><a id=\"l00306\" name=\"l00306\"></a><span class=\"lineno\"> 306</span> </div>\n+<div class=\"line\"><a id=\"l00307\" name=\"l00307\"></a><span class=\"lineno\"> 307</span> }</div>\n+<div class=\"line\"><a id=\"l00308\" name=\"l00308\"></a><span class=\"lineno\"> 308</span> }</div>\n+<div class=\"line\"><a id=\"l00309\" name=\"l00309\"></a><span class=\"lineno\"> 309</span> </div>\n+<div class=\"line\"><a id=\"l00310\" name=\"l00310\"></a><span class=\"lineno\"> 310</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<li_.size(); i++)</div>\n+<div class=\"line\"><a id=\"l00311\" name=\"l00311\"></a><span class=\"lineno\"> 311</span> li_[i] = LocalKey(subEntity[i], codim[i], index[i]);</div>\n+<div class=\"line\"><a id=\"l00312\" name=\"l00312\"></a><span class=\"lineno\"> 312</span> }</div>\n+<div class=\"line\"><a id=\"l00313\" name=\"l00313\"></a><span class=\"lineno\"> 313</span> </div>\n+<div class=\"line\"><a id=\"l00315\" name=\"l00315\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01487.html#acee2241933e75ae41972b3ce44ceb0c1\"> 315</a></span> std::size_t <a class=\"code hl_function\" href=\"a01487.html#acee2241933e75ae41972b3ce44ceb0c1\">size</a> ()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00316\" name=\"l00316\"></a><span class=\"lineno\"> 316</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00317\" name=\"l00317\"></a><span class=\"lineno\"> 317</span> <span class=\"keywordflow\">return</span> std::accumulate(sizes_.begin(), sizes_.end(), 1, std::multiplies<unsigned int>());</div>\n+<div class=\"line\"><a id=\"l00318\" name=\"l00318\"></a><span class=\"lineno\"> 318</span> }</div>\n+<div class=\"line\"><a id=\"l00319\" name=\"l00319\"></a><span class=\"lineno\"> 319</span> </div>\n+<div class=\"line\"><a id=\"l00321\" name=\"l00321\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01487.html#a49f42a4b71756628c60f20cf4868e451\"> 321</a></span> <span class=\"keyword\">const</span> LocalKey& <a class=\"code hl_function\" href=\"a01487.html#a49f42a4b71756628c60f20cf4868e451\">localKey</a> (std::size_t i)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00322\" name=\"l00322\"></a><span class=\"lineno\"> 322</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00323\" name=\"l00323\"></a><span class=\"lineno\"> 323</span> <span class=\"keywordflow\">return</span> li_[i];</div>\n+<div class=\"line\"><a id=\"l00324\" name=\"l00324\"></a><span class=\"lineno\"> 324</span> }</div>\n+<div class=\"line\"><a id=\"l00325\" name=\"l00325\"></a><span class=\"lineno\"> 325</span> </div>\n+<div class=\"line\"><a id=\"l00326\" name=\"l00326\"></a><span class=\"lineno\"> 326</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00327\" name=\"l00327\"></a><span class=\"lineno\"> 327</span> </div>\n+<div class=\"line\"><a id=\"l00328\" name=\"l00328\"></a><span class=\"lineno\"> 328</span> <span class=\"comment\">// Number of shape functions on this element per coordinate direction</span></div>\n+<div class=\"line\"><a id=\"l00329\" name=\"l00329\"></a><span class=\"lineno\"> 329</span> std::array<unsigned, dim> sizes_;</div>\n+<div class=\"line\"><a id=\"l00330\" name=\"l00330\"></a><span class=\"lineno\"> 330</span> </div>\n+<div class=\"line\"><a id=\"l00331\" name=\"l00331\"></a><span class=\"lineno\"> 331</span> std::vector<LocalKey> li_;</div>\n+<div class=\"line\"><a id=\"l00332\" name=\"l00332\"></a><span class=\"lineno\"> 332</span>};</div>\n+<div class=\"line\"><a id=\"l00333\" name=\"l00333\"></a><span class=\"lineno\"> 333</span> </div>\n+<div class=\"line\"><a id=\"l00338\" name=\"l00338\"></a><span class=\"lineno\"> 338</span><span class=\"keyword\">template</span><<span class=\"keywordtype\">int</span> dim, <span class=\"keyword\">class</span> LB></div>\n+<div class=\"line\"><a id=\"l00339\" name=\"l00339\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01491.html\"> 339</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01491.html\">BSplineLocalInterpolation</a></div>\n+<div class=\"line\"><a id=\"l00340\" name=\"l00340\"></a><span class=\"lineno\"> 340</span>{</div>\n+<div class=\"line\"><a id=\"l00341\" name=\"l00341\"></a><span class=\"lineno\"> 341</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00343\" name=\"l00343\"></a><span class=\"lineno\"> 343</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> F, <span class=\"keyword\">typename</span> C></div>\n+<div class=\"line\"><a id=\"l00344\" name=\"l00344\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01491.html#a338c7d6e7a54eefba6398c11c5fa1531\"> 344</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01491.html#a338c7d6e7a54eefba6398c11c5fa1531\">interpolate</a> (<span class=\"keyword\">const</span> F& f, std::vector<C>& out)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00345\" name=\"l00345\"></a><span class=\"lineno\"> 345</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00346\" name=\"l00346\"></a><span class=\"lineno\"> 346</span> DUNE_THROW(NotImplemented, <span class=\"stringliteral\">"BSplineLocalInterpolation::interpolate"</span>);</div>\n+<div class=\"line\"><a id=\"l00347\" name=\"l00347\"></a><span class=\"lineno\"> 347</span> }</div>\n+<div class=\"line\"><a id=\"l00348\" name=\"l00348\"></a><span class=\"lineno\"> 348</span> </div>\n+<div class=\"line\"><a id=\"l00349\" name=\"l00349\"></a><span class=\"lineno\"> 349</span>};</div>\n+<div class=\"line\"><a id=\"l00350\" name=\"l00350\"></a><span class=\"lineno\"> 350</span> </div>\n+<div class=\"line\"><a id=\"l00360\" name=\"l00360\"></a><span class=\"lineno\"> 360</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> GV, <span class=\"keyword\">class</span> R></div>\n+<div class=\"line\"><a id=\"l00361\" name=\"l00361\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html\"> 361</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01475.html\">BSplineLocalFiniteElement</a></div>\n+<div class=\"line\"><a id=\"l00362\" name=\"l00362\"></a><span class=\"lineno\"> 362</span>{</div>\n+<div class=\"line\"><a id=\"l00363\" name=\"l00363\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html#a3be686013589f55bfb76ce3889538d13\"> 363</a></span> <span class=\"keyword\">typedef</span> <span class=\"keyword\">typename</span> GV::ctype D;</div>\n+<div class=\"line\"><a id=\"l00364\" name=\"l00364\"></a><span class=\"lineno\"> 364</span> <span class=\"keyword\">enum</span> {dim = GV::dimension};</div>\n+<div class=\"line\"><a id=\"l00365\" name=\"l00365\"></a><span class=\"lineno\"> 365</span> <span class=\"keyword\">friend</span> <span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01483.html\">BSplineLocalBasis</a><GV,R>;</div>\n+<div class=\"line\"><a id=\"l00366\" name=\"l00366\"></a><span class=\"lineno\"> 366</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00367\" name=\"l00367\"></a><span class=\"lineno\"> 367</span> </div>\n+<div class=\"line\"><a id=\"l00370\" name=\"l00370\"></a><span class=\"lineno\"> 370</span> <span class=\"keyword\">typedef</span> LocalFiniteElementTraits<BSplineLocalBasis<GV,R>,</div>\n+<div class=\"line\"><a id=\"l00371\" name=\"l00371\"></a><span class=\"lineno\"> 371</span> <a class=\"code hl_class\" href=\"a01487.html\">BSplineLocalCoefficients<dim></a>,</div>\n+<div class=\"line\"><a id=\"l00372\" name=\"l00372\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html#a6ea8a8267e93cbd52fed3395b7730817\"> 372</a></span> <a class=\"code hl_class\" href=\"a01491.html\">BSplineLocalInterpolation<dim,BSplineLocalBasis<GV,R></a> > > <a class=\"code hl_typedef\" href=\"a01475.html#a6ea8a8267e93cbd52fed3395b7730817\">Traits</a>;</div>\n+<div class=\"line\"><a id=\"l00373\" name=\"l00373\"></a><span class=\"lineno\"> 373</span> </div>\n+<div class=\"line\"><a id=\"l00376\" name=\"l00376\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html#a85328bfc4b5eb230da71a04dd8198f2f\"> 376</a></span> <a class=\"code hl_function\" href=\"a01475.html#a85328bfc4b5eb230da71a04dd8198f2f\">BSplineLocalFiniteElement</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01479.html\">BSplinePreBasis<GV></a>& preBasis)</div>\n+<div class=\"line\"><a id=\"l00377\" name=\"l00377\"></a><span class=\"lineno\"> 377</span> : <a class=\"code hl_variable\" href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\">preBasis_</a>(preBasis),</div>\n+<div class=\"line\"><a id=\"l00378\" name=\"l00378\"></a><span class=\"lineno\"> 378</span> <a class=\"code hl_variable\" href=\"a01475.html#adc958ccea9712397f9894c927c199d1d\">localBasis_</a>(preBasis,*this)</div>\n+<div class=\"line\"><a id=\"l00379\" name=\"l00379\"></a><span class=\"lineno\"> 379</span> {}</div>\n+<div class=\"line\"><a id=\"l00380\" name=\"l00380\"></a><span class=\"lineno\"> 380</span> </div>\n+<div class=\"line\"><a id=\"l00383\" name=\"l00383\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html#a056defb77857b94194963eaac1d9116e\"> 383</a></span> <a class=\"code hl_function\" href=\"a01475.html#a056defb77857b94194963eaac1d9116e\">BSplineLocalFiniteElement</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01475.html\">BSplineLocalFiniteElement</a>& other)</div>\n+<div class=\"line\"><a id=\"l00384\" name=\"l00384\"></a><span class=\"lineno\"> 384</span> : <a class=\"code hl_variable\" href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\">preBasis_</a>(other.<a class=\"code hl_variable\" href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\">preBasis_</a>),</div>\n+<div class=\"line\"><a id=\"l00385\" name=\"l00385\"></a><span class=\"lineno\"> 385</span> <a class=\"code hl_variable\" href=\"a01475.html#adc958ccea9712397f9894c927c199d1d\">localBasis_</a>(<a class=\"code hl_variable\" href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\">preBasis_</a>,*this)</div>\n+<div class=\"line\"><a id=\"l00386\" name=\"l00386\"></a><span class=\"lineno\"> 386</span> {}</div>\n+<div class=\"line\"><a id=\"l00387\" name=\"l00387\"></a><span class=\"lineno\"> 387</span> </div>\n+<div class=\"line\"><a id=\"l00394\" name=\"l00394\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html#a8986ef55edc552afc79a0c5fb20e93e9\"> 394</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01475.html#a8986ef55edc552afc79a0c5fb20e93e9\">bind</a>(<span class=\"keyword\">const</span> std::array<unsigned,dim>& elementIdx)</div>\n+<div class=\"line\"><a id=\"l00395\" name=\"l00395\"></a><span class=\"lineno\"> 395</span> {</div>\n+<div class=\"line\"><a id=\"l00396\" name=\"l00396\"></a><span class=\"lineno\"> 396</span> <span class=\"comment\">/* \\todo In the long run we need to precompute a table for this */</span></div>\n+<div class=\"line\"><a id=\"l00397\" name=\"l00397\"></a><span class=\"lineno\"> 397</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<elementIdx.size(); i++)</div>\n+<div class=\"line\"><a id=\"l00398\" name=\"l00398\"></a><span class=\"lineno\"> 398</span> {</div>\n+<div class=\"line\"><a id=\"l00399\" name=\"l00399\"></a><span class=\"lineno\"> 399</span> <a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>[i] = 0;</div>\n+<div class=\"line\"><a id=\"l00400\" name=\"l00400\"></a><span class=\"lineno\"> 400</span> </div>\n+<div class=\"line\"><a id=\"l00401\" name=\"l00401\"></a><span class=\"lineno\"> 401</span> <span class=\"comment\">// Skip over degenerate knot spans</span></div>\n+<div class=\"line\"><a id=\"l00402\" name=\"l00402\"></a><span class=\"lineno\"> 402</span> <span class=\"keywordflow\">while</span> (<a class=\"code hl_variable\" href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\">preBasis_</a>.knotVectors_[i][<a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>[i]+1] < <a class=\"code hl_variable\" href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\">preBasis_</a>.knotVectors_[i][<a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>[i]]+1e-8)</div>\n+<div class=\"line\"><a id=\"l00403\" name=\"l00403\"></a><span class=\"lineno\"> 403</span> <a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>[i]++;</div>\n+<div class=\"line\"><a id=\"l00404\" name=\"l00404\"></a><span class=\"lineno\"> 404</span> </div>\n+<div class=\"line\"><a id=\"l00405\" name=\"l00405\"></a><span class=\"lineno\"> 405</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> j=0; j<elementIdx[i]; j++)</div>\n+<div class=\"line\"><a id=\"l00406\" name=\"l00406\"></a><span class=\"lineno\"> 406</span> {</div>\n+<div class=\"line\"><a id=\"l00407\" name=\"l00407\"></a><span class=\"lineno\"> 407</span> <a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>[i]++;</div>\n+<div class=\"line\"><a id=\"l00408\" name=\"l00408\"></a><span class=\"lineno\"> 408</span> </div>\n+<div class=\"line\"><a id=\"l00409\" name=\"l00409\"></a><span class=\"lineno\"> 409</span> <span class=\"comment\">// Skip over degenerate knot spans</span></div>\n+<div class=\"line\"><a id=\"l00410\" name=\"l00410\"></a><span class=\"lineno\"> 410</span> <span class=\"keywordflow\">while</span> (<a class=\"code hl_variable\" href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\">preBasis_</a>.knotVectors_[i][<a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>[i]+1] < <a class=\"code hl_variable\" href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\">preBasis_</a>.knotVectors_[i][<a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>[i]]+1e-8)</div>\n+<div class=\"line\"><a id=\"l00411\" name=\"l00411\"></a><span class=\"lineno\"> 411</span> <a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>[i]++;</div>\n+<div class=\"line\"><a id=\"l00412\" name=\"l00412\"></a><span class=\"lineno\"> 412</span> }</div>\n+<div class=\"line\"><a id=\"l00413\" name=\"l00413\"></a><span class=\"lineno\"> 413</span> </div>\n+<div class=\"line\"><a id=\"l00414\" name=\"l00414\"></a><span class=\"lineno\"> 414</span> <span class=\"comment\">// Compute the geometric transformation from knotspan-local to global coordinates</span></div>\n+<div class=\"line\"><a id=\"l00415\" name=\"l00415\"></a><span class=\"lineno\"> 415</span> <a class=\"code hl_variable\" href=\"a01475.html#adc958ccea9712397f9894c927c199d1d\">localBasis_</a>.offset_[i] = <a class=\"code hl_variable\" href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\">preBasis_</a>.knotVectors_[i][<a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>[i]];</div>\n+<div class=\"line\"><a id=\"l00416\" name=\"l00416\"></a><span class=\"lineno\"> 416</span> <a class=\"code hl_variable\" href=\"a01475.html#adc958ccea9712397f9894c927c199d1d\">localBasis_</a>.scaling_[i][i] = <a class=\"code hl_variable\" href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\">preBasis_</a>.knotVectors_[i][<a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>[i]+1] - <a class=\"code hl_variable\" href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\">preBasis_</a>.knotVectors_[i][<a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>[i]];</div>\n+<div class=\"line\"><a id=\"l00417\" name=\"l00417\"></a><span class=\"lineno\"> 417</span> }</div>\n+<div class=\"line\"><a id=\"l00418\" name=\"l00418\"></a><span class=\"lineno\"> 418</span> </div>\n+<div class=\"line\"><a id=\"l00419\" name=\"l00419\"></a><span class=\"lineno\"> 419</span> <span class=\"comment\">// Set up the LocalCoefficients object</span></div>\n+<div class=\"line\"><a id=\"l00420\" name=\"l00420\"></a><span class=\"lineno\"> 420</span> std::array<unsigned int, dim> sizes;</div>\n+<div class=\"line\"><a id=\"l00421\" name=\"l00421\"></a><span class=\"lineno\"> 421</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<dim; i++)</div>\n+<div class=\"line\"><a id=\"l00422\" name=\"l00422\"></a><span class=\"lineno\"> 422</span> sizes[i] = <a class=\"code hl_function\" href=\"a01475.html#ab15469899e86cb97eece21be2e207162\">size</a>(i);</div>\n+<div class=\"line\"><a id=\"l00423\" name=\"l00423\"></a><span class=\"lineno\"> 423</span> <a class=\"code hl_variable\" href=\"a01475.html#acdec5e2d8a6827228df155110117108c\">localCoefficients_</a>.init(sizes);</div>\n+<div class=\"line\"><a id=\"l00424\" name=\"l00424\"></a><span class=\"lineno\"> 424</span> }</div>\n+<div class=\"line\"><a id=\"l00425\" name=\"l00425\"></a><span class=\"lineno\"> 425</span> </div>\n+<div class=\"line\"><a id=\"l00427\" name=\"l00427\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html#af2e635b34f6682599e45f34263b95326\"> 427</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01483.html\">BSplineLocalBasis<GV,R></a>& <a class=\"code hl_function\" href=\"a01475.html#af2e635b34f6682599e45f34263b95326\">localBasis</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00428\" name=\"l00428\"></a><span class=\"lineno\"> 428</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00429\" name=\"l00429\"></a><span class=\"lineno\"> 429</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01475.html#adc958ccea9712397f9894c927c199d1d\">localBasis_</a>;</div>\n+<div class=\"line\"><a id=\"l00430\" name=\"l00430\"></a><span class=\"lineno\"> 430</span> }</div>\n+<div class=\"line\"><a id=\"l00431\" name=\"l00431\"></a><span class=\"lineno\"> 431</span> </div>\n+<div class=\"line\"><a id=\"l00433\" name=\"l00433\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html#a896fba4c7d267d272cb866f5e7064877\"> 433</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01487.html\">BSplineLocalCoefficients<dim></a>& <a class=\"code hl_function\" href=\"a01475.html#a896fba4c7d267d272cb866f5e7064877\">localCoefficients</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00434\" name=\"l00434\"></a><span class=\"lineno\"> 434</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00435\" name=\"l00435\"></a><span class=\"lineno\"> 435</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01475.html#acdec5e2d8a6827228df155110117108c\">localCoefficients_</a>;</div>\n+<div class=\"line\"><a id=\"l00436\" name=\"l00436\"></a><span class=\"lineno\"> 436</span> }</div>\n+<div class=\"line\"><a id=\"l00437\" name=\"l00437\"></a><span class=\"lineno\"> 437</span> </div>\n+<div class=\"line\"><a id=\"l00439\" name=\"l00439\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html#a6663c7b259e38c50201d6341b426d96c\"> 439</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01491.html\">BSplineLocalInterpolation<dim,BSplineLocalBasis<GV,R></a> >& <a class=\"code hl_function\" href=\"a01475.html#a6663c7b259e38c50201d6341b426d96c\">localInterpolation</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00440\" name=\"l00440\"></a><span class=\"lineno\"> 440</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00441\" name=\"l00441\"></a><span class=\"lineno\"> 441</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01475.html#aa279d56a77941dce374774818d74434e\">localInterpolation_</a>;</div>\n+<div class=\"line\"><a id=\"l00442\" name=\"l00442\"></a><span class=\"lineno\"> 442</span> }</div>\n+<div class=\"line\"><a id=\"l00443\" name=\"l00443\"></a><span class=\"lineno\"> 443</span> </div>\n+<div class=\"line\"><a id=\"l00445\" name=\"l00445\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html#ab15469899e86cb97eece21be2e207162\"> 445</a></span> <span class=\"keywordtype\">unsigned</span> <a class=\"code hl_function\" href=\"a01475.html#ab15469899e86cb97eece21be2e207162\">size</a> ()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00446\" name=\"l00446\"></a><span class=\"lineno\"> 446</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00447\" name=\"l00447\"></a><span class=\"lineno\"> 447</span> std::size_t r = 1;</div>\n+<div class=\"line\"><a id=\"l00448\" name=\"l00448\"></a><span class=\"lineno\"> 448</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<dim; i++)</div>\n+<div class=\"line\"><a id=\"l00449\" name=\"l00449\"></a><span class=\"lineno\"> 449</span> r *= <a class=\"code hl_function\" href=\"a01475.html#ab15469899e86cb97eece21be2e207162\">size</a>(i);</div>\n+<div class=\"line\"><a id=\"l00450\" name=\"l00450\"></a><span class=\"lineno\"> 450</span> <span class=\"keywordflow\">return</span> r;</div>\n+<div class=\"line\"><a id=\"l00451\" name=\"l00451\"></a><span class=\"lineno\"> 451</span> }</div>\n+<div class=\"line\"><a id=\"l00452\" name=\"l00452\"></a><span class=\"lineno\"> 452</span> </div>\n+<div class=\"line\"><a id=\"l00455\" name=\"l00455\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html#aa67e3cd78a28ab0f2a64f78de18f47e2\"> 455</a></span> GeometryType <a class=\"code hl_function\" href=\"a01475.html#aa67e3cd78a28ab0f2a64f78de18f47e2\">type</a> ()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00456\" name=\"l00456\"></a><span class=\"lineno\"> 456</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00457\" name=\"l00457\"></a><span class=\"lineno\"> 457</span> <span class=\"keywordflow\">return</span> GeometryTypes::cube(dim);</div>\n+<div class=\"line\"><a id=\"l00458\" name=\"l00458\"></a><span class=\"lineno\"> 458</span> }</div>\n+<div class=\"line\"><a id=\"l00459\" name=\"l00459\"></a><span class=\"lineno\"> 459</span> </div>\n+<div class=\"line\"><a id=\"l00460\" name=\"l00460\"></a><span class=\"lineno\"> 460</span><span class=\"comment\">//private:</span></div>\n+<div class=\"line\"><a id=\"l00461\" name=\"l00461\"></a><span class=\"lineno\"> 461</span> </div>\n+<div class=\"line\"><a id=\"l00463\" name=\"l00463\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html#ace5084afe0e9f66e0dacc99fe80bf171\"> 463</a></span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_function\" href=\"a01475.html#ace5084afe0e9f66e0dacc99fe80bf171\">size</a>(<span class=\"keywordtype\">int</span> i)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00464\" name=\"l00464\"></a><span class=\"lineno\"> 464</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00465\" name=\"l00465\"></a><span class=\"lineno\"> 465</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& order = <a class=\"code hl_variable\" href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\">preBasis_</a>.order_;</div>\n+<div class=\"line\"><a id=\"l00466\" name=\"l00466\"></a><span class=\"lineno\"> 466</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> r = order[i]+1; <span class=\"comment\">// The 'normal' value</span></div>\n+<div class=\"line\"><a id=\"l00467\" name=\"l00467\"></a><span class=\"lineno\"> 467</span> <span class=\"keywordflow\">if</span> (<a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>[i]<order[i]) <span class=\"comment\">// Less near the left end of the knot vector</span></div>\n+<div class=\"line\"><a id=\"l00468\" name=\"l00468\"></a><span class=\"lineno\"> 468</span> r -= (order[i] - <a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>[i]);</div>\n+<div class=\"line\"><a id=\"l00469\" name=\"l00469\"></a><span class=\"lineno\"> 469</span> <span class=\"keywordflow\">if</span> ( order[i] > (<a class=\"code hl_variable\" href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\">preBasis_</a>.knotVectors_[i].size() - <a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>[i] - 2) )</div>\n+<div class=\"line\"><a id=\"l00470\" name=\"l00470\"></a><span class=\"lineno\"> 470</span> r -= order[i] - (<a class=\"code hl_variable\" href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\">preBasis_</a>.knotVectors_[i].size() - <a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>[i] - 2);</div>\n+<div class=\"line\"><a id=\"l00471\" name=\"l00471\"></a><span class=\"lineno\"> 471</span> <span class=\"keywordflow\">return</span> r;</div>\n+<div class=\"line\"><a id=\"l00472\" name=\"l00472\"></a><span class=\"lineno\"> 472</span> }</div>\n+<div class=\"line\"><a id=\"l00473\" name=\"l00473\"></a><span class=\"lineno\"> 473</span> </div>\n+<div class=\"line\"><a id=\"l00474\" name=\"l00474\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\"> 474</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01479.html\">BSplinePreBasis<GV></a>& <a class=\"code hl_variable\" href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\">preBasis_</a>;</div>\n+<div class=\"line\"><a id=\"l00475\" name=\"l00475\"></a><span class=\"lineno\"> 475</span> </div>\n+<div class=\"line\"><a id=\"l00476\" name=\"l00476\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html#adc958ccea9712397f9894c927c199d1d\"> 476</a></span> <a class=\"code hl_class\" href=\"a01483.html\">BSplineLocalBasis<GV,R></a> <a class=\"code hl_variable\" href=\"a01475.html#adc958ccea9712397f9894c927c199d1d\">localBasis_</a>;</div>\n+<div class=\"line\"><a id=\"l00477\" name=\"l00477\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html#acdec5e2d8a6827228df155110117108c\"> 477</a></span> <a class=\"code hl_class\" href=\"a01487.html\">BSplineLocalCoefficients<dim></a> <a class=\"code hl_variable\" href=\"a01475.html#acdec5e2d8a6827228df155110117108c\">localCoefficients_</a>;</div>\n+<div class=\"line\"><a id=\"l00478\" name=\"l00478\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html#aa279d56a77941dce374774818d74434e\"> 478</a></span> <a class=\"code hl_class\" href=\"a01491.html\">BSplineLocalInterpolation<dim,BSplineLocalBasis<GV,R></a> > <a class=\"code hl_variable\" href=\"a01475.html#aa279d56a77941dce374774818d74434e\">localInterpolation_</a>;</div>\n+<div class=\"line\"><a id=\"l00479\" name=\"l00479\"></a><span class=\"lineno\"> 479</span> </div>\n+<div class=\"line\"><a id=\"l00480\" name=\"l00480\"></a><span class=\"lineno\"> 480</span> <span class=\"comment\">// The knot span we are bound to</span></div>\n+<div class=\"line\"><a id=\"l00481\" name=\"l00481\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\"> 481</a></span> std::array<unsigned,dim> <a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>;</div>\n+<div class=\"line\"><a id=\"l00482\" name=\"l00482\"></a><span class=\"lineno\"> 482</span>};</div>\n+<div class=\"line\"><a id=\"l00483\" name=\"l00483\"></a><span class=\"lineno\"> 483</span> </div>\n+<div class=\"line\"><a id=\"l00484\" name=\"l00484\"></a><span class=\"lineno\"> 484</span> </div>\n+<div class=\"line\"><a id=\"l00485\" name=\"l00485\"></a><span class=\"lineno\"> 485</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV></div>\n+<div class=\"line\"><a id=\"l00486\" name=\"l00486\"></a><span class=\"lineno\"> 486</span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01495.html\">BSplineNode</a>;</div>\n+<div class=\"line\"><a id=\"l00487\" name=\"l00487\"></a><span class=\"lineno\"> 487</span> </div>\n+<div class=\"line\"><a id=\"l00497\" name=\"l00497\"></a><span class=\"lineno\"> 497</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV></div>\n+<div class=\"line\"><a id=\"l00498\" name=\"l00498\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html\"> 498</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01479.html\">BSplinePreBasis</a></div>\n+<div class=\"line\"><a id=\"l00499\" name=\"l00499\"></a><span class=\"lineno\"> 499</span>{</div>\n+<div class=\"line\"><a id=\"l00500\" name=\"l00500\"></a><span class=\"lineno\"> 500</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dim = GV::dimension;</div>\n+<div class=\"line\"><a id=\"l00501\" name=\"l00501\"></a><span class=\"lineno\"> 501</span> </div>\n+<div class=\"line\"><a id=\"l00503\" name=\"l00503\"></a><span class=\"lineno\"> 503</span> <span class=\"keyword\">class </span>MultiDigitCounter</div>\n+<div class=\"line\"><a id=\"l00504\" name=\"l00504\"></a><span class=\"lineno\"> 504</span> {</div>\n+<div class=\"line\"><a id=\"l00505\" name=\"l00505\"></a><span class=\"lineno\"> 505</span> <span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00506\" name=\"l00506\"></a><span class=\"lineno\"> 506</span> </div>\n+<div class=\"line\"><a id=\"l00510\" name=\"l00510\"></a><span class=\"lineno\"> 510</span> MultiDigitCounter(<span class=\"keyword\">const</span> std::array<unsigned int,dim>& limits)</div>\n+<div class=\"line\"><a id=\"l00511\" name=\"l00511\"></a><span class=\"lineno\"> 511</span> : limits_(limits)</div>\n+<div class=\"line\"><a id=\"l00512\" name=\"l00512\"></a><span class=\"lineno\"> 512</span> {</div>\n+<div class=\"line\"><a id=\"l00513\" name=\"l00513\"></a><span class=\"lineno\"> 513</span> std::fill(counter_.begin(), counter_.end(), 0);</div>\n+<div class=\"line\"><a id=\"l00514\" name=\"l00514\"></a><span class=\"lineno\"> 514</span> }</div>\n+<div class=\"line\"><a id=\"l00515\" name=\"l00515\"></a><span class=\"lineno\"> 515</span> </div>\n+<div class=\"line\"><a id=\"l00517\" name=\"l00517\"></a><span class=\"lineno\"> 517</span> MultiDigitCounter& operator++()</div>\n+<div class=\"line\"><a id=\"l00518\" name=\"l00518\"></a><span class=\"lineno\"> 518</span> {</div>\n+<div class=\"line\"><a id=\"l00519\" name=\"l00519\"></a><span class=\"lineno\"> 519</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<dim; i++)</div>\n+<div class=\"line\"><a id=\"l00520\" name=\"l00520\"></a><span class=\"lineno\"> 520</span> {</div>\n+<div class=\"line\"><a id=\"l00521\" name=\"l00521\"></a><span class=\"lineno\"> 521</span> ++counter_[i];</div>\n+<div class=\"line\"><a id=\"l00522\" name=\"l00522\"></a><span class=\"lineno\"> 522</span> </div>\n+<div class=\"line\"><a id=\"l00523\" name=\"l00523\"></a><span class=\"lineno\"> 523</span> <span class=\"comment\">// no overflow?</span></div>\n+<div class=\"line\"><a id=\"l00524\" name=\"l00524\"></a><span class=\"lineno\"> 524</span> <span class=\"keywordflow\">if</span> (counter_[i] < limits_[i])</div>\n+<div class=\"line\"><a id=\"l00525\" name=\"l00525\"></a><span class=\"lineno\"> 525</span> <span class=\"keywordflow\">break</span>;</div>\n+<div class=\"line\"><a id=\"l00526\" name=\"l00526\"></a><span class=\"lineno\"> 526</span> </div>\n+<div class=\"line\"><a id=\"l00527\" name=\"l00527\"></a><span class=\"lineno\"> 527</span> counter_[i] = 0;</div>\n+<div class=\"line\"><a id=\"l00528\" name=\"l00528\"></a><span class=\"lineno\"> 528</span> }</div>\n+<div class=\"line\"><a id=\"l00529\" name=\"l00529\"></a><span class=\"lineno\"> 529</span> <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>;</div>\n+<div class=\"line\"><a id=\"l00530\" name=\"l00530\"></a><span class=\"lineno\"> 530</span> }</div>\n+<div class=\"line\"><a id=\"l00531\" name=\"l00531\"></a><span class=\"lineno\"> 531</span> </div>\n+<div class=\"line\"><a id=\"l00533\" name=\"l00533\"></a><span class=\"lineno\"> 533</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>& operator[](<span class=\"keywordtype\">int</span> i)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00534\" name=\"l00534\"></a><span class=\"lineno\"> 534</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00535\" name=\"l00535\"></a><span class=\"lineno\"> 535</span> <span class=\"keywordflow\">return</span> counter_[i];</div>\n+<div class=\"line\"><a id=\"l00536\" name=\"l00536\"></a><span class=\"lineno\"> 536</span> }</div>\n+<div class=\"line\"><a id=\"l00537\" name=\"l00537\"></a><span class=\"lineno\"> 537</span> </div>\n+<div class=\"line\"><a id=\"l00539\" name=\"l00539\"></a><span class=\"lineno\"> 539</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> cycle()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00540\" name=\"l00540\"></a><span class=\"lineno\"> 540</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00541\" name=\"l00541\"></a><span class=\"lineno\"> 541</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> r = 1;</div>\n+<div class=\"line\"><a id=\"l00542\" name=\"l00542\"></a><span class=\"lineno\"> 542</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<dim; i++)</div>\n+<div class=\"line\"><a id=\"l00543\" name=\"l00543\"></a><span class=\"lineno\"> 543</span> r *= limits_[i];</div>\n+<div class=\"line\"><a id=\"l00544\" name=\"l00544\"></a><span class=\"lineno\"> 544</span> <span class=\"keywordflow\">return</span> r;</div>\n+<div class=\"line\"><a id=\"l00545\" name=\"l00545\"></a><span class=\"lineno\"> 545</span> }</div>\n+<div class=\"line\"><a id=\"l00546\" name=\"l00546\"></a><span class=\"lineno\"> 546</span> </div>\n+<div class=\"line\"><a id=\"l00547\" name=\"l00547\"></a><span class=\"lineno\"> 547</span> <span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00548\" name=\"l00548\"></a><span class=\"lineno\"> 548</span> </div>\n+<div class=\"line\"><a id=\"l00550\" name=\"l00550\"></a><span class=\"lineno\"> 550</span> <span class=\"keyword\">const</span> std::array<unsigned int,dim> limits_;</div>\n+<div class=\"line\"><a id=\"l00551\" name=\"l00551\"></a><span class=\"lineno\"> 551</span> </div>\n+<div class=\"line\"><a id=\"l00553\" name=\"l00553\"></a><span class=\"lineno\"> 553</span> std::array<unsigned int,dim> counter_;</div>\n+<div class=\"line\"><a id=\"l00554\" name=\"l00554\"></a><span class=\"lineno\"> 554</span> </div>\n+<div class=\"line\"><a id=\"l00555\" name=\"l00555\"></a><span class=\"lineno\"> 555</span> };</div>\n+<div class=\"line\"><a id=\"l00556\" name=\"l00556\"></a><span class=\"lineno\"> 556</span> </div>\n+<div class=\"line\"><a id=\"l00557\" name=\"l00557\"></a><span class=\"lineno\"> 557</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00558\" name=\"l00558\"></a><span class=\"lineno\"> 558</span> </div>\n+<div class=\"line\"><a id=\"l00560\" name=\"l00560\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a71f4090ddbb632644769cb0a9c5f394c\"> 560</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01479.html#a71f4090ddbb632644769cb0a9c5f394c\">GridView</a> = GV;</div>\n+<div class=\"line\"><a id=\"l00561\" name=\"l00561\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a7aa8059fdf68035788a75cb680e89cdd\"> 561</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01479.html#a7aa8059fdf68035788a75cb680e89cdd\">size_type</a> = std::size_t;</div>\n+<div class=\"line\"><a id=\"l00562\" name=\"l00562\"></a><span class=\"lineno\"> 562</span> </div>\n+<div class=\"line\"><a id=\"l00563\" name=\"l00563\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#ac9743d0867e738b7794f15aff1bcea35\"> 563</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01495.html\">Node</a> = <a class=\"code hl_class\" href=\"a01495.html\">BSplineNode<GV></a>;</div>\n+<div class=\"line\"><a id=\"l00564\" name=\"l00564\"></a><span class=\"lineno\"> 564</span> </div>\n+<div class=\"line\"><a id=\"l00565\" name=\"l00565\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a7ba55d70ff3c6d156bb31d2d52817533\"> 565</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01479.html#a7aa8059fdf68035788a75cb680e89cdd\">size_type</a> <a class=\"code hl_variable\" href=\"a01479.html#a7ba55d70ff3c6d156bb31d2d52817533\">maxMultiIndexSize</a> = 1;</div>\n+<div class=\"line\"><a id=\"l00566\" name=\"l00566\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#ae1482f3df0012d1fe5ce976cbc0b377a\"> 566</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01479.html#a7aa8059fdf68035788a75cb680e89cdd\">size_type</a> <a class=\"code hl_variable\" href=\"a01479.html#ae1482f3df0012d1fe5ce976cbc0b377a\">minMultiIndexSize</a> = 1;</div>\n+<div class=\"line\"><a id=\"l00567\" name=\"l00567\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a0051c4b5a4b375ab5d453ffa8902787d\"> 567</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01479.html#a7aa8059fdf68035788a75cb680e89cdd\">size_type</a> <a class=\"code hl_variable\" href=\"a01479.html#a0051c4b5a4b375ab5d453ffa8902787d\">multiIndexBufferSize</a> = 1;</div>\n+<div class=\"line\"><a id=\"l00568\" name=\"l00568\"></a><span class=\"lineno\"> 568</span> </div>\n+<div class=\"line\"><a id=\"l00569\" name=\"l00569\"></a><span class=\"lineno\"> 569</span> <span class=\"comment\">// Type used for function values</span></div>\n+<div class=\"line\"><a id=\"l00570\" name=\"l00570\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\"> 570</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a> = double;</div>\n+<div class=\"line\"><a id=\"l00571\" name=\"l00571\"></a><span class=\"lineno\"> 571</span> </div>\n+<div class=\"line\"><a id=\"l00590\" name=\"l00590\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#ad75bb49a82848a47e41698d9a7657e97\"> 590</a></span> <a class=\"code hl_function\" href=\"a01479.html#ad75bb49a82848a47e41698d9a7657e97\">BSplinePreBasis</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01479.html#a71f4090ddbb632644769cb0a9c5f394c\">GridView</a>& <a class=\"code hl_function\" href=\"a01479.html#ace12350629857a803f32d158bbf4dd25\">gridView</a>,</div>\n+<div class=\"line\"><a id=\"l00591\" name=\"l00591\"></a><span class=\"lineno\"> 591</span> <span class=\"keyword\">const</span> std::vector<double>& knotVector,</div>\n+<div class=\"line\"><a id=\"l00592\" name=\"l00592\"></a><span class=\"lineno\"> 592</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> order,</div>\n+<div class=\"line\"><a id=\"l00593\" name=\"l00593\"></a><span class=\"lineno\"> 593</span> <span class=\"keywordtype\">bool</span> makeOpen = <span class=\"keyword\">true</span>)</div>\n+<div class=\"line\"><a id=\"l00594\" name=\"l00594\"></a><span class=\"lineno\"> 594</span> : <a class=\"code hl_variable\" href=\"a01479.html#a141bd4b20ae309776f615f7ca33ce87b\">gridView_</a>(<a class=\"code hl_function\" href=\"a01479.html#ace12350629857a803f32d158bbf4dd25\">gridView</a>)</div>\n+<div class=\"line\"><a id=\"l00595\" name=\"l00595\"></a><span class=\"lineno\"> 595</span> {</div>\n+<div class=\"line\"><a id=\"l00596\" name=\"l00596\"></a><span class=\"lineno\"> 596</span> <span class=\"comment\">// \\todo Detection of duplicate knots</span></div>\n+<div class=\"line\"><a id=\"l00597\" name=\"l00597\"></a><span class=\"lineno\"> 597</span> std::fill(<a class=\"code hl_variable\" href=\"a01479.html#a08746400f31c37c2294fc700f467d291\">elements_</a>.begin(), <a class=\"code hl_variable\" href=\"a01479.html#a08746400f31c37c2294fc700f467d291\">elements_</a>.end(), knotVector.size()-1);</div>\n+<div class=\"line\"><a id=\"l00598\" name=\"l00598\"></a><span class=\"lineno\"> 598</span> </div>\n+<div class=\"line\"><a id=\"l00599\" name=\"l00599\"></a><span class=\"lineno\"> 599</span> <span class=\"comment\">// Mediocre sanity check: we don't know the number of grid elements in each direction.</span></div>\n+<div class=\"line\"><a id=\"l00600\" name=\"l00600\"></a><span class=\"lineno\"> 600</span> <span class=\"comment\">// but at least we know the total number of elements.</span></div>\n+<div class=\"line\"><a id=\"l00601\" name=\"l00601\"></a><span class=\"lineno\"> 601</span> assert( std::accumulate(<a class=\"code hl_variable\" href=\"a01479.html#a08746400f31c37c2294fc700f467d291\">elements_</a>.begin(), <a class=\"code hl_variable\" href=\"a01479.html#a08746400f31c37c2294fc700f467d291\">elements_</a>.end(), 1, std::multiplies<unsigned>()) == <a class=\"code hl_variable\" href=\"a01479.html#a141bd4b20ae309776f615f7ca33ce87b\">gridView_</a>.size(0) );</div>\n+<div class=\"line\"><a id=\"l00602\" name=\"l00602\"></a><span class=\"lineno\"> 602</span> </div>\n+<div class=\"line\"><a id=\"l00603\" name=\"l00603\"></a><span class=\"lineno\"> 603</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<dim; i++)</div>\n+<div class=\"line\"><a id=\"l00604\" name=\"l00604\"></a><span class=\"lineno\"> 604</span> {</div>\n+<div class=\"line\"><a id=\"l00605\" name=\"l00605\"></a><span class=\"lineno\"> 605</span> <span class=\"comment\">// Prepend the correct number of additional knots to open the knot vector</span></div>\n+<div class=\"line\"><a id=\"l00607\" name=\"l00607\"></a><span class=\"lineno\"> 607</span><span class=\"comment\"></span> <span class=\"keywordflow\">if</span> (makeOpen)</div>\n+<div class=\"line\"><a id=\"l00608\" name=\"l00608\"></a><span class=\"lineno\"> 608</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> j=0; j<order; j++)</div>\n+<div class=\"line\"><a id=\"l00609\" name=\"l00609\"></a><span class=\"lineno\"> 609</span> <a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i].push_back(knotVector[0]);</div>\n+<div class=\"line\"><a id=\"l00610\" name=\"l00610\"></a><span class=\"lineno\"> 610</span> </div>\n+<div class=\"line\"><a id=\"l00611\" name=\"l00611\"></a><span class=\"lineno\"> 611</span> <a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i].insert(<a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i].end(), knotVector.begin(), knotVector.end());</div>\n+<div class=\"line\"><a id=\"l00612\" name=\"l00612\"></a><span class=\"lineno\"> 612</span> </div>\n+<div class=\"line\"><a id=\"l00613\" name=\"l00613\"></a><span class=\"lineno\"> 613</span> <span class=\"keywordflow\">if</span> (makeOpen)</div>\n+<div class=\"line\"><a id=\"l00614\" name=\"l00614\"></a><span class=\"lineno\"> 614</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> j=0; j<order; j++)</div>\n+<div class=\"line\"><a id=\"l00615\" name=\"l00615\"></a><span class=\"lineno\"> 615</span> <a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i].push_back(knotVector.back());</div>\n+<div class=\"line\"><a id=\"l00616\" name=\"l00616\"></a><span class=\"lineno\"> 616</span> }</div>\n+<div class=\"line\"><a id=\"l00617\" name=\"l00617\"></a><span class=\"lineno\"> 617</span> </div>\n+<div class=\"line\"><a id=\"l00618\" name=\"l00618\"></a><span class=\"lineno\"> 618</span> std::fill(<a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>.begin(), <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>.end(), order);</div>\n+<div class=\"line\"><a id=\"l00619\" name=\"l00619\"></a><span class=\"lineno\"> 619</span> }</div>\n+<div class=\"line\"><a id=\"l00620\" name=\"l00620\"></a><span class=\"lineno\"> 620</span> </div>\n+<div class=\"line\"><a id=\"l00642\" name=\"l00642\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#afdc9d93d63de521026ce13ccc9f0e27e\"> 642</a></span> <a class=\"code hl_function\" href=\"a01479.html#afdc9d93d63de521026ce13ccc9f0e27e\">BSplinePreBasis</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01479.html#a71f4090ddbb632644769cb0a9c5f394c\">GridView</a>& <a class=\"code hl_function\" href=\"a01479.html#ace12350629857a803f32d158bbf4dd25\">gridView</a>,</div>\n+<div class=\"line\"><a id=\"l00643\" name=\"l00643\"></a><span class=\"lineno\"> 643</span> <span class=\"keyword\">const</span> FieldVector<double,dim>& lowerLeft,</div>\n+<div class=\"line\"><a id=\"l00644\" name=\"l00644\"></a><span class=\"lineno\"> 644</span> <span class=\"keyword\">const</span> FieldVector<double,dim>& upperRight,</div>\n+<div class=\"line\"><a id=\"l00645\" name=\"l00645\"></a><span class=\"lineno\"> 645</span> <span class=\"keyword\">const</span> std::array<unsigned int,dim>& elements,</div>\n+<div class=\"line\"><a id=\"l00646\" name=\"l00646\"></a><span class=\"lineno\"> 646</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> order,</div>\n+<div class=\"line\"><a id=\"l00647\" name=\"l00647\"></a><span class=\"lineno\"> 647</span> <span class=\"keywordtype\">bool</span> makeOpen = <span class=\"keyword\">true</span>)</div>\n+<div class=\"line\"><a id=\"l00648\" name=\"l00648\"></a><span class=\"lineno\"> 648</span> : <a class=\"code hl_variable\" href=\"a01479.html#a08746400f31c37c2294fc700f467d291\">elements_</a>(elements),</div>\n+<div class=\"line\"><a id=\"l00649\" name=\"l00649\"></a><span class=\"lineno\"> 649</span> <a class=\"code hl_variable\" href=\"a01479.html#a141bd4b20ae309776f615f7ca33ce87b\">gridView_</a>(<a class=\"code hl_function\" href=\"a01479.html#ace12350629857a803f32d158bbf4dd25\">gridView</a>)</div>\n+<div class=\"line\"><a id=\"l00650\" name=\"l00650\"></a><span class=\"lineno\"> 650</span> {</div>\n+<div class=\"line\"><a id=\"l00651\" name=\"l00651\"></a><span class=\"lineno\"> 651</span> <span class=\"comment\">// Mediocre sanity check: we don't know the number of grid elements in each direction.</span></div>\n+<div class=\"line\"><a id=\"l00652\" name=\"l00652\"></a><span class=\"lineno\"> 652</span> <span class=\"comment\">// but at least we know the total number of elements.</span></div>\n+<div class=\"line\"><a id=\"l00653\" name=\"l00653\"></a><span class=\"lineno\"> 653</span> assert( std::accumulate(<a class=\"code hl_variable\" href=\"a01479.html#a08746400f31c37c2294fc700f467d291\">elements_</a>.begin(), <a class=\"code hl_variable\" href=\"a01479.html#a08746400f31c37c2294fc700f467d291\">elements_</a>.end(), 1, std::multiplies<unsigned>()) == <a class=\"code hl_variable\" href=\"a01479.html#a141bd4b20ae309776f615f7ca33ce87b\">gridView_</a>.size(0) );</div>\n+<div class=\"line\"><a id=\"l00654\" name=\"l00654\"></a><span class=\"lineno\"> 654</span> </div>\n+<div class=\"line\"><a id=\"l00655\" name=\"l00655\"></a><span class=\"lineno\"> 655</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<dim; i++)</div>\n+<div class=\"line\"><a id=\"l00656\" name=\"l00656\"></a><span class=\"lineno\"> 656</span> {</div>\n+<div class=\"line\"><a id=\"l00657\" name=\"l00657\"></a><span class=\"lineno\"> 657</span> <span class=\"comment\">// Prepend the correct number of additional knots to open the knot vector</span></div>\n+<div class=\"line\"><a id=\"l00659\" name=\"l00659\"></a><span class=\"lineno\"> 659</span><span class=\"comment\"></span> <span class=\"keywordflow\">if</span> (makeOpen)</div>\n+<div class=\"line\"><a id=\"l00660\" name=\"l00660\"></a><span class=\"lineno\"> 660</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> j=0; j<order; j++)</div>\n+<div class=\"line\"><a id=\"l00661\" name=\"l00661\"></a><span class=\"lineno\"> 661</span> <a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i].push_back(lowerLeft[i]);</div>\n+<div class=\"line\"><a id=\"l00662\" name=\"l00662\"></a><span class=\"lineno\"> 662</span> </div>\n+<div class=\"line\"><a id=\"l00663\" name=\"l00663\"></a><span class=\"lineno\"> 663</span> <span class=\"comment\">// Construct the actual knot vector</span></div>\n+<div class=\"line\"><a id=\"l00664\" name=\"l00664\"></a><span class=\"lineno\"> 664</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> j=0; j<elements[i]+1; j++)</div>\n+<div class=\"line\"><a id=\"l00665\" name=\"l00665\"></a><span class=\"lineno\"> 665</span> <a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i].push_back(lowerLeft[i] + j*(upperRight[i]-lowerLeft[i]) / elements[i]);</div>\n+<div class=\"line\"><a id=\"l00666\" name=\"l00666\"></a><span class=\"lineno\"> 666</span> </div>\n+<div class=\"line\"><a id=\"l00667\" name=\"l00667\"></a><span class=\"lineno\"> 667</span> <span class=\"keywordflow\">if</span> (makeOpen)</div>\n+<div class=\"line\"><a id=\"l00668\" name=\"l00668\"></a><span class=\"lineno\"> 668</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> j=0; j<order; j++)</div>\n+<div class=\"line\"><a id=\"l00669\" name=\"l00669\"></a><span class=\"lineno\"> 669</span> <a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i].push_back(upperRight[i]);</div>\n+<div class=\"line\"><a id=\"l00670\" name=\"l00670\"></a><span class=\"lineno\"> 670</span> }</div>\n+<div class=\"line\"><a id=\"l00671\" name=\"l00671\"></a><span class=\"lineno\"> 671</span> </div>\n+<div class=\"line\"><a id=\"l00672\" name=\"l00672\"></a><span class=\"lineno\"> 672</span> std::fill(<a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>.begin(), <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>.end(), order);</div>\n+<div class=\"line\"><a id=\"l00673\" name=\"l00673\"></a><span class=\"lineno\"> 673</span> }</div>\n+<div class=\"line\"><a id=\"l00674\" name=\"l00674\"></a><span class=\"lineno\"> 674</span> </div>\n+<div class=\"line\"><a id=\"l00676\" name=\"l00676\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a9292ccd68d50240f94f75f54989fd7dd\"> 676</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01479.html#a9292ccd68d50240f94f75f54989fd7dd\">initializeIndices</a>()</div>\n+<div class=\"line\"><a id=\"l00677\" name=\"l00677\"></a><span class=\"lineno\"> 677</span> {}</div>\n+<div class=\"line\"><a id=\"l00678\" name=\"l00678\"></a><span class=\"lineno\"> 678</span> </div>\n+<div class=\"line\"><a id=\"l00680\" name=\"l00680\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#ace12350629857a803f32d158bbf4dd25\"> 680</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01479.html#a71f4090ddbb632644769cb0a9c5f394c\">GridView</a>& <a class=\"code hl_function\" href=\"a01479.html#ace12350629857a803f32d158bbf4dd25\">gridView</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00681\" name=\"l00681\"></a><span class=\"lineno\"> 681</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00682\" name=\"l00682\"></a><span class=\"lineno\"> 682</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01479.html#a141bd4b20ae309776f615f7ca33ce87b\">gridView_</a>;</div>\n+<div class=\"line\"><a id=\"l00683\" name=\"l00683\"></a><span class=\"lineno\"> 683</span> }</div>\n+<div class=\"line\"><a id=\"l00684\" name=\"l00684\"></a><span class=\"lineno\"> 684</span> </div>\n+<div class=\"line\"><a id=\"l00686\" name=\"l00686\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a7e14d2f4019dbe19e9d6595bc4f60d65\"> 686</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01479.html#a7e14d2f4019dbe19e9d6595bc4f60d65\">update</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01479.html#a71f4090ddbb632644769cb0a9c5f394c\">GridView</a>& gv)</div>\n+<div class=\"line\"><a id=\"l00687\" name=\"l00687\"></a><span class=\"lineno\"> 687</span> {</div>\n+<div class=\"line\"><a id=\"l00688\" name=\"l00688\"></a><span class=\"lineno\"> 688</span> <a class=\"code hl_variable\" href=\"a01479.html#a141bd4b20ae309776f615f7ca33ce87b\">gridView_</a> = gv;</div>\n+<div class=\"line\"><a id=\"l00689\" name=\"l00689\"></a><span class=\"lineno\"> 689</span> }</div>\n+<div class=\"line\"><a id=\"l00690\" name=\"l00690\"></a><span class=\"lineno\"> 690</span> </div>\n+<div class=\"line\"><a id=\"l00694\" name=\"l00694\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#ad63b66afedd5483d385a116e1244fdbd\"> 694</a></span> <a class=\"code hl_class\" href=\"a01495.html\">Node</a> <a class=\"code hl_function\" href=\"a01479.html#ad63b66afedd5483d385a116e1244fdbd\">makeNode</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00695\" name=\"l00695\"></a><span class=\"lineno\"> 695</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00696\" name=\"l00696\"></a><span class=\"lineno\"> 696</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01495.html\">Node</a>{<span class=\"keyword\">this</span>};</div>\n+<div class=\"line\"><a id=\"l00697\" name=\"l00697\"></a><span class=\"lineno\"> 697</span> }</div>\n+<div class=\"line\"><a id=\"l00698\" name=\"l00698\"></a><span class=\"lineno\"> 698</span> </div>\n+<div class=\"line\"><a id=\"l00699\" name=\"l00699\"></a><span class=\"lineno\"> 699</span> <span class=\"comment\">// Ideally this method should be implemented as</span></div>\n+<div class=\"line\"><a id=\"l00700\" name=\"l00700\"></a><span class=\"lineno\"> 700</span> <span class=\"comment\">//</span></div>\n+<div class=\"line\"><a id=\"l00701\" name=\"l00701\"></a><span class=\"lineno\"> 701</span> <span class=\"comment\">// template<class SizePrefix></span></div>\n+<div class=\"line\"><a id=\"l00702\" name=\"l00702\"></a><span class=\"lineno\"> 702</span> <span class=\"comment\">// size_type size(const SizePrefix& prefix) const</span></div>\n+<div class=\"line\"><a id=\"l00703\" name=\"l00703\"></a><span class=\"lineno\"> 703</span> <span class=\"comment\">//</span></div>\n+<div class=\"line\"><a id=\"l00704\" name=\"l00704\"></a><span class=\"lineno\"> 704</span> <span class=\"comment\">// But leads to ambiguity with the other size method:</span></div>\n+<div class=\"line\"><a id=\"l00705\" name=\"l00705\"></a><span class=\"lineno\"> 705</span> <span class=\"comment\">//</span></div>\n+<div class=\"line\"><a id=\"l00706\" name=\"l00706\"></a><span class=\"lineno\"> 706</span> <span class=\"comment\">// unsigned int size (size_t d) const</span></div>\n+<div class=\"line\"><a id=\"l00707\" name=\"l00707\"></a><span class=\"lineno\"> 707</span> <span class=\"comment\">//</span></div>\n+<div class=\"line\"><a id=\"l00708\" name=\"l00708\"></a><span class=\"lineno\"> 708</span> <span class=\"comment\">// Once the latter is removed, this implementation should be changed.</span></div>\n+<div class=\"line\"><a id=\"l00709\" name=\"l00709\"></a><span class=\"lineno\"> 709</span> </div>\n+<div class=\"line\"><a id=\"l00711\" name=\"l00711\"></a><span class=\"lineno\"> 711</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> ST, <span class=\"keywordtype\">int</span> i></div>\n+<div class=\"line\"><a id=\"l00712\" name=\"l00712\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#aae5d004ab9ccf9fb1d597505d493895a\"> 712</a></span> <a class=\"code hl_typedef\" href=\"a01479.html#a7aa8059fdf68035788a75cb680e89cdd\">size_type</a> <a class=\"code hl_function\" href=\"a01479.html#aae5d004ab9ccf9fb1d597505d493895a\">size</a>(<span class=\"keyword\">const</span> Dune::ReservedVector<ST, i>& prefix)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00713\" name=\"l00713\"></a><span class=\"lineno\"> 713</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00714\" name=\"l00714\"></a><span class=\"lineno\"> 714</span> assert(prefix.size() == 0 || prefix.size() == 1);</div>\n+<div class=\"line\"><a id=\"l00715\" name=\"l00715\"></a><span class=\"lineno\"> 715</span> <span class=\"keywordflow\">return</span> (prefix.size() == 0) ? <a class=\"code hl_function\" href=\"a01479.html#acbd350edf10b11a798c8d59285619646\">size</a>() : 0;</div>\n+<div class=\"line\"><a id=\"l00716\" name=\"l00716\"></a><span class=\"lineno\"> 716</span> }</div>\n+<div class=\"line\"><a id=\"l00717\" name=\"l00717\"></a><span class=\"lineno\"> 717</span> </div>\n+<div class=\"line\"><a id=\"l00719\" name=\"l00719\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a3ea7b013cc2160f1705b5567e613a568\"> 719</a></span> <a class=\"code hl_typedef\" href=\"a01479.html#a7aa8059fdf68035788a75cb680e89cdd\">size_type</a> <a class=\"code hl_function\" href=\"a01479.html#a3ea7b013cc2160f1705b5567e613a568\">dimension</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00720\" name=\"l00720\"></a><span class=\"lineno\"> 720</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00721\" name=\"l00721\"></a><span class=\"lineno\"> 721</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01479.html#acbd350edf10b11a798c8d59285619646\">size</a>();</div>\n+<div class=\"line\"><a id=\"l00722\" name=\"l00722\"></a><span class=\"lineno\"> 722</span> }</div>\n+<div class=\"line\"><a id=\"l00723\" name=\"l00723\"></a><span class=\"lineno\"> 723</span> </div>\n+<div class=\"line\"><a id=\"l00725\" name=\"l00725\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#af1b76255a0f308dbe049db50807ea041\"> 725</a></span> <a class=\"code hl_typedef\" href=\"a01479.html#a7aa8059fdf68035788a75cb680e89cdd\">size_type</a> <a class=\"code hl_function\" href=\"a01479.html#af1b76255a0f308dbe049db50807ea041\">maxNodeSize</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00726\" name=\"l00726\"></a><span class=\"lineno\"> 726</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00727\" name=\"l00727\"></a><span class=\"lineno\"> 727</span> <a class=\"code hl_typedef\" href=\"a01479.html#a7aa8059fdf68035788a75cb680e89cdd\">size_type</a> result = 1;</div>\n+<div class=\"line\"><a id=\"l00728\" name=\"l00728\"></a><span class=\"lineno\"> 728</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<dim; i++)</div>\n+<div class=\"line\"><a id=\"l00729\" name=\"l00729\"></a><span class=\"lineno\"> 729</span> result *= <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i]+1;</div>\n+<div class=\"line\"><a id=\"l00730\" name=\"l00730\"></a><span class=\"lineno\"> 730</span> <span class=\"keywordflow\">return</span> result;</div>\n+<div class=\"line\"><a id=\"l00731\" name=\"l00731\"></a><span class=\"lineno\"> 731</span> }</div>\n+<div class=\"line\"><a id=\"l00732\" name=\"l00732\"></a><span class=\"lineno\"> 732</span> </div>\n+<div class=\"line\"><a id=\"l00734\" name=\"l00734\"></a><span class=\"lineno\"> 734</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n+<div class=\"line\"><a id=\"l00735\" name=\"l00735\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a751c671d2effffac3167f66b1fe5755d\"> 735</a></span> It <a class=\"code hl_function\" href=\"a01479.html#a751c671d2effffac3167f66b1fe5755d\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01495.html\">Node</a>& node, It it)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00736\" name=\"l00736\"></a><span class=\"lineno\"> 736</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00737\" name=\"l00737\"></a><span class=\"lineno\"> 737</span> <span class=\"comment\">// Local degrees of freedom are arranged in a lattice.</span></div>\n+<div class=\"line\"><a id=\"l00738\" name=\"l00738\"></a><span class=\"lineno\"> 738</span> <span class=\"comment\">// We need the lattice dimensions to be able to compute lattice coordinates from a local index</span></div>\n+<div class=\"line\"><a id=\"l00739\" name=\"l00739\"></a><span class=\"lineno\"> 739</span> std::array<unsigned int, dim> localSizes;</div>\n+<div class=\"line\"><a id=\"l00740\" name=\"l00740\"></a><span class=\"lineno\"> 740</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<dim; i++)</div>\n+<div class=\"line\"><a id=\"l00741\" name=\"l00741\"></a><span class=\"lineno\"> 741</span> localSizes[i] = node.<a class=\"code hl_function\" href=\"a01495.html#a061007133830a1181adc187c1f6f692b\">finiteElement</a>().<a class=\"code hl_function\" href=\"a01475.html#ab15469899e86cb97eece21be2e207162\">size</a>(i);</div>\n+<div class=\"line\"><a id=\"l00742\" name=\"l00742\"></a><span class=\"lineno\"> 742</span> <span class=\"keywordflow\">for</span> (<a class=\"code hl_typedef\" href=\"a01479.html#a7aa8059fdf68035788a75cb680e89cdd\">size_type</a> i = 0, end = node.<a class=\"code hl_function\" href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">size</a>() ; i < end ; ++i, ++it)</div>\n+<div class=\"line\"><a id=\"l00743\" name=\"l00743\"></a><span class=\"lineno\"> 743</span> {</div>\n+<div class=\"line\"><a id=\"l00744\" name=\"l00744\"></a><span class=\"lineno\"> 744</span> std::array<unsigned int,dim> localIJK = <a class=\"code hl_function\" href=\"a01479.html#ad49a0bd70180481c702887c873386897\">getIJK</a>(i, localSizes);</div>\n+<div class=\"line\"><a id=\"l00745\" name=\"l00745\"></a><span class=\"lineno\"> 745</span> </div>\n+<div class=\"line\"><a id=\"l00746\" name=\"l00746\"></a><span class=\"lineno\"> 746</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span> currentKnotSpan = node.<a class=\"code hl_function\" href=\"a01495.html#a061007133830a1181adc187c1f6f692b\">finiteElement</a>().<a class=\"code hl_variable\" href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">currentKnotSpan_</a>;</div>\n+<div class=\"line\"><a id=\"l00747\" name=\"l00747\"></a><span class=\"lineno\"> 747</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span> order = <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>;</div>\n+<div class=\"line\"><a id=\"l00748\" name=\"l00748\"></a><span class=\"lineno\"> 748</span> </div>\n+<div class=\"line\"><a id=\"l00749\" name=\"l00749\"></a><span class=\"lineno\"> 749</span> std::array<unsigned int,dim> globalIJK;</div>\n+<div class=\"line\"><a id=\"l00750\" name=\"l00750\"></a><span class=\"lineno\"> 750</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<dim; i++)</div>\n+<div class=\"line\"><a id=\"l00751\" name=\"l00751\"></a><span class=\"lineno\"> 751</span> globalIJK[i] = std::max((<span class=\"keywordtype\">int</span>)currentKnotSpan[i] - (<span class=\"keywordtype\">int</span>)order[i], 0) + localIJK[i]; <span class=\"comment\">// needs to be a signed type!</span></div>\n+<div class=\"line\"><a id=\"l00752\" name=\"l00752\"></a><span class=\"lineno\"> 752</span> </div>\n+<div class=\"line\"><a id=\"l00753\" name=\"l00753\"></a><span class=\"lineno\"> 753</span> <span class=\"comment\">// Make one global flat index from the globalIJK tuple</span></div>\n+<div class=\"line\"><a id=\"l00754\" name=\"l00754\"></a><span class=\"lineno\"> 754</span> <a class=\"code hl_typedef\" href=\"a01479.html#a7aa8059fdf68035788a75cb680e89cdd\">size_type</a> globalIdx = globalIJK[dim-1];</div>\n+<div class=\"line\"><a id=\"l00755\" name=\"l00755\"></a><span class=\"lineno\"> 755</span> </div>\n+<div class=\"line\"><a id=\"l00756\" name=\"l00756\"></a><span class=\"lineno\"> 756</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=dim-2; i>=0; i--)</div>\n+<div class=\"line\"><a id=\"l00757\" name=\"l00757\"></a><span class=\"lineno\"> 757</span> globalIdx = globalIdx * <a class=\"code hl_function\" href=\"a01479.html#acbd350edf10b11a798c8d59285619646\">size</a>(i) + globalIJK[i];</div>\n+<div class=\"line\"><a id=\"l00758\" name=\"l00758\"></a><span class=\"lineno\"> 758</span> </div>\n+<div class=\"line\"><a id=\"l00759\" name=\"l00759\"></a><span class=\"lineno\"> 759</span> *it = {{globalIdx}};</div>\n+<div class=\"line\"><a id=\"l00760\" name=\"l00760\"></a><span class=\"lineno\"> 760</span> }</div>\n+<div class=\"line\"><a id=\"l00761\" name=\"l00761\"></a><span class=\"lineno\"> 761</span> <span class=\"keywordflow\">return</span> it;</div>\n+<div class=\"line\"><a id=\"l00762\" name=\"l00762\"></a><span class=\"lineno\"> 762</span> }</div>\n+<div class=\"line\"><a id=\"l00763\" name=\"l00763\"></a><span class=\"lineno\"> 763</span> </div>\n+<div class=\"line\"><a id=\"l00765\" name=\"l00765\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#acbd350edf10b11a798c8d59285619646\"> 765</a></span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_function\" href=\"a01479.html#acbd350edf10b11a798c8d59285619646\">size</a> ()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00766\" name=\"l00766\"></a><span class=\"lineno\"> 766</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00767\" name=\"l00767\"></a><span class=\"lineno\"> 767</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> result = 1;</div>\n+<div class=\"line\"><a id=\"l00768\" name=\"l00768\"></a><span class=\"lineno\"> 768</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<dim; i++)</div>\n+<div class=\"line\"><a id=\"l00769\" name=\"l00769\"></a><span class=\"lineno\"> 769</span> result *= <a class=\"code hl_function\" href=\"a01479.html#acbd350edf10b11a798c8d59285619646\">size</a>(i);</div>\n+<div class=\"line\"><a id=\"l00770\" name=\"l00770\"></a><span class=\"lineno\"> 770</span> <span class=\"keywordflow\">return</span> result;</div>\n+<div class=\"line\"><a id=\"l00771\" name=\"l00771\"></a><span class=\"lineno\"> 771</span> }</div>\n+<div class=\"line\"><a id=\"l00772\" name=\"l00772\"></a><span class=\"lineno\"> 772</span> </div>\n+<div class=\"line\"><a id=\"l00774\" name=\"l00774\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a6522976d7c91ec4cbf1a193c1b114656\"> 774</a></span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code hl_function\" href=\"a01479.html#a6522976d7c91ec4cbf1a193c1b114656\">size</a> (<span class=\"keywordtype\">size_t</span> d)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00775\" name=\"l00775\"></a><span class=\"lineno\"> 775</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00776\" name=\"l00776\"></a><span class=\"lineno\"> 776</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[d].size() - <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[d] - 1;</div>\n+<div class=\"line\"><a id=\"l00777\" name=\"l00777\"></a><span class=\"lineno\"> 777</span> }</div>\n+<div class=\"line\"><a id=\"l00778\" name=\"l00778\"></a><span class=\"lineno\"> 778</span> </div>\n+<div class=\"line\"><a id=\"l00781\" name=\"l00781\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a2f03d19256812e423ba918e480c03a7b\"> 781</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01479.html#a2f03d19256812e423ba918e480c03a7b\">evaluateFunction</a> (<span class=\"keyword\">const</span> FieldVector<typename GV::ctype,dim>& in,</div>\n+<div class=\"line\"><a id=\"l00782\" name=\"l00782\"></a><span class=\"lineno\"> 782</span> std::vector<FieldVector<R,1> >& out,</div>\n+<div class=\"line\"><a id=\"l00783\" name=\"l00783\"></a><span class=\"lineno\"> 783</span> <span class=\"keyword\">const</span> std::array<unsigned,dim>& currentKnotSpan)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00784\" name=\"l00784\"></a><span class=\"lineno\"> 784</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00785\" name=\"l00785\"></a><span class=\"lineno\"> 785</span> <span class=\"comment\">// Evaluate</span></div>\n+<div class=\"line\"><a id=\"l00786\" name=\"l00786\"></a><span class=\"lineno\"> 786</span> std::array<std::vector<R>, dim> oneDValues;</div>\n+<div class=\"line\"><a id=\"l00787\" name=\"l00787\"></a><span class=\"lineno\"> 787</span> </div>\n+<div class=\"line\"><a id=\"l00788\" name=\"l00788\"></a><span class=\"lineno\"> 788</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<dim; i++)</div>\n+<div class=\"line\"><a id=\"l00789\" name=\"l00789\"></a><span class=\"lineno\"> 789</span> <a class=\"code hl_function\" href=\"a01479.html#a2f03d19256812e423ba918e480c03a7b\">evaluateFunction</a>(in[i], oneDValues[i], <a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i], <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i], currentKnotSpan[i]);</div>\n+<div class=\"line\"><a id=\"l00790\" name=\"l00790\"></a><span class=\"lineno\"> 790</span> </div>\n+<div class=\"line\"><a id=\"l00791\" name=\"l00791\"></a><span class=\"lineno\"> 791</span> std::array<unsigned int, dim> limits;</div>\n+<div class=\"line\"><a id=\"l00792\" name=\"l00792\"></a><span class=\"lineno\"> 792</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<dim; i++)</div>\n+<div class=\"line\"><a id=\"l00793\" name=\"l00793\"></a><span class=\"lineno\"> 793</span> limits[i] = oneDValues[i].<a class=\"code hl_function\" href=\"a01479.html#acbd350edf10b11a798c8d59285619646\">size</a>();</div>\n+<div class=\"line\"><a id=\"l00794\" name=\"l00794\"></a><span class=\"lineno\"> 794</span> </div>\n+<div class=\"line\"><a id=\"l00795\" name=\"l00795\"></a><span class=\"lineno\"> 795</span> MultiDigitCounter ijkCounter(limits);</div>\n+<div class=\"line\"><a id=\"l00796\" name=\"l00796\"></a><span class=\"lineno\"> 796</span> </div>\n+<div class=\"line\"><a id=\"l00797\" name=\"l00797\"></a><span class=\"lineno\"> 797</span> out.resize(ijkCounter.cycle());</div>\n+<div class=\"line\"><a id=\"l00798\" name=\"l00798\"></a><span class=\"lineno\"> 798</span> </div>\n+<div class=\"line\"><a id=\"l00799\" name=\"l00799\"></a><span class=\"lineno\"> 799</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<out.size(); i++, ++ijkCounter)</div>\n+<div class=\"line\"><a id=\"l00800\" name=\"l00800\"></a><span class=\"lineno\"> 800</span> {</div>\n+<div class=\"line\"><a id=\"l00801\" name=\"l00801\"></a><span class=\"lineno\"> 801</span> out[i] = <a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a>(1.0);</div>\n+<div class=\"line\"><a id=\"l00802\" name=\"l00802\"></a><span class=\"lineno\"> 802</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> j=0; j<dim; j++)</div>\n+<div class=\"line\"><a id=\"l00803\" name=\"l00803\"></a><span class=\"lineno\"> 803</span> out[i] *= oneDValues[j][ijkCounter[j]];</div>\n+<div class=\"line\"><a id=\"l00804\" name=\"l00804\"></a><span class=\"lineno\"> 804</span> }</div>\n+<div class=\"line\"><a id=\"l00805\" name=\"l00805\"></a><span class=\"lineno\"> 805</span> }</div>\n+<div class=\"line\"><a id=\"l00806\" name=\"l00806\"></a><span class=\"lineno\"> 806</span> </div>\n+<div class=\"line\"><a id=\"l00812\" name=\"l00812\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#addecbb0942b0fa43f0abec42f1c848ab\"> 812</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01479.html#addecbb0942b0fa43f0abec42f1c848ab\">evaluateJacobian</a> (<span class=\"keyword\">const</span> FieldVector<typename GV::ctype,dim>& in,</div>\n+<div class=\"line\"><a id=\"l00813\" name=\"l00813\"></a><span class=\"lineno\"> 813</span> std::vector<FieldMatrix<R,1,dim> >& out,</div>\n+<div class=\"line\"><a id=\"l00814\" name=\"l00814\"></a><span class=\"lineno\"> 814</span> <span class=\"keyword\">const</span> std::array<unsigned,dim>& currentKnotSpan)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00815\" name=\"l00815\"></a><span class=\"lineno\"> 815</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00816\" name=\"l00816\"></a><span class=\"lineno\"> 816</span> <span class=\"comment\">// How many shape functions to we have in each coordinate direction?</span></div>\n+<div class=\"line\"><a id=\"l00817\" name=\"l00817\"></a><span class=\"lineno\"> 817</span> std::array<unsigned int, dim> limits;</div>\n+<div class=\"line\"><a id=\"l00818\" name=\"l00818\"></a><span class=\"lineno\"> 818</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<dim; i++)</div>\n+<div class=\"line\"><a id=\"l00819\" name=\"l00819\"></a><span class=\"lineno\"> 819</span> {</div>\n+<div class=\"line\"><a id=\"l00820\" name=\"l00820\"></a><span class=\"lineno\"> 820</span> limits[i] = <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i]+1; <span class=\"comment\">// The 'standard' value away from the boundaries of the knot vector</span></div>\n+<div class=\"line\"><a id=\"l00821\" name=\"l00821\"></a><span class=\"lineno\"> 821</span> <span class=\"keywordflow\">if</span> (currentKnotSpan[i]<<a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i])</div>\n+<div class=\"line\"><a id=\"l00822\" name=\"l00822\"></a><span class=\"lineno\"> 822</span> limits[i] -= (<a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i] - currentKnotSpan[i]);</div>\n+<div class=\"line\"><a id=\"l00823\" name=\"l00823\"></a><span class=\"lineno\"> 823</span> <span class=\"keywordflow\">if</span> ( <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i] > (<a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i].<a class=\"code hl_function\" href=\"a01479.html#acbd350edf10b11a798c8d59285619646\">size</a>() - currentKnotSpan[i] - 2) )</div>\n+<div class=\"line\"><a id=\"l00824\" name=\"l00824\"></a><span class=\"lineno\"> 824</span> limits[i] -= <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i] - (<a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i].<a class=\"code hl_function\" href=\"a01479.html#acbd350edf10b11a798c8d59285619646\">size</a>() - currentKnotSpan[i] - 2);</div>\n+<div class=\"line\"><a id=\"l00825\" name=\"l00825\"></a><span class=\"lineno\"> 825</span> }</div>\n+<div class=\"line\"><a id=\"l00826\" name=\"l00826\"></a><span class=\"lineno\"> 826</span> </div>\n+<div class=\"line\"><a id=\"l00827\" name=\"l00827\"></a><span class=\"lineno\"> 827</span> <span class=\"comment\">// The lowest knot spans that we need values from</span></div>\n+<div class=\"line\"><a id=\"l00828\" name=\"l00828\"></a><span class=\"lineno\"> 828</span> std::array<unsigned int, dim> offset;</div>\n+<div class=\"line\"><a id=\"l00829\" name=\"l00829\"></a><span class=\"lineno\"> 829</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<dim; i++)</div>\n+<div class=\"line\"><a id=\"l00830\" name=\"l00830\"></a><span class=\"lineno\"> 830</span> offset[i] = std::max((<span class=\"keywordtype\">int</span>)(currentKnotSpan[i] - <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i]),0);</div>\n+<div class=\"line\"><a id=\"l00831\" name=\"l00831\"></a><span class=\"lineno\"> 831</span> </div>\n+<div class=\"line\"><a id=\"l00832\" name=\"l00832\"></a><span class=\"lineno\"> 832</span> <span class=\"comment\">// Evaluate 1d function values (needed for the product rule)</span></div>\n+<div class=\"line\"><a id=\"l00833\" name=\"l00833\"></a><span class=\"lineno\"> 833</span> std::array<std::vector<R>, dim> oneDValues;</div>\n+<div class=\"line\"><a id=\"l00834\" name=\"l00834\"></a><span class=\"lineno\"> 834</span> </div>\n+<div class=\"line\"><a id=\"l00835\" name=\"l00835\"></a><span class=\"lineno\"> 835</span> <span class=\"comment\">// Evaluate 1d function values of one order lower (needed for the derivative formula)</span></div>\n+<div class=\"line\"><a id=\"l00836\" name=\"l00836\"></a><span class=\"lineno\"> 836</span> std::array<std::vector<R>, dim> lowOrderOneDValues;</div>\n+<div class=\"line\"><a id=\"l00837\" name=\"l00837\"></a><span class=\"lineno\"> 837</span> </div>\n+<div class=\"line\"><a id=\"l00838\" name=\"l00838\"></a><span class=\"lineno\"> 838</span> std::array<DynamicMatrix<R>, dim> values;</div>\n+<div class=\"line\"><a id=\"l00839\" name=\"l00839\"></a><span class=\"lineno\"> 839</span> </div>\n+<div class=\"line\"><a id=\"l00840\" name=\"l00840\"></a><span class=\"lineno\"> 840</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<dim; i++)</div>\n+<div class=\"line\"><a id=\"l00841\" name=\"l00841\"></a><span class=\"lineno\"> 841</span> {</div>\n+<div class=\"line\"><a id=\"l00842\" name=\"l00842\"></a><span class=\"lineno\"> 842</span> <a class=\"code hl_function\" href=\"a01479.html#a2c742d3ca0cb2c2dd3f5313295c84a63\">evaluateFunctionFull</a>(in[i], values[i], <a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i], <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i], currentKnotSpan[i]);</div>\n+<div class=\"line\"><a id=\"l00843\" name=\"l00843\"></a><span class=\"lineno\"> 843</span> oneDValues[i].resize(<a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i].<a class=\"code hl_function\" href=\"a01479.html#acbd350edf10b11a798c8d59285619646\">size</a>()-<a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i]-1);</div>\n+<div class=\"line\"><a id=\"l00844\" name=\"l00844\"></a><span class=\"lineno\"> 844</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> j=0; j<oneDValues[i].size(); j++)</div>\n+<div class=\"line\"><a id=\"l00845\" name=\"l00845\"></a><span class=\"lineno\"> 845</span> oneDValues[i][j] = values[i][<a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i]][j];</div>\n+<div class=\"line\"><a id=\"l00846\" name=\"l00846\"></a><span class=\"lineno\"> 846</span> </div>\n+<div class=\"line\"><a id=\"l00847\" name=\"l00847\"></a><span class=\"lineno\"> 847</span> <span class=\"keywordflow\">if</span> (<a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i]!=0)</div>\n+<div class=\"line\"><a id=\"l00848\" name=\"l00848\"></a><span class=\"lineno\"> 848</span> {</div>\n+<div class=\"line\"><a id=\"l00849\" name=\"l00849\"></a><span class=\"lineno\"> 849</span> lowOrderOneDValues[i].resize(<a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i].<a class=\"code hl_function\" href=\"a01479.html#acbd350edf10b11a798c8d59285619646\">size</a>()-(<a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i]-1)-1);</div>\n+<div class=\"line\"><a id=\"l00850\" name=\"l00850\"></a><span class=\"lineno\"> 850</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> j=0; j<lowOrderOneDValues[i].size(); j++)</div>\n+<div class=\"line\"><a id=\"l00851\" name=\"l00851\"></a><span class=\"lineno\"> 851</span> lowOrderOneDValues[i][j] = values[i][<a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i]-1][j];</div>\n+<div class=\"line\"><a id=\"l00852\" name=\"l00852\"></a><span class=\"lineno\"> 852</span> }</div>\n+<div class=\"line\"><a id=\"l00853\" name=\"l00853\"></a><span class=\"lineno\"> 853</span> }</div>\n+<div class=\"line\"><a id=\"l00854\" name=\"l00854\"></a><span class=\"lineno\"> 854</span> </div>\n+<div class=\"line\"><a id=\"l00855\" name=\"l00855\"></a><span class=\"lineno\"> 855</span> </div>\n+<div class=\"line\"><a id=\"l00856\" name=\"l00856\"></a><span class=\"lineno\"> 856</span> <span class=\"comment\">// Evaluate 1d function derivatives</span></div>\n+<div class=\"line\"><a id=\"l00857\" name=\"l00857\"></a><span class=\"lineno\"> 857</span> std::array<std::vector<R>, dim> oneDDerivatives;</div>\n+<div class=\"line\"><a id=\"l00858\" name=\"l00858\"></a><span class=\"lineno\"> 858</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<dim; i++)</div>\n+<div class=\"line\"><a id=\"l00859\" name=\"l00859\"></a><span class=\"lineno\"> 859</span> {</div>\n+<div class=\"line\"><a id=\"l00860\" name=\"l00860\"></a><span class=\"lineno\"> 860</span> oneDDerivatives[i].resize(limits[i]);</div>\n+<div class=\"line\"><a id=\"l00861\" name=\"l00861\"></a><span class=\"lineno\"> 861</span> </div>\n+<div class=\"line\"><a id=\"l00862\" name=\"l00862\"></a><span class=\"lineno\"> 862</span> <span class=\"keywordflow\">if</span> (<a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i]==0) <span class=\"comment\">// order-zero functions are piecewise constant, hence all derivatives are zero</span></div>\n+<div class=\"line\"><a id=\"l00863\" name=\"l00863\"></a><span class=\"lineno\"> 863</span> std::fill(oneDDerivatives[i].begin(), oneDDerivatives[i].end(), <a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a>(0.0));</div>\n+<div class=\"line\"><a id=\"l00864\" name=\"l00864\"></a><span class=\"lineno\"> 864</span> <span class=\"keywordflow\">else</span></div>\n+<div class=\"line\"><a id=\"l00865\" name=\"l00865\"></a><span class=\"lineno\"> 865</span> {</div>\n+<div class=\"line\"><a id=\"l00866\" name=\"l00866\"></a><span class=\"lineno\"> 866</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> j=offset[i]; j<offset[i]+limits[i]; j++)</div>\n+<div class=\"line\"><a id=\"l00867\" name=\"l00867\"></a><span class=\"lineno\"> 867</span> {</div>\n+<div class=\"line\"><a id=\"l00868\" name=\"l00868\"></a><span class=\"lineno\"> 868</span> <a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a> derivativeAddend1 = lowOrderOneDValues[i][j] / (<a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i][j+<a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i]]-<a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i][j]);</div>\n+<div class=\"line\"><a id=\"l00869\" name=\"l00869\"></a><span class=\"lineno\"> 869</span> <a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a> derivativeAddend2 = lowOrderOneDValues[i][j+1] / (<a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i][j+<a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i]+1]-<a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i][j+1]);</div>\n+<div class=\"line\"><a id=\"l00870\" name=\"l00870\"></a><span class=\"lineno\"> 870</span> <span class=\"comment\">// The two previous terms may evaluate as 0/0. This is to be interpreted as 0.</span></div>\n+<div class=\"line\"><a id=\"l00871\" name=\"l00871\"></a><span class=\"lineno\"> 871</span> <span class=\"keywordflow\">if</span> (std::isnan(derivativeAddend1))</div>\n+<div class=\"line\"><a id=\"l00872\" name=\"l00872\"></a><span class=\"lineno\"> 872</span> derivativeAddend1 = 0;</div>\n+<div class=\"line\"><a id=\"l00873\" name=\"l00873\"></a><span class=\"lineno\"> 873</span> <span class=\"keywordflow\">if</span> (std::isnan(derivativeAddend2))</div>\n+<div class=\"line\"><a id=\"l00874\" name=\"l00874\"></a><span class=\"lineno\"> 874</span> derivativeAddend2 = 0;</div>\n+<div class=\"line\"><a id=\"l00875\" name=\"l00875\"></a><span class=\"lineno\"> 875</span> oneDDerivatives[i][j-offset[i]] = <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i] * ( derivativeAddend1 - derivativeAddend2 );</div>\n+<div class=\"line\"><a id=\"l00876\" name=\"l00876\"></a><span class=\"lineno\"> 876</span> }</div>\n+<div class=\"line\"><a id=\"l00877\" name=\"l00877\"></a><span class=\"lineno\"> 877</span> }</div>\n+<div class=\"line\"><a id=\"l00878\" name=\"l00878\"></a><span class=\"lineno\"> 878</span> }</div>\n+<div class=\"line\"><a id=\"l00879\" name=\"l00879\"></a><span class=\"lineno\"> 879</span> </div>\n+<div class=\"line\"><a id=\"l00880\" name=\"l00880\"></a><span class=\"lineno\"> 880</span> <span class=\"comment\">// Working towards computing only the parts that we really need:</span></div>\n+<div class=\"line\"><a id=\"l00881\" name=\"l00881\"></a><span class=\"lineno\"> 881</span> <span class=\"comment\">// Let's copy them out into a separate array</span></div>\n+<div class=\"line\"><a id=\"l00882\" name=\"l00882\"></a><span class=\"lineno\"> 882</span> std::array<std::vector<R>, dim> oneDValuesShort;</div>\n+<div class=\"line\"><a id=\"l00883\" name=\"l00883\"></a><span class=\"lineno\"> 883</span> </div>\n+<div class=\"line\"><a id=\"l00884\" name=\"l00884\"></a><span class=\"lineno\"> 884</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<dim; i++)</div>\n+<div class=\"line\"><a id=\"l00885\" name=\"l00885\"></a><span class=\"lineno\"> 885</span> {</div>\n+<div class=\"line\"><a id=\"l00886\" name=\"l00886\"></a><span class=\"lineno\"> 886</span> oneDValuesShort[i].resize(limits[i]);</div>\n+<div class=\"line\"><a id=\"l00887\" name=\"l00887\"></a><span class=\"lineno\"> 887</span> </div>\n+<div class=\"line\"><a id=\"l00888\" name=\"l00888\"></a><span class=\"lineno\"> 888</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> j=0; j<limits[i]; j++)</div>\n+<div class=\"line\"><a id=\"l00889\" name=\"l00889\"></a><span class=\"lineno\"> 889</span> oneDValuesShort[i][j] = oneDValues[i][offset[i] + j];</div>\n+<div class=\"line\"><a id=\"l00890\" name=\"l00890\"></a><span class=\"lineno\"> 890</span> }</div>\n+<div class=\"line\"><a id=\"l00891\" name=\"l00891\"></a><span class=\"lineno\"> 891</span> </div>\n+<div class=\"line\"><a id=\"l00892\" name=\"l00892\"></a><span class=\"lineno\"> 892</span> </div>\n+<div class=\"line\"><a id=\"l00893\" name=\"l00893\"></a><span class=\"lineno\"> 893</span> </div>\n+<div class=\"line\"><a id=\"l00894\" name=\"l00894\"></a><span class=\"lineno\"> 894</span> <span class=\"comment\">// Set up a multi-index to go from consecutive indices to integer coordinates</span></div>\n+<div class=\"line\"><a id=\"l00895\" name=\"l00895\"></a><span class=\"lineno\"> 895</span> MultiDigitCounter ijkCounter(limits);</div>\n+<div class=\"line\"><a id=\"l00896\" name=\"l00896\"></a><span class=\"lineno\"> 896</span> </div>\n+<div class=\"line\"><a id=\"l00897\" name=\"l00897\"></a><span class=\"lineno\"> 897</span> out.resize(ijkCounter.cycle());</div>\n+<div class=\"line\"><a id=\"l00898\" name=\"l00898\"></a><span class=\"lineno\"> 898</span> </div>\n+<div class=\"line\"><a id=\"l00899\" name=\"l00899\"></a><span class=\"lineno\"> 899</span> <span class=\"comment\">// Complete Jacobian is given by the product rule</span></div>\n+<div class=\"line\"><a id=\"l00900\" name=\"l00900\"></a><span class=\"lineno\"> 900</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<out.size(); i++, ++ijkCounter)</div>\n+<div class=\"line\"><a id=\"l00901\" name=\"l00901\"></a><span class=\"lineno\"> 901</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> j=0; j<dim; j++)</div>\n+<div class=\"line\"><a id=\"l00902\" name=\"l00902\"></a><span class=\"lineno\"> 902</span> {</div>\n+<div class=\"line\"><a id=\"l00903\" name=\"l00903\"></a><span class=\"lineno\"> 903</span> out[i][0][j] = 1.0;</div>\n+<div class=\"line\"><a id=\"l00904\" name=\"l00904\"></a><span class=\"lineno\"> 904</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> k=0; k<dim; k++)</div>\n+<div class=\"line\"><a id=\"l00905\" name=\"l00905\"></a><span class=\"lineno\"> 905</span> out[i][0][j] *= (j==k) ? oneDDerivatives[k][ijkCounter[k]]</div>\n+<div class=\"line\"><a id=\"l00906\" name=\"l00906\"></a><span class=\"lineno\"> 906</span> : oneDValuesShort[k][ijkCounter[k]];</div>\n+<div class=\"line\"><a id=\"l00907\" name=\"l00907\"></a><span class=\"lineno\"> 907</span> }</div>\n+<div class=\"line\"><a id=\"l00908\" name=\"l00908\"></a><span class=\"lineno\"> 908</span> </div>\n+<div class=\"line\"><a id=\"l00909\" name=\"l00909\"></a><span class=\"lineno\"> 909</span> }</div>\n+<div class=\"line\"><a id=\"l00910\" name=\"l00910\"></a><span class=\"lineno\"> 910</span> </div>\n+<div class=\"line\"><a id=\"l00912\" name=\"l00912\"></a><span class=\"lineno\"> 912</span> <span class=\"keyword\">template</span> <<span class=\"keywordtype\">size_t</span>ype k></div>\n+<div class=\"line\"><a id=\"l00913\" name=\"l00913\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a7743becf779c5d57e8665798ac50ce0b\"> 913</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01479.html#a7743becf779c5d57e8665798ac50ce0b\">evaluate</a>(<span class=\"keyword\">const</span> <span class=\"keyword\">typename</span> std::array<int,k>& directions,</div>\n+<div class=\"line\"><a id=\"l00914\" name=\"l00914\"></a><span class=\"lineno\"> 914</span> <span class=\"keyword\">const</span> FieldVector<typename GV::ctype,dim>& in,</div>\n+<div class=\"line\"><a id=\"l00915\" name=\"l00915\"></a><span class=\"lineno\"> 915</span> std::vector<FieldVector<R,1> >& out,</div>\n+<div class=\"line\"><a id=\"l00916\" name=\"l00916\"></a><span class=\"lineno\"> 916</span> <span class=\"keyword\">const</span> std::array<unsigned,dim>& currentKnotSpan)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00917\" name=\"l00917\"></a><span class=\"lineno\"> 917</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00918\" name=\"l00918\"></a><span class=\"lineno\"> 918</span> <span class=\"keywordflow\">if</span> (k != 1 && k != 2)</div>\n+<div class=\"line\"><a id=\"l00919\" name=\"l00919\"></a><span class=\"lineno\"> 919</span> DUNE_THROW(RangeError, <span class=\"stringliteral\">"Differentiation order greater than 2 is not supported!"</span>);</div>\n+<div class=\"line\"><a id=\"l00920\" name=\"l00920\"></a><span class=\"lineno\"> 920</span> </div>\n+<div class=\"line\"><a id=\"l00921\" name=\"l00921\"></a><span class=\"lineno\"> 921</span> <span class=\"comment\">// Evaluate 1d function values (needed for the product rule)</span></div>\n+<div class=\"line\"><a id=\"l00922\" name=\"l00922\"></a><span class=\"lineno\"> 922</span> std::array<std::vector<R>, dim> oneDValues;</div>\n+<div class=\"line\"><a id=\"l00923\" name=\"l00923\"></a><span class=\"lineno\"> 923</span> std::array<std::vector<R>, dim> oneDDerivatives;</div>\n+<div class=\"line\"><a id=\"l00924\" name=\"l00924\"></a><span class=\"lineno\"> 924</span> std::array<std::vector<R>, dim> oneDSecondDerivatives;</div>\n+<div class=\"line\"><a id=\"l00925\" name=\"l00925\"></a><span class=\"lineno\"> 925</span> </div>\n+<div class=\"line\"><a id=\"l00926\" name=\"l00926\"></a><span class=\"lineno\"> 926</span> <span class=\"comment\">// Evaluate 1d function derivatives</span></div>\n+<div class=\"line\"><a id=\"l00927\" name=\"l00927\"></a><span class=\"lineno\"> 927</span> <span class=\"keywordflow\">if</span> (k==1)</div>\n+<div class=\"line\"><a id=\"l00928\" name=\"l00928\"></a><span class=\"lineno\"> 928</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<dim; i++)</div>\n+<div class=\"line\"><a id=\"l00929\" name=\"l00929\"></a><span class=\"lineno\"> 929</span> <a class=\"code hl_function\" href=\"a01479.html#a51538e3d5c7ba5c59d613e1aef37d8d5\">evaluateAll</a>(in[i], oneDValues[i], <span class=\"keyword\">true</span>, oneDDerivatives[i], <span class=\"keyword\">false</span>, oneDSecondDerivatives[i], <a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i], <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i], currentKnotSpan[i]);</div>\n+<div class=\"line\"><a id=\"l00930\" name=\"l00930\"></a><span class=\"lineno\"> 930</span> <span class=\"keywordflow\">else</span></div>\n+<div class=\"line\"><a id=\"l00931\" name=\"l00931\"></a><span class=\"lineno\"> 931</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<dim; i++)</div>\n+<div class=\"line\"><a id=\"l00932\" name=\"l00932\"></a><span class=\"lineno\"> 932</span> <a class=\"code hl_function\" href=\"a01479.html#a51538e3d5c7ba5c59d613e1aef37d8d5\">evaluateAll</a>(in[i], oneDValues[i], <span class=\"keyword\">true</span>, oneDDerivatives[i], <span class=\"keyword\">true</span>, oneDSecondDerivatives[i], <a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i], <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i], currentKnotSpan[i]);</div>\n+<div class=\"line\"><a id=\"l00933\" name=\"l00933\"></a><span class=\"lineno\"> 933</span> </div>\n+<div class=\"line\"><a id=\"l00934\" name=\"l00934\"></a><span class=\"lineno\"> 934</span> <span class=\"comment\">// The lowest knot spans that we need values from</span></div>\n+<div class=\"line\"><a id=\"l00935\" name=\"l00935\"></a><span class=\"lineno\"> 935</span> std::array<unsigned int, dim> offset;</div>\n+<div class=\"line\"><a id=\"l00936\" name=\"l00936\"></a><span class=\"lineno\"> 936</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<dim; i++)</div>\n+<div class=\"line\"><a id=\"l00937\" name=\"l00937\"></a><span class=\"lineno\"> 937</span> offset[i] = std::max((<span class=\"keywordtype\">int</span>)(currentKnotSpan[i] - <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i]),0);</div>\n+<div class=\"line\"><a id=\"l00938\" name=\"l00938\"></a><span class=\"lineno\"> 938</span> </div>\n+<div class=\"line\"><a id=\"l00939\" name=\"l00939\"></a><span class=\"lineno\"> 939</span> <span class=\"comment\">// Set up a multi-index to go from consecutive indices to integer coordinates</span></div>\n+<div class=\"line\"><a id=\"l00940\" name=\"l00940\"></a><span class=\"lineno\"> 940</span> std::array<unsigned int, dim> limits;</div>\n+<div class=\"line\"><a id=\"l00941\" name=\"l00941\"></a><span class=\"lineno\"> 941</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<dim; i++)</div>\n+<div class=\"line\"><a id=\"l00942\" name=\"l00942\"></a><span class=\"lineno\"> 942</span> {</div>\n+<div class=\"line\"><a id=\"l00943\" name=\"l00943\"></a><span class=\"lineno\"> 943</span> <span class=\"comment\">// In a proper implementation, the following line would do</span></div>\n+<div class=\"line\"><a id=\"l00944\" name=\"l00944\"></a><span class=\"lineno\"> 944</span> <span class=\"comment\">//limits[i] = oneDValues[i].size();</span></div>\n+<div class=\"line\"><a id=\"l00945\" name=\"l00945\"></a><span class=\"lineno\"> 945</span> limits[i] = <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i]+1; <span class=\"comment\">// The 'standard' value away from the boundaries of the knot vector</span></div>\n+<div class=\"line\"><a id=\"l00946\" name=\"l00946\"></a><span class=\"lineno\"> 946</span> <span class=\"keywordflow\">if</span> (currentKnotSpan[i]<<a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i])</div>\n+<div class=\"line\"><a id=\"l00947\" name=\"l00947\"></a><span class=\"lineno\"> 947</span> limits[i] -= (<a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i] - currentKnotSpan[i]);</div>\n+<div class=\"line\"><a id=\"l00948\" name=\"l00948\"></a><span class=\"lineno\"> 948</span> <span class=\"keywordflow\">if</span> ( <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i] > (<a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i].<a class=\"code hl_function\" href=\"a01479.html#acbd350edf10b11a798c8d59285619646\">size</a>() - currentKnotSpan[i] - 2) )</div>\n+<div class=\"line\"><a id=\"l00949\" name=\"l00949\"></a><span class=\"lineno\"> 949</span> limits[i] -= <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>[i] - (<a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>[i].<a class=\"code hl_function\" href=\"a01479.html#acbd350edf10b11a798c8d59285619646\">size</a>() - currentKnotSpan[i] - 2);</div>\n+<div class=\"line\"><a id=\"l00950\" name=\"l00950\"></a><span class=\"lineno\"> 950</span> }</div>\n+<div class=\"line\"><a id=\"l00951\" name=\"l00951\"></a><span class=\"lineno\"> 951</span> </div>\n+<div class=\"line\"><a id=\"l00952\" name=\"l00952\"></a><span class=\"lineno\"> 952</span> <span class=\"comment\">// Working towards computing only the parts that we really need:</span></div>\n+<div class=\"line\"><a id=\"l00953\" name=\"l00953\"></a><span class=\"lineno\"> 953</span> <span class=\"comment\">// Let's copy them out into a separate array</span></div>\n+<div class=\"line\"><a id=\"l00954\" name=\"l00954\"></a><span class=\"lineno\"> 954</span> std::array<std::vector<R>, dim> oneDValuesShort;</div>\n+<div class=\"line\"><a id=\"l00955\" name=\"l00955\"></a><span class=\"lineno\"> 955</span> </div>\n+<div class=\"line\"><a id=\"l00956\" name=\"l00956\"></a><span class=\"lineno\"> 956</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<dim; i++)</div>\n+<div class=\"line\"><a id=\"l00957\" name=\"l00957\"></a><span class=\"lineno\"> 957</span> {</div>\n+<div class=\"line\"><a id=\"l00958\" name=\"l00958\"></a><span class=\"lineno\"> 958</span> oneDValuesShort[i].resize(limits[i]);</div>\n+<div class=\"line\"><a id=\"l00959\" name=\"l00959\"></a><span class=\"lineno\"> 959</span> </div>\n+<div class=\"line\"><a id=\"l00960\" name=\"l00960\"></a><span class=\"lineno\"> 960</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> j=0; j<limits[i]; j++)</div>\n+<div class=\"line\"><a id=\"l00961\" name=\"l00961\"></a><span class=\"lineno\"> 961</span> oneDValuesShort[i][j] = oneDValues[i][offset[i] + j];</div>\n+<div class=\"line\"><a id=\"l00962\" name=\"l00962\"></a><span class=\"lineno\"> 962</span> }</div>\n+<div class=\"line\"><a id=\"l00963\" name=\"l00963\"></a><span class=\"lineno\"> 963</span> </div>\n+<div class=\"line\"><a id=\"l00964\" name=\"l00964\"></a><span class=\"lineno\"> 964</span> </div>\n+<div class=\"line\"><a id=\"l00965\" name=\"l00965\"></a><span class=\"lineno\"> 965</span> MultiDigitCounter ijkCounter(limits);</div>\n+<div class=\"line\"><a id=\"l00966\" name=\"l00966\"></a><span class=\"lineno\"> 966</span> </div>\n+<div class=\"line\"><a id=\"l00967\" name=\"l00967\"></a><span class=\"lineno\"> 967</span> out.resize(ijkCounter.cycle());</div>\n+<div class=\"line\"><a id=\"l00968\" name=\"l00968\"></a><span class=\"lineno\"> 968</span> </div>\n+<div class=\"line\"><a id=\"l00969\" name=\"l00969\"></a><span class=\"lineno\"> 969</span> <span class=\"keywordflow\">if</span> (k == 1)</div>\n+<div class=\"line\"><a id=\"l00970\" name=\"l00970\"></a><span class=\"lineno\"> 970</span> {</div>\n+<div class=\"line\"><a id=\"l00971\" name=\"l00971\"></a><span class=\"lineno\"> 971</span> <span class=\"comment\">// Complete Jacobian is given by the product rule</span></div>\n+<div class=\"line\"><a id=\"l00972\" name=\"l00972\"></a><span class=\"lineno\"> 972</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<out.size(); i++, ++ijkCounter)</div>\n+<div class=\"line\"><a id=\"l00973\" name=\"l00973\"></a><span class=\"lineno\"> 973</span> {</div>\n+<div class=\"line\"><a id=\"l00974\" name=\"l00974\"></a><span class=\"lineno\"> 974</span> out[i][0] = 1.0;</div>\n+<div class=\"line\"><a id=\"l00975\" name=\"l00975\"></a><span class=\"lineno\"> 975</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> l=0; l<dim; l++)</div>\n+<div class=\"line\"><a id=\"l00976\" name=\"l00976\"></a><span class=\"lineno\"> 976</span> out[i][0] *= (directions[0]==l) ? oneDDerivatives[l][ijkCounter[l]]</div>\n+<div class=\"line\"><a id=\"l00977\" name=\"l00977\"></a><span class=\"lineno\"> 977</span> : oneDValuesShort[l][ijkCounter[l]];</div>\n+<div class=\"line\"><a id=\"l00978\" name=\"l00978\"></a><span class=\"lineno\"> 978</span> }</div>\n+<div class=\"line\"><a id=\"l00979\" name=\"l00979\"></a><span class=\"lineno\"> 979</span> }</div>\n+<div class=\"line\"><a id=\"l00980\" name=\"l00980\"></a><span class=\"lineno\"> 980</span> </div>\n+<div class=\"line\"><a id=\"l00981\" name=\"l00981\"></a><span class=\"lineno\"> 981</span> <span class=\"keywordflow\">if</span> (k == 2)</div>\n+<div class=\"line\"><a id=\"l00982\" name=\"l00982\"></a><span class=\"lineno\"> 982</span> {</div>\n+<div class=\"line\"><a id=\"l00983\" name=\"l00983\"></a><span class=\"lineno\"> 983</span> <span class=\"comment\">// Complete derivation by deriving the tensor product</span></div>\n+<div class=\"line\"><a id=\"l00984\" name=\"l00984\"></a><span class=\"lineno\"> 984</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<out.size(); i++, ++ijkCounter)</div>\n+<div class=\"line\"><a id=\"l00985\" name=\"l00985\"></a><span class=\"lineno\"> 985</span> {</div>\n+<div class=\"line\"><a id=\"l00986\" name=\"l00986\"></a><span class=\"lineno\"> 986</span> out[i][0] = 1.0;</div>\n+<div class=\"line\"><a id=\"l00987\" name=\"l00987\"></a><span class=\"lineno\"> 987</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> j=0; j<dim; j++)</div>\n+<div class=\"line\"><a id=\"l00988\" name=\"l00988\"></a><span class=\"lineno\"> 988</span> {</div>\n+<div class=\"line\"><a id=\"l00989\" name=\"l00989\"></a><span class=\"lineno\"> 989</span> <span class=\"keywordflow\">if</span> (directions[0] != directions[1]) <span class=\"comment\">//derivation in two different variables</span></div>\n+<div class=\"line\"><a id=\"l00990\" name=\"l00990\"></a><span class=\"lineno\"> 990</span> <span class=\"keywordflow\">if</span> (directions[0] == j || directions[1] == j) <span class=\"comment\">//the spline has to be derived (once) in this direction</span></div>\n+<div class=\"line\"><a id=\"l00991\" name=\"l00991\"></a><span class=\"lineno\"> 991</span> out[i][0] *= oneDDerivatives[j][ijkCounter[j]];</div>\n+<div class=\"line\"><a id=\"l00992\" name=\"l00992\"></a><span class=\"lineno\"> 992</span> <span class=\"keywordflow\">else</span> <span class=\"comment\">//no derivation in this direction</span></div>\n+<div class=\"line\"><a id=\"l00993\" name=\"l00993\"></a><span class=\"lineno\"> 993</span> out[i][0] *= oneDValuesShort[j][ijkCounter[j]];</div>\n+<div class=\"line\"><a id=\"l00994\" name=\"l00994\"></a><span class=\"lineno\"> 994</span> <span class=\"keywordflow\">else</span> <span class=\"comment\">//spline is derived two times in the same direction</span></div>\n+<div class=\"line\"><a id=\"l00995\" name=\"l00995\"></a><span class=\"lineno\"> 995</span> <span class=\"keywordflow\">if</span> (directions[0] == j) <span class=\"comment\">//the spline is derived two times in this direction</span></div>\n+<div class=\"line\"><a id=\"l00996\" name=\"l00996\"></a><span class=\"lineno\"> 996</span> out[i][0] *= oneDSecondDerivatives[j][ijkCounter[j]];</div>\n+<div class=\"line\"><a id=\"l00997\" name=\"l00997\"></a><span class=\"lineno\"> 997</span> <span class=\"keywordflow\">else</span> <span class=\"comment\">//no derivation in this direction</span></div>\n+<div class=\"line\"><a id=\"l00998\" name=\"l00998\"></a><span class=\"lineno\"> 998</span> out[i][0] *= oneDValuesShort[j][ijkCounter[j]];</div>\n+<div class=\"line\"><a id=\"l00999\" name=\"l00999\"></a><span class=\"lineno\"> 999</span> }</div>\n+<div class=\"line\"><a id=\"l01000\" name=\"l01000\"></a><span class=\"lineno\"> 1000</span> }</div>\n+<div class=\"line\"><a id=\"l01001\" name=\"l01001\"></a><span class=\"lineno\"> 1001</span> }</div>\n+<div class=\"line\"><a id=\"l01002\" name=\"l01002\"></a><span class=\"lineno\"> 1002</span> }</div>\n+<div class=\"line\"><a id=\"l01003\" name=\"l01003\"></a><span class=\"lineno\"> 1003</span> </div>\n+<div class=\"line\"><a id=\"l01004\" name=\"l01004\"></a><span class=\"lineno\"> 1004</span> </div>\n+<div class=\"line\"><a id=\"l01009\" name=\"l01009\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#ad49a0bd70180481c702887c873386897\"> 1009</a></span> <span class=\"keyword\">static</span> std::array<unsigned int,dim> <a class=\"code hl_function\" href=\"a01479.html#ad49a0bd70180481c702887c873386897\">getIJK</a>(<span class=\"keyword\">typename</span> GridView::IndexSet::IndexType idx, std::array<unsigned int,dim> elements)</div>\n+<div class=\"line\"><a id=\"l01010\" name=\"l01010\"></a><span class=\"lineno\"> 1010</span> {</div>\n+<div class=\"line\"><a id=\"l01011\" name=\"l01011\"></a><span class=\"lineno\"> 1011</span> std::array<unsigned,dim> result;</div>\n+<div class=\"line\"><a id=\"l01012\" name=\"l01012\"></a><span class=\"lineno\"> 1012</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i=0; i<dim; i++)</div>\n+<div class=\"line\"><a id=\"l01013\" name=\"l01013\"></a><span class=\"lineno\"> 1013</span> {</div>\n+<div class=\"line\"><a id=\"l01014\" name=\"l01014\"></a><span class=\"lineno\"> 1014</span> result[i] = idx%elements[i];</div>\n+<div class=\"line\"><a id=\"l01015\" name=\"l01015\"></a><span class=\"lineno\"> 1015</span> idx /= elements[i];</div>\n+<div class=\"line\"><a id=\"l01016\" name=\"l01016\"></a><span class=\"lineno\"> 1016</span> }</div>\n+<div class=\"line\"><a id=\"l01017\" name=\"l01017\"></a><span class=\"lineno\"> 1017</span> <span class=\"keywordflow\">return</span> result;</div>\n+<div class=\"line\"><a id=\"l01018\" name=\"l01018\"></a><span class=\"lineno\"> 1018</span> }</div>\n+<div class=\"line\"><a id=\"l01019\" name=\"l01019\"></a><span class=\"lineno\"> 1019</span> </div>\n+<div class=\"line\"><a id=\"l01028\" name=\"l01028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a520df331d03110c5713336ca32ca99c4\"> 1028</a></span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01479.html#a520df331d03110c5713336ca32ca99c4\">evaluateFunction</a> (<span class=\"keyword\">const</span> <span class=\"keyword\">typename</span> GV::ctype& in, std::vector<R>& out,</div>\n+<div class=\"line\"><a id=\"l01029\" name=\"l01029\"></a><span class=\"lineno\"> 1029</span> <span class=\"keyword\">const</span> std::vector<R>& knotVector,</div>\n+<div class=\"line\"><a id=\"l01030\" name=\"l01030\"></a><span class=\"lineno\"> 1030</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> order,</div>\n+<div class=\"line\"><a id=\"l01031\" name=\"l01031\"></a><span class=\"lineno\"> 1031</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> currentKnotSpan)</div>\n+<div class=\"line\"><a id=\"l01032\" name=\"l01032\"></a><span class=\"lineno\"> 1032</span> {</div>\n+<div class=\"line\"><a id=\"l01033\" name=\"l01033\"></a><span class=\"lineno\"> 1033</span> std::size_t outSize = order+1; <span class=\"comment\">// The 'standard' value away from the boundaries of the knot vector</span></div>\n+<div class=\"line\"><a id=\"l01034\" name=\"l01034\"></a><span class=\"lineno\"> 1034</span> <span class=\"keywordflow\">if</span> (currentKnotSpan<order) <span class=\"comment\">// Less near the left end of the knot vector</span></div>\n+<div class=\"line\"><a id=\"l01035\" name=\"l01035\"></a><span class=\"lineno\"> 1035</span> outSize -= (order - currentKnotSpan);</div>\n+<div class=\"line\"><a id=\"l01036\" name=\"l01036\"></a><span class=\"lineno\"> 1036</span> <span class=\"keywordflow\">if</span> ( order > (knotVector.size() - currentKnotSpan - 2) )</div>\n+<div class=\"line\"><a id=\"l01037\" name=\"l01037\"></a><span class=\"lineno\"> 1037</span> outSize -= order - (knotVector.size() - currentKnotSpan - 2);</div>\n+<div class=\"line\"><a id=\"l01038\" name=\"l01038\"></a><span class=\"lineno\"> 1038</span> out.resize(outSize);</div>\n+<div class=\"line\"><a id=\"l01039\" name=\"l01039\"></a><span class=\"lineno\"> 1039</span> </div>\n+<div class=\"line\"><a id=\"l01040\" name=\"l01040\"></a><span class=\"lineno\"> 1040</span> <span class=\"comment\">// It's not really a matrix that is needed here, a plain 2d array would do</span></div>\n+<div class=\"line\"><a id=\"l01041\" name=\"l01041\"></a><span class=\"lineno\"> 1041</span> DynamicMatrix<R> N(order+1, knotVector.size()-1);</div>\n+<div class=\"line\"><a id=\"l01042\" name=\"l01042\"></a><span class=\"lineno\"> 1042</span> </div>\n+<div class=\"line\"><a id=\"l01043\" name=\"l01043\"></a><span class=\"lineno\"> 1043</span> <span class=\"comment\">// The text books on splines use the following geometric condition here to fill the array N</span></div>\n+<div class=\"line\"><a id=\"l01044\" name=\"l01044\"></a><span class=\"lineno\"> 1044</span> <span class=\"comment\">// (see for example Cottrell, Hughes, Bazilevs, Formula (2.1). However, this condition</span></div>\n+<div class=\"line\"><a id=\"l01045\" name=\"l01045\"></a><span class=\"lineno\"> 1045</span> <span class=\"comment\">// only works if splines are never evaluated exactly on the knots.</span></div>\n+<div class=\"line\"><a id=\"l01046\" name=\"l01046\"></a><span class=\"lineno\"> 1046</span> <span class=\"comment\">//</span></div>\n+<div class=\"line\"><a id=\"l01047\" name=\"l01047\"></a><span class=\"lineno\"> 1047</span> <span class=\"comment\">// for (size_t i=0; i<knotVector.size()-1; i++)</span></div>\n+<div class=\"line\"><a id=\"l01048\" name=\"l01048\"></a><span class=\"lineno\"> 1048</span> <span class=\"comment\">// N[0][i] = (knotVector[i] <= in) and (in < knotVector[i+1]);</span></div>\n+<div class=\"line\"><a id=\"l01049\" name=\"l01049\"></a><span class=\"lineno\"> 1049</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<knotVector.size()-1; i++)</div>\n+<div class=\"line\"><a id=\"l01050\" name=\"l01050\"></a><span class=\"lineno\"> 1050</span> N[0][i] = (i == currentKnotSpan);</div>\n+<div class=\"line\"><a id=\"l01051\" name=\"l01051\"></a><span class=\"lineno\"> 1051</span> </div>\n+<div class=\"line\"><a id=\"l01052\" name=\"l01052\"></a><span class=\"lineno\"> 1052</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> r=1; r<=order; r++)</div>\n+<div class=\"line\"><a id=\"l01053\" name=\"l01053\"></a><span class=\"lineno\"> 1053</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<knotVector.size()-r-1; i++)</div>\n+<div class=\"line\"><a id=\"l01054\" name=\"l01054\"></a><span class=\"lineno\"> 1054</span> {</div>\n+<div class=\"line\"><a id=\"l01055\" name=\"l01055\"></a><span class=\"lineno\"> 1055</span> <a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a> factor1 = ((knotVector[i+r] - knotVector[i]) > 1e-10)</div>\n+<div class=\"line\"><a id=\"l01056\" name=\"l01056\"></a><span class=\"lineno\"> 1056</span> ? (in - knotVector[i]) / (knotVector[i+r] - knotVector[i])</div>\n+<div class=\"line\"><a id=\"l01057\" name=\"l01057\"></a><span class=\"lineno\"> 1057</span> : 0;</div>\n+<div class=\"line\"><a id=\"l01058\" name=\"l01058\"></a><span class=\"lineno\"> 1058</span> <a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a> factor2 = ((knotVector[i+r+1] - knotVector[i+1]) > 1e-10)</div>\n+<div class=\"line\"><a id=\"l01059\" name=\"l01059\"></a><span class=\"lineno\"> 1059</span> ? (knotVector[i+r+1] - in) / (knotVector[i+r+1] - knotVector[i+1])</div>\n+<div class=\"line\"><a id=\"l01060\" name=\"l01060\"></a><span class=\"lineno\"> 1060</span> : 0;</div>\n+<div class=\"line\"><a id=\"l01061\" name=\"l01061\"></a><span class=\"lineno\"> 1061</span> N[r][i] = factor1 * N[r-1][i] + factor2 * N[r-1][i+1];</div>\n+<div class=\"line\"><a id=\"l01062\" name=\"l01062\"></a><span class=\"lineno\"> 1062</span> }</div>\n+<div class=\"line\"><a id=\"l01063\" name=\"l01063\"></a><span class=\"lineno\"> 1063</span> </div>\n+<div class=\"line\"><a id=\"l01068\" name=\"l01068\"></a><span class=\"lineno\"> 1068</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<out.size(); i++) {</div>\n+<div class=\"line\"><a id=\"l01069\" name=\"l01069\"></a><span class=\"lineno\"> 1069</span> out[i] = N[order][std::max((<span class=\"keywordtype\">int</span>)(currentKnotSpan - order),0) + i];</div>\n+<div class=\"line\"><a id=\"l01070\" name=\"l01070\"></a><span class=\"lineno\"> 1070</span> }</div>\n+<div class=\"line\"><a id=\"l01071\" name=\"l01071\"></a><span class=\"lineno\"> 1071</span> }</div>\n+<div class=\"line\"><a id=\"l01072\" name=\"l01072\"></a><span class=\"lineno\"> 1072</span> </div>\n+<div class=\"line\"><a id=\"l01085\" name=\"l01085\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a2c742d3ca0cb2c2dd3f5313295c84a63\"> 1085</a></span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01479.html#a2c742d3ca0cb2c2dd3f5313295c84a63\">evaluateFunctionFull</a>(<span class=\"keyword\">const</span> <span class=\"keyword\">typename</span> GV::ctype& in,</div>\n+<div class=\"line\"><a id=\"l01086\" name=\"l01086\"></a><span class=\"lineno\"> 1086</span> DynamicMatrix<R>& out,</div>\n+<div class=\"line\"><a id=\"l01087\" name=\"l01087\"></a><span class=\"lineno\"> 1087</span> <span class=\"keyword\">const</span> std::vector<R>& knotVector,</div>\n+<div class=\"line\"><a id=\"l01088\" name=\"l01088\"></a><span class=\"lineno\"> 1088</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> order,</div>\n+<div class=\"line\"><a id=\"l01089\" name=\"l01089\"></a><span class=\"lineno\"> 1089</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> currentKnotSpan)</div>\n+<div class=\"line\"><a id=\"l01090\" name=\"l01090\"></a><span class=\"lineno\"> 1090</span> {</div>\n+<div class=\"line\"><a id=\"l01091\" name=\"l01091\"></a><span class=\"lineno\"> 1091</span> <span class=\"comment\">// It's not really a matrix that is needed here, a plain 2d array would do</span></div>\n+<div class=\"line\"><a id=\"l01092\" name=\"l01092\"></a><span class=\"lineno\"> 1092</span> DynamicMatrix<R>& N = out;</div>\n+<div class=\"line\"><a id=\"l01093\" name=\"l01093\"></a><span class=\"lineno\"> 1093</span> </div>\n+<div class=\"line\"><a id=\"l01094\" name=\"l01094\"></a><span class=\"lineno\"> 1094</span> N.resize(order+1, knotVector.size()-1);</div>\n+<div class=\"line\"><a id=\"l01095\" name=\"l01095\"></a><span class=\"lineno\"> 1095</span> </div>\n+<div class=\"line\"><a id=\"l01096\" name=\"l01096\"></a><span class=\"lineno\"> 1096</span> <span class=\"comment\">// The text books on splines use the following geometric condition here to fill the array N</span></div>\n+<div class=\"line\"><a id=\"l01097\" name=\"l01097\"></a><span class=\"lineno\"> 1097</span> <span class=\"comment\">// (see for example Cottrell, Hughes, Bazilevs, Formula (2.1). However, this condition</span></div>\n+<div class=\"line\"><a id=\"l01098\" name=\"l01098\"></a><span class=\"lineno\"> 1098</span> <span class=\"comment\">// only works if splines are never evaluated exactly on the knots.</span></div>\n+<div class=\"line\"><a id=\"l01099\" name=\"l01099\"></a><span class=\"lineno\"> 1099</span> <span class=\"comment\">//</span></div>\n+<div class=\"line\"><a id=\"l01100\" name=\"l01100\"></a><span class=\"lineno\"> 1100</span> <span class=\"comment\">// for (size_t i=0; i<knotVector.size()-1; i++)</span></div>\n+<div class=\"line\"><a id=\"l01101\" name=\"l01101\"></a><span class=\"lineno\"> 1101</span> <span class=\"comment\">// N[0][i] = (knotVector[i] <= in) and (in < knotVector[i+1]);</span></div>\n+<div class=\"line\"><a id=\"l01102\" name=\"l01102\"></a><span class=\"lineno\"> 1102</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<knotVector.size()-1; i++)</div>\n+<div class=\"line\"><a id=\"l01103\" name=\"l01103\"></a><span class=\"lineno\"> 1103</span> N[0][i] = (i == currentKnotSpan);</div>\n+<div class=\"line\"><a id=\"l01104\" name=\"l01104\"></a><span class=\"lineno\"> 1104</span> </div>\n+<div class=\"line\"><a id=\"l01105\" name=\"l01105\"></a><span class=\"lineno\"> 1105</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> r=1; r<=order; r++)</div>\n+<div class=\"line\"><a id=\"l01106\" name=\"l01106\"></a><span class=\"lineno\"> 1106</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i=0; i<knotVector.size()-r-1; i++)</div>\n+<div class=\"line\"><a id=\"l01107\" name=\"l01107\"></a><span class=\"lineno\"> 1107</span> {</div>\n+<div class=\"line\"><a id=\"l01108\" name=\"l01108\"></a><span class=\"lineno\"> 1108</span> <a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a> factor1 = ((knotVector[i+r] - knotVector[i]) > 1e-10)</div>\n+<div class=\"line\"><a id=\"l01109\" name=\"l01109\"></a><span class=\"lineno\"> 1109</span> ? (in - knotVector[i]) / (knotVector[i+r] - knotVector[i])</div>\n+<div class=\"line\"><a id=\"l01110\" name=\"l01110\"></a><span class=\"lineno\"> 1110</span> : 0;</div>\n+<div class=\"line\"><a id=\"l01111\" name=\"l01111\"></a><span class=\"lineno\"> 1111</span> <a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a> factor2 = ((knotVector[i+r+1] - knotVector[i+1]) > 1e-10)</div>\n+<div class=\"line\"><a id=\"l01112\" name=\"l01112\"></a><span class=\"lineno\"> 1112</span> ? (knotVector[i+r+1] - in) / (knotVector[i+r+1] - knotVector[i+1])</div>\n+<div class=\"line\"><a id=\"l01113\" name=\"l01113\"></a><span class=\"lineno\"> 1113</span> : 0;</div>\n+<div class=\"line\"><a id=\"l01114\" name=\"l01114\"></a><span class=\"lineno\"> 1114</span> N[r][i] = factor1 * N[r-1][i] + factor2 * N[r-1][i+1];</div>\n+<div class=\"line\"><a id=\"l01115\" name=\"l01115\"></a><span class=\"lineno\"> 1115</span> }</div>\n+<div class=\"line\"><a id=\"l01116\" name=\"l01116\"></a><span class=\"lineno\"> 1116</span> }</div>\n+<div class=\"line\"><a id=\"l01117\" name=\"l01117\"></a><span class=\"lineno\"> 1117</span> </div>\n+<div class=\"line\"><a id=\"l01118\" name=\"l01118\"></a><span class=\"lineno\"> 1118</span> </div>\n+<div class=\"line\"><a id=\"l01128\" name=\"l01128\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a51538e3d5c7ba5c59d613e1aef37d8d5\"> 1128</a></span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01479.html#a51538e3d5c7ba5c59d613e1aef37d8d5\">evaluateAll</a>(<span class=\"keyword\">const</span> <span class=\"keyword\">typename</span> GV::ctype& in,</div>\n+<div class=\"line\"><a id=\"l01129\" name=\"l01129\"></a><span class=\"lineno\"> 1129</span> std::vector<R>& out,</div>\n+<div class=\"line\"><a id=\"l01130\" name=\"l01130\"></a><span class=\"lineno\"> 1130</span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a01479.html#addecbb0942b0fa43f0abec42f1c848ab\">evaluateJacobian</a>, std::vector<R>& outJac,</div>\n+<div class=\"line\"><a id=\"l01131\" name=\"l01131\"></a><span class=\"lineno\"> 1131</span> <span class=\"keywordtype\">bool</span> evaluateHessian, std::vector<R>& outHess,</div>\n+<div class=\"line\"><a id=\"l01132\" name=\"l01132\"></a><span class=\"lineno\"> 1132</span> <span class=\"keyword\">const</span> std::vector<R>& knotVector,</div>\n+<div class=\"line\"><a id=\"l01133\" name=\"l01133\"></a><span class=\"lineno\"> 1133</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> order,</div>\n+<div class=\"line\"><a id=\"l01134\" name=\"l01134\"></a><span class=\"lineno\"> 1134</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> currentKnotSpan)</div>\n+<div class=\"line\"><a id=\"l01135\" name=\"l01135\"></a><span class=\"lineno\"> 1135</span> {</div>\n+<div class=\"line\"><a id=\"l01136\" name=\"l01136\"></a><span class=\"lineno\"> 1136</span> <span class=\"comment\">// How many shape functions to we have in each coordinate direction?</span></div>\n+<div class=\"line\"><a id=\"l01137\" name=\"l01137\"></a><span class=\"lineno\"> 1137</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> limit;</div>\n+<div class=\"line\"><a id=\"l01138\" name=\"l01138\"></a><span class=\"lineno\"> 1138</span> limit = order+1; <span class=\"comment\">// The 'standard' value away from the boundaries of the knot vector</span></div>\n+<div class=\"line\"><a id=\"l01139\" name=\"l01139\"></a><span class=\"lineno\"> 1139</span> <span class=\"keywordflow\">if</span> (currentKnotSpan<order)</div>\n+<div class=\"line\"><a id=\"l01140\" name=\"l01140\"></a><span class=\"lineno\"> 1140</span> limit -= (order - currentKnotSpan);</div>\n+<div class=\"line\"><a id=\"l01141\" name=\"l01141\"></a><span class=\"lineno\"> 1141</span> <span class=\"keywordflow\">if</span> ( order > (knotVector.size() - currentKnotSpan - 2) )</div>\n+<div class=\"line\"><a id=\"l01142\" name=\"l01142\"></a><span class=\"lineno\"> 1142</span> limit -= order - (knotVector.size() - currentKnotSpan - 2);</div>\n+<div class=\"line\"><a id=\"l01143\" name=\"l01143\"></a><span class=\"lineno\"> 1143</span> </div>\n+<div class=\"line\"><a id=\"l01144\" name=\"l01144\"></a><span class=\"lineno\"> 1144</span> <span class=\"comment\">// The lowest knot spans that we need values from</span></div>\n+<div class=\"line\"><a id=\"l01145\" name=\"l01145\"></a><span class=\"lineno\"> 1145</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> offset;</div>\n+<div class=\"line\"><a id=\"l01146\" name=\"l01146\"></a><span class=\"lineno\"> 1146</span> offset = std::max((<span class=\"keywordtype\">int</span>)(currentKnotSpan - order),0);</div>\n+<div class=\"line\"><a id=\"l01147\" name=\"l01147\"></a><span class=\"lineno\"> 1147</span> </div>\n+<div class=\"line\"><a id=\"l01148\" name=\"l01148\"></a><span class=\"lineno\"> 1148</span> <span class=\"comment\">// Evaluate 1d function values (needed for the product rule)</span></div>\n+<div class=\"line\"><a id=\"l01149\" name=\"l01149\"></a><span class=\"lineno\"> 1149</span> DynamicMatrix<R> values;</div>\n+<div class=\"line\"><a id=\"l01150\" name=\"l01150\"></a><span class=\"lineno\"> 1150</span> </div>\n+<div class=\"line\"><a id=\"l01151\" name=\"l01151\"></a><span class=\"lineno\"> 1151</span> <a class=\"code hl_function\" href=\"a01479.html#a2c742d3ca0cb2c2dd3f5313295c84a63\">evaluateFunctionFull</a>(in, values, knotVector, order, currentKnotSpan);</div>\n+<div class=\"line\"><a id=\"l01152\" name=\"l01152\"></a><span class=\"lineno\"> 1152</span> </div>\n+<div class=\"line\"><a id=\"l01153\" name=\"l01153\"></a><span class=\"lineno\"> 1153</span> out.resize(knotVector.size()-order-1);</div>\n+<div class=\"line\"><a id=\"l01154\" name=\"l01154\"></a><span class=\"lineno\"> 1154</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> j=0; j<out.size(); j++)</div>\n+<div class=\"line\"><a id=\"l01155\" name=\"l01155\"></a><span class=\"lineno\"> 1155</span> out[j] = values[order][j];</div>\n+<div class=\"line\"><a id=\"l01156\" name=\"l01156\"></a><span class=\"lineno\"> 1156</span> </div>\n+<div class=\"line\"><a id=\"l01157\" name=\"l01157\"></a><span class=\"lineno\"> 1157</span> <span class=\"comment\">// Evaluate 1d function values of one order lower (needed for the derivative formula)</span></div>\n+<div class=\"line\"><a id=\"l01158\" name=\"l01158\"></a><span class=\"lineno\"> 1158</span> std::vector<R> lowOrderOneDValues;</div>\n+<div class=\"line\"><a id=\"l01159\" name=\"l01159\"></a><span class=\"lineno\"> 1159</span> </div>\n+<div class=\"line\"><a id=\"l01160\" name=\"l01160\"></a><span class=\"lineno\"> 1160</span> <span class=\"keywordflow\">if</span> (order!=0)</div>\n+<div class=\"line\"><a id=\"l01161\" name=\"l01161\"></a><span class=\"lineno\"> 1161</span> {</div>\n+<div class=\"line\"><a id=\"l01162\" name=\"l01162\"></a><span class=\"lineno\"> 1162</span> lowOrderOneDValues.resize(knotVector.size()-(order-1)-1);</div>\n+<div class=\"line\"><a id=\"l01163\" name=\"l01163\"></a><span class=\"lineno\"> 1163</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> j=0; j<lowOrderOneDValues.size(); j++)</div>\n+<div class=\"line\"><a id=\"l01164\" name=\"l01164\"></a><span class=\"lineno\"> 1164</span> lowOrderOneDValues[j] = values[order-1][j];</div>\n+<div class=\"line\"><a id=\"l01165\" name=\"l01165\"></a><span class=\"lineno\"> 1165</span> }</div>\n+<div class=\"line\"><a id=\"l01166\" name=\"l01166\"></a><span class=\"lineno\"> 1166</span> </div>\n+<div class=\"line\"><a id=\"l01167\" name=\"l01167\"></a><span class=\"lineno\"> 1167</span> <span class=\"comment\">// Evaluate 1d function values of two order lower (needed for the (second) derivative formula)</span></div>\n+<div class=\"line\"><a id=\"l01168\" name=\"l01168\"></a><span class=\"lineno\"> 1168</span> std::vector<R> lowOrderTwoDValues;</div>\n+<div class=\"line\"><a id=\"l01169\" name=\"l01169\"></a><span class=\"lineno\"> 1169</span> </div>\n+<div class=\"line\"><a id=\"l01170\" name=\"l01170\"></a><span class=\"lineno\"> 1170</span> <span class=\"keywordflow\">if</span> (order>1 && evaluateHessian)</div>\n+<div class=\"line\"><a id=\"l01171\" name=\"l01171\"></a><span class=\"lineno\"> 1171</span> {</div>\n+<div class=\"line\"><a id=\"l01172\" name=\"l01172\"></a><span class=\"lineno\"> 1172</span> lowOrderTwoDValues.resize(knotVector.size()-(order-2)-1);</div>\n+<div class=\"line\"><a id=\"l01173\" name=\"l01173\"></a><span class=\"lineno\"> 1173</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> j=0; j<lowOrderTwoDValues.size(); j++)</div>\n+<div class=\"line\"><a id=\"l01174\" name=\"l01174\"></a><span class=\"lineno\"> 1174</span> lowOrderTwoDValues[j] = values[order-2][j];</div>\n+<div class=\"line\"><a id=\"l01175\" name=\"l01175\"></a><span class=\"lineno\"> 1175</span> }</div>\n+<div class=\"line\"><a id=\"l01176\" name=\"l01176\"></a><span class=\"lineno\"> 1176</span> </div>\n+<div class=\"line\"><a id=\"l01177\" name=\"l01177\"></a><span class=\"lineno\"> 1177</span> <span class=\"comment\">// Evaluate 1d function derivatives</span></div>\n+<div class=\"line\"><a id=\"l01178\" name=\"l01178\"></a><span class=\"lineno\"> 1178</span> <span class=\"keywordflow\">if</span> (<a class=\"code hl_function\" href=\"a01479.html#addecbb0942b0fa43f0abec42f1c848ab\">evaluateJacobian</a>)</div>\n+<div class=\"line\"><a id=\"l01179\" name=\"l01179\"></a><span class=\"lineno\"> 1179</span> {</div>\n+<div class=\"line\"><a id=\"l01180\" name=\"l01180\"></a><span class=\"lineno\"> 1180</span> outJac.resize(limit);</div>\n+<div class=\"line\"><a id=\"l01181\" name=\"l01181\"></a><span class=\"lineno\"> 1181</span> </div>\n+<div class=\"line\"><a id=\"l01182\" name=\"l01182\"></a><span class=\"lineno\"> 1182</span> <span class=\"keywordflow\">if</span> (order==0) <span class=\"comment\">// order-zero functions are piecewise constant, hence all derivatives are zero</span></div>\n+<div class=\"line\"><a id=\"l01183\" name=\"l01183\"></a><span class=\"lineno\"> 1183</span> std::fill(outJac.begin(), outJac.end(), <a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a>(0.0));</div>\n+<div class=\"line\"><a id=\"l01184\" name=\"l01184\"></a><span class=\"lineno\"> 1184</span> <span class=\"keywordflow\">else</span></div>\n+<div class=\"line\"><a id=\"l01185\" name=\"l01185\"></a><span class=\"lineno\"> 1185</span> {</div>\n+<div class=\"line\"><a id=\"l01186\" name=\"l01186\"></a><span class=\"lineno\"> 1186</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> j=offset; j<offset+limit; j++)</div>\n+<div class=\"line\"><a id=\"l01187\" name=\"l01187\"></a><span class=\"lineno\"> 1187</span> {</div>\n+<div class=\"line\"><a id=\"l01188\" name=\"l01188\"></a><span class=\"lineno\"> 1188</span> <a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a> derivativeAddend1 = lowOrderOneDValues[j] / (knotVector[j+order]-knotVector[j]);</div>\n+<div class=\"line\"><a id=\"l01189\" name=\"l01189\"></a><span class=\"lineno\"> 1189</span> <a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a> derivativeAddend2 = lowOrderOneDValues[j+1] / (knotVector[j+order+1]-knotVector[j+1]);</div>\n+<div class=\"line\"><a id=\"l01190\" name=\"l01190\"></a><span class=\"lineno\"> 1190</span> <span class=\"comment\">// The two previous terms may evaluate as 0/0. This is to be interpreted as 0.</span></div>\n+<div class=\"line\"><a id=\"l01191\" name=\"l01191\"></a><span class=\"lineno\"> 1191</span> <span class=\"keywordflow\">if</span> (std::isnan(derivativeAddend1))</div>\n+<div class=\"line\"><a id=\"l01192\" name=\"l01192\"></a><span class=\"lineno\"> 1192</span> derivativeAddend1 = 0;</div>\n+<div class=\"line\"><a id=\"l01193\" name=\"l01193\"></a><span class=\"lineno\"> 1193</span> <span class=\"keywordflow\">if</span> (std::isnan(derivativeAddend2))</div>\n+<div class=\"line\"><a id=\"l01194\" name=\"l01194\"></a><span class=\"lineno\"> 1194</span> derivativeAddend2 = 0;</div>\n+<div class=\"line\"><a id=\"l01195\" name=\"l01195\"></a><span class=\"lineno\"> 1195</span> outJac[j-offset] = order * ( derivativeAddend1 - derivativeAddend2 );</div>\n+<div class=\"line\"><a id=\"l01196\" name=\"l01196\"></a><span class=\"lineno\"> 1196</span> }</div>\n+<div class=\"line\"><a id=\"l01197\" name=\"l01197\"></a><span class=\"lineno\"> 1197</span> }</div>\n+<div class=\"line\"><a id=\"l01198\" name=\"l01198\"></a><span class=\"lineno\"> 1198</span> }</div>\n+<div class=\"line\"><a id=\"l01199\" name=\"l01199\"></a><span class=\"lineno\"> 1199</span> </div>\n+<div class=\"line\"><a id=\"l01200\" name=\"l01200\"></a><span class=\"lineno\"> 1200</span> <span class=\"comment\">// Evaluate 1d function second derivatives</span></div>\n+<div class=\"line\"><a id=\"l01201\" name=\"l01201\"></a><span class=\"lineno\"> 1201</span> <span class=\"keywordflow\">if</span> (evaluateHessian)</div>\n+<div class=\"line\"><a id=\"l01202\" name=\"l01202\"></a><span class=\"lineno\"> 1202</span> {</div>\n+<div class=\"line\"><a id=\"l01203\" name=\"l01203\"></a><span class=\"lineno\"> 1203</span> outHess.resize(limit);</div>\n+<div class=\"line\"><a id=\"l01204\" name=\"l01204\"></a><span class=\"lineno\"> 1204</span> </div>\n+<div class=\"line\"><a id=\"l01205\" name=\"l01205\"></a><span class=\"lineno\"> 1205</span> <span class=\"keywordflow\">if</span> (order<2) <span class=\"comment\">// order-zero functions are piecewise constant, hence all derivatives are zero</span></div>\n+<div class=\"line\"><a id=\"l01206\" name=\"l01206\"></a><span class=\"lineno\"> 1206</span> std::fill(outHess.begin(), outHess.end(), <a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a>(0.0));</div>\n+<div class=\"line\"><a id=\"l01207\" name=\"l01207\"></a><span class=\"lineno\"> 1207</span> <span class=\"keywordflow\">else</span></div>\n+<div class=\"line\"><a id=\"l01208\" name=\"l01208\"></a><span class=\"lineno\"> 1208</span> {</div>\n+<div class=\"line\"><a id=\"l01209\" name=\"l01209\"></a><span class=\"lineno\"> 1209</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> j=offset; j<offset+limit; j++)</div>\n+<div class=\"line\"><a id=\"l01210\" name=\"l01210\"></a><span class=\"lineno\"> 1210</span> {</div>\n+<div class=\"line\"><a id=\"l01211\" name=\"l01211\"></a><span class=\"lineno\"> 1211</span> assert(j+2 < lowOrderTwoDValues.size());</div>\n+<div class=\"line\"><a id=\"l01212\" name=\"l01212\"></a><span class=\"lineno\"> 1212</span> <a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a> derivativeAddend1 = lowOrderTwoDValues[j] / (knotVector[j+order]-knotVector[j]) / (knotVector[j+order-1]-knotVector[j]);</div>\n+<div class=\"line\"><a id=\"l01213\" name=\"l01213\"></a><span class=\"lineno\"> 1213</span> <a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a> derivativeAddend2 = lowOrderTwoDValues[j+1] / (knotVector[j+order]-knotVector[j]) / (knotVector[j+order]-knotVector[j+1]);</div>\n+<div class=\"line\"><a id=\"l01214\" name=\"l01214\"></a><span class=\"lineno\"> 1214</span> <a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a> derivativeAddend3 = lowOrderTwoDValues[j+1] / (knotVector[j+order+1]-knotVector[j+1]) / (knotVector[j+order]-knotVector[j+1]);</div>\n+<div class=\"line\"><a id=\"l01215\" name=\"l01215\"></a><span class=\"lineno\"> 1215</span> <a class=\"code hl_typedef\" href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">R</a> derivativeAddend4 = lowOrderTwoDValues[j+2] / (knotVector[j+order+1]-knotVector[j+1]) / (knotVector[j+1+order]-knotVector[j+2]);</div>\n+<div class=\"line\"><a id=\"l01216\" name=\"l01216\"></a><span class=\"lineno\"> 1216</span> <span class=\"comment\">// The two previous terms may evaluate as 0/0. This is to be interpreted as 0.</span></div>\n+<div class=\"line\"><a id=\"l01217\" name=\"l01217\"></a><span class=\"lineno\"> 1217</span> </div>\n+<div class=\"line\"><a id=\"l01218\" name=\"l01218\"></a><span class=\"lineno\"> 1218</span> <span class=\"keywordflow\">if</span> (std::isnan(derivativeAddend1))</div>\n+<div class=\"line\"><a id=\"l01219\" name=\"l01219\"></a><span class=\"lineno\"> 1219</span> derivativeAddend1 = 0;</div>\n+<div class=\"line\"><a id=\"l01220\" name=\"l01220\"></a><span class=\"lineno\"> 1220</span> <span class=\"keywordflow\">if</span> (std::isnan(derivativeAddend2))</div>\n+<div class=\"line\"><a id=\"l01221\" name=\"l01221\"></a><span class=\"lineno\"> 1221</span> derivativeAddend2 = 0;</div>\n+<div class=\"line\"><a id=\"l01222\" name=\"l01222\"></a><span class=\"lineno\"> 1222</span> <span class=\"keywordflow\">if</span> (std::isnan(derivativeAddend3))</div>\n+<div class=\"line\"><a id=\"l01223\" name=\"l01223\"></a><span class=\"lineno\"> 1223</span> derivativeAddend3 = 0;</div>\n+<div class=\"line\"><a id=\"l01224\" name=\"l01224\"></a><span class=\"lineno\"> 1224</span> <span class=\"keywordflow\">if</span> (std::isnan(derivativeAddend4))</div>\n+<div class=\"line\"><a id=\"l01225\" name=\"l01225\"></a><span class=\"lineno\"> 1225</span> derivativeAddend4 = 0;</div>\n+<div class=\"line\"><a id=\"l01226\" name=\"l01226\"></a><span class=\"lineno\"> 1226</span> outHess[j-offset] = order * (order-1) * ( derivativeAddend1 - derivativeAddend2 -derivativeAddend3 + derivativeAddend4 );</div>\n+<div class=\"line\"><a id=\"l01227\" name=\"l01227\"></a><span class=\"lineno\"> 1227</span> }</div>\n+<div class=\"line\"><a id=\"l01228\" name=\"l01228\"></a><span class=\"lineno\"> 1228</span> }</div>\n+<div class=\"line\"><a id=\"l01229\" name=\"l01229\"></a><span class=\"lineno\"> 1229</span> }</div>\n+<div class=\"line\"><a id=\"l01230\" name=\"l01230\"></a><span class=\"lineno\"> 1230</span> }</div>\n+<div class=\"line\"><a id=\"l01231\" name=\"l01231\"></a><span class=\"lineno\"> 1231</span> </div>\n+<div class=\"line\"><a id=\"l01232\" name=\"l01232\"></a><span class=\"lineno\"> 1232</span> </div>\n+<div class=\"line\"><a id=\"l01234\" name=\"l01234\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\"> 1234</a></span> std::array<unsigned int, dim> <a class=\"code hl_variable\" href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">order_</a>;</div>\n+<div class=\"line\"><a id=\"l01235\" name=\"l01235\"></a><span class=\"lineno\"> 1235</span> </div>\n+<div class=\"line\"><a id=\"l01237\" name=\"l01237\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\"> 1237</a></span> std::array<std::vector<double>, dim> <a class=\"code hl_variable\" href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">knotVectors_</a>;</div>\n+<div class=\"line\"><a id=\"l01238\" name=\"l01238\"></a><span class=\"lineno\"> 1238</span> </div>\n+<div class=\"line\"><a id=\"l01240\" name=\"l01240\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a08746400f31c37c2294fc700f467d291\"> 1240</a></span> std::array<unsigned,dim> <a class=\"code hl_variable\" href=\"a01479.html#a08746400f31c37c2294fc700f467d291\">elements_</a>;</div>\n+<div class=\"line\"><a id=\"l01241\" name=\"l01241\"></a><span class=\"lineno\"> 1241</span> </div>\n+<div class=\"line\"><a id=\"l01242\" name=\"l01242\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01479.html#a141bd4b20ae309776f615f7ca33ce87b\"> 1242</a></span> <a class=\"code hl_typedef\" href=\"a01479.html#a71f4090ddbb632644769cb0a9c5f394c\">GridView</a> <a class=\"code hl_variable\" href=\"a01479.html#a141bd4b20ae309776f615f7ca33ce87b\">gridView_</a>;</div>\n+<div class=\"line\"><a id=\"l01243\" name=\"l01243\"></a><span class=\"lineno\"> 1243</span>};</div>\n+<div class=\"line\"><a id=\"l01244\" name=\"l01244\"></a><span class=\"lineno\"> 1244</span> </div>\n+<div class=\"line\"><a id=\"l01245\" name=\"l01245\"></a><span class=\"lineno\"> 1245</span> </div>\n+<div class=\"line\"><a id=\"l01246\" name=\"l01246\"></a><span class=\"lineno\"> 1246</span> </div>\n+<div class=\"line\"><a id=\"l01247\" name=\"l01247\"></a><span class=\"lineno\"> 1247</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV></div>\n+<div class=\"line\"><a id=\"l01248\" name=\"l01248\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01495.html\"> 1248</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01495.html\">BSplineNode</a> :</div>\n+<div class=\"line\"><a id=\"l01249\" name=\"l01249\"></a><span class=\"lineno\"> 1249</span> <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01711.html\">LeafBasisNode</a></div>\n+<div class=\"line\"><a id=\"l01250\" name=\"l01250\"></a><span class=\"lineno\"> 1250</span>{</div>\n+<div class=\"line\"><a id=\"l01251\" name=\"l01251\"></a><span class=\"lineno\"> 1251</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dim = GV::dimension;</div>\n+<div class=\"line\"><a id=\"l01252\" name=\"l01252\"></a><span class=\"lineno\"> 1252</span> </div>\n+<div class=\"line\"><a id=\"l01253\" name=\"l01253\"></a><span class=\"lineno\"> 1253</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l01254\" name=\"l01254\"></a><span class=\"lineno\"> 1254</span> </div>\n+<div class=\"line\"><a id=\"l01255\" name=\"l01255\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01495.html#ae563738fb93ed2e7dc40775a1eb791ae\"> 1255</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01495.html#ae563738fb93ed2e7dc40775a1eb791ae\">size_type</a> = std::size_t;</div>\n+<div class=\"line\"><a id=\"l01256\" name=\"l01256\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01495.html#a3d6a0412f84c0739c42d61c3222f7097\"> 1256</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01495.html#a3d6a0412f84c0739c42d61c3222f7097\">Element</a> = <span class=\"keyword\">typename</span> GV::template Codim<0>::Entity;</div>\n+<div class=\"line\"><a id=\"l01257\" name=\"l01257\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01495.html#a5aac4db340f89109bffd53e731b38537\"> 1257</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01475.html\">FiniteElement</a> = <a class=\"code hl_class\" href=\"a01475.html\">BSplineLocalFiniteElement<GV,double></a>;</div>\n+<div class=\"line\"><a id=\"l01258\" name=\"l01258\"></a><span class=\"lineno\"> 1258</span> </div>\n+<div class=\"line\"><a id=\"l01259\" name=\"l01259\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01495.html#a7444a74873c84aacc8b9b6669b8c8a11\"> 1259</a></span> <a class=\"code hl_function\" href=\"a01495.html#a7444a74873c84aacc8b9b6669b8c8a11\">BSplineNode</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01479.html\">BSplinePreBasis<GV></a>* preBasis) :</div>\n+<div class=\"line\"><a id=\"l01260\" name=\"l01260\"></a><span class=\"lineno\"> 1260</span> <a class=\"code hl_variable\" href=\"a01495.html#a4f229be79854725c276ece5ac9d17b38\">preBasis_</a>(preBasis),</div>\n+<div class=\"line\"><a id=\"l01261\" name=\"l01261\"></a><span class=\"lineno\"> 1261</span> <a class=\"code hl_variable\" href=\"a01495.html#a8a7948553a4a579b1ab4720a9c156346\">finiteElement_</a>(*preBasis)</div>\n+<div class=\"line\"><a id=\"l01262\" name=\"l01262\"></a><span class=\"lineno\"> 1262</span> {}</div>\n+<div class=\"line\"><a id=\"l01263\" name=\"l01263\"></a><span class=\"lineno\"> 1263</span> </div>\n+<div class=\"line\"><a id=\"l01265\" name=\"l01265\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01495.html#a80df2171f3763abd188b3d3cb9b7732a\"> 1265</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01495.html#a3d6a0412f84c0739c42d61c3222f7097\">Element</a>& <a class=\"code hl_function\" href=\"a01495.html#a80df2171f3763abd188b3d3cb9b7732a\">element</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l01266\" name=\"l01266\"></a><span class=\"lineno\"> 1266</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l01267\" name=\"l01267\"></a><span class=\"lineno\"> 1267</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01495.html#a5bd21a21da78b173945356ede8ae39a6\">element_</a>;</div>\n+<div class=\"line\"><a id=\"l01268\" name=\"l01268\"></a><span class=\"lineno\"> 1268</span> }</div>\n+<div class=\"line\"><a id=\"l01269\" name=\"l01269\"></a><span class=\"lineno\"> 1269</span> </div>\n+<div class=\"line\"><a id=\"l01274\" name=\"l01274\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01495.html#a061007133830a1181adc187c1f6f692b\"> 1274</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01475.html\">FiniteElement</a>& <a class=\"code hl_function\" href=\"a01495.html#a061007133830a1181adc187c1f6f692b\">finiteElement</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l01275\" name=\"l01275\"></a><span class=\"lineno\"> 1275</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l01276\" name=\"l01276\"></a><span class=\"lineno\"> 1276</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01495.html#a8a7948553a4a579b1ab4720a9c156346\">finiteElement_</a>;</div>\n+<div class=\"line\"><a id=\"l01277\" name=\"l01277\"></a><span class=\"lineno\"> 1277</span> }</div>\n+<div class=\"line\"><a id=\"l01278\" name=\"l01278\"></a><span class=\"lineno\"> 1278</span> </div>\n+<div class=\"line\"><a id=\"l01280\" name=\"l01280\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01495.html#a6e2c2d3de78fe1f2cedb5da2a736d2ba\"> 1280</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01495.html#a6e2c2d3de78fe1f2cedb5da2a736d2ba\">bind</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01495.html#a3d6a0412f84c0739c42d61c3222f7097\">Element</a>& e)</div>\n+<div class=\"line\"><a id=\"l01281\" name=\"l01281\"></a><span class=\"lineno\"> 1281</span> {</div>\n+<div class=\"line\"><a id=\"l01282\" name=\"l01282\"></a><span class=\"lineno\"> 1282</span> <a class=\"code hl_variable\" href=\"a01495.html#a5bd21a21da78b173945356ede8ae39a6\">element_</a> = e;</div>\n+<div class=\"line\"><a id=\"l01283\" name=\"l01283\"></a><span class=\"lineno\"> 1283</span> <span class=\"keyword\">auto</span> elementIndex = <a class=\"code hl_variable\" href=\"a01495.html#a4f229be79854725c276ece5ac9d17b38\">preBasis_</a>->gridView().indexSet().index(e);</div>\n+<div class=\"line\"><a id=\"l01284\" name=\"l01284\"></a><span class=\"lineno\"> 1284</span> <a class=\"code hl_variable\" href=\"a01495.html#a8a7948553a4a579b1ab4720a9c156346\">finiteElement_</a>.<a class=\"code hl_function\" href=\"a01475.html#a8986ef55edc552afc79a0c5fb20e93e9\">bind</a>(<a class=\"code hl_variable\" href=\"a01495.html#a4f229be79854725c276ece5ac9d17b38\">preBasis_</a>->getIJK(elementIndex,<a class=\"code hl_variable\" href=\"a01495.html#a4f229be79854725c276ece5ac9d17b38\">preBasis_</a>->elements_));</div>\n+<div class=\"line\"><a id=\"l01285\" name=\"l01285\"></a><span class=\"lineno\"> 1285</span> this-><a class=\"code hl_function\" href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\">setSize</a>(<a class=\"code hl_variable\" href=\"a01495.html#a8a7948553a4a579b1ab4720a9c156346\">finiteElement_</a>.<a class=\"code hl_function\" href=\"a01475.html#ab15469899e86cb97eece21be2e207162\">size</a>());</div>\n+<div class=\"line\"><a id=\"l01286\" name=\"l01286\"></a><span class=\"lineno\"> 1286</span> }</div>\n+<div class=\"line\"><a id=\"l01287\" name=\"l01287\"></a><span class=\"lineno\"> 1287</span> </div>\n+<div class=\"line\"><a id=\"l01288\" name=\"l01288\"></a><span class=\"lineno\"> 1288</span><span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l01289\" name=\"l01289\"></a><span class=\"lineno\"> 1289</span> </div>\n+<div class=\"line\"><a id=\"l01290\" name=\"l01290\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01495.html#a4f229be79854725c276ece5ac9d17b38\"> 1290</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01479.html\">BSplinePreBasis<GV></a>* <a class=\"code hl_variable\" href=\"a01495.html#a4f229be79854725c276ece5ac9d17b38\">preBasis_</a>;</div>\n+<div class=\"line\"><a id=\"l01291\" name=\"l01291\"></a><span class=\"lineno\"> 1291</span> </div>\n+<div class=\"line\"><a id=\"l01292\" name=\"l01292\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01495.html#a8a7948553a4a579b1ab4720a9c156346\"> 1292</a></span> <a class=\"code hl_class\" href=\"a01475.html\">FiniteElement</a> <a class=\"code hl_variable\" href=\"a01495.html#a8a7948553a4a579b1ab4720a9c156346\">finiteElement_</a>;</div>\n+<div class=\"line\"><a id=\"l01293\" name=\"l01293\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01495.html#a5bd21a21da78b173945356ede8ae39a6\"> 1293</a></span> <a class=\"code hl_typedef\" href=\"a01495.html#a3d6a0412f84c0739c42d61c3222f7097\">Element</a> <a class=\"code hl_variable\" href=\"a01495.html#a5bd21a21da78b173945356ede8ae39a6\">element_</a>;</div>\n+<div class=\"line\"><a id=\"l01294\" name=\"l01294\"></a><span class=\"lineno\"> 1294</span>};</div>\n+<div class=\"line\"><a id=\"l01295\" name=\"l01295\"></a><span class=\"lineno\"> 1295</span> </div>\n+<div class=\"line\"><a id=\"l01296\" name=\"l01296\"></a><span class=\"lineno\"> 1296</span> </div>\n+<div class=\"line\"><a id=\"l01297\" name=\"l01297\"></a><span class=\"lineno\"> 1297</span> </div>\n+<div class=\"line\"><a id=\"l01298\" name=\"l01298\"></a><span class=\"lineno\"> 1298</span><span class=\"keyword\">namespace </span>BasisFactory {</div>\n+<div class=\"line\"><a id=\"l01299\" name=\"l01299\"></a><span class=\"lineno\"> 1299</span> </div>\n+<div class=\"line\"><a id=\"l01306\" name=\"l01306\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#ga63a9701af71fffbbb851a38cb8cf886f\"> 1306</a></span><span class=\"keyword\">inline</span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00213.html#ga63a9701af71fffbbb851a38cb8cf886f\">bSpline</a>(<span class=\"keyword\">const</span> std::vector<double>& knotVector,</div>\n+<div class=\"line\"><a id=\"l01307\" name=\"l01307\"></a><span class=\"lineno\"> 1307</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> order,</div>\n+<div class=\"line\"><a id=\"l01308\" name=\"l01308\"></a><span class=\"lineno\"> 1308</span> <span class=\"keywordtype\">bool</span> makeOpen = <span class=\"keyword\">true</span>)</div>\n+<div class=\"line\"><a id=\"l01309\" name=\"l01309\"></a><span class=\"lineno\"> 1309</span>{</div>\n+<div class=\"line\"><a id=\"l01310\" name=\"l01310\"></a><span class=\"lineno\"> 1310</span> <span class=\"keywordflow\">return</span> [&knotVector, order, makeOpen](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridView) {</div>\n+<div class=\"line\"><a id=\"l01311\" name=\"l01311\"></a><span class=\"lineno\"> 1311</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01479.html\">BSplinePreBasis</a><std::decay_t<<span class=\"keyword\">decltype</span>(gridView)>>(gridView, knotVector, order, makeOpen);</div>\n+<div class=\"line\"><a id=\"l01312\" name=\"l01312\"></a><span class=\"lineno\"> 1312</span> };</div>\n+<div class=\"line\"><a id=\"l01313\" name=\"l01313\"></a><span class=\"lineno\"> 1313</span>}</div>\n+<div class=\"line\"><a id=\"l01314\" name=\"l01314\"></a><span class=\"lineno\"> 1314</span> </div>\n+<div class=\"line\"><a id=\"l01315\" name=\"l01315\"></a><span class=\"lineno\"> 1315</span>} <span class=\"comment\">// end namespace BasisFactory</span></div>\n+<div class=\"line\"><a id=\"l01316\" name=\"l01316\"></a><span class=\"lineno\"> 1316</span> </div>\n+<div class=\"line\"><a id=\"l01317\" name=\"l01317\"></a><span class=\"lineno\"> 1317</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l01318\" name=\"l01318\"></a><span class=\"lineno\"> 1318</span><span class=\"comment\">// This is the actual global basis implementation based on the reusable parts.</span></div>\n+<div class=\"line\"><a id=\"l01319\" name=\"l01319\"></a><span class=\"lineno\"> 1319</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l01320\" name=\"l01320\"></a><span class=\"lineno\"> 1320</span> </div>\n+<div class=\"line\"><a id=\"l01327\" name=\"l01327\"></a><span class=\"lineno\"> 1327</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV></div>\n+<div class=\"line\"><a id=\"l01328\" name=\"l01328\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#ga189243b64e66543614a954706d70ce4a\"> 1328</a></span><span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01555.html\">BSplineBasis</a> = <a class=\"code hl_class\" href=\"a01555.html\">DefaultGlobalBasis<BSplinePreBasis<GV></a> >;</div>\n+<div class=\"line\"><a id=\"l01329\" name=\"l01329\"></a><span class=\"lineno\"> 1329</span> </div>\n+<div class=\"line\"><a id=\"l01330\" name=\"l01330\"></a><span class=\"lineno\"> 1330</span> </div>\n+<div class=\"line\"><a id=\"l01331\" name=\"l01331\"></a><span class=\"lineno\"> 1331</span>} <span class=\"comment\">// namespace Functions</span></div>\n+<div class=\"line\"><a id=\"l01332\" name=\"l01332\"></a><span class=\"lineno\"> 1332</span> </div>\n+<div class=\"line\"><a id=\"l01333\" name=\"l01333\"></a><span class=\"lineno\"> 1333</span>} <span class=\"comment\">// namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l01334\" name=\"l01334\"></a><span class=\"lineno\"> 1334</span> </div>\n+<div class=\"line\"><a id=\"l01335\" name=\"l01335\"></a><span class=\"lineno\"> 1335</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH</span></div>\n+<div class=\"ttc\" id=\"aa00152_html\"><div class=\"ttname\"><a href=\"a00152.html\">defaultglobalbasis.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00179_html\"><div class=\"ttname\"><a href=\"a00179.html\">nodes.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00213_html_ga63a9701af71fffbbb851a38cb8cf886f\"><div class=\"ttname\"><a href=\"a00213.html#ga63a9701af71fffbbb851a38cb8cf886f\">Dune::Functions::BasisFactory::bSpline</a></div><div class=\"ttdeci\">auto bSpline(const std::vector< double > &knotVector, unsigned int order, bool makeOpen=true)</div><div class=\"ttdoc\">Create a pre-basis factory that can create a B-spline pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1306</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa00219_html_a17589fdc18b015644525c7ad037e6441\"><div class=\"ttname\"><a href=\"a00219.html#a17589fdc18b015644525c7ad037e6441\">Dune::Functions::SubspaceBasis</a></div><div class=\"ttdeci\">SubspaceBasis(const RB &, const TP) -> SubspaceBasis< RB, TP ></div></div>\n-<div class=\"ttc\" id=\"aa00219_html_a9effbb98da0e9104a60979fa734c1220\"><div class=\"ttname\"><a href=\"a00219.html#a9effbb98da0e9104a60979fa734c1220\">Dune::Functions::subspaceBasis</a></div><div class=\"ttdeci\">auto subspaceBasis(const RootBasis &rootBasis, const TypeTree::HybridTreePath< PrefixTreeIndices... > &prefixPath)</div><div class=\"ttdoc\">Create SubspaceBasis from a root basis and a prefixPath.</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:151</div></div>\n-<div class=\"ttc\" id=\"aa01807_html\"><div class=\"ttname\"><a href=\"a01807.html\">Dune::Functions::SubspaceBasis</a></div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:38</div></div>\n-<div class=\"ttc\" id=\"aa01807_html_a00d424aa40e6c051f610a308317cc57e\"><div class=\"ttname\"><a href=\"a01807.html#a00d424aa40e6c051f610a308317cc57e\">Dune::Functions::SubspaceBasis::RootLocalView</a></div><div class=\"ttdeci\">typename RootBasis::LocalView RootLocalView</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:43</div></div>\n-<div class=\"ttc\" id=\"aa01807_html_a14c47ee1637a33fa73dbac78dd93b4e6\"><div class=\"ttname\"><a href=\"a01807.html#a14c47ee1637a33fa73dbac78dd93b4e6\">Dune::Functions::SubspaceBasis::localView</a></div><div class=\"ttdeci\">LocalView localView() const</div><div class=\"ttdoc\">Return local view for basis.</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:108</div></div>\n-<div class=\"ttc\" id=\"aa01807_html_a2f6185785e7ee3ad97f7239fed6f3e39\"><div class=\"ttname\"><a href=\"a01807.html#a2f6185785e7ee3ad97f7239fed6f3e39\">Dune::Functions::SubspaceBasis::rootBasis_</a></div><div class=\"ttdeci\">const RootBasis * rootBasis_</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:124</div></div>\n-<div class=\"ttc\" id=\"aa01807_html_a330b42b7087eca7afb92ec40eba36440\"><div class=\"ttname\"><a href=\"a01807.html#a330b42b7087eca7afb92ec40eba36440\">Dune::Functions::SubspaceBasis::SizePrefix</a></div><div class=\"ttdeci\">typename RootBasis::SizePrefix SizePrefix</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:58</div></div>\n-<div class=\"ttc\" id=\"aa01807_html_a5dcb19c46539c51ce32a6fdc55738387\"><div class=\"ttname\"><a href=\"a01807.html#a5dcb19c46539c51ce32a6fdc55738387\">Dune::Functions::SubspaceBasis::PrefixPath</a></div><div class=\"ttdeci\">TP PrefixPath</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:45</div></div>\n-<div class=\"ttc\" id=\"aa01807_html_a616eaadc3d1d8706041ab1b0d03510bc\"><div class=\"ttname\"><a href=\"a01807.html#a616eaadc3d1d8706041ab1b0d03510bc\">Dune::Functions::SubspaceBasis::LocalView</a></div><div class=\"ttdeci\">SubspaceLocalView< RootLocalView, PrefixPath > LocalView</div><div class=\"ttdoc\">Type of the local view on the restriction of the basis to a single element.</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:56</div></div>\n-<div class=\"ttc\" id=\"aa01807_html_a658452a597522c630fab82679da0a167\"><div class=\"ttname\"><a href=\"a01807.html#a658452a597522c630fab82679da0a167\">Dune::Functions::SubspaceBasis::size</a></div><div class=\"ttdeci\">size_type size(const SizePrefix &prefix) const</div><div class=\"ttdoc\">Return number possible values for next position in multi index.</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:100</div></div>\n-<div class=\"ttc\" id=\"aa01807_html_a6e7dd708494382dad7cc288ce6cfe6b8\"><div class=\"ttname\"><a href=\"a01807.html#a6e7dd708494382dad7cc288ce6cfe6b8\">Dune::Functions::SubspaceBasis::GridView</a></div><div class=\"ttdeci\">typename RootBasis::GridView GridView</div><div class=\"ttdoc\">The grid view that the FE space is defined on.</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:48</div></div>\n-<div class=\"ttc\" id=\"aa01807_html_a7c1756f78b770fbbe6937b8a146cdc81\"><div class=\"ttname\"><a href=\"a01807.html#a7c1756f78b770fbbe6937b8a146cdc81\">Dune::Functions::SubspaceBasis::prefixPath</a></div><div class=\"ttdeci\">const PrefixPath & prefixPath() const</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:118</div></div>\n-<div class=\"ttc\" id=\"aa01807_html_a8994e4c3215b21b9b4d4e1b09a97f4c4\"><div class=\"ttname\"><a href=\"a01807.html#a8994e4c3215b21b9b4d4e1b09a97f4c4\">Dune::Functions::SubspaceBasis::SubspaceBasis</a></div><div class=\"ttdeci\">SubspaceBasis(const SubspaceBasis< RootRootBasis, InnerTP > &rootBasis, const OuterTP &prefixPath)</div><div class=\"ttdoc\">Constructor from another SubspaceBasis.</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:73</div></div>\n-<div class=\"ttc\" id=\"aa01807_html_a8ce8499d3a9117e5138f1ba231a80fcf\"><div class=\"ttname\"><a href=\"a01807.html#a8ce8499d3a9117e5138f1ba231a80fcf\">Dune::Functions::SubspaceBasis::gridView</a></div><div class=\"ttdeci\">const GridView & gridView() const</div><div class=\"ttdoc\">Obtain the grid view that the basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:80</div></div>\n-<div class=\"ttc\" id=\"aa01807_html_aaa9c058bcb0bc05bdba112801201f281\"><div class=\"ttname\"><a href=\"a01807.html#aaa9c058bcb0bc05bdba112801201f281\">Dune::Functions::SubspaceBasis::RootBasis</a></div><div class=\"ttdeci\">RB RootBasis</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:41</div></div>\n-<div class=\"ttc\" id=\"aa01807_html_ab3509a847b8dfb33032f14ca666c13bb\"><div class=\"ttname\"><a href=\"a01807.html#ab3509a847b8dfb33032f14ca666c13bb\">Dune::Functions::SubspaceBasis::prefixPath_</a></div><div class=\"ttdeci\">PrefixPath prefixPath_</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:125</div></div>\n-<div class=\"ttc\" id=\"aa01807_html_abe1c4a616c0acdf861fbbc5f52046645\"><div class=\"ttname\"><a href=\"a01807.html#abe1c4a616c0acdf861fbbc5f52046645\">Dune::Functions::SubspaceBasis::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdoc\">Return number of possible values for next position in empty multi index.</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:94</div></div>\n-<div class=\"ttc\" id=\"aa01807_html_ac6fc5a04ad73460ae55c73bb8f515712\"><div class=\"ttname\"><a href=\"a01807.html#ac6fc5a04ad73460ae55c73bb8f515712\">Dune::Functions::SubspaceBasis::rootBasis</a></div><div class=\"ttdeci\">const RootBasis & rootBasis() const</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:113</div></div>\n-<div class=\"ttc\" id=\"aa01807_html_acb8fddcafde83205b67e57926c84ace5\"><div class=\"ttname\"><a href=\"a01807.html#acb8fddcafde83205b67e57926c84ace5\">Dune::Functions::SubspaceBasis::MultiIndex</a></div><div class=\"ttdeci\">typename RootBasis::MultiIndex MultiIndex</div><div class=\"ttdoc\">Type used for global numbering of the basis vectors.</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:51</div></div>\n-<div class=\"ttc\" id=\"aa01807_html_acbfda46d0971e6f82b7649e195663702\"><div class=\"ttname\"><a href=\"a01807.html#acbfda46d0971e6f82b7649e195663702\">Dune::Functions::SubspaceBasis::dimension</a></div><div class=\"ttdeci\">size_type dimension() const</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:88</div></div>\n-<div class=\"ttc\" id=\"aa01807_html_ad328a135f42bb2a6b9bf60983f61f254\"><div class=\"ttname\"><a href=\"a01807.html#ad328a135f42bb2a6b9bf60983f61f254\">Dune::Functions::SubspaceBasis::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:53</div></div>\n-<div class=\"ttc\" id=\"aa01807_html_aee8689dac160442b891bc738c55c1087\"><div class=\"ttname\"><a href=\"a01807.html#aee8689dac160442b891bc738c55c1087\">Dune::Functions::SubspaceBasis::SubspaceBasis</a></div><div class=\"ttdeci\">SubspaceBasis(const RootBasis &rootBasis, const PrefixPath &prefixPath)</div><div class=\"ttdoc\">Constructor for a given grid view object.</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:62</div></div>\n-<div class=\"ttc\" id=\"aa01811_html\"><div class=\"ttname\"><a href=\"a01811.html\">Dune::Functions::SubspaceLocalView</a></div><div class=\"ttdoc\">The restriction of a finite element basis to a single element.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:30</div></div>\n-<div class=\"ttc\" id=\"aa02876_html\"><div class=\"ttname\"><a href=\"a02876.html\">concepts.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa01475_html\"><div class=\"ttname\"><a href=\"a01475.html\">Dune::Functions::BSplineLocalFiniteElement</a></div><div class=\"ttdoc\">LocalFiniteElement in the sense of dune-localfunctions, for the B-spline basis on tensor-product grid...</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:362</div></div>\n+<div class=\"ttc\" id=\"aa01475_html_a056defb77857b94194963eaac1d9116e\"><div class=\"ttname\"><a href=\"a01475.html#a056defb77857b94194963eaac1d9116e\">Dune::Functions::BSplineLocalFiniteElement::BSplineLocalFiniteElement</a></div><div class=\"ttdeci\">BSplineLocalFiniteElement(const BSplineLocalFiniteElement &other)</div><div class=\"ttdoc\">Copy constructor.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:383</div></div>\n+<div class=\"ttc\" id=\"aa01475_html_a3e7f4cd0ac478f9bf6e9b1d091693fbe\"><div class=\"ttname\"><a href=\"a01475.html#a3e7f4cd0ac478f9bf6e9b1d091693fbe\">Dune::Functions::BSplineLocalFiniteElement::preBasis_</a></div><div class=\"ttdeci\">const BSplinePreBasis< GV > & preBasis_</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:474</div></div>\n+<div class=\"ttc\" id=\"aa01475_html_a6663c7b259e38c50201d6341b426d96c\"><div class=\"ttname\"><a href=\"a01475.html#a6663c7b259e38c50201d6341b426d96c\">Dune::Functions::BSplineLocalFiniteElement::localInterpolation</a></div><div class=\"ttdeci\">const BSplineLocalInterpolation< dim, BSplineLocalBasis< GV, R > > & localInterpolation() const</div><div class=\"ttdoc\">Hand out a LocalInterpolation object.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:439</div></div>\n+<div class=\"ttc\" id=\"aa01475_html_a6ea8a8267e93cbd52fed3395b7730817\"><div class=\"ttname\"><a href=\"a01475.html#a6ea8a8267e93cbd52fed3395b7730817\">Dune::Functions::BSplineLocalFiniteElement::Traits</a></div><div class=\"ttdeci\">LocalFiniteElementTraits< BSplineLocalBasis< GV, R >, BSplineLocalCoefficients< dim >, BSplineLocalInterpolation< dim, BSplineLocalBasis< GV, R > > > Traits</div><div class=\"ttdoc\">Export various types related to this LocalFiniteElement.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:372</div></div>\n+<div class=\"ttc\" id=\"aa01475_html_a755a5575093daca735c8cc8fb353883b\"><div class=\"ttname\"><a href=\"a01475.html#a755a5575093daca735c8cc8fb353883b\">Dune::Functions::BSplineLocalFiniteElement::currentKnotSpan_</a></div><div class=\"ttdeci\">std::array< unsigned, dim > currentKnotSpan_</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:481</div></div>\n+<div class=\"ttc\" id=\"aa01475_html_a85328bfc4b5eb230da71a04dd8198f2f\"><div class=\"ttname\"><a href=\"a01475.html#a85328bfc4b5eb230da71a04dd8198f2f\">Dune::Functions::BSplineLocalFiniteElement::BSplineLocalFiniteElement</a></div><div class=\"ttdeci\">BSplineLocalFiniteElement(const BSplinePreBasis< GV > &preBasis)</div><div class=\"ttdoc\">Constructor with a given B-spline basis.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:376</div></div>\n+<div class=\"ttc\" id=\"aa01475_html_a896fba4c7d267d272cb866f5e7064877\"><div class=\"ttname\"><a href=\"a01475.html#a896fba4c7d267d272cb866f5e7064877\">Dune::Functions::BSplineLocalFiniteElement::localCoefficients</a></div><div class=\"ttdeci\">const BSplineLocalCoefficients< dim > & localCoefficients() const</div><div class=\"ttdoc\">Hand out a LocalCoefficients object.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:433</div></div>\n+<div class=\"ttc\" id=\"aa01475_html_a8986ef55edc552afc79a0c5fb20e93e9\"><div class=\"ttname\"><a href=\"a01475.html#a8986ef55edc552afc79a0c5fb20e93e9\">Dune::Functions::BSplineLocalFiniteElement::bind</a></div><div class=\"ttdeci\">void bind(const std::array< unsigned, dim > &elementIdx)</div><div class=\"ttdoc\">Bind LocalFiniteElement to a specific knot span of the spline patch.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:394</div></div>\n+<div class=\"ttc\" id=\"aa01475_html_aa279d56a77941dce374774818d74434e\"><div class=\"ttname\"><a href=\"a01475.html#aa279d56a77941dce374774818d74434e\">Dune::Functions::BSplineLocalFiniteElement::localInterpolation_</a></div><div class=\"ttdeci\">BSplineLocalInterpolation< dim, BSplineLocalBasis< GV, R > > localInterpolation_</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:478</div></div>\n+<div class=\"ttc\" id=\"aa01475_html_aa67e3cd78a28ab0f2a64f78de18f47e2\"><div class=\"ttname\"><a href=\"a01475.html#aa67e3cd78a28ab0f2a64f78de18f47e2\">Dune::Functions::BSplineLocalFiniteElement::type</a></div><div class=\"ttdeci\">GeometryType type() const</div><div class=\"ttdoc\">Return the reference element that the local finite element is defined on (here, a hypercube)</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:455</div></div>\n+<div class=\"ttc\" id=\"aa01475_html_ab15469899e86cb97eece21be2e207162\"><div class=\"ttname\"><a href=\"a01475.html#ab15469899e86cb97eece21be2e207162\">Dune::Functions::BSplineLocalFiniteElement::size</a></div><div class=\"ttdeci\">unsigned size() const</div><div class=\"ttdoc\">Number of shape functions in this finite element.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:445</div></div>\n+<div class=\"ttc\" id=\"aa01475_html_acdec5e2d8a6827228df155110117108c\"><div class=\"ttname\"><a href=\"a01475.html#acdec5e2d8a6827228df155110117108c\">Dune::Functions::BSplineLocalFiniteElement::localCoefficients_</a></div><div class=\"ttdeci\">BSplineLocalCoefficients< dim > localCoefficients_</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:477</div></div>\n+<div class=\"ttc\" id=\"aa01475_html_ace5084afe0e9f66e0dacc99fe80bf171\"><div class=\"ttname\"><a href=\"a01475.html#ace5084afe0e9f66e0dacc99fe80bf171\">Dune::Functions::BSplineLocalFiniteElement::size</a></div><div class=\"ttdeci\">unsigned int size(int i) const</div><div class=\"ttdoc\">Number of degrees of freedom for one coordinate direction.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:463</div></div>\n+<div class=\"ttc\" id=\"aa01475_html_adc958ccea9712397f9894c927c199d1d\"><div class=\"ttname\"><a href=\"a01475.html#adc958ccea9712397f9894c927c199d1d\">Dune::Functions::BSplineLocalFiniteElement::localBasis_</a></div><div class=\"ttdeci\">BSplineLocalBasis< GV, R > localBasis_</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:476</div></div>\n+<div class=\"ttc\" id=\"aa01475_html_af2e635b34f6682599e45f34263b95326\"><div class=\"ttname\"><a href=\"a01475.html#af2e635b34f6682599e45f34263b95326\">Dune::Functions::BSplineLocalFiniteElement::localBasis</a></div><div class=\"ttdeci\">const BSplineLocalBasis< GV, R > & localBasis() const</div><div class=\"ttdoc\">Hand out a LocalBasis object.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:427</div></div>\n+<div class=\"ttc\" id=\"aa01479_html\"><div class=\"ttname\"><a href=\"a01479.html\">Dune::Functions::BSplinePreBasis</a></div><div class=\"ttdoc\">Pre-basis for B-spline basis.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:499</div></div>\n+<div class=\"ttc\" id=\"aa01479_html_a0051c4b5a4b375ab5d453ffa8902787d\"><div class=\"ttname\"><a href=\"a01479.html#a0051c4b5a4b375ab5d453ffa8902787d\">Dune::Functions::BSplinePreBasis::multiIndexBufferSize</a></div><div class=\"ttdeci\">static constexpr size_type multiIndexBufferSize</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:567</div></div>\n+<div class=\"ttc\" id=\"aa01479_html_a08746400f31c37c2294fc700f467d291\"><div class=\"ttname\"><a href=\"a01479.html#a08746400f31c37c2294fc700f467d291\">Dune::Functions::BSplinePreBasis::elements_</a></div><div class=\"ttdeci\">std::array< unsigned, dim > elements_</div><div class=\"ttdoc\">Number of grid elements in the different coordinate directions.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1240</div></div>\n+<div class=\"ttc\" id=\"aa01479_html_a141bd4b20ae309776f615f7ca33ce87b\"><div class=\"ttname\"><a href=\"a01479.html#a141bd4b20ae309776f615f7ca33ce87b\">Dune::Functions::BSplinePreBasis::gridView_</a></div><div class=\"ttdeci\">GridView gridView_</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1242</div></div>\n+<div class=\"ttc\" id=\"aa01479_html_a17beca7558ea69ac90503feebfc7a7b0\"><div class=\"ttname\"><a href=\"a01479.html#a17beca7558ea69ac90503feebfc7a7b0\">Dune::Functions::BSplinePreBasis::R</a></div><div class=\"ttdeci\">double R</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:570</div></div>\n+<div class=\"ttc\" id=\"aa01479_html_a2c742d3ca0cb2c2dd3f5313295c84a63\"><div class=\"ttname\"><a href=\"a01479.html#a2c742d3ca0cb2c2dd3f5313295c84a63\">Dune::Functions::BSplinePreBasis::evaluateFunctionFull</a></div><div class=\"ttdeci\">static void evaluateFunctionFull(const typename GV::ctype &in, DynamicMatrix< R > &out, const std::vector< R > &knotVector, unsigned int order, unsigned int currentKnotSpan)</div><div class=\"ttdoc\">Evaluate all one-dimensional B-spline functions for a given coordinate direction.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1085</div></div>\n+<div class=\"ttc\" id=\"aa01479_html_a2f03d19256812e423ba918e480c03a7b\"><div class=\"ttname\"><a href=\"a01479.html#a2f03d19256812e423ba918e480c03a7b\">Dune::Functions::BSplinePreBasis::evaluateFunction</a></div><div class=\"ttdeci\">void evaluateFunction(const FieldVector< typename GV::ctype, dim > &in, std::vector< FieldVector< R, 1 > > &out, const std::array< unsigned, dim > &currentKnotSpan) const</div><div class=\"ttdoc\">Evaluate all B-spline basis functions at a given point.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:781</div></div>\n+<div class=\"ttc\" id=\"aa01479_html_a2f2c1860b31056fcd863bc2f721632e6\"><div class=\"ttname\"><a href=\"a01479.html#a2f2c1860b31056fcd863bc2f721632e6\">Dune::Functions::BSplinePreBasis::order_</a></div><div class=\"ttdeci\">std::array< unsigned int, dim > order_</div><div class=\"ttdoc\">Order of the B-spline for each space dimension.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1234</div></div>\n+<div class=\"ttc\" id=\"aa01479_html_a3ea7b013cc2160f1705b5567e613a568\"><div class=\"ttname\"><a href=\"a01479.html#a3ea7b013cc2160f1705b5567e613a568\">Dune::Functions::BSplinePreBasis::dimension</a></div><div class=\"ttdeci\">size_type dimension() const</div><div class=\"ttdoc\">Get the total dimension of the space spanned by this basis.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:719</div></div>\n+<div class=\"ttc\" id=\"aa01479_html_a51538e3d5c7ba5c59d613e1aef37d8d5\"><div class=\"ttname\"><a href=\"a01479.html#a51538e3d5c7ba5c59d613e1aef37d8d5\">Dune::Functions::BSplinePreBasis::evaluateAll</a></div><div class=\"ttdeci\">static void evaluateAll(const typename GV::ctype &in, std::vector< R > &out, bool evaluateJacobian, std::vector< R > &outJac, bool evaluateHessian, std::vector< R > &outHess, const std::vector< R > &knotVector, unsigned int order, unsigned int currentKnotSpan)</div><div class=\"ttdoc\">Evaluate the second derivatives of all one-dimensional B-spline functions for a given coordinate dire...</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1128</div></div>\n+<div class=\"ttc\" id=\"aa01479_html_a520df331d03110c5713336ca32ca99c4\"><div class=\"ttname\"><a href=\"a01479.html#a520df331d03110c5713336ca32ca99c4\">Dune::Functions::BSplinePreBasis::evaluateFunction</a></div><div class=\"ttdeci\">static void evaluateFunction(const typename GV::ctype &in, std::vector< R > &out, const std::vector< R > &knotVector, unsigned int order, unsigned int currentKnotSpan)</div><div class=\"ttdoc\">Evaluate all one-dimensional B-spline functions for a given coordinate direction.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1028</div></div>\n+<div class=\"ttc\" id=\"aa01479_html_a6522976d7c91ec4cbf1a193c1b114656\"><div class=\"ttname\"><a href=\"a01479.html#a6522976d7c91ec4cbf1a193c1b114656\">Dune::Functions::BSplinePreBasis::size</a></div><div class=\"ttdeci\">unsigned int size(size_t d) const</div><div class=\"ttdoc\">Number of shape functions in one direction.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:774</div></div>\n+<div class=\"ttc\" id=\"aa01479_html_a71f4090ddbb632644769cb0a9c5f394c\"><div class=\"ttname\"><a href=\"a01479.html#a71f4090ddbb632644769cb0a9c5f394c\">Dune::Functions::BSplinePreBasis::GridView</a></div><div class=\"ttdeci\">GV GridView</div><div class=\"ttdoc\">The grid view that the FE space is defined on.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:560</div></div>\n+<div class=\"ttc\" id=\"aa01479_html_a751c671d2effffac3167f66b1fe5755d\"><div class=\"ttname\"><a href=\"a01479.html#a751c671d2effffac3167f66b1fe5755d\">Dune::Functions::BSplinePreBasis::indices</a></div><div class=\"ttdeci\">It indices(const Node &node, It it) const</div><div class=\"ttdoc\">Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:735</div></div>\n+<div class=\"ttc\" id=\"aa01479_html_a7743becf779c5d57e8665798ac50ce0b\"><div class=\"ttname\"><a href=\"a01479.html#a7743becf779c5d57e8665798ac50ce0b\">Dune::Functions::BSplinePreBasis::evaluate</a></div><div class=\"ttdeci\">void evaluate(const typename std::array< int, k > &directions, const FieldVector< typename GV::ctype, dim > &in, std::vector< FieldVector< R, 1 > > &out, const std::array< unsigned, dim > &currentKnotSpan) const</div><div class=\"ttdoc\">Evaluate Derivatives of all B-spline basis functions.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:913</div></div>\n+<div class=\"ttc\" id=\"aa01479_html_a7aa8059fdf68035788a75cb680e89cdd\"><div class=\"ttname\"><a href=\"a01479.html#a7aa8059fdf68035788a75cb680e89cdd\">Dune::Functions::BSplinePreBasis::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:561</div></div>\n+<div class=\"ttc\" id=\"aa01479_html_a7ba55d70ff3c6d156bb31d2d52817533\"><div class=\"ttname\"><a href=\"a01479.html#a7ba55d70ff3c6d156bb31d2d52817533\">Dune::Functions::BSplinePreBasis::maxMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type maxMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:565</div></div>\n+<div class=\"ttc\" id=\"aa01479_html_a7e14d2f4019dbe19e9d6595bc4f60d65\"><div class=\"ttname\"><a href=\"a01479.html#a7e14d2f4019dbe19e9d6595bc4f60d65\">Dune::Functions::BSplinePreBasis::update</a></div><div class=\"ttdeci\">void update(const GridView &gv)</div><div class=\"ttdoc\">Update the stored grid view, to be called if the grid has changed.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:686</div></div>\n+<div class=\"ttc\" id=\"aa01479_html_a9292ccd68d50240f94f75f54989fd7dd\"><div class=\"ttname\"><a href=\"a01479.html#a9292ccd68d50240f94f75f54989fd7dd\">Dune::Functions::BSplinePreBasis::initializeIndices</a></div><div class=\"ttdeci\">void initializeIndices()</div><div class=\"ttdoc\">Initialize the global indices.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:676</div></div>\n+<div class=\"ttc\" id=\"aa01479_html_aae5d004ab9ccf9fb1d597505d493895a\"><div class=\"ttname\"><a href=\"a01479.html#aae5d004ab9ccf9fb1d597505d493895a\">Dune::Functions::BSplinePreBasis::size</a></div><div class=\"ttdeci\">size_type size(const Dune::ReservedVector< ST, i > &prefix) const</div><div class=\"ttdoc\">Return number of possible values for next position in multi index.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:712</div></div>\n+<div class=\"ttc\" id=\"aa01479_html_acbd350edf10b11a798c8d59285619646\"><div class=\"ttname\"><a href=\"a01479.html#acbd350edf10b11a798c8d59285619646\">Dune::Functions::BSplinePreBasis::size</a></div><div class=\"ttdeci\">unsigned int size() const</div><div class=\"ttdoc\">Total number of B-spline basis functions.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:765</div></div>\n+<div class=\"ttc\" id=\"aa01479_html_ace12350629857a803f32d158bbf4dd25\"><div class=\"ttname\"><a href=\"a01479.html#ace12350629857a803f32d158bbf4dd25\">Dune::Functions::BSplinePreBasis::gridView</a></div><div class=\"ttdeci\">const GridView & gridView() const</div><div class=\"ttdoc\">Obtain the grid view that the basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:680</div></div>\n+<div class=\"ttc\" id=\"aa01479_html_ad49a0bd70180481c702887c873386897\"><div class=\"ttname\"><a href=\"a01479.html#ad49a0bd70180481c702887c873386897\">Dune::Functions::BSplinePreBasis::getIJK</a></div><div class=\"ttdeci\">static std::array< unsigned int, dim > getIJK(typename GridView::IndexSet::IndexType idx, std::array< unsigned int, dim > elements)</div><div class=\"ttdoc\">Compute integer element coordinates from the element index.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1009</div></div>\n+<div class=\"ttc\" id=\"aa01479_html_ad63b66afedd5483d385a116e1244fdbd\"><div class=\"ttname\"><a href=\"a01479.html#ad63b66afedd5483d385a116e1244fdbd\">Dune::Functions::BSplinePreBasis::makeNode</a></div><div class=\"ttdeci\">Node makeNode() const</div><div class=\"ttdoc\">Create tree node.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:694</div></div>\n+<div class=\"ttc\" id=\"aa01479_html_ad75bb49a82848a47e41698d9a7657e97\"><div class=\"ttname\"><a href=\"a01479.html#ad75bb49a82848a47e41698d9a7657e97\">Dune::Functions::BSplinePreBasis::BSplinePreBasis</a></div><div class=\"ttdeci\">BSplinePreBasis(const GridView &gridView, const std::vector< double > &knotVector, unsigned int order, bool makeOpen=true)</div><div class=\"ttdoc\">Construct a B-spline basis for a given grid view and set of knot vectors.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:590</div></div>\n+<div class=\"ttc\" id=\"aa01479_html_addecbb0942b0fa43f0abec42f1c848ab\"><div class=\"ttname\"><a href=\"a01479.html#addecbb0942b0fa43f0abec42f1c848ab\">Dune::Functions::BSplinePreBasis::evaluateJacobian</a></div><div class=\"ttdeci\">void evaluateJacobian(const FieldVector< typename GV::ctype, dim > &in, std::vector< FieldMatrix< R, 1, dim > > &out, const std::array< unsigned, dim > &currentKnotSpan) const</div><div class=\"ttdoc\">Evaluate Jacobian of all B-spline basis functions.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:812</div></div>\n+<div class=\"ttc\" id=\"aa01479_html_ae1482f3df0012d1fe5ce976cbc0b377a\"><div class=\"ttname\"><a href=\"a01479.html#ae1482f3df0012d1fe5ce976cbc0b377a\">Dune::Functions::BSplinePreBasis::minMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type minMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:566</div></div>\n+<div class=\"ttc\" id=\"aa01479_html_aeb66e58f5e9497858e9a1402d8309017\"><div class=\"ttname\"><a href=\"a01479.html#aeb66e58f5e9497858e9a1402d8309017\">Dune::Functions::BSplinePreBasis::knotVectors_</a></div><div class=\"ttdeci\">std::array< std::vector< double >, dim > knotVectors_</div><div class=\"ttdoc\">The knot vectors, one for each space dimension.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1237</div></div>\n+<div class=\"ttc\" id=\"aa01479_html_af1b76255a0f308dbe049db50807ea041\"><div class=\"ttname\"><a href=\"a01479.html#af1b76255a0f308dbe049db50807ea041\">Dune::Functions::BSplinePreBasis::maxNodeSize</a></div><div class=\"ttdeci\">size_type maxNodeSize() const</div><div class=\"ttdoc\">Get the maximal number of DOFs associated to node for any element.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:725</div></div>\n+<div class=\"ttc\" id=\"aa01479_html_afdc9d93d63de521026ce13ccc9f0e27e\"><div class=\"ttname\"><a href=\"a01479.html#afdc9d93d63de521026ce13ccc9f0e27e\">Dune::Functions::BSplinePreBasis::BSplinePreBasis</a></div><div class=\"ttdeci\">BSplinePreBasis(const GridView &gridView, const FieldVector< double, dim > &lowerLeft, const FieldVector< double, dim > &upperRight, const std::array< unsigned int, dim > &elements, unsigned int order, bool makeOpen=true)</div><div class=\"ttdoc\">Construct a B-spline basis for a given grid view with uniform knot vectors.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:642</div></div>\n+<div class=\"ttc\" id=\"aa01483_html\"><div class=\"ttname\"><a href=\"a01483.html\">Dune::Functions::BSplineLocalBasis</a></div><div class=\"ttdoc\">LocalBasis class in the sense of dune-localfunctions, presenting the restriction of a B-spline patch ...</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:46</div></div>\n+<div class=\"ttc\" id=\"aa01483_html_a0ec676c23af5cfb27d18260102af08ca\"><div class=\"ttname\"><a href=\"a01483.html#a0ec676c23af5cfb27d18260102af08ca\">Dune::Functions::BSplineLocalBasis::Traits</a></div><div class=\"ttdeci\">LocalBasisTraits< D, dim, FieldVector< D, dim >, R, 1, FieldVector< R, 1 >, FieldMatrix< R, 1, dim > > Traits</div><div class=\"ttdoc\">export type traits for function signature</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:55</div></div>\n+<div class=\"ttc\" id=\"aa01483_html_a34a29cc9e1ac3d7f03fadb568014a847\"><div class=\"ttname\"><a href=\"a01483.html#a34a29cc9e1ac3d7f03fadb568014a847\">Dune::Functions::BSplineLocalBasis::order</a></div><div class=\"ttdeci\">unsigned int order() const</div><div class=\"ttdoc\">Polynomial order of the shape functions.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:140</div></div>\n+<div class=\"ttc\" id=\"aa01483_html_a35462641ee16ccfd06c65d692b9b309f\"><div class=\"ttname\"><a href=\"a01483.html#a35462641ee16ccfd06c65d692b9b309f\">Dune::Functions::BSplineLocalBasis::size</a></div><div class=\"ttdeci\">std::size_t size() const</div><div class=\"ttdoc\">Return the number of basis functions on the current knot span.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:147</div></div>\n+<div class=\"ttc\" id=\"aa01483_html_a515832d188de13e946d113c4b562fb0f\"><div class=\"ttname\"><a href=\"a01483.html#a515832d188de13e946d113c4b562fb0f\">Dune::Functions::BSplineLocalBasis::evaluate</a></div><div class=\"ttdeci\">void evaluate(const typename std::array< int, k > &directions, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const</div><div class=\"ttdoc\">Evaluate all shape functions and derivatives of any order.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:97</div></div>\n+<div class=\"ttc\" id=\"aa01483_html_a6f6f0d5f6137fc30c687a913a9794ef9\"><div class=\"ttname\"><a href=\"a01483.html#a6f6f0d5f6137fc30c687a913a9794ef9\">Dune::Functions::BSplineLocalBasis::evaluateFunction</a></div><div class=\"ttdeci\">void evaluateFunction(const FieldVector< D, dim > &in, std::vector< FieldVector< R, 1 > > &out) const</div><div class=\"ttdoc\">Evaluate all shape functions.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:70</div></div>\n+<div class=\"ttc\" id=\"aa01483_html_a7bece6d4241e57b2f43e52f4427c7c7c\"><div class=\"ttname\"><a href=\"a01483.html#a7bece6d4241e57b2f43e52f4427c7c7c\">Dune::Functions::BSplineLocalBasis::evaluateJacobian</a></div><div class=\"ttdeci\">void evaluateJacobian(const FieldVector< D, dim > &in, std::vector< FieldMatrix< D, 1, dim > > &out) const</div><div class=\"ttdoc\">Evaluate Jacobian of all shape functions.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:82</div></div>\n+<div class=\"ttc\" id=\"aa01483_html_ab66fbd26ea34c67071da5c0fa9504191\"><div class=\"ttname\"><a href=\"a01483.html#ab66fbd26ea34c67071da5c0fa9504191\">Dune::Functions::BSplineLocalBasis::BSplineLocalBasis</a></div><div class=\"ttdeci\">BSplineLocalBasis(const BSplinePreBasis< GV > &preBasis, const BSplineLocalFiniteElement< GV, R > &lFE)</div><div class=\"ttdoc\">Constructor with a given B-spline patch.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:61</div></div>\n+<div class=\"ttc\" id=\"aa01487_html\"><div class=\"ttname\"><a href=\"a01487.html\">Dune::Functions::BSplineLocalCoefficients</a></div><div class=\"ttdoc\">Attaches a shape function to an entity.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:178</div></div>\n+<div class=\"ttc\" id=\"aa01487_html_a49f42a4b71756628c60f20cf4868e451\"><div class=\"ttname\"><a href=\"a01487.html#a49f42a4b71756628c60f20cf4868e451\">Dune::Functions::BSplineLocalCoefficients::localKey</a></div><div class=\"ttdeci\">const LocalKey & localKey(std::size_t i) const</div><div class=\"ttdoc\">get i'th index</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:321</div></div>\n+<div class=\"ttc\" id=\"aa01487_html_a73ed6bc866499e512d96cb6d6c315c6f\"><div class=\"ttname\"><a href=\"a01487.html#a73ed6bc866499e512d96cb6d6c315c6f\">Dune::Functions::BSplineLocalCoefficients::init</a></div><div class=\"ttdeci\">void init(const std::array< unsigned, dim > &sizes)</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:256</div></div>\n+<div class=\"ttc\" id=\"aa01487_html_acee2241933e75ae41972b3ce44ceb0c1\"><div class=\"ttname\"><a href=\"a01487.html#acee2241933e75ae41972b3ce44ceb0c1\">Dune::Functions::BSplineLocalCoefficients::size</a></div><div class=\"ttdeci\">std::size_t size() const</div><div class=\"ttdoc\">number of coefficients</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:315</div></div>\n+<div class=\"ttc\" id=\"aa01491_html\"><div class=\"ttname\"><a href=\"a01491.html\">Dune::Functions::BSplineLocalInterpolation</a></div><div class=\"ttdoc\">Local interpolation in the sense of dune-localfunctions, for the B-spline basis on tensor-product gri...</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:340</div></div>\n+<div class=\"ttc\" id=\"aa01491_html_a338c7d6e7a54eefba6398c11c5fa1531\"><div class=\"ttname\"><a href=\"a01491.html#a338c7d6e7a54eefba6398c11c5fa1531\">Dune::Functions::BSplineLocalInterpolation::interpolate</a></div><div class=\"ttdeci\">void interpolate(const F &f, std::vector< C > &out) const</div><div class=\"ttdoc\">Local interpolation of a function.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:344</div></div>\n+<div class=\"ttc\" id=\"aa01495_html\"><div class=\"ttname\"><a href=\"a01495.html\">Dune::Functions::BSplineNode</a></div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1250</div></div>\n+<div class=\"ttc\" id=\"aa01495_html_a061007133830a1181adc187c1f6f692b\"><div class=\"ttname\"><a href=\"a01495.html#a061007133830a1181adc187c1f6f692b\">Dune::Functions::BSplineNode::finiteElement</a></div><div class=\"ttdeci\">const FiniteElement & finiteElement() const</div><div class=\"ttdoc\">Return the LocalFiniteElement for the element we are bound to.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1274</div></div>\n+<div class=\"ttc\" id=\"aa01495_html_a3d6a0412f84c0739c42d61c3222f7097\"><div class=\"ttname\"><a href=\"a01495.html#a3d6a0412f84c0739c42d61c3222f7097\">Dune::Functions::BSplineNode::Element</a></div><div class=\"ttdeci\">typename GV::template Codim< 0 >::Entity Element</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1256</div></div>\n+<div class=\"ttc\" id=\"aa01495_html_a4f229be79854725c276ece5ac9d17b38\"><div class=\"ttname\"><a href=\"a01495.html#a4f229be79854725c276ece5ac9d17b38\">Dune::Functions::BSplineNode::preBasis_</a></div><div class=\"ttdeci\">const BSplinePreBasis< GV > * preBasis_</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1290</div></div>\n+<div class=\"ttc\" id=\"aa01495_html_a5bd21a21da78b173945356ede8ae39a6\"><div class=\"ttname\"><a href=\"a01495.html#a5bd21a21da78b173945356ede8ae39a6\">Dune::Functions::BSplineNode::element_</a></div><div class=\"ttdeci\">Element element_</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1293</div></div>\n+<div class=\"ttc\" id=\"aa01495_html_a6e2c2d3de78fe1f2cedb5da2a736d2ba\"><div class=\"ttname\"><a href=\"a01495.html#a6e2c2d3de78fe1f2cedb5da2a736d2ba\">Dune::Functions::BSplineNode::bind</a></div><div class=\"ttdeci\">void bind(const Element &e)</div><div class=\"ttdoc\">Bind to element.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1280</div></div>\n+<div class=\"ttc\" id=\"aa01495_html_a7444a74873c84aacc8b9b6669b8c8a11\"><div class=\"ttname\"><a href=\"a01495.html#a7444a74873c84aacc8b9b6669b8c8a11\">Dune::Functions::BSplineNode::BSplineNode</a></div><div class=\"ttdeci\">BSplineNode(const BSplinePreBasis< GV > *preBasis)</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1259</div></div>\n+<div class=\"ttc\" id=\"aa01495_html_a80df2171f3763abd188b3d3cb9b7732a\"><div class=\"ttname\"><a href=\"a01495.html#a80df2171f3763abd188b3d3cb9b7732a\">Dune::Functions::BSplineNode::element</a></div><div class=\"ttdeci\">const Element & element() const</div><div class=\"ttdoc\">Return current element, throw if unbound.</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1265</div></div>\n+<div class=\"ttc\" id=\"aa01495_html_a8a7948553a4a579b1ab4720a9c156346\"><div class=\"ttname\"><a href=\"a01495.html#a8a7948553a4a579b1ab4720a9c156346\">Dune::Functions::BSplineNode::finiteElement_</a></div><div class=\"ttdeci\">FiniteElement finiteElement_</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1292</div></div>\n+<div class=\"ttc\" id=\"aa01495_html_ae563738fb93ed2e7dc40775a1eb791ae\"><div class=\"ttname\"><a href=\"a01495.html#ae563738fb93ed2e7dc40775a1eb791ae\">Dune::Functions::BSplineNode::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdef\"><b>Definition:</b> bsplinebasis.hh:1255</div></div>\n+<div class=\"ttc\" id=\"aa01555_html\"><div class=\"ttname\"><a href=\"a01555.html\">Dune::Functions::DefaultGlobalBasis</a></div><div class=\"ttdoc\">Global basis for given pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:46</div></div>\n+<div class=\"ttc\" id=\"aa01707_html_a859d50513645ef2ea0188d0779c1df30\"><div class=\"ttname\"><a href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">Dune::Functions::BasisNodeMixin::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:142</div></div>\n+<div class=\"ttc\" id=\"aa01707_html_ae93815e5c4012f7be5d11786f40d267a\"><div class=\"ttname\"><a href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\">Dune::Functions::BasisNodeMixin::setSize</a></div><div class=\"ttdeci\">void setSize(const size_type size)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:164</div></div>\n+<div class=\"ttc\" id=\"aa01711_html\"><div class=\"ttname\"><a href=\"a01711.html\">Dune::Functions::LeafBasisNode</a></div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:186</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,246 +5,1509 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-subspacebasis.hh\n+bsplinebasis.hh\n Go_to_the_documentation_of_this_file.\n- 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n+1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_HH\n- 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACEBASIS_HH\n+ 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH\n+ 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH\n 5\n- 6#include <dune/common/reservedvector.hh>\n- 7#include <dune/common/typeutilities.hh>\n- 8#include <dune/common/concept.hh>\n- 9\n- 10#include <dune/functions/common/type_traits.hh>\n- 11#include <dune/functions/functionspacebases/subspacelocalview.hh>\n- 12#include <dune/functions/functionspacebases/concepts.hh>\n- 13\n- 14\n+ 10#include <array>\n+ 11#include <numeric>\n+ 12\n+ 14#include <dune/common/dynmatrix.hh>\n 15\n- 16namespace Dune {\n- 17namespace Functions {\n- 18\n- 19\n- 20\n- 21namespace Impl {\n- 22\n- 23 template<class... Inner, class... Outer>\n- 24 auto joinTreePaths(const TypeTree::HybridTreePath<Inner...>& inner, const\n-TypeTree::HybridTreePath<Outer...> outer)\n- 25 {\n- 26 return TypeTree::HybridTreePath<Inner..., Outer...>(std::tuple_cat\n-(inner._data, outer._data));\n- 27 }\n- 28\n- 29 template<class InnerTP, class OuterTP>\n- 30 using JoinTreePath_t = std::decay_t<decltype(joinTreePaths(std::\n-declval<InnerTP>(), std::declval<OuterTP>()))>;\n+ 16#include <dune/localfunctions/common/localbasis.hh>\n+ 17#include <dune/common/diagonalmatrix.hh>\n+ 18#include <dune/localfunctions/common/localkey.hh>\n+ 19#include <dune/localfunctions/common/localfiniteelementtraits.hh>\n+ 20#include <dune/geometry/type.hh>\n+ 21#include <dune/functions/functionspacebases/nodes.hh>\n+ 22#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n+ 23\n+ 24namespace Dune\n+ 25{\n+ 26namespace Functions {\n+ 27\n+ 28// A maze of dependencies between the different parts of this. We need a few\n+forward declarations\n+ 29template<typename GV, typename R>\n+ 30class BSplineLocalFiniteElement;\n 31\n- 32}\n- 33\n+ 32template<typename GV>\n+ 33class BSplinePreBasis;\n 34\n 35\n- 36template<class RB, class TP>\n-37class SubspaceBasis\n- 38{\n- 39public:\n- 40\n-41 using RootBasis = RB;\n- 42\n-43 using RootLocalView = typename RootBasis::LocalView;\n- 44\n-45 using PrefixPath = TP;\n- 46\n-48 using GridView = typename RootBasis::GridView;\n- 49\n-51 using MultiIndex = typename RootBasis::MultiIndex;\n+ 44template<class GV, class R>\n+45class BSplineLocalBasis\n+ 46{\n+ 47 friend class BSplineLocalFiniteElement<GV,R>;\n+ 48\n+ 49 typedef typename GV::ctype D;\n+ 50 enum {dim = GV::dimension};\n+ 51public:\n 52\n-53 using size_type = std::size_t;\n- 54\n-56 using LocalView = SubspaceLocalView<RootLocalView,_PrefixPath>;\n- 57\n-58 using SizePrefix = typename RootBasis::SizePrefix;\n- 59\n- 60\n-62 SubspaceBasis(const RootBasis& rootBasis, const PrefixPath& prefixPath) :\n- 63 rootBasis_(&rootBasis),\n- 64 prefixPath_(prefixPath)\n+ 54 typedef LocalBasisTraits<D,dim,FieldVector<D,dim>,R,1,FieldVector<R,1>,\n+55 FieldMatrix<R,1,dim> > Traits;\n+ 56\n+61 BSplineLocalBasis(const BSplinePreBasis<GV>& preBasis,\n+ 62 const BSplineLocalFiniteElement<GV,R>& lFE)\n+ 63 : preBasis_(preBasis),\n+ 64 lFE_(lFE)\n 65 {}\n 66\n- 72 template<class RootRootBasis, class InnerTP, class OuterTP>\n-73 SubspaceBasis(const SubspaceBasis<RootRootBasis,_InnerTP>& rootBasis, const\n-OuterTP& prefixPath) :\n- 74 SubspaceBasis(rootBasis.rootBasis(), Impl::joinTreePaths\n-(rootBasis.prefixPath(), prefixPath))\n- 75 {}\n- 76\n- 77\n-80 const GridView& gridView() const\n- 81 {\n- 82 return rootBasis_->gridView();\n- 83 }\n- 84\n-88 size_type dimension() const\n- 89 {\n- 90 return rootBasis_->dimension();\n- 91 }\n- 92\n-94 size_type size() const\n- 95 {\n- 96 return rootBasis_->size();\n- 97 }\n- 98\n-100 size_type size(const SizePrefix& prefix) const\n- 101 {\n- 102 return rootBasis_->size(prefix);\n- 103 }\n- 104\n-108 LocalView localView() const\n- 109 {\n- 110 return LocalView(*this, prefixPath_);\n- 111 }\n+70 void evaluateFunction (const FieldVector<D,dim>& in,\n+ 71 std::vector<FieldVector<R,1> >& out) const\n+ 72 {\n+ 73 FieldVector<D,dim> globalIn = offset_;\n+ 74 scaling_.umv(in,globalIn);\n+ 75\n+ 76 preBasis_.evaluateFunction(globalIn, out, lFE_.currentKnotSpan_);\n+ 77 }\n+ 78\n+82 void evaluateJacobian (const FieldVector<D,dim>& in,\n+ 83 std::vector<FieldMatrix<D,1,dim> >& out) const\n+ 84 {\n+ 85 FieldVector<D,dim> globalIn = offset_;\n+ 86 scaling_.umv(in,globalIn);\n+ 87\n+ 88 preBasis_.evaluateJacobian(globalIn, out, lFE_.currentKnotSpan_);\n+ 89\n+ 90 for (size_t i=0; i<out.size(); i++)\n+ 91 for (int j=0; j<dim; j++)\n+ 92 out[i][0][j] *= scaling_[j][j];\n+ 93 }\n+ 94\n+ 96 template<size_t k>\n+97 inline void evaluate (const typename std::array<int,k>& directions,\n+ 98 const typename Traits::DomainType& in,\n+ 99 std::vector<typename Traits::RangeType>& out) const\n+ 100 {\n+ 101 switch(k)\n+ 102 {\n+ 103 case 0:\n+ 104 evaluateFunction(in, out);\n+ 105 break;\n+ 106 case 1:\n+ 107 {\n+ 108 FieldVector<D,dim> globalIn = offset_;\n+ 109 scaling_.umv(in,globalIn);\n+ 110\n+ 111 preBasis_.evaluate(directions, globalIn, out, lFE_.currentKnotSpan_);\n 112\n-113 const RootBasis& rootBasis() const\n- 114 {\n- 115 return *rootBasis_;\n+ 113 for (size_t i=0; i<out.size(); i++)\n+ 114 out[i][0] *= scaling_[directions[0]][directions[0]];\n+ 115 break;\n 116 }\n- 117\n-118 const PrefixPath& prefixPath() const\n- 119 {\n- 120 return prefixPath_;\n- 121 }\n- 122\n- 123protected:\n-124 const RootBasis* rootBasis_;\n-125 PrefixPath prefixPath_;\n- 126};\n- 127\n- 128\n- 129// CTAD guide for a non-SubspaceBasis root basis\n- 130template<class RB, class TP>\n-131SubspaceBasis(const RB&, const TP) -> SubspaceBasis<RB,_TP>;\n+ 117 case 2:\n+ 118 {\n+ 119 FieldVector<D,dim> globalIn = offset_;\n+ 120 scaling_.umv(in,globalIn);\n+ 121\n+ 122 preBasis_.evaluate(directions, globalIn, out, lFE_.currentKnotSpan_);\n+ 123\n+ 124 for (size_t i=0; i<out.size(); i++)\n+ 125 out[i][0] *= scaling_[directions[0]][directions[0]]*scaling_[directions\n+[1]][directions[1]];\n+ 126 break;\n+ 127 }\n+ 128 default:\n+ 129 DUNE_THROW(NotImplemented, \"B-Spline derivatives of order \" << k << \" not\n+implemented yet!\");\n+ 130 }\n+ 131 }\n 132\n- 133// CTAD guide for a SubspaceBasis root basis\n- 134template<class RootRootBasis, class InnerTP, class OuterTP>\n-135SubspaceBasis(const SubspaceBasis<RootRootBasis,_InnerTP>& rootBasis, const\n-OuterTP& prefixPath)\n- 136 -> SubspaceBasis<std::decay_t<decltype(rootBasis.rootBasis())>, Impl::\n-JoinTreePath_t<InnerTP, OuterTP>>;\n- 137\n- 138\n- 139\n- 150template<class RootBasis, class... PrefixTreeIndices>\n-151auto subspaceBasis(const RootBasis& rootBasis, const TypeTree::\n-HybridTreePath<PrefixTreeIndices...>& prefixPath)\n- 152{\n- 153 return SubspaceBasis(rootBasis, prefixPath);\n- 154}\n- 155\n- 156template<class RootBasis, class... PrefixTreeIndices>\n-157auto subspaceBasis(const RootBasis& rootBasis, const PrefixTreeIndices&...\n-prefixTreeIndices)\n- 158{\n- 159 return subspaceBasis(rootBasis, TypeTree::hybridTreePath\n-(prefixTreeIndices...));\n- 160}\n- 161\n+140 unsigned int order () const\n+ 141 {\n+ 142 return *std::max_element(preBasis_.order_.begin(), preBasis_.order_.end\n+());\n+ 143 }\n+ 144\n+147 std::size_t size() const\n+ 148 {\n+ 149 return lFE_.size();\n+ 150 }\n+ 151\n+ 152private:\n+ 153 const BSplinePreBasis<GV>& preBasis_;\n+ 154\n+ 155 const BSplineLocalFiniteElement<GV,R>& lFE_;\n+ 156\n+ 157 // Coordinates in a single knot span differ from coordinates on the B-\n+spline patch\n+ 158 // by an affine transformation. This transformation is stored in offset_\n+and scaling_.\n+ 159 FieldVector<D,dim> offset_;\n+ 160 DiagonalMatrix<D,dim> scaling_;\n+ 161};\n 162\n- 163\n- 164} // end namespace Functions\n- 165} // end namespace Dune\n- 166\n- 167\n- 168\n- 169#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_DEFAULTGLOBALBASIS_HH\n-type_traits.hh\n-subspacelocalview.hh\n+ 176template<int dim>\n+177class BSplineLocalCoefficients\n+ 178{\n+ 179 // Return i as a d-digit number in the (k+1)-nary system\n+ 180 std::array<unsigned int,dim> multiindex (unsigned int i) const\n+ 181 {\n+ 182 std::array<unsigned int,dim> alpha;\n+ 183 for (int j=0; j<dim; j++)\n+ 184 {\n+ 185 alpha[j] = i % sizes_[j];\n+ 186 i = i/sizes_[j];\n+ 187 }\n+ 188 return alpha;\n+ 189 }\n+ 190\n+ 192 void setup1d(std::vector<unsigned int>& subEntity)\n+ 193 {\n+ 194 if (sizes_[0]==1)\n+ 195 {\n+ 196 subEntity[0] = 0;\n+ 197 return;\n+ 198 }\n+ 199\n+ 200 /* edge and vertex numbering\n+ 201 0----0----1\n+ 202 */\n+ 203 unsigned lastIndex=0;\n+ 204 subEntity[lastIndex++] = 0; // corner 0\n+ 205 for (unsigned i = 0; i < sizes_[0] - 2; ++i)\n+ 206 subEntity[lastIndex++] = 0; // inner dofs of element (0)\n+ 207\n+ 208 subEntity[lastIndex++] = 1; // corner 1\n+ 209\n+ 210 assert(size()==lastIndex);\n+ 211 }\n+ 212\n+ 213 void setup2d(std::vector<unsigned int>& subEntity)\n+ 214 {\n+ 215 unsigned lastIndex=0;\n+ 216\n+ 217 // LocalKey: entity number , entity codim, dof indices within each entity\n+ 218 /* edge and vertex numbering\n+ 219 2----3----3\n+ 220 | |\n+ 221 | |\n+ 222 0 1\n+ 223 | |\n+ 224 | |\n+ 225 0----2----1\n+ 226 */\n+ 227\n+ 228 // lower edge (2)\n+ 229 subEntity[lastIndex++] = 0; // corner 0\n+ 230 for (unsigned i = 0; i < sizes_[0]-2; ++i)\n+ 231 subEntity[lastIndex++] = 2; // inner dofs of lower edge (2)\n+ 232\n+ 233 subEntity[lastIndex++] = 1; // corner 1\n+ 234\n+ 235 // iterate from bottom to top over inner edge dofs\n+ 236 for (unsigned e = 0; e < sizes_[1]-2; ++e)\n+ 237 {\n+ 238 subEntity[lastIndex++] = 0; // left edge (0)\n+ 239 for (unsigned i = 0; i < sizes_[0]-2; ++i)\n+ 240 subEntity[lastIndex++] = 0; // face dofs\n+ 241 subEntity[lastIndex++] = 1; // right edge (1)\n+ 242 }\n+ 243\n+ 244 // upper edge (3)\n+ 245 subEntity[lastIndex++] = 2; // corner 2\n+ 246 for (unsigned i = 0; i < sizes_[0]-2; ++i)\n+ 247 subEntity[lastIndex++] = 3; // inner dofs of upper edge (3)\n+ 248\n+ 249 subEntity[lastIndex++] = 3; // corner 3\n+ 250\n+ 251 assert(size()==lastIndex);\n+ 252 }\n+ 253\n+ 254\n+ 255public:\n+256 void init(const std::array<unsigned,dim>& sizes)\n+ 257 {\n+ 258 sizes_ = sizes;\n+ 259\n+ 260 li_.resize(size());\n+ 261\n+ 262 // Set up array of codimension-per-dof-number\n+ 263 std::vector<unsigned int> codim(li_.size());\n+ 264\n+ 265 for (std::size_t i=0; i<codim.size(); i++)\n+ 266 {\n+ 267 codim[i] = 0;\n+ 268 // Codimension gets increased by 1 for each coordinate direction\n+ 269 // where dof is on boundary\n+ 270 std::array<unsigned int,dim> mIdx = multiindex(i);\n+ 271 for (int j=0; j<dim; j++)\n+ 272 if (mIdx[j]==0 or mIdx[j]==sizes[j]-1)\n+ 273 codim[i]++;\n+ 274 }\n+ 275\n+ 276 // Set up index vector (the index of the dof in the set of dofs of a given\n+subentity)\n+ 277 // Algorithm: the 'index' has the same ordering as the dof number 'i'.\n+ 278 // To make it consecutive we interpret 'i' in the (k+1)-adic system, omit\n+all digits\n+ 279 // that correspond to axes where the dof is on the element boundary, and\n+transform the\n+ 280 // rest to the (k-1)-adic system.\n+ 281 std::vector<unsigned int> index(size());\n+ 282\n+ 283 for (std::size_t i=0; i<index.size(); i++)\n+ 284 {\n+ 285 index[i] = 0;\n+ 286\n+ 287 std::array<unsigned int,dim> mIdx = multiindex(i);\n+ 288\n+ 289 for (int j=dim-1; j>=0; j--)\n+ 290 if (mIdx[j]>0 and mIdx[j]<sizes[j]-1)\n+ 291 index[i] = (sizes[j]-1)*index[i] + (mIdx[j]-1);\n+ 292 }\n+ 293\n+ 294 // Set up entity and dof numbers for each (supported) dimension separately\n+ 295 std::vector<unsigned int> subEntity(li_.size());\n+ 296\n+ 297 if (subEntity.size() > 0)\n+ 298 {\n+ 299 if (dim==1) {\n+ 300\n+ 301 setup1d(subEntity);\n+ 302\n+ 303 } else if (dim==2 and sizes_[0]>1 and sizes_[1]>1) {\n+ 304\n+ 305 setup2d(subEntity);\n+ 306\n+ 307 }\n+ 308 }\n+ 309\n+ 310 for (size_t i=0; i<li_.size(); i++)\n+ 311 li_[i] = LocalKey(subEntity[i], codim[i], index[i]);\n+ 312 }\n+ 313\n+315 std::size_t size () const\n+ 316 {\n+ 317 return std::accumulate(sizes_.begin(), sizes_.end(), 1, std::\n+multiplies<unsigned int>());\n+ 318 }\n+ 319\n+321 const LocalKey& localKey (std::size_t i) const\n+ 322 {\n+ 323 return li_[i];\n+ 324 }\n+ 325\n+ 326private:\n+ 327\n+ 328 // Number of shape functions on this element per coordinate direction\n+ 329 std::array<unsigned, dim> sizes_;\n+ 330\n+ 331 std::vector<LocalKey> li_;\n+ 332};\n+ 333\n+ 338template<int dim, class LB>\n+339class BSplineLocalInterpolation\n+ 340{\n+ 341public:\n+ 343 template<typename F, typename C>\n+344 void interpolate (const F& f, std::vector<C>& out) const\n+ 345 {\n+ 346 DUNE_THROW(NotImplemented, \"BSplineLocalInterpolation::interpolate\");\n+ 347 }\n+ 348\n+ 349};\n+ 350\n+ 360template<class GV, class R>\n+361class BSplineLocalFiniteElement\n+ 362{\n+363 typedef typename GV::ctype D;\n+ 364 enum {dim = GV::dimension};\n+ 365 friend class BSplineLocalBasis<GV,R>;\n+ 366public:\n+ 367\n+ 370 typedef LocalFiniteElementTraits<BSplineLocalBasis<GV,R>,\n+ 371 BSplineLocalCoefficients<dim>,\n+372 BSplineLocalInterpolation<dim,BSplineLocalBasis<GV,R> > > Traits;\n+ 373\n+376 BSplineLocalFiniteElement(const BSplinePreBasis<GV>& preBasis)\n+ 377 : preBasis_(preBasis),\n+ 378 localBasis_(preBasis,*this)\n+ 379 {}\n+ 380\n+383 BSplineLocalFiniteElement(const BSplineLocalFiniteElement& other)\n+ 384 : preBasis_(other.preBasis_),\n+ 385 localBasis_(preBasis_,*this)\n+ 386 {}\n+ 387\n+394 void bind(const std::array<unsigned,dim>& elementIdx)\n+ 395 {\n+ 396 /* \\todo In the long run we need to precompute a table for this */\n+ 397 for (size_t i=0; i<elementIdx.size(); i++)\n+ 398 {\n+ 399 currentKnotSpan_[i] = 0;\n+ 400\n+ 401 // Skip over degenerate knot spans\n+ 402 while (preBasis_.knotVectors_[i][currentKnotSpan_[i]+1] <\n+preBasis_.knotVectors_[i][currentKnotSpan_[i]]+1e-8)\n+ 403 currentKnotSpan_[i]++;\n+ 404\n+ 405 for (size_t j=0; j<elementIdx[i]; j++)\n+ 406 {\n+ 407 currentKnotSpan_[i]++;\n+ 408\n+ 409 // Skip over degenerate knot spans\n+ 410 while (preBasis_.knotVectors_[i][currentKnotSpan_[i]+1] <\n+preBasis_.knotVectors_[i][currentKnotSpan_[i]]+1e-8)\n+ 411 currentKnotSpan_[i]++;\n+ 412 }\n+ 413\n+ 414 // Compute the geometric transformation from knotspan-local to global\n+coordinates\n+ 415 localBasis_.offset_[i] = preBasis_.knotVectors_[i][currentKnotSpan_[i]];\n+ 416 localBasis_.scaling_[i][i] = preBasis_.knotVectors_[i][currentKnotSpan_\n+[i]+1] - preBasis_.knotVectors_[i][currentKnotSpan_[i]];\n+ 417 }\n+ 418\n+ 419 // Set up the LocalCoefficients object\n+ 420 std::array<unsigned int, dim> sizes;\n+ 421 for (size_t i=0; i<dim; i++)\n+ 422 sizes[i] = size(i);\n+ 423 localCoefficients_.init(sizes);\n+ 424 }\n+ 425\n+427 const BSplineLocalBasis<GV,R>& localBasis() const\n+ 428 {\n+ 429 return localBasis_;\n+ 430 }\n+ 431\n+433 const BSplineLocalCoefficients<dim>& localCoefficients() const\n+ 434 {\n+ 435 return localCoefficients_;\n+ 436 }\n+ 437\n+439 const BSplineLocalInterpolation<dim,BSplineLocalBasis<GV,R> >&\n+localInterpolation() const\n+ 440 {\n+ 441 return localInterpolation_;\n+ 442 }\n+ 443\n+445 unsigned size () const\n+ 446 {\n+ 447 std::size_t r = 1;\n+ 448 for (int i=0; i<dim; i++)\n+ 449 r *= size(i);\n+ 450 return r;\n+ 451 }\n+ 452\n+455 GeometryType type () const\n+ 456 {\n+ 457 return GeometryTypes::cube(dim);\n+ 458 }\n+ 459\n+ 460//private:\n+ 461\n+463 unsigned int size(int i) const\n+ 464 {\n+ 465 const auto& order = preBasis_.order_;\n+ 466 unsigned int r = order[i]+1; // The 'normal' value\n+ 467 if (currentKnotSpan_[i]<order[i]) // Less near the left end of the knot\n+vector\n+ 468 r -= (order[i] - currentKnotSpan_[i]);\n+ 469 if ( order[i] > (preBasis_.knotVectors_[i].size() - currentKnotSpan_[i] -\n+2) )\n+ 470 r -= order[i] - (preBasis_.knotVectors_[i].size() - currentKnotSpan_[i] -\n+2);\n+ 471 return r;\n+ 472 }\n+ 473\n+474 const BSplinePreBasis<GV>& preBasis_;\n+ 475\n+476 BSplineLocalBasis<GV,R> localBasis_;\n+477 BSplineLocalCoefficients<dim> localCoefficients_;\n+478 BSplineLocalInterpolation<dim,BSplineLocalBasis<GV,R> >\n+localInterpolation_;\n+ 479\n+ 480 // The knot span we are bound to\n+481 std::array<unsigned,dim> currentKnotSpan_;\n+ 482};\n+ 483\n+ 484\n+ 485template<typename GV>\n+ 486class BSplineNode;\n+ 487\n+ 497template<typename GV>\n+498class BSplinePreBasis\n+ 499{\n+ 500 static const int dim = GV::dimension;\n+ 501\n+ 503 class MultiDigitCounter\n+ 504 {\n+ 505 public:\n+ 506\n+ 510 MultiDigitCounter(const std::array<unsigned int,dim>& limits)\n+ 511 : limits_(limits)\n+ 512 {\n+ 513 std::fill(counter_.begin(), counter_.end(), 0);\n+ 514 }\n+ 515\n+ 517 MultiDigitCounter& operator++()\n+ 518 {\n+ 519 for (int i=0; i<dim; i++)\n+ 520 {\n+ 521 ++counter_[i];\n+ 522\n+ 523 // no overflow?\n+ 524 if (counter_[i] < limits_[i])\n+ 525 break;\n+ 526\n+ 527 counter_[i] = 0;\n+ 528 }\n+ 529 return *this;\n+ 530 }\n+ 531\n+ 533 const unsigned int& operator[](int i) const\n+ 534 {\n+ 535 return counter_[i];\n+ 536 }\n+ 537\n+ 539 unsigned int cycle() const\n+ 540 {\n+ 541 unsigned int r = 1;\n+ 542 for (int i=0; i<dim; i++)\n+ 543 r *= limits_[i];\n+ 544 return r;\n+ 545 }\n+ 546\n+ 547 private:\n+ 548\n+ 550 const std::array<unsigned int,dim> limits_;\n+ 551\n+ 553 std::array<unsigned int,dim> counter_;\n+ 554\n+ 555 };\n+ 556\n+ 557public:\n+ 558\n+560 using GridView = GV;\n+561 using size_type = std::size_t;\n+ 562\n+563 using Node = BSplineNode<GV>;\n+ 564\n+565 static constexpr size_type maxMultiIndexSize = 1;\n+566 static constexpr size_type minMultiIndexSize = 1;\n+567 static constexpr size_type multiIndexBufferSize = 1;\n+ 568\n+ 569 // Type used for function values\n+570 using R = double;\n+ 571\n+590 BSplinePreBasis(const GridView& gridView,\n+ 591 const std::vector<double>& knotVector,\n+ 592 unsigned int order,\n+ 593 bool makeOpen = true)\n+ 594 : gridView_(gridView)\n+ 595 {\n+ 596 // \\todo Detection of duplicate knots\n+ 597 std::fill(elements_.begin(), elements_.end(), knotVector.size()-1);\n+ 598\n+ 599 // Mediocre sanity check: we don't know the number of grid elements in\n+each direction.\n+ 600 // but at least we know the total number of elements.\n+ 601 assert( std::accumulate(elements_.begin(), elements_.end(), 1, std::\n+multiplies<unsigned>()) == gridView_.size(0) );\n+ 602\n+ 603 for (int i=0; i<dim; i++)\n+ 604 {\n+ 605 // Prepend the correct number of additional knots to open the knot vector\n+ 607 if (makeOpen)\n+ 608 for (unsigned int j=0; j<order; j++)\n+ 609 knotVectors_[i].push_back(knotVector[0]);\n+ 610\n+ 611 knotVectors_[i].insert(knotVectors_[i].end(), knotVector.begin(),\n+knotVector.end());\n+ 612\n+ 613 if (makeOpen)\n+ 614 for (unsigned int j=0; j<order; j++)\n+ 615 knotVectors_[i].push_back(knotVector.back());\n+ 616 }\n+ 617\n+ 618 std::fill(order_.begin(), order_.end(), order);\n+ 619 }\n+ 620\n+642 BSplinePreBasis(const GridView& gridView,\n+ 643 const FieldVector<double,dim>& lowerLeft,\n+ 644 const FieldVector<double,dim>& upperRight,\n+ 645 const std::array<unsigned int,dim>& elements,\n+ 646 unsigned int order,\n+ 647 bool makeOpen = true)\n+ 648 : elements_(elements),\n+ 649 gridView_(gridView)\n+ 650 {\n+ 651 // Mediocre sanity check: we don't know the number of grid elements in\n+each direction.\n+ 652 // but at least we know the total number of elements.\n+ 653 assert( std::accumulate(elements_.begin(), elements_.end(), 1, std::\n+multiplies<unsigned>()) == gridView_.size(0) );\n+ 654\n+ 655 for (int i=0; i<dim; i++)\n+ 656 {\n+ 657 // Prepend the correct number of additional knots to open the knot vector\n+ 659 if (makeOpen)\n+ 660 for (unsigned int j=0; j<order; j++)\n+ 661 knotVectors_[i].push_back(lowerLeft[i]);\n+ 662\n+ 663 // Construct the actual knot vector\n+ 664 for (size_t j=0; j<elements[i]+1; j++)\n+ 665 knotVectors_[i].push_back(lowerLeft[i] + j*(upperRight[i]-lowerLeft[i]) /\n+elements[i]);\n+ 666\n+ 667 if (makeOpen)\n+ 668 for (unsigned int j=0; j<order; j++)\n+ 669 knotVectors_[i].push_back(upperRight[i]);\n+ 670 }\n+ 671\n+ 672 std::fill(order_.begin(), order_.end(), order);\n+ 673 }\n+ 674\n+676 void initializeIndices()\n+ 677 {}\n+ 678\n+680 const GridView& gridView() const\n+ 681 {\n+ 682 return gridView_;\n+ 683 }\n+ 684\n+686 void update(const GridView& gv)\n+ 687 {\n+ 688 gridView_ = gv;\n+ 689 }\n+ 690\n+694 Node makeNode() const\n+ 695 {\n+ 696 return Node{this};\n+ 697 }\n+ 698\n+ 699 // Ideally this method should be implemented as\n+ 700 //\n+ 701 // template<class SizePrefix>\n+ 702 // size_type size(const SizePrefix& prefix) const\n+ 703 //\n+ 704 // But leads to ambiguity with the other size method:\n+ 705 //\n+ 706 // unsigned int size (size_t d) const\n+ 707 //\n+ 708 // Once the latter is removed, this implementation should be changed.\n+ 709\n+ 711 template<class ST, int i>\n+712 size_type size(const Dune::ReservedVector<ST, i>& prefix) const\n+ 713 {\n+ 714 assert(prefix.size() == 0 || prefix.size() == 1);\n+ 715 return (prefix.size() == 0) ? size() : 0;\n+ 716 }\n+ 717\n+719 size_type dimension() const\n+ 720 {\n+ 721 return size();\n+ 722 }\n+ 723\n+725 size_type maxNodeSize() const\n+ 726 {\n+ 727 size_type result = 1;\n+ 728 for (int i=0; i<dim; i++)\n+ 729 result *= order_[i]+1;\n+ 730 return result;\n+ 731 }\n+ 732\n+ 734 template<typename It>\n+735 It indices(const Node& node, It it) const\n+ 736 {\n+ 737 // Local degrees of freedom are arranged in a lattice.\n+ 738 // We need the lattice dimensions to be able to compute lattice\n+coordinates from a local index\n+ 739 std::array<unsigned int, dim> localSizes;\n+ 740 for (int i=0; i<dim; i++)\n+ 741 localSizes[i] = node.finiteElement().size(i);\n+ 742 for (size_type i = 0, end = node.size() ; i < end ; ++i, ++it)\n+ 743 {\n+ 744 std::array<unsigned int,dim> localIJK = getIJK(i, localSizes);\n+ 745\n+ 746 const auto currentKnotSpan = node.finiteElement().currentKnotSpan_;\n+ 747 const auto order = order_;\n+ 748\n+ 749 std::array<unsigned int,dim> globalIJK;\n+ 750 for (int i=0; i<dim; i++)\n+ 751 globalIJK[i] = std::max((int)currentKnotSpan[i] - (int)order[i], 0) +\n+localIJK[i]; // needs to be a signed type!\n+ 752\n+ 753 // Make one global flat index from the globalIJK tuple\n+ 754 size_type globalIdx = globalIJK[dim-1];\n+ 755\n+ 756 for (int i=dim-2; i>=0; i--)\n+ 757 globalIdx = globalIdx * size(i) + globalIJK[i];\n+ 758\n+ 759 *it = {{globalIdx}};\n+ 760 }\n+ 761 return it;\n+ 762 }\n+ 763\n+765 unsigned int size () const\n+ 766 {\n+ 767 unsigned int result = 1;\n+ 768 for (size_t i=0; i<dim; i++)\n+ 769 result *= size(i);\n+ 770 return result;\n+ 771 }\n+ 772\n+774 unsigned int size (size_t d) const\n+ 775 {\n+ 776 return knotVectors_[d].size() - order_[d] - 1;\n+ 777 }\n+ 778\n+781 void evaluateFunction (const FieldVector<typename GV::ctype,dim>& in,\n+ 782 std::vector<FieldVector<R,1> >& out,\n+ 783 const std::array<unsigned,dim>& currentKnotSpan) const\n+ 784 {\n+ 785 // Evaluate\n+ 786 std::array<std::vector<R>, dim> oneDValues;\n+ 787\n+ 788 for (size_t i=0; i<dim; i++)\n+ 789 evaluateFunction(in[i], oneDValues[i], knotVectors_[i], order_[i],\n+currentKnotSpan[i]);\n+ 790\n+ 791 std::array<unsigned int, dim> limits;\n+ 792 for (int i=0; i<dim; i++)\n+ 793 limits[i] = oneDValues[i].size();\n+ 794\n+ 795 MultiDigitCounter ijkCounter(limits);\n+ 796\n+ 797 out.resize(ijkCounter.cycle());\n+ 798\n+ 799 for (size_t i=0; i<out.size(); i++, ++ijkCounter)\n+ 800 {\n+ 801 out[i] = R(1.0);\n+ 802 for (size_t j=0; j<dim; j++)\n+ 803 out[i] *= oneDValues[j][ijkCounter[j]];\n+ 804 }\n+ 805 }\n+ 806\n+812 void evaluateJacobian (const FieldVector<typename GV::ctype,dim>& in,\n+ 813 std::vector<FieldMatrix<R,1,dim> >& out,\n+ 814 const std::array<unsigned,dim>& currentKnotSpan) const\n+ 815 {\n+ 816 // How many shape functions to we have in each coordinate direction?\n+ 817 std::array<unsigned int, dim> limits;\n+ 818 for (int i=0; i<dim; i++)\n+ 819 {\n+ 820 limits[i] = order_[i]+1; // The 'standard' value away from the boundaries\n+of the knot vector\n+ 821 if (currentKnotSpan[i]<order_[i])\n+ 822 limits[i] -= (order_[i] - currentKnotSpan[i]);\n+ 823 if ( order_[i] > (knotVectors_[i].size() - currentKnotSpan[i] - 2) )\n+ 824 limits[i] -= order_[i] - (knotVectors_[i].size() - currentKnotSpan[i] -\n+2);\n+ 825 }\n+ 826\n+ 827 // The lowest knot spans that we need values from\n+ 828 std::array<unsigned int, dim> offset;\n+ 829 for (int i=0; i<dim; i++)\n+ 830 offset[i] = std::max((int)(currentKnotSpan[i] - order_[i]),0);\n+ 831\n+ 832 // Evaluate 1d function values (needed for the product rule)\n+ 833 std::array<std::vector<R>, dim> oneDValues;\n+ 834\n+ 835 // Evaluate 1d function values of one order lower (needed for the\n+derivative formula)\n+ 836 std::array<std::vector<R>, dim> lowOrderOneDValues;\n+ 837\n+ 838 std::array<DynamicMatrix<R>, dim> values;\n+ 839\n+ 840 for (size_t i=0; i<dim; i++)\n+ 841 {\n+ 842 evaluateFunctionFull(in[i], values[i], knotVectors_[i], order_[i],\n+currentKnotSpan[i]);\n+ 843 oneDValues[i].resize(knotVectors_[i].size()-order_[i]-1);\n+ 844 for (size_t j=0; j<oneDValues[i].size(); j++)\n+ 845 oneDValues[i][j] = values[i][order_[i]][j];\n+ 846\n+ 847 if (order_[i]!=0)\n+ 848 {\n+ 849 lowOrderOneDValues[i].resize(knotVectors_[i].size()-(order_[i]-1)-1);\n+ 850 for (size_t j=0; j<lowOrderOneDValues[i].size(); j++)\n+ 851 lowOrderOneDValues[i][j] = values[i][order_[i]-1][j];\n+ 852 }\n+ 853 }\n+ 854\n+ 855\n+ 856 // Evaluate 1d function derivatives\n+ 857 std::array<std::vector<R>, dim> oneDDerivatives;\n+ 858 for (size_t i=0; i<dim; i++)\n+ 859 {\n+ 860 oneDDerivatives[i].resize(limits[i]);\n+ 861\n+ 862 if (order_[i]==0) // order-zero functions are piecewise constant, hence\n+all derivatives are zero\n+ 863 std::fill(oneDDerivatives[i].begin(), oneDDerivatives[i].end(), R(0.0));\n+ 864 else\n+ 865 {\n+ 866 for (size_t j=offset[i]; j<offset[i]+limits[i]; j++)\n+ 867 {\n+ 868 R derivativeAddend1 = lowOrderOneDValues[i][j] / (knotVectors_[i][j+order_\n+[i]]-knotVectors_[i][j]);\n+ 869 R derivativeAddend2 = lowOrderOneDValues[i][j+1] / (knotVectors_[i]\n+[j+order_[i]+1]-knotVectors_[i][j+1]);\n+ 870 // The two previous terms may evaluate as 0/0. This is to be interpreted\n+as 0.\n+ 871 if (std::isnan(derivativeAddend1))\n+ 872 derivativeAddend1 = 0;\n+ 873 if (std::isnan(derivativeAddend2))\n+ 874 derivativeAddend2 = 0;\n+ 875 oneDDerivatives[i][j-offset[i]] = order_[i] * ( derivativeAddend1 -\n+derivativeAddend2 );\n+ 876 }\n+ 877 }\n+ 878 }\n+ 879\n+ 880 // Working towards computing only the parts that we really need:\n+ 881 // Let's copy them out into a separate array\n+ 882 std::array<std::vector<R>, dim> oneDValuesShort;\n+ 883\n+ 884 for (int i=0; i<dim; i++)\n+ 885 {\n+ 886 oneDValuesShort[i].resize(limits[i]);\n+ 887\n+ 888 for (size_t j=0; j<limits[i]; j++)\n+ 889 oneDValuesShort[i][j] = oneDValues[i][offset[i] + j];\n+ 890 }\n+ 891\n+ 892\n+ 893\n+ 894 // Set up a multi-index to go from consecutive indices to integer\n+coordinates\n+ 895 MultiDigitCounter ijkCounter(limits);\n+ 896\n+ 897 out.resize(ijkCounter.cycle());\n+ 898\n+ 899 // Complete Jacobian is given by the product rule\n+ 900 for (size_t i=0; i<out.size(); i++, ++ijkCounter)\n+ 901 for (int j=0; j<dim; j++)\n+ 902 {\n+ 903 out[i][0][j] = 1.0;\n+ 904 for (int k=0; k<dim; k++)\n+ 905 out[i][0][j] *= (j==k) ? oneDDerivatives[k][ijkCounter[k]]\n+ 906 : oneDValuesShort[k][ijkCounter[k]];\n+ 907 }\n+ 908\n+ 909 }\n+ 910\n+ 912 template <size_type k>\n+913 void evaluate(const typename std::array<int,k>& directions,\n+ 914 const FieldVector<typename GV::ctype,dim>& in,\n+ 915 std::vector<FieldVector<R,1> >& out,\n+ 916 const std::array<unsigned,dim>& currentKnotSpan) const\n+ 917 {\n+ 918 if (k != 1 && k != 2)\n+ 919 DUNE_THROW(RangeError, \"Differentiation order greater than 2 is not\n+supported!\");\n+ 920\n+ 921 // Evaluate 1d function values (needed for the product rule)\n+ 922 std::array<std::vector<R>, dim> oneDValues;\n+ 923 std::array<std::vector<R>, dim> oneDDerivatives;\n+ 924 std::array<std::vector<R>, dim> oneDSecondDerivatives;\n+ 925\n+ 926 // Evaluate 1d function derivatives\n+ 927 if (k==1)\n+ 928 for (size_t i=0; i<dim; i++)\n+ 929 evaluateAll(in[i], oneDValues[i], true, oneDDerivatives[i], false,\n+oneDSecondDerivatives[i], knotVectors_[i], order_[i], currentKnotSpan[i]);\n+ 930 else\n+ 931 for (size_t i=0; i<dim; i++)\n+ 932 evaluateAll(in[i], oneDValues[i], true, oneDDerivatives[i], true,\n+oneDSecondDerivatives[i], knotVectors_[i], order_[i], currentKnotSpan[i]);\n+ 933\n+ 934 // The lowest knot spans that we need values from\n+ 935 std::array<unsigned int, dim> offset;\n+ 936 for (int i=0; i<dim; i++)\n+ 937 offset[i] = std::max((int)(currentKnotSpan[i] - order_[i]),0);\n+ 938\n+ 939 // Set up a multi-index to go from consecutive indices to integer\n+coordinates\n+ 940 std::array<unsigned int, dim> limits;\n+ 941 for (int i=0; i<dim; i++)\n+ 942 {\n+ 943 // In a proper implementation, the following line would do\n+ 944 //limits[i] = oneDValues[i].size();\n+ 945 limits[i] = order_[i]+1; // The 'standard' value away from the boundaries\n+of the knot vector\n+ 946 if (currentKnotSpan[i]<order_[i])\n+ 947 limits[i] -= (order_[i] - currentKnotSpan[i]);\n+ 948 if ( order_[i] > (knotVectors_[i].size() - currentKnotSpan[i] - 2) )\n+ 949 limits[i] -= order_[i] - (knotVectors_[i].size() - currentKnotSpan[i] -\n+2);\n+ 950 }\n+ 951\n+ 952 // Working towards computing only the parts that we really need:\n+ 953 // Let's copy them out into a separate array\n+ 954 std::array<std::vector<R>, dim> oneDValuesShort;\n+ 955\n+ 956 for (int i=0; i<dim; i++)\n+ 957 {\n+ 958 oneDValuesShort[i].resize(limits[i]);\n+ 959\n+ 960 for (size_t j=0; j<limits[i]; j++)\n+ 961 oneDValuesShort[i][j] = oneDValues[i][offset[i] + j];\n+ 962 }\n+ 963\n+ 964\n+ 965 MultiDigitCounter ijkCounter(limits);\n+ 966\n+ 967 out.resize(ijkCounter.cycle());\n+ 968\n+ 969 if (k == 1)\n+ 970 {\n+ 971 // Complete Jacobian is given by the product rule\n+ 972 for (size_t i=0; i<out.size(); i++, ++ijkCounter)\n+ 973 {\n+ 974 out[i][0] = 1.0;\n+ 975 for (int l=0; l<dim; l++)\n+ 976 out[i][0] *= (directions[0]==l) ? oneDDerivatives[l][ijkCounter[l]]\n+ 977 : oneDValuesShort[l][ijkCounter[l]];\n+ 978 }\n+ 979 }\n+ 980\n+ 981 if (k == 2)\n+ 982 {\n+ 983 // Complete derivation by deriving the tensor product\n+ 984 for (size_t i=0; i<out.size(); i++, ++ijkCounter)\n+ 985 {\n+ 986 out[i][0] = 1.0;\n+ 987 for (int j=0; j<dim; j++)\n+ 988 {\n+ 989 if (directions[0] != directions[1]) //derivation in two different\n+variables\n+ 990 if (directions[0] == j || directions[1] == j) //the spline has to be\n+derived (once) in this direction\n+ 991 out[i][0] *= oneDDerivatives[j][ijkCounter[j]];\n+ 992 else //no derivation in this direction\n+ 993 out[i][0] *= oneDValuesShort[j][ijkCounter[j]];\n+ 994 else //spline is derived two times in the same direction\n+ 995 if (directions[0] == j) //the spline is derived two times in this\n+direction\n+ 996 out[i][0] *= oneDSecondDerivatives[j][ijkCounter[j]];\n+ 997 else //no derivation in this direction\n+ 998 out[i][0] *= oneDValuesShort[j][ijkCounter[j]];\n+ 999 }\n+ 1000 }\n+ 1001 }\n+ 1002 }\n+ 1003\n+ 1004\n+1009 static std::array<unsigned int,dim> getIJK(typename GridView::IndexSet::\n+IndexType idx, std::array<unsigned int,dim> elements)\n+ 1010 {\n+ 1011 std::array<unsigned,dim> result;\n+ 1012 for (int i=0; i<dim; i++)\n+ 1013 {\n+ 1014 result[i] = idx%elements[i];\n+ 1015 idx /= elements[i];\n+ 1016 }\n+ 1017 return result;\n+ 1018 }\n+ 1019\n+1028 static void evaluateFunction (const typename GV::ctype& in, std::\n+vector<R>& out,\n+ 1029 const std::vector<R>& knotVector,\n+ 1030 unsigned int order,\n+ 1031 unsigned int currentKnotSpan)\n+ 1032 {\n+ 1033 std::size_t outSize = order+1; // The 'standard' value away from the\n+boundaries of the knot vector\n+ 1034 if (currentKnotSpan<order) // Less near the left end of the knot vector\n+ 1035 outSize -= (order - currentKnotSpan);\n+ 1036 if ( order > (knotVector.size() - currentKnotSpan - 2) )\n+ 1037 outSize -= order - (knotVector.size() - currentKnotSpan - 2);\n+ 1038 out.resize(outSize);\n+ 1039\n+ 1040 // It's not really a matrix that is needed here, a plain 2d array would\n+do\n+ 1041 DynamicMatrix<R> N(order+1, knotVector.size()-1);\n+ 1042\n+ 1043 // The text books on splines use the following geometric condition here\n+to fill the array N\n+ 1044 // (see for example Cottrell, Hughes, Bazilevs, Formula (2.1). However,\n+this condition\n+ 1045 // only works if splines are never evaluated exactly on the knots.\n+ 1046 //\n+ 1047 // for (size_t i=0; i<knotVector.size()-1; i++)\n+ 1048 // N[0][i] = (knotVector[i] <= in) and (in < knotVector[i+1]);\n+ 1049 for (size_t i=0; i<knotVector.size()-1; i++)\n+ 1050 N[0][i] = (i == currentKnotSpan);\n+ 1051\n+ 1052 for (size_t r=1; r<=order; r++)\n+ 1053 for (size_t i=0; i<knotVector.size()-r-1; i++)\n+ 1054 {\n+ 1055 R factor1 = ((knotVector[i+r] - knotVector[i]) > 1e-10)\n+ 1056 ? (in - knotVector[i]) / (knotVector[i+r] - knotVector[i])\n+ 1057 : 0;\n+ 1058 R factor2 = ((knotVector[i+r+1] - knotVector[i+1]) > 1e-10)\n+ 1059 ? (knotVector[i+r+1] - in) / (knotVector[i+r+1] - knotVector[i+1])\n+ 1060 : 0;\n+ 1061 N[r][i] = factor1 * N[r-1][i] + factor2 * N[r-1][i+1];\n+ 1062 }\n+ 1063\n+ 1068 for (size_t i=0; i<out.size(); i++) {\n+ 1069 out[i] = N[order][std::max((int)(currentKnotSpan - order),0) + i];\n+ 1070 }\n+ 1071 }\n+ 1072\n+1085 static void evaluateFunctionFull(const typename GV::ctype& in,\n+ 1086 DynamicMatrix<R>& out,\n+ 1087 const std::vector<R>& knotVector,\n+ 1088 unsigned int order,\n+ 1089 unsigned int currentKnotSpan)\n+ 1090 {\n+ 1091 // It's not really a matrix that is needed here, a plain 2d array would\n+do\n+ 1092 DynamicMatrix<R>& N = out;\n+ 1093\n+ 1094 N.resize(order+1, knotVector.size()-1);\n+ 1095\n+ 1096 // The text books on splines use the following geometric condition here\n+to fill the array N\n+ 1097 // (see for example Cottrell, Hughes, Bazilevs, Formula (2.1). However,\n+this condition\n+ 1098 // only works if splines are never evaluated exactly on the knots.\n+ 1099 //\n+ 1100 // for (size_t i=0; i<knotVector.size()-1; i++)\n+ 1101 // N[0][i] = (knotVector[i] <= in) and (in < knotVector[i+1]);\n+ 1102 for (size_t i=0; i<knotVector.size()-1; i++)\n+ 1103 N[0][i] = (i == currentKnotSpan);\n+ 1104\n+ 1105 for (size_t r=1; r<=order; r++)\n+ 1106 for (size_t i=0; i<knotVector.size()-r-1; i++)\n+ 1107 {\n+ 1108 R factor1 = ((knotVector[i+r] - knotVector[i]) > 1e-10)\n+ 1109 ? (in - knotVector[i]) / (knotVector[i+r] - knotVector[i])\n+ 1110 : 0;\n+ 1111 R factor2 = ((knotVector[i+r+1] - knotVector[i+1]) > 1e-10)\n+ 1112 ? (knotVector[i+r+1] - in) / (knotVector[i+r+1] - knotVector[i+1])\n+ 1113 : 0;\n+ 1114 N[r][i] = factor1 * N[r-1][i] + factor2 * N[r-1][i+1];\n+ 1115 }\n+ 1116 }\n+ 1117\n+ 1118\n+1128 static void evaluateAll(const typename GV::ctype& in,\n+ 1129 std::vector<R>& out,\n+ 1130 bool evaluateJacobian, std::vector<R>& outJac,\n+ 1131 bool evaluateHessian, std::vector<R>& outHess,\n+ 1132 const std::vector<R>& knotVector,\n+ 1133 unsigned int order,\n+ 1134 unsigned int currentKnotSpan)\n+ 1135 {\n+ 1136 // How many shape functions to we have in each coordinate direction?\n+ 1137 unsigned int limit;\n+ 1138 limit = order+1; // The 'standard' value away from the boundaries of the\n+knot vector\n+ 1139 if (currentKnotSpan<order)\n+ 1140 limit -= (order - currentKnotSpan);\n+ 1141 if ( order > (knotVector.size() - currentKnotSpan - 2) )\n+ 1142 limit -= order - (knotVector.size() - currentKnotSpan - 2);\n+ 1143\n+ 1144 // The lowest knot spans that we need values from\n+ 1145 unsigned int offset;\n+ 1146 offset = std::max((int)(currentKnotSpan - order),0);\n+ 1147\n+ 1148 // Evaluate 1d function values (needed for the product rule)\n+ 1149 DynamicMatrix<R> values;\n+ 1150\n+ 1151 evaluateFunctionFull(in, values, knotVector, order, currentKnotSpan);\n+ 1152\n+ 1153 out.resize(knotVector.size()-order-1);\n+ 1154 for (size_t j=0; j<out.size(); j++)\n+ 1155 out[j] = values[order][j];\n+ 1156\n+ 1157 // Evaluate 1d function values of one order lower (needed for the\n+derivative formula)\n+ 1158 std::vector<R> lowOrderOneDValues;\n+ 1159\n+ 1160 if (order!=0)\n+ 1161 {\n+ 1162 lowOrderOneDValues.resize(knotVector.size()-(order-1)-1);\n+ 1163 for (size_t j=0; j<lowOrderOneDValues.size(); j++)\n+ 1164 lowOrderOneDValues[j] = values[order-1][j];\n+ 1165 }\n+ 1166\n+ 1167 // Evaluate 1d function values of two order lower (needed for the\n+(second) derivative formula)\n+ 1168 std::vector<R> lowOrderTwoDValues;\n+ 1169\n+ 1170 if (order>1 && evaluateHessian)\n+ 1171 {\n+ 1172 lowOrderTwoDValues.resize(knotVector.size()-(order-2)-1);\n+ 1173 for (size_t j=0; j<lowOrderTwoDValues.size(); j++)\n+ 1174 lowOrderTwoDValues[j] = values[order-2][j];\n+ 1175 }\n+ 1176\n+ 1177 // Evaluate 1d function derivatives\n+ 1178 if (evaluateJacobian)\n+ 1179 {\n+ 1180 outJac.resize(limit);\n+ 1181\n+ 1182 if (order==0) // order-zero functions are piecewise constant, hence all\n+derivatives are zero\n+ 1183 std::fill(outJac.begin(), outJac.end(), R(0.0));\n+ 1184 else\n+ 1185 {\n+ 1186 for (size_t j=offset; j<offset+limit; j++)\n+ 1187 {\n+ 1188 R derivativeAddend1 = lowOrderOneDValues[j] / (knotVector[j+order]-\n+knotVector[j]);\n+ 1189 R derivativeAddend2 = lowOrderOneDValues[j+1] / (knotVector[j+order+1]-\n+knotVector[j+1]);\n+ 1190 // The two previous terms may evaluate as 0/0. This is to be interpreted\n+as 0.\n+ 1191 if (std::isnan(derivativeAddend1))\n+ 1192 derivativeAddend1 = 0;\n+ 1193 if (std::isnan(derivativeAddend2))\n+ 1194 derivativeAddend2 = 0;\n+ 1195 outJac[j-offset] = order * ( derivativeAddend1 - derivativeAddend2 );\n+ 1196 }\n+ 1197 }\n+ 1198 }\n+ 1199\n+ 1200 // Evaluate 1d function second derivatives\n+ 1201 if (evaluateHessian)\n+ 1202 {\n+ 1203 outHess.resize(limit);\n+ 1204\n+ 1205 if (order<2) // order-zero functions are piecewise constant, hence all\n+derivatives are zero\n+ 1206 std::fill(outHess.begin(), outHess.end(), R(0.0));\n+ 1207 else\n+ 1208 {\n+ 1209 for (size_t j=offset; j<offset+limit; j++)\n+ 1210 {\n+ 1211 assert(j+2 < lowOrderTwoDValues.size());\n+ 1212 R derivativeAddend1 = lowOrderTwoDValues[j] / (knotVector[j+order]-\n+knotVector[j]) / (knotVector[j+order-1]-knotVector[j]);\n+ 1213 R derivativeAddend2 = lowOrderTwoDValues[j+1] / (knotVector[j+order]-\n+knotVector[j]) / (knotVector[j+order]-knotVector[j+1]);\n+ 1214 R derivativeAddend3 = lowOrderTwoDValues[j+1] / (knotVector[j+order+1]-\n+knotVector[j+1]) / (knotVector[j+order]-knotVector[j+1]);\n+ 1215 R derivativeAddend4 = lowOrderTwoDValues[j+2] / (knotVector[j+order+1]-\n+knotVector[j+1]) / (knotVector[j+1+order]-knotVector[j+2]);\n+ 1216 // The two previous terms may evaluate as 0/0. This is to be interpreted\n+as 0.\n+ 1217\n+ 1218 if (std::isnan(derivativeAddend1))\n+ 1219 derivativeAddend1 = 0;\n+ 1220 if (std::isnan(derivativeAddend2))\n+ 1221 derivativeAddend2 = 0;\n+ 1222 if (std::isnan(derivativeAddend3))\n+ 1223 derivativeAddend3 = 0;\n+ 1224 if (std::isnan(derivativeAddend4))\n+ 1225 derivativeAddend4 = 0;\n+ 1226 outHess[j-offset] = order * (order-1) * ( derivativeAddend1 -\n+derivativeAddend2 -derivativeAddend3 + derivativeAddend4 );\n+ 1227 }\n+ 1228 }\n+ 1229 }\n+ 1230 }\n+ 1231\n+ 1232\n+1234 std::array<unsigned int, dim> order_;\n+ 1235\n+1237 std::array<std::vector<double>, dim> knotVectors_;\n+ 1238\n+1240 std::array<unsigned,dim> elements_;\n+ 1241\n+1242 GridView gridView_;\n+ 1243};\n+ 1244\n+ 1245\n+ 1246\n+ 1247template<typename GV>\n+1248class BSplineNode :\n+ 1249 public LeafBasisNode\n+ 1250{\n+ 1251 static const int dim = GV::dimension;\n+ 1252\n+ 1253public:\n+ 1254\n+1255 using size_type = std::size_t;\n+1256 using Element = typename GV::template Codim<0>::Entity;\n+1257 using FiniteElement = BSplineLocalFiniteElement<GV,double>;\n+ 1258\n+1259 BSplineNode(const BSplinePreBasis<GV>* preBasis) :\n+ 1260 preBasis_(preBasis),\n+ 1261 finiteElement_(*preBasis)\n+ 1262 {}\n+ 1263\n+1265 const Element& element() const\n+ 1266 {\n+ 1267 return element_;\n+ 1268 }\n+ 1269\n+1274 const FiniteElement& finiteElement() const\n+ 1275 {\n+ 1276 return finiteElement_;\n+ 1277 }\n+ 1278\n+1280 void bind(const Element& e)\n+ 1281 {\n+ 1282 element_ = e;\n+ 1283 auto elementIndex = preBasis_->gridView().indexSet().index(e);\n+ 1284 finiteElement_.bind(preBasis_->getIJK(elementIndex,preBasis_-\n+>elements_));\n+ 1285 this->setSize(finiteElement_.size());\n+ 1286 }\n+ 1287\n+ 1288protected:\n+ 1289\n+1290 const BSplinePreBasis<GV>* preBasis_;\n+ 1291\n+1292 FiniteElement finiteElement_;\n+1293 Element element_;\n+ 1294};\n+ 1295\n+ 1296\n+ 1297\n+ 1298namespace BasisFactory {\n+ 1299\n+1306inline auto bSpline(const std::vector<double>& knotVector,\n+ 1307 unsigned int order,\n+ 1308 bool makeOpen = true)\n+ 1309{\n+ 1310 return [&knotVector, order, makeOpen](const auto& gridView) {\n+ 1311 return BSplinePreBasis<std::decay_t<decltype(gridView)>>(gridView,\n+knotVector, order, makeOpen);\n+ 1312 };\n+ 1313}\n+ 1314\n+ 1315} // end namespace BasisFactory\n+ 1316\n+ 1317/\n+/ *****************************************************************************\n+ 1318// This is the actual global basis implementation based on the reusable\n+parts.\n+ 1319/\n+/ *****************************************************************************\n+ 1320\n+ 1327template<typename GV>\n+1328using BSplineBasis = DefaultGlobalBasis<BSplinePreBasis<GV> >;\n+ 1329\n+ 1330\n+ 1331} // namespace Functions\n+ 1332\n+ 1333} // namespace Dune\n+ 1334\n+ 1335#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BSPLINEBASIS_HH\n+defaultglobalbasis.hh\n+nodes.hh\n+Dune::Functions::BasisFactory::bSpline\n+auto bSpline(const std::vector< double > &knotVector, unsigned int order, bool\n+makeOpen=true)\n+Create a pre-basis factory that can create a B-spline pre-basis.\n+Definition: bsplinebasis.hh:1306\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::SubspaceBasis\n-SubspaceBasis(const RB &, const TP) -> SubspaceBasis< RB, TP >\n-Dune::Functions::subspaceBasis\n-auto subspaceBasis(const RootBasis &rootBasis, const TypeTree::HybridTreePath<\n-PrefixTreeIndices... > &prefixPath)\n-Create SubspaceBasis from a root basis and a prefixPath.\n-Definition: subspacebasis.hh:151\n-Dune::Functions::SubspaceBasis\n-Definition: subspacebasis.hh:38\n-Dune::Functions::SubspaceBasis::RootLocalView\n-typename RootBasis::LocalView RootLocalView\n-Definition: subspacebasis.hh:43\n-Dune::Functions::SubspaceBasis::localView\n-LocalView localView() const\n-Return local view for basis.\n-Definition: subspacebasis.hh:108\n-Dune::Functions::SubspaceBasis::rootBasis_\n-const RootBasis * rootBasis_\n-Definition: subspacebasis.hh:124\n-Dune::Functions::SubspaceBasis::SizePrefix\n-typename RootBasis::SizePrefix SizePrefix\n-Definition: subspacebasis.hh:58\n-Dune::Functions::SubspaceBasis::PrefixPath\n-TP PrefixPath\n-Definition: subspacebasis.hh:45\n-Dune::Functions::SubspaceBasis::LocalView\n-SubspaceLocalView< RootLocalView, PrefixPath > LocalView\n-Type of the local view on the restriction of the basis to a single element.\n-Definition: subspacebasis.hh:56\n-Dune::Functions::SubspaceBasis::size\n-size_type size(const SizePrefix &prefix) const\n-Return number possible values for next position in multi index.\n-Definition: subspacebasis.hh:100\n-Dune::Functions::SubspaceBasis::GridView\n-typename RootBasis::GridView GridView\n+Dune::Functions::BSplineLocalFiniteElement\n+LocalFiniteElement in the sense of dune-localfunctions, for the B-spline basis\n+on tensor-product grid...\n+Definition: bsplinebasis.hh:362\n+Dune::Functions::BSplineLocalFiniteElement::BSplineLocalFiniteElement\n+BSplineLocalFiniteElement(const BSplineLocalFiniteElement &other)\n+Copy constructor.\n+Definition: bsplinebasis.hh:383\n+Dune::Functions::BSplineLocalFiniteElement::preBasis_\n+const BSplinePreBasis< GV > & preBasis_\n+Definition: bsplinebasis.hh:474\n+Dune::Functions::BSplineLocalFiniteElement::localInterpolation\n+const BSplineLocalInterpolation< dim, BSplineLocalBasis< GV, R > > &\n+localInterpolation() const\n+Hand out a LocalInterpolation object.\n+Definition: bsplinebasis.hh:439\n+Dune::Functions::BSplineLocalFiniteElement::Traits\n+LocalFiniteElementTraits< BSplineLocalBasis< GV, R >, BSplineLocalCoefficients<\n+dim >, BSplineLocalInterpolation< dim, BSplineLocalBasis< GV, R > > > Traits\n+Export various types related to this LocalFiniteElement.\n+Definition: bsplinebasis.hh:372\n+Dune::Functions::BSplineLocalFiniteElement::currentKnotSpan_\n+std::array< unsigned, dim > currentKnotSpan_\n+Definition: bsplinebasis.hh:481\n+Dune::Functions::BSplineLocalFiniteElement::BSplineLocalFiniteElement\n+BSplineLocalFiniteElement(const BSplinePreBasis< GV > &preBasis)\n+Constructor with a given B-spline basis.\n+Definition: bsplinebasis.hh:376\n+Dune::Functions::BSplineLocalFiniteElement::localCoefficients\n+const BSplineLocalCoefficients< dim > & localCoefficients() const\n+Hand out a LocalCoefficients object.\n+Definition: bsplinebasis.hh:433\n+Dune::Functions::BSplineLocalFiniteElement::bind\n+void bind(const std::array< unsigned, dim > &elementIdx)\n+Bind LocalFiniteElement to a specific knot span of the spline patch.\n+Definition: bsplinebasis.hh:394\n+Dune::Functions::BSplineLocalFiniteElement::localInterpolation_\n+BSplineLocalInterpolation< dim, BSplineLocalBasis< GV, R > >\n+localInterpolation_\n+Definition: bsplinebasis.hh:478\n+Dune::Functions::BSplineLocalFiniteElement::type\n+GeometryType type() const\n+Return the reference element that the local finite element is defined on (here,\n+a hypercube)\n+Definition: bsplinebasis.hh:455\n+Dune::Functions::BSplineLocalFiniteElement::size\n+unsigned size() const\n+Number of shape functions in this finite element.\n+Definition: bsplinebasis.hh:445\n+Dune::Functions::BSplineLocalFiniteElement::localCoefficients_\n+BSplineLocalCoefficients< dim > localCoefficients_\n+Definition: bsplinebasis.hh:477\n+Dune::Functions::BSplineLocalFiniteElement::size\n+unsigned int size(int i) const\n+Number of degrees of freedom for one coordinate direction.\n+Definition: bsplinebasis.hh:463\n+Dune::Functions::BSplineLocalFiniteElement::localBasis_\n+BSplineLocalBasis< GV, R > localBasis_\n+Definition: bsplinebasis.hh:476\n+Dune::Functions::BSplineLocalFiniteElement::localBasis\n+const BSplineLocalBasis< GV, R > & localBasis() const\n+Hand out a LocalBasis object.\n+Definition: bsplinebasis.hh:427\n+Dune::Functions::BSplinePreBasis\n+Pre-basis for B-spline basis.\n+Definition: bsplinebasis.hh:499\n+Dune::Functions::BSplinePreBasis::multiIndexBufferSize\n+static constexpr size_type multiIndexBufferSize\n+Definition: bsplinebasis.hh:567\n+Dune::Functions::BSplinePreBasis::elements_\n+std::array< unsigned, dim > elements_\n+Number of grid elements in the different coordinate directions.\n+Definition: bsplinebasis.hh:1240\n+Dune::Functions::BSplinePreBasis::gridView_\n+GridView gridView_\n+Definition: bsplinebasis.hh:1242\n+Dune::Functions::BSplinePreBasis::R\n+double R\n+Definition: bsplinebasis.hh:570\n+Dune::Functions::BSplinePreBasis::evaluateFunctionFull\n+static void evaluateFunctionFull(const typename GV::ctype &in, DynamicMatrix< R\n+> &out, const std::vector< R > &knotVector, unsigned int order, unsigned int\n+currentKnotSpan)\n+Evaluate all one-dimensional B-spline functions for a given coordinate\n+direction.\n+Definition: bsplinebasis.hh:1085\n+Dune::Functions::BSplinePreBasis::evaluateFunction\n+void evaluateFunction(const FieldVector< typename GV::ctype, dim > &in, std::\n+vector< FieldVector< R, 1 > > &out, const std::array< unsigned, dim >\n+¤tKnotSpan) const\n+Evaluate all B-spline basis functions at a given point.\n+Definition: bsplinebasis.hh:781\n+Dune::Functions::BSplinePreBasis::order_\n+std::array< unsigned int, dim > order_\n+Order of the B-spline for each space dimension.\n+Definition: bsplinebasis.hh:1234\n+Dune::Functions::BSplinePreBasis::dimension\n+size_type dimension() const\n+Get the total dimension of the space spanned by this basis.\n+Definition: bsplinebasis.hh:719\n+Dune::Functions::BSplinePreBasis::evaluateAll\n+static void evaluateAll(const typename GV::ctype &in, std::vector< R > &out,\n+bool evaluateJacobian, std::vector< R > &outJac, bool evaluateHessian, std::\n+vector< R > &outHess, const std::vector< R > &knotVector, unsigned int order,\n+unsigned int currentKnotSpan)\n+Evaluate the second derivatives of all one-dimensional B-spline functions for a\n+given coordinate dire...\n+Definition: bsplinebasis.hh:1128\n+Dune::Functions::BSplinePreBasis::evaluateFunction\n+static void evaluateFunction(const typename GV::ctype &in, std::vector< R >\n+&out, const std::vector< R > &knotVector, unsigned int order, unsigned int\n+currentKnotSpan)\n+Evaluate all one-dimensional B-spline functions for a given coordinate\n+direction.\n+Definition: bsplinebasis.hh:1028\n+Dune::Functions::BSplinePreBasis::size\n+unsigned int size(size_t d) const\n+Number of shape functions in one direction.\n+Definition: bsplinebasis.hh:774\n+Dune::Functions::BSplinePreBasis::GridView\n+GV GridView\n The grid view that the FE space is defined on.\n-Definition: subspacebasis.hh:48\n-Dune::Functions::SubspaceBasis::prefixPath\n-const PrefixPath & prefixPath() const\n-Definition: subspacebasis.hh:118\n-Dune::Functions::SubspaceBasis::SubspaceBasis\n-SubspaceBasis(const SubspaceBasis< RootRootBasis, InnerTP > &rootBasis, const\n-OuterTP &prefixPath)\n-Constructor from another SubspaceBasis.\n-Definition: subspacebasis.hh:73\n-Dune::Functions::SubspaceBasis::gridView\n+Definition: bsplinebasis.hh:560\n+Dune::Functions::BSplinePreBasis::indices\n+It indices(const Node &node, It it) const\n+Maps from subtree index set [0..size-1] to a globally unique multi index in\n+global basis.\n+Definition: bsplinebasis.hh:735\n+Dune::Functions::BSplinePreBasis::evaluate\n+void evaluate(const typename std::array< int, k > &directions, const\n+FieldVector< typename GV::ctype, dim > &in, std::vector< FieldVector< R, 1 > >\n+&out, const std::array< unsigned, dim > ¤tKnotSpan) const\n+Evaluate Derivatives of all B-spline basis functions.\n+Definition: bsplinebasis.hh:913\n+Dune::Functions::BSplinePreBasis::size_type\n+std::size_t size_type\n+Definition: bsplinebasis.hh:561\n+Dune::Functions::BSplinePreBasis::maxMultiIndexSize\n+static constexpr size_type maxMultiIndexSize\n+Definition: bsplinebasis.hh:565\n+Dune::Functions::BSplinePreBasis::update\n+void update(const GridView &gv)\n+Update the stored grid view, to be called if the grid has changed.\n+Definition: bsplinebasis.hh:686\n+Dune::Functions::BSplinePreBasis::initializeIndices\n+void initializeIndices()\n+Initialize the global indices.\n+Definition: bsplinebasis.hh:676\n+Dune::Functions::BSplinePreBasis::size\n+size_type size(const Dune::ReservedVector< ST, i > &prefix) const\n+Return number of possible values for next position in multi index.\n+Definition: bsplinebasis.hh:712\n+Dune::Functions::BSplinePreBasis::size\n+unsigned int size() const\n+Total number of B-spline basis functions.\n+Definition: bsplinebasis.hh:765\n+Dune::Functions::BSplinePreBasis::gridView\n const GridView & gridView() const\n Obtain the grid view that the basis is defined on.\n-Definition: subspacebasis.hh:80\n-Dune::Functions::SubspaceBasis::RootBasis\n-RB RootBasis\n-Definition: subspacebasis.hh:41\n-Dune::Functions::SubspaceBasis::prefixPath_\n-PrefixPath prefixPath_\n-Definition: subspacebasis.hh:125\n-Dune::Functions::SubspaceBasis::size\n-size_type size() const\n-Return number of possible values for next position in empty multi index.\n-Definition: subspacebasis.hh:94\n-Dune::Functions::SubspaceBasis::rootBasis\n-const RootBasis & rootBasis() const\n-Definition: subspacebasis.hh:113\n-Dune::Functions::SubspaceBasis::MultiIndex\n-typename RootBasis::MultiIndex MultiIndex\n-Type used for global numbering of the basis vectors.\n-Definition: subspacebasis.hh:51\n-Dune::Functions::SubspaceBasis::dimension\n-size_type dimension() const\n-Definition: subspacebasis.hh:88\n-Dune::Functions::SubspaceBasis::size_type\n+Definition: bsplinebasis.hh:680\n+Dune::Functions::BSplinePreBasis::getIJK\n+static std::array< unsigned int, dim > getIJK(typename GridView::IndexSet::\n+IndexType idx, std::array< unsigned int, dim > elements)\n+Compute integer element coordinates from the element index.\n+Definition: bsplinebasis.hh:1009\n+Dune::Functions::BSplinePreBasis::makeNode\n+Node makeNode() const\n+Create tree node.\n+Definition: bsplinebasis.hh:694\n+Dune::Functions::BSplinePreBasis::BSplinePreBasis\n+BSplinePreBasis(const GridView &gridView, const std::vector< double >\n+&knotVector, unsigned int order, bool makeOpen=true)\n+Construct a B-spline basis for a given grid view and set of knot vectors.\n+Definition: bsplinebasis.hh:590\n+Dune::Functions::BSplinePreBasis::evaluateJacobian\n+void evaluateJacobian(const FieldVector< typename GV::ctype, dim > &in, std::\n+vector< FieldMatrix< R, 1, dim > > &out, const std::array< unsigned, dim >\n+¤tKnotSpan) const\n+Evaluate Jacobian of all B-spline basis functions.\n+Definition: bsplinebasis.hh:812\n+Dune::Functions::BSplinePreBasis::minMultiIndexSize\n+static constexpr size_type minMultiIndexSize\n+Definition: bsplinebasis.hh:566\n+Dune::Functions::BSplinePreBasis::knotVectors_\n+std::array< std::vector< double >, dim > knotVectors_\n+The knot vectors, one for each space dimension.\n+Definition: bsplinebasis.hh:1237\n+Dune::Functions::BSplinePreBasis::maxNodeSize\n+size_type maxNodeSize() const\n+Get the maximal number of DOFs associated to node for any element.\n+Definition: bsplinebasis.hh:725\n+Dune::Functions::BSplinePreBasis::BSplinePreBasis\n+BSplinePreBasis(const GridView &gridView, const FieldVector< double, dim >\n+&lowerLeft, const FieldVector< double, dim > &upperRight, const std::array<\n+unsigned int, dim > &elements, unsigned int order, bool makeOpen=true)\n+Construct a B-spline basis for a given grid view with uniform knot vectors.\n+Definition: bsplinebasis.hh:642\n+Dune::Functions::BSplineLocalBasis\n+LocalBasis class in the sense of dune-localfunctions, presenting the\n+restriction of a B-spline patch ...\n+Definition: bsplinebasis.hh:46\n+Dune::Functions::BSplineLocalBasis::Traits\n+LocalBasisTraits< D, dim, FieldVector< D, dim >, R, 1, FieldVector< R, 1 >,\n+FieldMatrix< R, 1, dim > > Traits\n+export type traits for function signature\n+Definition: bsplinebasis.hh:55\n+Dune::Functions::BSplineLocalBasis::order\n+unsigned int order() const\n+Polynomial order of the shape functions.\n+Definition: bsplinebasis.hh:140\n+Dune::Functions::BSplineLocalBasis::size\n+std::size_t size() const\n+Return the number of basis functions on the current knot span.\n+Definition: bsplinebasis.hh:147\n+Dune::Functions::BSplineLocalBasis::evaluate\n+void evaluate(const typename std::array< int, k > &directions, const typename\n+Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const\n+Evaluate all shape functions and derivatives of any order.\n+Definition: bsplinebasis.hh:97\n+Dune::Functions::BSplineLocalBasis::evaluateFunction\n+void evaluateFunction(const FieldVector< D, dim > &in, std::vector<\n+FieldVector< R, 1 > > &out) const\n+Evaluate all shape functions.\n+Definition: bsplinebasis.hh:70\n+Dune::Functions::BSplineLocalBasis::evaluateJacobian\n+void evaluateJacobian(const FieldVector< D, dim > &in, std::vector<\n+FieldMatrix< D, 1, dim > > &out) const\n+Evaluate Jacobian of all shape functions.\n+Definition: bsplinebasis.hh:82\n+Dune::Functions::BSplineLocalBasis::BSplineLocalBasis\n+BSplineLocalBasis(const BSplinePreBasis< GV > &preBasis, const\n+BSplineLocalFiniteElement< GV, R > &lFE)\n+Constructor with a given B-spline patch.\n+Definition: bsplinebasis.hh:61\n+Dune::Functions::BSplineLocalCoefficients\n+Attaches a shape function to an entity.\n+Definition: bsplinebasis.hh:178\n+Dune::Functions::BSplineLocalCoefficients::localKey\n+const LocalKey & localKey(std::size_t i) const\n+get i'th index\n+Definition: bsplinebasis.hh:321\n+Dune::Functions::BSplineLocalCoefficients::init\n+void init(const std::array< unsigned, dim > &sizes)\n+Definition: bsplinebasis.hh:256\n+Dune::Functions::BSplineLocalCoefficients::size\n+std::size_t size() const\n+number of coefficients\n+Definition: bsplinebasis.hh:315\n+Dune::Functions::BSplineLocalInterpolation\n+Local interpolation in the sense of dune-localfunctions, for the B-spline basis\n+on tensor-product gri...\n+Definition: bsplinebasis.hh:340\n+Dune::Functions::BSplineLocalInterpolation::interpolate\n+void interpolate(const F &f, std::vector< C > &out) const\n+Local interpolation of a function.\n+Definition: bsplinebasis.hh:344\n+Dune::Functions::BSplineNode\n+Definition: bsplinebasis.hh:1250\n+Dune::Functions::BSplineNode::finiteElement\n+const FiniteElement & finiteElement() const\n+Return the LocalFiniteElement for the element we are bound to.\n+Definition: bsplinebasis.hh:1274\n+Dune::Functions::BSplineNode::Element\n+typename GV::template Codim< 0 >::Entity Element\n+Definition: bsplinebasis.hh:1256\n+Dune::Functions::BSplineNode::preBasis_\n+const BSplinePreBasis< GV > * preBasis_\n+Definition: bsplinebasis.hh:1290\n+Dune::Functions::BSplineNode::element_\n+Element element_\n+Definition: bsplinebasis.hh:1293\n+Dune::Functions::BSplineNode::bind\n+void bind(const Element &e)\n+Bind to element.\n+Definition: bsplinebasis.hh:1280\n+Dune::Functions::BSplineNode::BSplineNode\n+BSplineNode(const BSplinePreBasis< GV > *preBasis)\n+Definition: bsplinebasis.hh:1259\n+Dune::Functions::BSplineNode::element\n+const Element & element() const\n+Return current element, throw if unbound.\n+Definition: bsplinebasis.hh:1265\n+Dune::Functions::BSplineNode::finiteElement_\n+FiniteElement finiteElement_\n+Definition: bsplinebasis.hh:1292\n+Dune::Functions::BSplineNode::size_type\n std::size_t size_type\n-Definition: subspacebasis.hh:53\n-Dune::Functions::SubspaceBasis::SubspaceBasis\n-SubspaceBasis(const RootBasis &rootBasis, const PrefixPath &prefixPath)\n-Constructor for a given grid view object.\n-Definition: subspacebasis.hh:62\n-Dune::Functions::SubspaceLocalView\n-The restriction of a finite element basis to a single element.\n-Definition: subspacelocalview.hh:30\n-concepts.hh\n+Definition: bsplinebasis.hh:1255\n+Dune::Functions::DefaultGlobalBasis\n+Global basis for given pre-basis.\n+Definition: defaultglobalbasis.hh:46\n+Dune::Functions::BasisNodeMixin::size\n+size_type size() const\n+Definition: nodes.hh:142\n+Dune::Functions::BasisNodeMixin::setSize\n+void setSize(const size_type size)\n+Definition: nodes.hh:164\n+Dune::Functions::LeafBasisNode\n+Definition: nodes.hh:186\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00179.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00179.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: basistags.hh File Reference</title>\n+<title>dune-functions: nodes.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -66,77 +66,57 @@\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> |\n <a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">basistags.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">nodes.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <type_traits></code><br />\n-<code>#include <dune/common/concept.hh></code><br />\n+<div class=\"textblock\"><code>#include <cassert></code><br />\n+<code>#include <memory></code><br />\n+<code>#include <dune/common/indices.hh></code><br />\n+<code>#include <dune/typetree/leafnode.hh></code><br />\n+<code>#include <dune/typetree/powernode.hh></code><br />\n+<code>#include <dune/typetree/compositenode.hh></code><br />\n+<code>#include <dune/typetree/traversal.hh></code><br />\n+<code>#include <dune/typetree/visitor.hh></code><br />\n </div>\n <p><a href=\"a00179_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01411.html\">Dune::Functions::Concept::IndexMergingStrategy</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01707.html\">Dune::Functions::BasisNodeMixin</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01415.html\">Dune::Functions::BasisFactory::IndexMergingStrategy</a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Base class for index merging strategies to simplify detection. <a href=\"a01415.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01711.html\">Dune::Functions::LeafBasisNode</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01419.html\">Dune::Functions::BasisFactory::FlatLexicographic</a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Lexicographic merging of direct children without blocking. <a href=\"a01419.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01715.html\">Dune::Functions::PowerBasisNode< T, n ></a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01423.html\">Dune::Functions::BasisFactory::FlatInterleaved</a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Interleaved merging of direct children without blocking. <a href=\"a01423.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01427.html\">Dune::Functions::BasisFactory::BlockedLexicographic</a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Lexicographic merging of direct children with blocking (i.e. creating one block per direct child). <a href=\"a01427.html#details\">More...</a><br /></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01431.html\">Dune::Functions::BasisFactory::BlockedInterleaved</a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Interleaved merging of direct children with blocking (i.e. creating blocks at the leaves containing one leaf per child each). <a href=\"a01431.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01719.html\">Dune::Functions::CompositeBasisNode< T ></a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a00220\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00220.html\">Dune::Functions::Concept</a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a00224\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00224.html\">Dune::Functions::BasisFactory</a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a00225\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00225.html\">Dune::Functions::BasisBuilder</a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n Functions</h2></td></tr>\n-<tr class=\"memitem:a067e42f1ca7d6c4131518e5eb269da35\"><td class=\"memTemplParams\" colspan=\"2\">template<typename T > </td></tr>\n-<tr class=\"memitem:a067e42f1ca7d6c4131518e5eb269da35\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static constexpr bool </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00220.html#a067e42f1ca7d6c4131518e5eb269da35\">Dune::Functions::Concept::isIndexMergingStrategy</a> ()</td></tr>\n-<tr class=\"separator:a067e42f1ca7d6c4131518e5eb269da35\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a4c80c069c722824168167f5ac1bc3474\"><td class=\"memTemplParams\" colspan=\"2\">template<typename T > </td></tr>\n-<tr class=\"memitem:a4c80c069c722824168167f5ac1bc3474\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">static constexpr bool </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00220.html#a4c80c069c722824168167f5ac1bc3474\">Dune::Functions::Concept::isIndexMergingStrategy</a> (T &&t)</td></tr>\n-<tr class=\"separator:a4c80c069c722824168167f5ac1bc3474\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:ad515867ac194016a6f9e4463d1c67a24\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00224.html#ad515867ac194016a6f9e4463d1c67a24\">Dune::Functions::BasisFactory::registerIndexMergingStrategy</a> (IndexMergingStrategy)</td></tr>\n-<tr class=\"separator:ad515867ac194016a6f9e4463d1c67a24\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:ga611fb3c6cb312fb95e83dd1a62da13bc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr FlatLexicographic </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00214.html#ga611fb3c6cb312fb95e83dd1a62da13bc\">Dune::Functions::BasisFactory::flatLexicographic</a> ()</td></tr>\n-<tr class=\"memdesc:ga611fb3c6cb312fb95e83dd1a62da13bc\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Creates a lexicographic merging of direct children without blocking. <a href=\"a00214.html#ga611fb3c6cb312fb95e83dd1a62da13bc\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga611fb3c6cb312fb95e83dd1a62da13bc\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:ga67995074ba44e2e28647170584f54bec\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr FlatInterleaved </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00214.html#ga67995074ba44e2e28647170584f54bec\">Dune::Functions::BasisFactory::flatInterleaved</a> ()</td></tr>\n-<tr class=\"memdesc:ga67995074ba44e2e28647170584f54bec\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Creates an interleaved merging of direct children without blocking. <a href=\"a00214.html#ga67995074ba44e2e28647170584f54bec\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga67995074ba44e2e28647170584f54bec\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:gadd59442e0e62464ee27af6f2741b4494\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr BlockedLexicographic </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00214.html#gadd59442e0e62464ee27af6f2741b4494\">Dune::Functions::BasisFactory::blockedLexicographic</a> ()</td></tr>\n-<tr class=\"memdesc:gadd59442e0e62464ee27af6f2741b4494\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Creates a lexicographic merging of direct children with blocking (i.e. creating one block per direct child). <a href=\"a00214.html#gadd59442e0e62464ee27af6f2741b4494\">More...</a><br /></td></tr>\n-<tr class=\"separator:gadd59442e0e62464ee27af6f2741b4494\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:ga649b67336300e9f05e38b5479ca21a24\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">constexpr BlockedInterleaved </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00214.html#ga649b67336300e9f05e38b5479ca21a24\">Dune::Functions::BasisFactory::blockedInterleaved</a> ()</td></tr>\n-<tr class=\"memdesc:ga649b67336300e9f05e38b5479ca21a24\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Creates an interleaved merging of direct children with blocking (i.e. creating blocks at the leaves containing one leaf per child each). <a href=\"a00214.html#ga649b67336300e9f05e38b5479ca21a24\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga649b67336300e9f05e38b5479ca21a24\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a475e15e64943b3461f2f87a7805a3c8e\"><td class=\"memTemplParams\" colspan=\"2\">template<typename Tree > </td></tr>\n+<tr class=\"memitem:a475e15e64943b3461f2f87a7805a3c8e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a475e15e64943b3461f2f87a7805a3c8e\">Dune::Functions::clearSize</a> (Tree &tree, std::size_t offset)</td></tr>\n+<tr class=\"separator:a475e15e64943b3461f2f87a7805a3c8e\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a4dc892a209e0f55bc65eadaf2c808454\"><td class=\"memTemplParams\" colspan=\"2\">template<typename Tree , typename Entity > </td></tr>\n+<tr class=\"memitem:a4dc892a209e0f55bc65eadaf2c808454\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a4dc892a209e0f55bc65eadaf2c808454\">Dune::Functions::bindTree</a> (Tree &tree, const Entity &entity, std::size_t offset=0)</td></tr>\n+<tr class=\"separator:a4dc892a209e0f55bc65eadaf2c808454\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a5e19b913a34ad68144f4fd873c51b977\"><td class=\"memTemplParams\" colspan=\"2\">template<typename Tree > </td></tr>\n+<tr class=\"memitem:a5e19b913a34ad68144f4fd873c51b977\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a5e19b913a34ad68144f4fd873c51b977\">Dune::Functions::initializeTree</a> (Tree &tree, std::size_t treeIndexOffset=0)</td></tr>\n+<tr class=\"separator:a5e19b913a34ad68144f4fd873c51b977\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -6,81 +6,46 @@\n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n Classes | Namespaces | Functions\n-basistags.hh File Reference\n-#include <type_traits>\n-#include <dune/common/concept.hh>\n+nodes.hh File Reference\n+#include <cassert>\n+#include <memory>\n+#include <dune/common/indices.hh>\n+#include <dune/typetree/leafnode.hh>\n+#include <dune/typetree/powernode.hh>\n+#include <dune/typetree/compositenode.hh>\n+#include <dune/typetree/traversal.hh>\n+#include <dune/typetree/visitor.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-struct \u00a0Dune::Functions::Concept::IndexMergingStrategy\n+class \u00a0Dune::Functions::BasisNodeMixin\n \u00a0\n-struct \u00a0Dune::Functions::BasisFactory::IndexMergingStrategy\n-\u00a0 Base class for index merging strategies to simplify detection. More...\n+class \u00a0Dune::Functions::LeafBasisNode\n \u00a0\n-struct \u00a0Dune::Functions::BasisFactory::FlatLexicographic\n-\u00a0 Lexicographic merging of direct children without blocking. More...\n+class \u00a0Dune::Functions::PowerBasisNode<_T,_n_>\n \u00a0\n-struct \u00a0Dune::Functions::BasisFactory::FlatInterleaved\n-\u00a0 Interleaved merging of direct children without blocking. More...\n-\u00a0\n-struct \u00a0Dune::Functions::BasisFactory::BlockedLexicographic\n-\u00a0 Lexicographic merging of direct children with blocking (i.e. creating\n- one block per direct child). More...\n-\u00a0\n-struct \u00a0Dune::Functions::BasisFactory::BlockedInterleaved\n-\u00a0 Interleaved merging of direct children with blocking (i.e. creating\n- blocks at the leaves containing one leaf per child each). More...\n+class \u00a0Dune::Functions::CompositeBasisNode<_T_>\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n-namespace \u00a0Dune::Functions::Concept\n-\u00a0\n-namespace \u00a0Dune::Functions::BasisFactory\n-\u00a0\n-namespace \u00a0Dune::Functions::BasisBuilder\n-\u00a0\n Functions\n-template<typename T >\n- static constexpr bool\u00a0Dune::Functions::Concept::\n- isIndexMergingStrategy ()\n-\u00a0\n-template<typename T >\n- static constexpr bool\u00a0Dune::Functions::Concept::\n- isIndexMergingStrategy (T &&t)\n-\u00a0\n- void\u00a0Dune::Functions::BasisFactory::\n- registerIndexMergingStrategy\n- (IndexMergingStrategy)\n-\u00a0\n- constexpr FlatLexicographic\u00a0Dune::Functions::BasisFactory::\n- flatLexicographic ()\n-\u00a0 Creates a lexicographic merging of direct\n- children without blocking. More...\n-\u00a0\n- constexpr FlatInterleaved\u00a0Dune::Functions::BasisFactory::flatInterleaved\n- ()\n-\u00a0 Creates an interleaved merging of direct\n- children without blocking. More...\n-\u00a0\n-constexpr BlockedLexicographic\u00a0Dune::Functions::BasisFactory::\n- blockedLexicographic ()\n- Creates a lexicographic merging of direct\n-\u00a0 children with blocking (i.e. creating one block\n- per direct child). More...\n-\u00a0\n- constexpr BlockedInterleaved\u00a0Dune::Functions::BasisFactory::\n- blockedInterleaved ()\n- Creates an interleaved merging of direct\n-\u00a0 children with blocking (i.e. creating blocks at\n- the leaves containing one leaf per child each).\n- More...\n+template<typename Tree >\n+void\u00a0Dune::Functions::clearSize (Tree &tree, std::size_t offset)\n+\u00a0\n+template<typename Tree , typename Entity >\n+void\u00a0Dune::Functions::bindTree (Tree &tree, const Entity &entity, std::size_t\n+ offset=0)\n+\u00a0\n+template<typename Tree >\n+void\u00a0Dune::Functions::initializeTree (Tree &tree, std::size_t\n+ treeIndexOffset=0)\n \u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00179_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00179_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: basistags.hh Source File</title>\n+<title>dune-functions: nodes.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,122 +62,314 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">basistags.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">nodes.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00179.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <type_traits></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <dune/common/concept.hh></span></div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <cassert></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <memory></span></div>\n <div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> <span class=\"keyword\">namespace </span>Concept {</div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01411.html\"> 14</a></span> <span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01411.html\">IndexMergingStrategy</a></div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> {</div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> T></div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01411.html#a8552823d8c75d18bca5f41f36cd7b2dd\"> 17</a></span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a01411.html#a8552823d8c75d18bca5f41f36cd7b2dd\">require</a>(T&& t) -> <span class=\"keyword\">decltype</span>(</div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> <a class=\"code hl_function\" href=\"a00224.html#ad515867ac194016a6f9e4463d1c67a24\">registerIndexMergingStrategy</a>(t)</div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> );</div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span> };</div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> </div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> T></div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00220.html#a067e42f1ca7d6c4131518e5eb269da35\"> 23</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a00220.html#a067e42f1ca7d6c4131518e5eb269da35\">isIndexMergingStrategy</a>()</div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> {</div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> <span class=\"keywordflow\">return</span> models<Concept::IndexMergingStrategy,T>();</div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> }</div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> </div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> T></div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00220.html#a4c80c069c722824168167f5ac1bc3474\"> 29</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a00220.html#a067e42f1ca7d6c4131518e5eb269da35\">isIndexMergingStrategy</a>(T&& t)</div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> {</div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> <span class=\"keywordflow\">return</span> models<Concept::IndexMergingStrategy,std::decay_t<T>>();</div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> }</div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> </div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> } <span class=\"comment\">// namespace Concept</span></div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/common/indices.hh></span></div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span> </div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/typetree/leafnode.hh></span></div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <dune/typetree/powernode.hh></span></div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <dune/typetree/compositenode.hh></span></div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <dune/typetree/traversal.hh></span></div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <dune/typetree/visitor.hh></span></div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> <span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span> </div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> <span class=\"keyword\">namespace </span>Impl {</div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> </div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span> </div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> <span class=\"keyword\">struct </span>ClearSizeVisitor</div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> : <span class=\"keyword\">public</span> TypeTree::TreeVisitor</div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> , <span class=\"keyword\">public</span> TypeTree::DynamicTraversal</div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> {</div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> </div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath></div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> <span class=\"keywordtype\">void</span> pre(Node& node, TreePath treePath)</div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> {</div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> leaf(node,treePath);</div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> node.setSize(0);</div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> }</div>\n <div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> </div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> </div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00224.html\"> 37</a></span><span class=\"keyword\">namespace </span>BasisFactory {</div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> </div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01415.html\"> 44</a></span> <span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01415.html\">IndexMergingStrategy</a> {};</div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath></div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> <span class=\"keywordtype\">void</span> leaf(Node& node, TreePath treePath)</div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> {</div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> node.setOffset(offset_);</div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> }</div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> </div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> ClearSizeVisitor(std::size_t offset)</div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> : offset_(offset)</div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> {}</div>\n <div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> </div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00224.html#ad515867ac194016a6f9e4463d1c67a24\"> 46</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a00224.html#ad515867ac194016a6f9e4463d1c67a24\">registerIndexMergingStrategy</a>(<a class=\"code hl_struct\" href=\"a01415.html\">IndexMergingStrategy</a>);</div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> <span class=\"keyword\">const</span> std::size_t offset_;</div>\n <div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01419.html\"> 78</a></span> <span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01419.html\">FlatLexicographic</a></div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> : <span class=\"keyword\">public</span> <a class=\"code hl_struct\" href=\"a01415.html\">IndexMergingStrategy</a></div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> {};</div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> };</div>\n+<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> </div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> </div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Entity></div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> <span class=\"keyword\">struct </span>BindVisitor</div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> : <span class=\"keyword\">public</span> TypeTree::TreeVisitor</div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> , <span class=\"keyword\">public</span> TypeTree::DynamicTraversal</div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> {</div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> </div>\n+<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath></div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> <span class=\"keywordtype\">void</span> pre(Node& node, TreePath)</div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> {</div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> node.setOffset(offset_);</div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> }</div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> </div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath></div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> <span class=\"keywordtype\">void</span> post(Node& node, TreePath)</div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> {</div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> node.setSize(offset_ - node.offset());</div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> }</div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> </div>\n+<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath></div>\n+<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> <span class=\"keywordtype\">void</span> leaf(Node& node, TreePath)</div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> {</div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> node.setOffset(offset_);</div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> node.bind(entity_);</div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> offset_ += node.size();</div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> }</div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> </div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> BindVisitor(<span class=\"keyword\">const</span> Entity& entity, std::size_t offset = 0)</div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> : entity_(entity)</div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> , offset_(offset)</div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> {}</div>\n <div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> </div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01423.html\"> 112</a></span> <span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01423.html\">FlatInterleaved</a></div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> : <span class=\"keyword\">public</span> <a class=\"code hl_struct\" href=\"a01415.html\">IndexMergingStrategy</a></div>\n-<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> {};</div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> <span class=\"keyword\">const</span> Entity& entity_;</div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> std::size_t offset_;</div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> </div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> };</div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> </div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> </div>\n+<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> <span class=\"keyword\">struct </span>InitializeTreeVisitor :</div>\n+<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> <span class=\"keyword\">public</span> TypeTree::TreeVisitor,</div>\n+<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> <span class=\"keyword\">public</span> TypeTree::DynamicTraversal</div>\n+<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> {</div>\n+<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath></div>\n+<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> <span class=\"keywordtype\">void</span> pre(Node& node, TreePath)</div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> {</div>\n+<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> node.setTreeIndex(treeIndex_);</div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> ++treeIndex_;</div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> }</div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> </div>\n+<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath></div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> <span class=\"keywordtype\">void</span> leaf(Node& node, TreePath)</div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> {</div>\n+<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> node.setTreeIndex(treeIndex_);</div>\n+<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> ++treeIndex_;</div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> }</div>\n+<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> </div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> InitializeTreeVisitor(std::size_t treeIndexOffset = 0) :</div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> treeIndex_(treeIndexOffset)</div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> {}</div>\n+<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> </div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> std::size_t treeIndex_;</div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> };</div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> </div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> } <span class=\"comment\">// end namespace Impl</span></div>\n+<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> </div>\n <div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> </div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01427.html\"> 146</a></span> <span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01427.html\">BlockedLexicographic</a></div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> : <span class=\"keyword\">public</span> <a class=\"code hl_struct\" href=\"a01415.html\">IndexMergingStrategy</a></div>\n-<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> {};</div>\n-<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> </div>\n-<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01431.html\"> 180</a></span> <span class=\"keyword\">struct </span><a class=\"code hl_struct\" href=\"a01431.html\">BlockedInterleaved</a> : <span class=\"keyword\">public</span> <a class=\"code hl_struct\" href=\"a01415.html\">IndexMergingStrategy</a> {};</div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01707.html\"> 116</a></span> <span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01707.html\">BasisNodeMixin</a></div>\n+<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> {</div>\n+<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> </div>\n+<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> <span class=\"keyword\">friend</span> <span class=\"keyword\">struct </span>Impl::ClearSizeVisitor;</div>\n+<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> </div>\n+<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span>></div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> <span class=\"keyword\">friend</span> <span class=\"keyword\">struct </span>Impl::BindVisitor;</div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> </div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> <span class=\"keyword\">friend</span> <span class=\"keyword\">struct </span>Impl::InitializeTreeVisitor;</div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> </div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> <span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> </div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\"> 128</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">size_type</a> = std::size_t;</div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> </div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01707.html#ab139683837b0ab0b546e925b18fa4f0c\"> 130</a></span> <a class=\"code hl_function\" href=\"a01707.html#ab139683837b0ab0b546e925b18fa4f0c\">BasisNodeMixin</a>() :</div>\n+<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> offset_(0),</div>\n+<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> size_(0),</div>\n+<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> treeIndex_(0)</div>\n+<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> {}</div>\n+<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> </div>\n+<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01707.html#a0e22d133c4157b51c1e9f091aebc59cd\"> 136</a></span> <a class=\"code hl_typedef\" href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">size_type</a> <a class=\"code hl_function\" href=\"a01707.html#a0e22d133c4157b51c1e9f091aebc59cd\">localIndex</a>(<a class=\"code hl_typedef\" href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">size_type</a> i)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> assert(i < size_);</div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> <span class=\"keywordflow\">return</span> offset_ + i;</div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> }</div>\n+<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> </div>\n+<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\"> 142</a></span> <a class=\"code hl_typedef\" href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">size_type</a> <a class=\"code hl_function\" href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">size</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> <span class=\"keywordflow\">return</span> size_;</div>\n+<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> }</div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> </div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01707.html#a0537018999ae62e89fa51d6b2acaa9c5\"> 147</a></span> <a class=\"code hl_typedef\" href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">size_type</a> <a class=\"code hl_function\" href=\"a01707.html#a0537018999ae62e89fa51d6b2acaa9c5\">treeIndex</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> <span class=\"keywordflow\">return</span> treeIndex_;</div>\n+<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> }</div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> </div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> <span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> </div>\n+<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01707.html#a29b5cf3ba3af7802e3bf447297ff643e\"> 154</a></span> <a class=\"code hl_typedef\" href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">size_type</a> <a class=\"code hl_function\" href=\"a01707.html#a29b5cf3ba3af7802e3bf447297ff643e\">offset</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> <span class=\"keywordflow\">return</span> offset_;</div>\n+<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> }</div>\n+<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> </div>\n+<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01707.html#a8a136ce33ce5d6a43e4acee36760b842\"> 159</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01707.html#a8a136ce33ce5d6a43e4acee36760b842\">setOffset</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">size_type</a> <a class=\"code hl_function\" href=\"a01707.html#a29b5cf3ba3af7802e3bf447297ff643e\">offset</a>)</div>\n+<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> {</div>\n+<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> offset_ = <a class=\"code hl_function\" href=\"a01707.html#a29b5cf3ba3af7802e3bf447297ff643e\">offset</a>;</div>\n+<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> }</div>\n+<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> </div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\"> 164</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\">setSize</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">size_type</a> <a class=\"code hl_function\" href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">size</a>)</div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> {</div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> size_ = <a class=\"code hl_function\" href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">size</a>;</div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> }</div>\n+<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> </div>\n+<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01707.html#afcf81cc8651554885951ad00ca6d2465\"> 169</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01707.html#afcf81cc8651554885951ad00ca6d2465\">setTreeIndex</a>(<a class=\"code hl_typedef\" href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">size_type</a> <a class=\"code hl_function\" href=\"a01707.html#a0537018999ae62e89fa51d6b2acaa9c5\">treeIndex</a>)</div>\n+<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> {</div>\n+<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> treeIndex_ = <a class=\"code hl_function\" href=\"a01707.html#a0537018999ae62e89fa51d6b2acaa9c5\">treeIndex</a>;</div>\n+<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> }</div>\n+<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> </div>\n+<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> <span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> </div>\n+<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> <a class=\"code hl_typedef\" href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">size_type</a> offset_;</div>\n+<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> <a class=\"code hl_typedef\" href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">size_type</a> size_;</div>\n+<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> <a class=\"code hl_typedef\" href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">size_type</a> treeIndex_;</div>\n+<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> </div>\n+<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> };</div>\n <div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> </div>\n <div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> </div>\n-<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00214.html#ga611fb3c6cb312fb95e83dd1a62da13bc\"> 188</a></span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_struct\" href=\"a01419.html\">FlatLexicographic</a> <a class=\"code hl_function\" href=\"a00214.html#ga611fb3c6cb312fb95e83dd1a62da13bc\">flatLexicographic</a>()</div>\n-<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> {</div>\n-<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span> <span class=\"keywordflow\">return</span> {};</div>\n-<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> }</div>\n-<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> </div>\n-<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00214.html#ga67995074ba44e2e28647170584f54bec\"> 198</a></span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_struct\" href=\"a01423.html\">FlatInterleaved</a> <a class=\"code hl_function\" href=\"a00214.html#ga67995074ba44e2e28647170584f54bec\">flatInterleaved</a>()</div>\n-<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> {</div>\n-<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> <span class=\"keywordflow\">return</span> {};</div>\n-<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> }</div>\n+<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01711.html\"> 183</a></span> <span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01711.html\">LeafBasisNode</a> :</div>\n+<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span> <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01707.html\">BasisNodeMixin</a>,</div>\n+<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> <span class=\"keyword\">public</span> TypeTree::LeafNode</div>\n+<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> {};</div>\n+<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> </div>\n+<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> </div>\n+<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> T, std::<span class=\"keywordtype\">size_t</span> n></div>\n+<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01715.html\"> 190</a></span> <span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01715.html\">PowerBasisNode</a> :</div>\n+<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01707.html\">BasisNodeMixin</a>,</div>\n+<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> <span class=\"keyword\">public</span> TypeTree::PowerNode<T,n></div>\n+<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> {</div>\n+<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> </div>\n+<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> <span class=\"keyword\">using </span>Node = TypeTree::PowerNode<T,n>;</div>\n+<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> </div>\n+<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> <span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> </div>\n+<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01715.html#a730fb3161aee6967017fb7b6de624c00\"> 199</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01715.html#a730fb3161aee6967017fb7b6de624c00\">Element</a> = <span class=\"keyword\">typename</span> T::Element;</div>\n+<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> </div>\n+<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01715.html#ac162976f8cac3b609f4706aefde700c0\"> 201</a></span> <a class=\"code hl_function\" href=\"a01715.html#ac162976f8cac3b609f4706aefde700c0\">PowerBasisNode</a>() = <span class=\"keywordflow\">default</span>;</div>\n <div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> </div>\n-<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00214.html#gadd59442e0e62464ee27af6f2741b4494\"> 208</a></span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_struct\" href=\"a01427.html\">BlockedLexicographic</a> <a class=\"code hl_function\" href=\"a00214.html#gadd59442e0e62464ee27af6f2741b4494\">blockedLexicographic</a>()</div>\n-<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> {</div>\n-<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> <span class=\"keywordflow\">return</span> {};</div>\n-<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> }</div>\n-<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"> 212</span> </div>\n-<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00214.html#ga649b67336300e9f05e38b5479ca21a24\"> 218</a></span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_struct\" href=\"a01431.html\">BlockedInterleaved</a> <a class=\"code hl_function\" href=\"a00214.html#ga649b67336300e9f05e38b5479ca21a24\">blockedInterleaved</a>()</div>\n-<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> {</div>\n-<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span> <span class=\"keywordflow\">return</span> {};</div>\n-<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> }</div>\n+<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01715.html#aa773c868e1fd0662b133a9c401fe9b4b\"> 203</a></span> <a class=\"code hl_function\" href=\"a01715.html#aa773c868e1fd0662b133a9c401fe9b4b\">PowerBasisNode</a>(<span class=\"keyword\">const</span> <span class=\"keyword\">typename</span> Node::NodeStorage& children) :</div>\n+<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> Node(children)</div>\n+<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span> {}</div>\n+<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> </div>\n+<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01715.html#a5b32a16f032d0492e10cd9349a00063d\"> 207</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01715.html#a730fb3161aee6967017fb7b6de624c00\">Element</a>& <a class=\"code hl_function\" href=\"a01715.html#a5b32a16f032d0492e10cd9349a00063d\">element</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> <span class=\"keywordflow\">return</span> this->child(Dune::Indices::_0).element();</div>\n+<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> }</div>\n+<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> </div>\n+<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"> 212</span> };</div>\n+<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span> </div>\n+<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> </div>\n+<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span>... T></div>\n+<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01719.html\"> 216</a></span> <span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01719.html\">CompositeBasisNode</a> :</div>\n+<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01707.html\">BasisNodeMixin</a>,</div>\n+<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> <span class=\"keyword\">public</span> TypeTree::CompositeNode<T...></div>\n+<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> {</div>\n+<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span> </div>\n+<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> <span class=\"keyword\">using </span>Node = TypeTree::CompositeNode<T...>;</div>\n <div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span> </div>\n-<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span>} <span class=\"comment\">// end namespace BasisFactory</span></div>\n+<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> <span class=\"keyword\">public</span>:</div>\n <div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> </div>\n-<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span><span class=\"comment\">// Backward compatibility</span></div>\n-<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00225.html\"> 226</a></span><span class=\"keyword\">namespace </span>BasisBuilder {</div>\n-<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> </div>\n-<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> <span class=\"keyword\">using namespace </span>BasisFactory;</div>\n-<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> </div>\n-<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span>}</div>\n-<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span> </div>\n-<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span>} <span class=\"comment\">// end namespace Functions</span></div>\n-<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span>} <span class=\"comment\">// end namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> </div>\n-<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> </div>\n-<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH</span></div>\n-<div class=\"ttc\" id=\"aa00214_html_ga611fb3c6cb312fb95e83dd1a62da13bc\"><div class=\"ttname\"><a href=\"a00214.html#ga611fb3c6cb312fb95e83dd1a62da13bc\">Dune::Functions::BasisFactory::flatLexicographic</a></div><div class=\"ttdeci\">constexpr FlatLexicographic flatLexicographic()</div><div class=\"ttdoc\">Creates a lexicographic merging of direct children without blocking.</div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:188</div></div>\n-<div class=\"ttc\" id=\"aa00214_html_ga649b67336300e9f05e38b5479ca21a24\"><div class=\"ttname\"><a href=\"a00214.html#ga649b67336300e9f05e38b5479ca21a24\">Dune::Functions::BasisFactory::blockedInterleaved</a></div><div class=\"ttdeci\">constexpr BlockedInterleaved blockedInterleaved()</div><div class=\"ttdoc\">Creates an interleaved merging of direct children with blocking (i.e. creating blocks at the leaves c...</div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:218</div></div>\n-<div class=\"ttc\" id=\"aa00214_html_ga67995074ba44e2e28647170584f54bec\"><div class=\"ttname\"><a href=\"a00214.html#ga67995074ba44e2e28647170584f54bec\">Dune::Functions::BasisFactory::flatInterleaved</a></div><div class=\"ttdeci\">constexpr FlatInterleaved flatInterleaved()</div><div class=\"ttdoc\">Creates an interleaved merging of direct children without blocking.</div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:198</div></div>\n-<div class=\"ttc\" id=\"aa00214_html_gadd59442e0e62464ee27af6f2741b4494\"><div class=\"ttname\"><a href=\"a00214.html#gadd59442e0e62464ee27af6f2741b4494\">Dune::Functions::BasisFactory::blockedLexicographic</a></div><div class=\"ttdeci\">constexpr BlockedLexicographic blockedLexicographic()</div><div class=\"ttdoc\">Creates a lexicographic merging of direct children with blocking (i.e. creating one block per direct ...</div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:208</div></div>\n+<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01719.html#abdd9920608523a7ca70b6b330f133b89\"> 225</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01719.html#abdd9920608523a7ca70b6b330f133b89\">Element</a> = <span class=\"keyword\">typename</span> Node::template Child<0>::Type::Element;</div>\n+<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> </div>\n+<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01719.html#a0366c531894faebfab57f755debf90eb\"> 227</a></span> <a class=\"code hl_function\" href=\"a01719.html#a0366c531894faebfab57f755debf90eb\">CompositeBasisNode</a>() = <span class=\"keywordflow\">default</span>;</div>\n+<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> </div>\n+<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01719.html#a2f068a781f0d898766b3f393d849f14e\"> 229</a></span> <a class=\"code hl_function\" href=\"a01719.html#a2f068a781f0d898766b3f393d849f14e\">CompositeBasisNode</a>(<span class=\"keyword\">const</span> <span class=\"keyword\">typename</span> Node::NodeStorage& children) :</div>\n+<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span> Node(children)</div>\n+<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span> {}</div>\n+<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> </div>\n+<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span>... Children></div>\n+<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01719.html#ac9d87ea800634bfc8e45ccd2f0b41acf\"> 234</a></span> <a class=\"code hl_function\" href=\"a01719.html#ac9d87ea800634bfc8e45ccd2f0b41acf\">CompositeBasisNode</a>(<span class=\"keyword\">const</span> std::shared_ptr<Children>&... children) :</div>\n+<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> Node(children...)</div>\n+<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span> {}</div>\n+<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span> </div>\n+<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01719.html#a9c235f8829e7afa0436b223365fd8bb8\"> 238</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01719.html#abdd9920608523a7ca70b6b330f133b89\">Element</a>& <a class=\"code hl_function\" href=\"a01719.html#a9c235f8829e7afa0436b223365fd8bb8\">element</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"> 240</span> <span class=\"keywordflow\">return</span> this->child(Dune::Indices::_0).element();</div>\n+<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span> }</div>\n+<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span> </div>\n+<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> };</div>\n+<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> </div>\n+<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> </div>\n+<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Tree></div>\n+<div class=\"line\"><a id=\"l00247\" name=\"l00247\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a475e15e64943b3461f2f87a7805a3c8e\"> 247</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a00219.html#a475e15e64943b3461f2f87a7805a3c8e\">clearSize</a>(Tree& tree, std::size_t offset)</div>\n+<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"> 248</span> {</div>\n+<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span> TypeTree::applyToTree(tree,Impl::ClearSizeVisitor(offset));</div>\n+<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span> }</div>\n+<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span> </div>\n+<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Tree, <span class=\"keyword\">typename</span> Entity></div>\n+<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a4dc892a209e0f55bc65eadaf2c808454\"> 253</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a00219.html#a4dc892a209e0f55bc65eadaf2c808454\">bindTree</a>(Tree& tree, <span class=\"keyword\">const</span> Entity& entity, std::size_t offset = 0)</div>\n+<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"> 254</span> {</div>\n+<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span> Impl::BindVisitor<Entity> visitor(entity,offset);</div>\n+<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"> 256</span> TypeTree::applyToTree(tree,visitor);</div>\n+<div class=\"line\"><a id=\"l00257\" name=\"l00257\"></a><span class=\"lineno\"> 257</span> }</div>\n+<div class=\"line\"><a id=\"l00258\" name=\"l00258\"></a><span class=\"lineno\"> 258</span> </div>\n+<div class=\"line\"><a id=\"l00259\" name=\"l00259\"></a><span class=\"lineno\"> 259</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Tree></div>\n+<div class=\"line\"><a id=\"l00260\" name=\"l00260\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a5e19b913a34ad68144f4fd873c51b977\"> 260</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a00219.html#a5e19b913a34ad68144f4fd873c51b977\">initializeTree</a>(Tree& tree, std::size_t treeIndexOffset = 0)</div>\n+<div class=\"line\"><a id=\"l00261\" name=\"l00261\"></a><span class=\"lineno\"> 261</span> {</div>\n+<div class=\"line\"><a id=\"l00262\" name=\"l00262\"></a><span class=\"lineno\"> 262</span> Impl::InitializeTreeVisitor visitor(treeIndexOffset);</div>\n+<div class=\"line\"><a id=\"l00263\" name=\"l00263\"></a><span class=\"lineno\"> 263</span> TypeTree::applyToTree(tree,visitor);</div>\n+<div class=\"line\"><a id=\"l00264\" name=\"l00264\"></a><span class=\"lineno\"> 264</span> }</div>\n+<div class=\"line\"><a id=\"l00265\" name=\"l00265\"></a><span class=\"lineno\"> 265</span> </div>\n+<div class=\"line\"><a id=\"l00266\" name=\"l00266\"></a><span class=\"lineno\"> 266</span> </div>\n+<div class=\"line\"><a id=\"l00267\" name=\"l00267\"></a><span class=\"lineno\"> 267</span> } <span class=\"comment\">// namespace Functions</span></div>\n+<div class=\"line\"><a id=\"l00268\" name=\"l00268\"></a><span class=\"lineno\"> 268</span> </div>\n+<div class=\"line\"><a id=\"l00269\" name=\"l00269\"></a><span class=\"lineno\"> 269</span>} <span class=\"comment\">// namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00270\" name=\"l00270\"></a><span class=\"lineno\"> 270</span> </div>\n+<div class=\"line\"><a id=\"l00271\" name=\"l00271\"></a><span class=\"lineno\"> 271</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH</span></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa00220_html_a067e42f1ca7d6c4131518e5eb269da35\"><div class=\"ttname\"><a href=\"a00220.html#a067e42f1ca7d6c4131518e5eb269da35\">Dune::Functions::Concept::isIndexMergingStrategy</a></div><div class=\"ttdeci\">static constexpr bool isIndexMergingStrategy()</div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:23</div></div>\n-<div class=\"ttc\" id=\"aa00224_html_ad515867ac194016a6f9e4463d1c67a24\"><div class=\"ttname\"><a href=\"a00224.html#ad515867ac194016a6f9e4463d1c67a24\">Dune::Functions::BasisFactory::registerIndexMergingStrategy</a></div><div class=\"ttdeci\">void registerIndexMergingStrategy(IndexMergingStrategy)</div></div>\n-<div class=\"ttc\" id=\"aa01411_html\"><div class=\"ttname\"><a href=\"a01411.html\">Dune::Functions::Concept::IndexMergingStrategy</a></div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:15</div></div>\n-<div class=\"ttc\" id=\"aa01411_html_a8552823d8c75d18bca5f41f36cd7b2dd\"><div class=\"ttname\"><a href=\"a01411.html#a8552823d8c75d18bca5f41f36cd7b2dd\">Dune::Functions::Concept::IndexMergingStrategy::require</a></div><div class=\"ttdeci\">auto require(T &&t) -> decltype(registerIndexMergingStrategy(t))</div></div>\n-<div class=\"ttc\" id=\"aa01415_html\"><div class=\"ttname\"><a href=\"a01415.html\">Dune::Functions::BasisFactory::IndexMergingStrategy</a></div><div class=\"ttdoc\">Base class for index merging strategies to simplify detection.</div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:44</div></div>\n-<div class=\"ttc\" id=\"aa01419_html\"><div class=\"ttname\"><a href=\"a01419.html\">Dune::Functions::BasisFactory::FlatLexicographic</a></div><div class=\"ttdoc\">Lexicographic merging of direct children without blocking.</div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:80</div></div>\n-<div class=\"ttc\" id=\"aa01423_html\"><div class=\"ttname\"><a href=\"a01423.html\">Dune::Functions::BasisFactory::FlatInterleaved</a></div><div class=\"ttdoc\">Interleaved merging of direct children without blocking.</div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:114</div></div>\n-<div class=\"ttc\" id=\"aa01427_html\"><div class=\"ttname\"><a href=\"a01427.html\">Dune::Functions::BasisFactory::BlockedLexicographic</a></div><div class=\"ttdoc\">Lexicographic merging of direct children with blocking (i.e. creating one block per direct child).</div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:148</div></div>\n-<div class=\"ttc\" id=\"aa01431_html\"><div class=\"ttname\"><a href=\"a01431.html\">Dune::Functions::BasisFactory::BlockedInterleaved</a></div><div class=\"ttdoc\">Interleaved merging of direct children with blocking (i.e. creating blocks at the leaves containing o...</div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:180</div></div>\n+<div class=\"ttc\" id=\"aa00219_html_a475e15e64943b3461f2f87a7805a3c8e\"><div class=\"ttname\"><a href=\"a00219.html#a475e15e64943b3461f2f87a7805a3c8e\">Dune::Functions::clearSize</a></div><div class=\"ttdeci\">void clearSize(Tree &tree, std::size_t offset)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:247</div></div>\n+<div class=\"ttc\" id=\"aa00219_html_a4dc892a209e0f55bc65eadaf2c808454\"><div class=\"ttname\"><a href=\"a00219.html#a4dc892a209e0f55bc65eadaf2c808454\">Dune::Functions::bindTree</a></div><div class=\"ttdeci\">void bindTree(Tree &tree, const Entity &entity, std::size_t offset=0)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:253</div></div>\n+<div class=\"ttc\" id=\"aa00219_html_a5e19b913a34ad68144f4fd873c51b977\"><div class=\"ttname\"><a href=\"a00219.html#a5e19b913a34ad68144f4fd873c51b977\">Dune::Functions::initializeTree</a></div><div class=\"ttdeci\">void initializeTree(Tree &tree, std::size_t treeIndexOffset=0)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:260</div></div>\n+<div class=\"ttc\" id=\"aa01707_html\"><div class=\"ttname\"><a href=\"a01707.html\">Dune::Functions::BasisNodeMixin</a></div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:117</div></div>\n+<div class=\"ttc\" id=\"aa01707_html_a0537018999ae62e89fa51d6b2acaa9c5\"><div class=\"ttname\"><a href=\"a01707.html#a0537018999ae62e89fa51d6b2acaa9c5\">Dune::Functions::BasisNodeMixin::treeIndex</a></div><div class=\"ttdeci\">size_type treeIndex() const</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:147</div></div>\n+<div class=\"ttc\" id=\"aa01707_html_a0e22d133c4157b51c1e9f091aebc59cd\"><div class=\"ttname\"><a href=\"a01707.html#a0e22d133c4157b51c1e9f091aebc59cd\">Dune::Functions::BasisNodeMixin::localIndex</a></div><div class=\"ttdeci\">size_type localIndex(size_type i) const</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:136</div></div>\n+<div class=\"ttc\" id=\"aa01707_html_a29b5cf3ba3af7802e3bf447297ff643e\"><div class=\"ttname\"><a href=\"a01707.html#a29b5cf3ba3af7802e3bf447297ff643e\">Dune::Functions::BasisNodeMixin::offset</a></div><div class=\"ttdeci\">size_type offset() const</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:154</div></div>\n+<div class=\"ttc\" id=\"aa01707_html_a859d50513645ef2ea0188d0779c1df30\"><div class=\"ttname\"><a href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">Dune::Functions::BasisNodeMixin::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:142</div></div>\n+<div class=\"ttc\" id=\"aa01707_html_a8a136ce33ce5d6a43e4acee36760b842\"><div class=\"ttname\"><a href=\"a01707.html#a8a136ce33ce5d6a43e4acee36760b842\">Dune::Functions::BasisNodeMixin::setOffset</a></div><div class=\"ttdeci\">void setOffset(const size_type offset)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:159</div></div>\n+<div class=\"ttc\" id=\"aa01707_html_aa8a0b9332c5d9fd44b680acc810502cd\"><div class=\"ttname\"><a href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">Dune::Functions::BasisNodeMixin::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:128</div></div>\n+<div class=\"ttc\" id=\"aa01707_html_ab139683837b0ab0b546e925b18fa4f0c\"><div class=\"ttname\"><a href=\"a01707.html#ab139683837b0ab0b546e925b18fa4f0c\">Dune::Functions::BasisNodeMixin::BasisNodeMixin</a></div><div class=\"ttdeci\">BasisNodeMixin()</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:130</div></div>\n+<div class=\"ttc\" id=\"aa01707_html_ae93815e5c4012f7be5d11786f40d267a\"><div class=\"ttname\"><a href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\">Dune::Functions::BasisNodeMixin::setSize</a></div><div class=\"ttdeci\">void setSize(const size_type size)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:164</div></div>\n+<div class=\"ttc\" id=\"aa01707_html_afcf81cc8651554885951ad00ca6d2465\"><div class=\"ttname\"><a href=\"a01707.html#afcf81cc8651554885951ad00ca6d2465\">Dune::Functions::BasisNodeMixin::setTreeIndex</a></div><div class=\"ttdeci\">void setTreeIndex(size_type treeIndex)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:169</div></div>\n+<div class=\"ttc\" id=\"aa01711_html\"><div class=\"ttname\"><a href=\"a01711.html\">Dune::Functions::LeafBasisNode</a></div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:186</div></div>\n+<div class=\"ttc\" id=\"aa01715_html\"><div class=\"ttname\"><a href=\"a01715.html\">Dune::Functions::PowerBasisNode</a></div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:193</div></div>\n+<div class=\"ttc\" id=\"aa01715_html_a5b32a16f032d0492e10cd9349a00063d\"><div class=\"ttname\"><a href=\"a01715.html#a5b32a16f032d0492e10cd9349a00063d\">Dune::Functions::PowerBasisNode::element</a></div><div class=\"ttdeci\">const Element & element() const</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:207</div></div>\n+<div class=\"ttc\" id=\"aa01715_html_a730fb3161aee6967017fb7b6de624c00\"><div class=\"ttname\"><a href=\"a01715.html#a730fb3161aee6967017fb7b6de624c00\">Dune::Functions::PowerBasisNode::Element</a></div><div class=\"ttdeci\">typename T::Element Element</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:199</div></div>\n+<div class=\"ttc\" id=\"aa01715_html_aa773c868e1fd0662b133a9c401fe9b4b\"><div class=\"ttname\"><a href=\"a01715.html#aa773c868e1fd0662b133a9c401fe9b4b\">Dune::Functions::PowerBasisNode::PowerBasisNode</a></div><div class=\"ttdeci\">PowerBasisNode(const typename Node::NodeStorage &children)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:203</div></div>\n+<div class=\"ttc\" id=\"aa01715_html_ac162976f8cac3b609f4706aefde700c0\"><div class=\"ttname\"><a href=\"a01715.html#ac162976f8cac3b609f4706aefde700c0\">Dune::Functions::PowerBasisNode::PowerBasisNode</a></div><div class=\"ttdeci\">PowerBasisNode()=default</div></div>\n+<div class=\"ttc\" id=\"aa01719_html\"><div class=\"ttname\"><a href=\"a01719.html\">Dune::Functions::CompositeBasisNode</a></div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:219</div></div>\n+<div class=\"ttc\" id=\"aa01719_html_a0366c531894faebfab57f755debf90eb\"><div class=\"ttname\"><a href=\"a01719.html#a0366c531894faebfab57f755debf90eb\">Dune::Functions::CompositeBasisNode::CompositeBasisNode</a></div><div class=\"ttdeci\">CompositeBasisNode()=default</div></div>\n+<div class=\"ttc\" id=\"aa01719_html_a2f068a781f0d898766b3f393d849f14e\"><div class=\"ttname\"><a href=\"a01719.html#a2f068a781f0d898766b3f393d849f14e\">Dune::Functions::CompositeBasisNode::CompositeBasisNode</a></div><div class=\"ttdeci\">CompositeBasisNode(const typename Node::NodeStorage &children)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:229</div></div>\n+<div class=\"ttc\" id=\"aa01719_html_a9c235f8829e7afa0436b223365fd8bb8\"><div class=\"ttname\"><a href=\"a01719.html#a9c235f8829e7afa0436b223365fd8bb8\">Dune::Functions::CompositeBasisNode::element</a></div><div class=\"ttdeci\">const Element & element() const</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:238</div></div>\n+<div class=\"ttc\" id=\"aa01719_html_abdd9920608523a7ca70b6b330f133b89\"><div class=\"ttname\"><a href=\"a01719.html#abdd9920608523a7ca70b6b330f133b89\">Dune::Functions::CompositeBasisNode::Element</a></div><div class=\"ttdeci\">typename Node::template Child< 0 >::Type::Element Element</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:225</div></div>\n+<div class=\"ttc\" id=\"aa01719_html_ac9d87ea800634bfc8e45ccd2f0b41acf\"><div class=\"ttname\"><a href=\"a01719.html#ac9d87ea800634bfc8e45ccd2f0b41acf\">Dune::Functions::CompositeBasisNode::CompositeBasisNode</a></div><div class=\"ttdeci\">CompositeBasisNode(const std::shared_ptr< Children > &... children)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:234</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,149 +5,354 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-basistags.hh\n+nodes.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH\n- 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH\n+ 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH\n+ 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH\n 5\n- 6#include <type_traits>\n- 7#include <dune/common/concept.hh>\n+ 6#include <cassert>\n+ 7#include <memory>\n 8\n- 9namespace Dune {\n- 10namespace Functions {\n- 11\n- 12 namespace Concept {\n- 13\n-14 struct IndexMergingStrategy\n- 15 {\n- 16 template<typename T>\n-17 auto require(T&& t) -> decltype(\n- 18 registerIndexMergingStrategy(t)\n- 19 );\n- 20 };\n- 21\n- 22 template<typename T>\n-23 static constexpr bool isIndexMergingStrategy()\n- 24 {\n- 25 return models<Concept::IndexMergingStrategy,T>();\n- 26 }\n- 27\n- 28 template<typename T>\n-29 static constexpr bool isIndexMergingStrategy(T&& t)\n- 30 {\n- 31 return models<Concept::IndexMergingStrategy,std::decay_t<T>>();\n- 32 }\n- 33\n- 34 } // namespace Concept\n+ 9#include <dune/common/indices.hh>\n+ 10\n+ 11#include <dune/typetree/leafnode.hh>\n+ 12#include <dune/typetree/powernode.hh>\n+ 13#include <dune/typetree/compositenode.hh>\n+ 14#include <dune/typetree/traversal.hh>\n+ 15#include <dune/typetree/visitor.hh>\n+ 16\n+ 17namespace Dune {\n+ 18 namespace Functions {\n+ 19\n+ 20\n+ 21 namespace Impl {\n+ 22\n+ 23\n+ 24 struct ClearSizeVisitor\n+ 25 : public TypeTree::TreeVisitor\n+ 26 , public TypeTree::DynamicTraversal\n+ 27 {\n+ 28\n+ 29 template<typename Node, typename TreePath>\n+ 30 void pre(Node& node, TreePath treePath)\n+ 31 {\n+ 32 leaf(node,treePath);\n+ 33 node.setSize(0);\n+ 34 }\n 35\n- 36\n-37namespace BasisFactory {\n- 38\n-44 struct IndexMergingStrategy {};\n+ 36 template<typename Node, typename TreePath>\n+ 37 void leaf(Node& node, TreePath treePath)\n+ 38 {\n+ 39 node.setOffset(offset_);\n+ 40 }\n+ 41\n+ 42 ClearSizeVisitor(std::size_t offset)\n+ 43 : offset_(offset)\n+ 44 {}\n 45\n-46 void registerIndexMergingStrategy(IndexMergingStrategy);\n+ 46 const std::size_t offset_;\n 47\n-78 struct FlatLexicographic\n- 79 : public IndexMergingStrategy\n- 80 {};\n+ 48 };\n+ 49\n+ 50\n+ 51 template<typename Entity>\n+ 52 struct BindVisitor\n+ 53 : public TypeTree::TreeVisitor\n+ 54 , public TypeTree::DynamicTraversal\n+ 55 {\n+ 56\n+ 57 template<typename Node, typename TreePath>\n+ 58 void pre(Node& node, TreePath)\n+ 59 {\n+ 60 node.setOffset(offset_);\n+ 61 }\n+ 62\n+ 63 template<typename Node, typename TreePath>\n+ 64 void post(Node& node, TreePath)\n+ 65 {\n+ 66 node.setSize(offset_ - node.offset());\n+ 67 }\n+ 68\n+ 69 template<typename Node, typename TreePath>\n+ 70 void leaf(Node& node, TreePath)\n+ 71 {\n+ 72 node.setOffset(offset_);\n+ 73 node.bind(entity_);\n+ 74 offset_ += node.size();\n+ 75 }\n+ 76\n+ 77 BindVisitor(const Entity& entity, std::size_t offset = 0)\n+ 78 : entity_(entity)\n+ 79 , offset_(offset)\n+ 80 {}\n 81\n-112 struct FlatInterleaved\n- 113 : public IndexMergingStrategy\n- 114 {};\n+ 82 const Entity& entity_;\n+ 83 std::size_t offset_;\n+ 84\n+ 85 };\n+ 86\n+ 87\n+ 88 struct InitializeTreeVisitor :\n+ 89 public TypeTree::TreeVisitor,\n+ 90 public TypeTree::DynamicTraversal\n+ 91 {\n+ 92 template<typename Node, typename TreePath>\n+ 93 void pre(Node& node, TreePath)\n+ 94 {\n+ 95 node.setTreeIndex(treeIndex_);\n+ 96 ++treeIndex_;\n+ 97 }\n+ 98\n+ 99 template<typename Node, typename TreePath>\n+ 100 void leaf(Node& node, TreePath)\n+ 101 {\n+ 102 node.setTreeIndex(treeIndex_);\n+ 103 ++treeIndex_;\n+ 104 }\n+ 105\n+ 106 InitializeTreeVisitor(std::size_t treeIndexOffset = 0) :\n+ 107 treeIndex_(treeIndexOffset)\n+ 108 {}\n+ 109\n+ 110 std::size_t treeIndex_;\n+ 111 };\n+ 112\n+ 113 } // end namespace Impl\n+ 114\n 115\n-146 struct BlockedLexicographic\n- 147 : public IndexMergingStrategy\n- 148 {};\n- 149\n-180 struct BlockedInterleaved : public IndexMergingStrategy {};\n+116 class BasisNodeMixin\n+ 117 {\n+ 118\n+ 119 friend struct Impl::ClearSizeVisitor;\n+ 120\n+ 121 template<typename>\n+ 122 friend struct Impl::BindVisitor;\n+ 123\n+ 124 friend struct Impl::InitializeTreeVisitor;\n+ 125\n+ 126 public:\n+ 127\n+128 using size_type = std::size_t;\n+ 129\n+130 BasisNodeMixin() :\n+ 131 offset_(0),\n+ 132 size_(0),\n+ 133 treeIndex_(0)\n+ 134 {}\n+ 135\n+136 size_type localIndex(size_type i) const\n+ 137 {\n+ 138 assert(i < size_);\n+ 139 return offset_ + i;\n+ 140 }\n+ 141\n+142 size_type size() const\n+ 143 {\n+ 144 return size_;\n+ 145 }\n+ 146\n+147 size_type treeIndex() const\n+ 148 {\n+ 149 return treeIndex_;\n+ 150 }\n+ 151\n+ 152 protected:\n+ 153\n+154 size_type offset() const\n+ 155 {\n+ 156 return offset_;\n+ 157 }\n+ 158\n+159 void setOffset(const size_type offset)\n+ 160 {\n+ 161 offset_ = offset;\n+ 162 }\n+ 163\n+164 void setSize(const size_type size)\n+ 165 {\n+ 166 size_ = size;\n+ 167 }\n+ 168\n+169 void setTreeIndex(size_type treeIndex)\n+ 170 {\n+ 171 treeIndex_ = treeIndex;\n+ 172 }\n+ 173\n+ 174 private:\n+ 175\n+ 176 size_type offset_;\n+ 177 size_type size_;\n+ 178 size_type treeIndex_;\n+ 179\n+ 180 };\n 181\n 182\n-188 constexpr FlatLexicographic flatLexicographic()\n- 189 {\n- 190 return {};\n- 191 }\n- 192\n-198 constexpr FlatInterleaved flatInterleaved()\n- 199 {\n- 200 return {};\n- 201 }\n+183 class LeafBasisNode :\n+ 184 public BasisNodeMixin,\n+ 185 public TypeTree::LeafNode\n+ 186 {};\n+ 187\n+ 188\n+ 189 template<typename T, std::size_t n>\n+190 class PowerBasisNode :\n+ 191 public BasisNodeMixin,\n+ 192 public TypeTree::PowerNode<T,n>\n+ 193 {\n+ 194\n+ 195 using Node = TypeTree::PowerNode<T,n>;\n+ 196\n+ 197 public:\n+ 198\n+199 using Element = typename T::Element;\n+ 200\n+201 PowerBasisNode() = default;\n 202\n-208 constexpr BlockedLexicographic blockedLexicographic()\n- 209 {\n- 210 return {};\n- 211 }\n- 212\n-218 constexpr BlockedInterleaved blockedInterleaved()\n+203 PowerBasisNode(const typename Node::NodeStorage& children) :\n+ 204 Node(children)\n+ 205 {}\n+ 206\n+207 const Element& element() const\n+ 208 {\n+ 209 return this->child(Dune::Indices::_0).element();\n+ 210 }\n+ 211\n+ 212 };\n+ 213\n+ 214\n+ 215 template<typename... T>\n+216 class CompositeBasisNode :\n+ 217 public BasisNodeMixin,\n+ 218 public TypeTree::CompositeNode<T...>\n 219 {\n- 220 return {};\n- 221 }\n+ 220\n+ 221 using Node = TypeTree::CompositeNode<T...>;\n 222\n- 223} // end namespace BasisFactory\n+ 223 public:\n 224\n- 225// Backward compatibility\n-226namespace BasisBuilder {\n- 227\n- 228 using namespace BasisFactory;\n- 229\n- 230}\n- 231\n- 232} // end namespace Functions\n- 233} // end namespace Dune\n- 234\n- 235\n- 236#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BASISTAGS_HH\n-Dune::Functions::BasisFactory::flatLexicographic\n-constexpr FlatLexicographic flatLexicographic()\n-Creates a lexicographic merging of direct children without blocking.\n-Definition: basistags.hh:188\n-Dune::Functions::BasisFactory::blockedInterleaved\n-constexpr BlockedInterleaved blockedInterleaved()\n-Creates an interleaved merging of direct children with blocking (i.e. creating\n-blocks at the leaves c...\n-Definition: basistags.hh:218\n-Dune::Functions::BasisFactory::flatInterleaved\n-constexpr FlatInterleaved flatInterleaved()\n-Creates an interleaved merging of direct children without blocking.\n-Definition: basistags.hh:198\n-Dune::Functions::BasisFactory::blockedLexicographic\n-constexpr BlockedLexicographic blockedLexicographic()\n-Creates a lexicographic merging of direct children with blocking (i.e. creating\n-one block per direct ...\n-Definition: basistags.hh:208\n+225 using Element = typename Node::template Child<0>::Type::Element;\n+ 226\n+227 CompositeBasisNode() = default;\n+ 228\n+229 CompositeBasisNode(const typename Node::NodeStorage& children) :\n+ 230 Node(children)\n+ 231 {}\n+ 232\n+ 233 template<typename... Children>\n+234 CompositeBasisNode(const std::shared_ptr<Children>&... children) :\n+ 235 Node(children...)\n+ 236 {}\n+ 237\n+238 const Element& element() const\n+ 239 {\n+ 240 return this->child(Dune::Indices::_0).element();\n+ 241 }\n+ 242\n+ 243 };\n+ 244\n+ 245\n+ 246 template<typename Tree>\n+247 void clearSize(Tree& tree, std::size_t offset)\n+ 248 {\n+ 249 TypeTree::applyToTree(tree,Impl::ClearSizeVisitor(offset));\n+ 250 }\n+ 251\n+ 252 template<typename Tree, typename Entity>\n+253 void bindTree(Tree& tree, const Entity& entity, std::size_t offset = 0)\n+ 254 {\n+ 255 Impl::BindVisitor<Entity> visitor(entity,offset);\n+ 256 TypeTree::applyToTree(tree,visitor);\n+ 257 }\n+ 258\n+ 259 template<typename Tree>\n+260 void initializeTree(Tree& tree, std::size_t treeIndexOffset = 0)\n+ 261 {\n+ 262 Impl::InitializeTreeVisitor visitor(treeIndexOffset);\n+ 263 TypeTree::applyToTree(tree,visitor);\n+ 264 }\n+ 265\n+ 266\n+ 267 } // namespace Functions\n+ 268\n+ 269} // namespace Dune\n+ 270\n+ 271#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::Concept::isIndexMergingStrategy\n-static constexpr bool isIndexMergingStrategy()\n-Definition: basistags.hh:23\n-Dune::Functions::BasisFactory::registerIndexMergingStrategy\n-void registerIndexMergingStrategy(IndexMergingStrategy)\n-Dune::Functions::Concept::IndexMergingStrategy\n-Definition: basistags.hh:15\n-Dune::Functions::Concept::IndexMergingStrategy::require\n-auto require(T &&t) -> decltype(registerIndexMergingStrategy(t))\n-Dune::Functions::BasisFactory::IndexMergingStrategy\n-Base class for index merging strategies to simplify detection.\n-Definition: basistags.hh:44\n-Dune::Functions::BasisFactory::FlatLexicographic\n-Lexicographic merging of direct children without blocking.\n-Definition: basistags.hh:80\n-Dune::Functions::BasisFactory::FlatInterleaved\n-Interleaved merging of direct children without blocking.\n-Definition: basistags.hh:114\n-Dune::Functions::BasisFactory::BlockedLexicographic\n-Lexicographic merging of direct children with blocking (i.e. creating one block\n-per direct child).\n-Definition: basistags.hh:148\n-Dune::Functions::BasisFactory::BlockedInterleaved\n-Interleaved merging of direct children with blocking (i.e. creating blocks at\n-the leaves containing o...\n-Definition: basistags.hh:180\n+Dune::Functions::clearSize\n+void clearSize(Tree &tree, std::size_t offset)\n+Definition: nodes.hh:247\n+Dune::Functions::bindTree\n+void bindTree(Tree &tree, const Entity &entity, std::size_t offset=0)\n+Definition: nodes.hh:253\n+Dune::Functions::initializeTree\n+void initializeTree(Tree &tree, std::size_t treeIndexOffset=0)\n+Definition: nodes.hh:260\n+Dune::Functions::BasisNodeMixin\n+Definition: nodes.hh:117\n+Dune::Functions::BasisNodeMixin::treeIndex\n+size_type treeIndex() const\n+Definition: nodes.hh:147\n+Dune::Functions::BasisNodeMixin::localIndex\n+size_type localIndex(size_type i) const\n+Definition: nodes.hh:136\n+Dune::Functions::BasisNodeMixin::offset\n+size_type offset() const\n+Definition: nodes.hh:154\n+Dune::Functions::BasisNodeMixin::size\n+size_type size() const\n+Definition: nodes.hh:142\n+Dune::Functions::BasisNodeMixin::setOffset\n+void setOffset(const size_type offset)\n+Definition: nodes.hh:159\n+Dune::Functions::BasisNodeMixin::size_type\n+std::size_t size_type\n+Definition: nodes.hh:128\n+Dune::Functions::BasisNodeMixin::BasisNodeMixin\n+BasisNodeMixin()\n+Definition: nodes.hh:130\n+Dune::Functions::BasisNodeMixin::setSize\n+void setSize(const size_type size)\n+Definition: nodes.hh:164\n+Dune::Functions::BasisNodeMixin::setTreeIndex\n+void setTreeIndex(size_type treeIndex)\n+Definition: nodes.hh:169\n+Dune::Functions::LeafBasisNode\n+Definition: nodes.hh:186\n+Dune::Functions::PowerBasisNode\n+Definition: nodes.hh:193\n+Dune::Functions::PowerBasisNode::element\n+const Element & element() const\n+Definition: nodes.hh:207\n+Dune::Functions::PowerBasisNode::Element\n+typename T::Element Element\n+Definition: nodes.hh:199\n+Dune::Functions::PowerBasisNode::PowerBasisNode\n+PowerBasisNode(const typename Node::NodeStorage &children)\n+Definition: nodes.hh:203\n+Dune::Functions::PowerBasisNode::PowerBasisNode\n+PowerBasisNode()=default\n+Dune::Functions::CompositeBasisNode\n+Definition: nodes.hh:219\n+Dune::Functions::CompositeBasisNode::CompositeBasisNode\n+CompositeBasisNode()=default\n+Dune::Functions::CompositeBasisNode::CompositeBasisNode\n+CompositeBasisNode(const typename Node::NodeStorage &children)\n+Definition: nodes.hh:229\n+Dune::Functions::CompositeBasisNode::element\n+const Element & element() const\n+Definition: nodes.hh:238\n+Dune::Functions::CompositeBasisNode::Element\n+typename Node::template Child< 0 >::Type::Element Element\n+Definition: nodes.hh:225\n+Dune::Functions::CompositeBasisNode::CompositeBasisNode\n+CompositeBasisNode(const std::shared_ptr< Children > &... children)\n+Definition: nodes.hh:234\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00182.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00182.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: brezzidouglasmarinibasis.hh File Reference</title>\n+<title>dune-functions: taylorhoodbasis.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -67,62 +67,59 @@\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> |\n <a href=\"#typedef-members\">Typedefs</a> |\n <a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">brezzidouglasmarinibasis.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">taylorhoodbasis.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <array></code><br />\n-<code>#include <dune/common/exceptions.hh></code><br />\n-<code>#include <dune/geometry/referenceelements.hh></code><br />\n-<code>#include <dune/localfunctions/common/virtualinterface.hh></code><br />\n-<code>#include <dune/localfunctions/common/virtualwrappers.hh></code><br />\n-<code>#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube2d.hh></code><br />\n-<code>#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube3d.hh></code><br />\n-<code>#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1simplex2d.hh></code><br />\n-<code>#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2cube2d.hh></code><br />\n-<code>#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2simplex2d.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00134_source.html\">dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00191_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00119_source.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></code><br />\n+<div class=\"textblock\"><code>#include <dune/common/exceptions.hh></code><br />\n+<code>#include <dune/common/reservedvector.hh></code><br />\n+<code>#include <dune/common/indices.hh></code><br />\n+<code>#include <dune/typetree/powernode.hh></code><br />\n+<code>#include <dune/typetree/compositenode.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00179_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00122_source.html\">dune/functions/functionspacebases/lagrangebasis.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00152_source.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></code><br />\n </div>\n <p><a href=\"a00182_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01471.html\">Dune::Functions::BrezziDouglasMariniPreBasis< GV, k ></a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01823.html\">Dune::Functions::TaylorHoodPreBasis< GV, HI ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Pre-basis for lowest order Taylor-Hood basis. <a href=\"a01823.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01467.html\">Dune::Functions::BrezziDouglasMariniNode< GV, k ></a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01815.html\">Dune::Functions::TaylorHoodVelocityTree< GV ></a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01819.html\">Dune::Functions::TaylorHoodBasisTree< GV ></a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00224\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00224.html\">Dune::Functions::BasisFactory</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"typedef-members\" name=\"typedef-members\"></a>\n Typedefs</h2></td></tr>\n-<tr class=\"memitem:a05987d1b6480619710c578ad80a243e5\"><td class=\"memTemplParams\" colspan=\"2\">template<typename GV , int k> </td></tr>\n-<tr class=\"memitem:a05987d1b6480619710c578ad80a243e5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a05987d1b6480619710c578ad80a243e5\">Dune::Functions::BrezziDouglasMariniBasis</a> = DefaultGlobalBasis< BrezziDouglasMariniPreBasis< GV, k > ></td></tr>\n-<tr class=\"memdesc:a05987d1b6480619710c578ad80a243e5\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Basis of a scalar k-th-order BDM finite element space on simplex and cube grids. <a href=\"a00219.html#a05987d1b6480619710c578ad80a243e5\">More...</a><br /></td></tr>\n-<tr class=\"separator:a05987d1b6480619710c578ad80a243e5\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga2ddcf1f3f5bddd7f49ab4d81472aa69a\"><td class=\"memTemplParams\" colspan=\"2\">template<typename GV > </td></tr>\n+<tr class=\"memitem:ga2ddcf1f3f5bddd7f49ab4d81472aa69a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#ga2ddcf1f3f5bddd7f49ab4d81472aa69a\">Dune::Functions::TaylorHoodBasis</a> = DefaultGlobalBasis< TaylorHoodPreBasis< GV > ></td></tr>\n+<tr class=\"memdesc:ga2ddcf1f3f5bddd7f49ab4d81472aa69a\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Nodal basis for a lowest order Taylor-Hood Lagrangean finite element space. <a href=\"a00213.html#ga2ddcf1f3f5bddd7f49ab4d81472aa69a\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga2ddcf1f3f5bddd7f49ab4d81472aa69a\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n Functions</h2></td></tr>\n-<tr class=\"memitem:ga72847f418332ba3d5444a7f153776610\"><td class=\"memTemplParams\" colspan=\"2\">template<std::size_t k> </td></tr>\n-<tr class=\"memitem:ga72847f418332ba3d5444a7f153776610\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#ga72847f418332ba3d5444a7f153776610\">Dune::Functions::BasisFactory::brezziDouglasMarini</a> ()</td></tr>\n-<tr class=\"memdesc:ga72847f418332ba3d5444a7f153776610\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a pre-basis factory that can create a Brezzi-Douglas-Marini pre-basis. <a href=\"a00213.html#ga72847f418332ba3d5444a7f153776610\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga72847f418332ba3d5444a7f153776610\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga2384fc6a8ee2005fb29adb7221609ce3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#ga2384fc6a8ee2005fb29adb7221609ce3\">Dune::Functions::BasisFactory::taylorHood</a> ()</td></tr>\n+<tr class=\"memdesc:ga2384fc6a8ee2005fb29adb7221609ce3\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a pre-basis factory that can create a Taylor-Hood pre-basis. <a href=\"a00213.html#ga2384fc6a8ee2005fb29adb7221609ce3\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga2384fc6a8ee2005fb29adb7221609ce3\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -6,55 +6,47 @@\n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n Classes | Namespaces | Typedefs | Functions\n-brezzidouglasmarinibasis.hh File Reference\n-#include <array>\n+taylorhoodbasis.hh File Reference\n #include <dune/common/exceptions.hh>\n-#include <dune/geometry/referenceelements.hh>\n-#include <dune/localfunctions/common/virtualinterface.hh>\n-#include <dune/localfunctions/common/virtualwrappers.hh>\n-#include <dune/localfunctions/brezzidouglasmarini/\n-brezzidouglasmarini1cube2d.hh>\n-#include <dune/localfunctions/brezzidouglasmarini/\n-brezzidouglasmarini1cube3d.hh>\n-#include <dune/localfunctions/brezzidouglasmarini/\n-brezzidouglasmarini1simplex2d.hh>\n-#include <dune/localfunctions/brezzidouglasmarini/\n-brezzidouglasmarini2cube2d.hh>\n-#include <dune/localfunctions/brezzidouglasmarini/\n-brezzidouglasmarini2simplex2d.hh>\n-#include <dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh>\n+#include <dune/common/reservedvector.hh>\n+#include <dune/common/indices.hh>\n+#include <dune/typetree/powernode.hh>\n+#include <dune/typetree/compositenode.hh>\n #include <dune/functions/functionspacebases/nodes.hh>\n+#include <dune/functions/functionspacebases/lagrangebasis.hh>\n #include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-class \u00a0Dune::Functions::BrezziDouglasMariniPreBasis<_GV,_k_>\n+class \u00a0Dune::Functions::TaylorHoodPreBasis<_GV,_HI_>\n+\u00a0 Pre-basis for lowest order Taylor-Hood basis. More...\n \u00a0\n-class \u00a0Dune::Functions::BrezziDouglasMariniNode<_GV,_k_>\n+class \u00a0Dune::Functions::TaylorHoodVelocityTree<_GV_>\n+\u00a0\n+class \u00a0Dune::Functions::TaylorHoodBasisTree<_GV_>\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n namespace \u00a0Dune::Functions::BasisFactory\n \u00a0\n Typedefs\n-template<typename GV , int k>\n-using\u00a0Dune::Functions::BrezziDouglasMariniBasis = DefaultGlobalBasis<\n- BrezziDouglasMariniPreBasis< GV, k > >\n-\u00a0 Basis of a scalar k-th-order BDM finite element space on simplex and\n- cube grids. More...\n+template<typename GV >\n+using\u00a0Dune::Functions::TaylorHoodBasis = DefaultGlobalBasis<\n+ TaylorHoodPreBasis< GV > >\n+\u00a0 Nodal basis for a lowest order Taylor-Hood Lagrangean finite element\n+ space. More...\n \u00a0\n Functions\n-template<std::size_t k>\n-auto\u00a0Dune::Functions::BasisFactory::brezziDouglasMarini ()\n-\u00a0 Create a pre-basis factory that can create a Brezzi-Douglas-Marini pre-\n- basis. More...\n+auto\u00a0Dune::Functions::BasisFactory::taylorHood ()\n+\u00a0 Create a pre-basis factory that can create a Taylor-Hood pre-basis.\n+ More...\n \u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00182_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00182_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: brezzidouglasmarinibasis.hh Source File</title>\n+<title>dune-functions: taylorhoodbasis.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,389 +62,352 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">brezzidouglasmarinibasis.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">taylorhoodbasis.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00182.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <array></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <dune/common/exceptions.hh></span></div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <dune/geometry/referenceelements.hh></span></div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <dune/common/exceptions.hh></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <dune/common/reservedvector.hh></span></div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <dune/common/indices.hh></span></div>\n <div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/localfunctions/common/virtualinterface.hh></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/localfunctions/common/virtualwrappers.hh></span></div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/typetree/powernode.hh></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/typetree/compositenode.hh></span></div>\n <div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube2d.hh></span></div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube3d.hh></span></div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1simplex2d.hh></span></div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"preprocessor\">#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2cube2d.hh></span></div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"preprocessor\">#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2simplex2d.hh></span></div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00134.html\">dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00191.html\">dune/functions/functionspacebases/nodes.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00119.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> </div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> </div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"keyword\">namespace </span>Impl {</div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> </div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> <span class=\"keyword\">template</span><<span class=\"keywordtype\">int</span> dim, <span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R, std::<span class=\"keywordtype\">size_t</span> k></div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span> <span class=\"keyword\">struct </span>BDMSimplexLocalInfo</div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> {</div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> <span class=\"keyword\">static_assert</span>((AlwaysFalse<D>::value),<span class=\"stringliteral\">"The requested type of BDM element is not implemented, sorry!"</span>);</div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> };</div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00179.html\">dune/functions/functionspacebases/nodes.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00122.html\">dune/functions/functionspacebases/lagrangebasis.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00152.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span> </div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> </div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"comment\">// This is the reusable part of the basis. It contains</span></div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"comment\">//</span></div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span><span class=\"comment\">// TaylorHoodPreBasis</span></div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"comment\">// TaylorHoodBasisTree</span></div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span><span class=\"comment\">// TaylorHoodVelocityTree</span></div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span><span class=\"comment\">//</span></div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span><span class=\"comment\">// The pre-basis allows to create the others and is the owner of possible shared</span></div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span><span class=\"comment\">// state. These components do _not_ depend on the global basis and local view</span></div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span><span class=\"comment\">// and can be used without a global basis.</span></div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span><span class=\"comment\">// *****************************************************************************</span></div>\n <div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> </div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R></div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> <span class=\"keyword\">struct </span>BDMSimplexLocalInfo<2,D,R,1></div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> {</div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> <span class=\"keyword\">using </span>FiniteElement = BDM1Simplex2DLocalFiniteElement<D,R>;</div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> std::size_t Variants = 8;</div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> };</div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> </div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R></div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> <span class=\"keyword\">struct </span>BDMSimplexLocalInfo<2,D,R,2></div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> {</div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> <span class=\"keyword\">using </span>FiniteElement = BDM2Simplex2DLocalFiniteElement<D,R>;</div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> std::size_t Variants = 8;</div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> };</div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> <span class=\"keyword\">template</span><<span class=\"keywordtype\">int</span> dim, <span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R, std::<span class=\"keywordtype\">size_t</span> k></div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> <span class=\"keyword\">struct </span>BDMCubeLocalInfo</div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> {</div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> <span class=\"keyword\">static_assert</span>((AlwaysFalse<D>::value),<span class=\"stringliteral\">"The requested type of BDM element is not implemented, sorry!"</span>);</div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> };</div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> </div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R></div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> <span class=\"keyword\">struct </span>BDMCubeLocalInfo<2,D,R,1></div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> {</div>\n-<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> <span class=\"keyword\">using </span>FiniteElement = BDM1Cube2DLocalFiniteElement<D,R>;</div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> std::size_t Variants = 16;</div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> };</div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> </div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R></div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> <span class=\"keyword\">struct </span>BDMCubeLocalInfo<2,D,R,2></div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> {</div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> <span class=\"keyword\">using </span>FiniteElement = BDM2Cube2DLocalFiniteElement<D,R>;</div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> std::size_t Variants = 16;</div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> };</div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV></div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span><span class=\"keyword\">class </span>TaylorHoodVelocityTree;</div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> </div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV></div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span><span class=\"keyword\">class </span>TaylorHoodBasisTree;</div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> </div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">bool</span> HI=false></div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html\"> 60</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01823.html\">TaylorHoodPreBasis</a></div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span>{</div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">bool</span> useHybridIndices = HI;</div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> </div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dim = GV::dimension;</div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> </div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span><span class=\"keyword\">public</span>:</div>\n <div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> </div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> D, <span class=\"keyword\">typename</span> R></div>\n-<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> <span class=\"keyword\">struct </span>BDMCubeLocalInfo<3,D,R,1></div>\n-<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> {</div>\n-<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> <span class=\"keyword\">using </span>FiniteElement = BDM1Cube3DLocalFiniteElement<D,R>;</div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> std::size_t Variants = 64;</div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> };</div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> </div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> dim, <span class=\"keyword\">typename</span> R, std::<span class=\"keywordtype\">size_t</span> k></div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> <span class=\"keyword\">class </span>BDMLocalFiniteElementMap</div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> {</div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> <span class=\"keyword\">using </span>D = <span class=\"keyword\">typename</span> GV::ctype;</div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> <span class=\"keyword\">using </span>CubeFiniteElement = <span class=\"keyword\">typename</span> BDMCubeLocalInfo<dim, D, R, k>::FiniteElement;</div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> <span class=\"keyword\">using </span>SimplexFiniteElement = <span class=\"keyword\">typename</span> BDMSimplexLocalInfo<dim, D, R, k>::FiniteElement;</div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> </div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> <span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> </div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> <span class=\"keyword\">using </span>T = LocalBasisTraits<D, dim, FieldVector<D,dim>, R, dim, FieldVector<R,dim>, FieldMatrix<D,dim,dim> >;</div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> <span class=\"keyword\">using </span>FiniteElement = LocalFiniteElementVirtualInterface<T>;</div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> </div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> BDMLocalFiniteElementMap(<span class=\"keyword\">const</span> GV& gv)</div>\n-<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> : is_(&(gv.indexSet())), orient_(gv.size(0))</div>\n-<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> {</div>\n-<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> cubeVariant_.resize(BDMCubeLocalInfo<dim, D, R, k>::Variants);</div>\n-<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> simplexVariant_.resize(BDMSimplexLocalInfo<dim, D, R, k>::Variants);</div>\n-<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> </div>\n-<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> <span class=\"comment\">// create all variants</span></div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i = 0; i < cubeVariant_.size(); i++)</div>\n-<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> cubeVariant_[i] = std::make_unique<LocalFiniteElementVirtualImp<CubeFiniteElement> >(CubeFiniteElement(i));</div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> </div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">size_t</span> i = 0; i < simplexVariant_.size(); i++)</div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> simplexVariant_[i] = std::make_unique<LocalFiniteElementVirtualImp<SimplexFiniteElement> >(SimplexFiniteElement(i));</div>\n-<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> </div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> <span class=\"comment\">// compute orientation for all elements</span></div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> <span class=\"comment\">// loop once over the grid</span></div>\n-<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& cell : elements(gv))</div>\n-<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> {</div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> myId = is_->index(cell);</div>\n-<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> orient_[myId] = 0;</div>\n-<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> </div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> <span class=\"keywordflow\">for</span> (<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& intersection : intersections(gv,cell))</div>\n-<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> {</div>\n-<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> <span class=\"keywordflow\">if</span> (intersection.neighbor() && (is_->index(intersection.outside()) > myId))</div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> orient_[myId] |= (1 << intersection.indexInInside());</div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> }</div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> }</div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> }</div>\n+<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#a4fbd3d92587a03f3871066968035f194\"> 69</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01823.html#a4fbd3d92587a03f3871066968035f194\">GridView</a> = GV;</div>\n+<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> </div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\"> 72</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">size_type</a> = std::size_t;</div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> </div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#a8082f8fdbed2c5236bd5a318dd05fe6a\"> 75</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01819.html\">Node</a> = <a class=\"code hl_class\" href=\"a01819.html\">TaylorHoodBasisTree<GV></a>;</div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> </div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#aa392e5ef9f61616b5761fe47dec36471\"> 77</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">size_type</a> <a class=\"code hl_variable\" href=\"a01823.html#aa392e5ef9f61616b5761fe47dec36471\">maxMultiIndexSize</a> = useHybridIndices ? 3 : 2;</div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#a2ab779870149b404f47be6e5550257ea\"> 78</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">size_type</a> <a class=\"code hl_variable\" href=\"a01823.html#a2ab779870149b404f47be6e5550257ea\">minMultiIndexSize</a> = 2;</div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#ac232b435a11882f871f15bb1dc9b70aa\"> 79</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">size_type</a> <a class=\"code hl_variable\" href=\"a01823.html#ac232b435a11882f871f15bb1dc9b70aa\">multiIndexBufferSize</a> = <a class=\"code hl_variable\" href=\"a01823.html#aa392e5ef9f61616b5761fe47dec36471\">maxMultiIndexSize</a>;</div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> </div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> </div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01671.html\">PQ1PreBasis</a> = <a class=\"code hl_class\" href=\"a01671.html\">LagrangePreBasis<GV,1></a>;</div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01671.html\">PQ2PreBasis</a> = <a class=\"code hl_class\" href=\"a01671.html\">LagrangePreBasis<GV,2></a>;</div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> </div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> </div>\n+<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#a12fa8eb410a271861631e77ada59b3ba\"> 89</a></span> <a class=\"code hl_function\" href=\"a01823.html#a12fa8eb410a271861631e77ada59b3ba\">TaylorHoodPreBasis</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01823.html#a4fbd3d92587a03f3871066968035f194\">GridView</a>& gv) :</div>\n+<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> <a class=\"code hl_variable\" href=\"a01823.html#a4ba12b2015f3761ec28e95b3a120cffb\">gridView_</a>(gv),</div>\n+<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> <a class=\"code hl_variable\" href=\"a01823.html#a9d26725c5f9e2f84e0b504c3bffcfe42\">pq1PreBasis_</a>(gv),</div>\n+<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> <a class=\"code hl_variable\" href=\"a01823.html#a86ed45c92fecf521019dcc18d90dc4d3\">pq2PreBasis_</a>(gv)</div>\n+<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> {}</div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> </div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#ae9dddae8c0e1f977aee5acbcaef8cca7\"> 96</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01823.html#ae9dddae8c0e1f977aee5acbcaef8cca7\">initializeIndices</a>()</div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> {</div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> <a class=\"code hl_variable\" href=\"a01823.html#a9d26725c5f9e2f84e0b504c3bffcfe42\">pq1PreBasis_</a>.<a class=\"code hl_function\" href=\"a01671.html#a7318cbabd5f57d0b6cbab1b2dc41fff8\">initializeIndices</a>();</div>\n+<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> <a class=\"code hl_variable\" href=\"a01823.html#a86ed45c92fecf521019dcc18d90dc4d3\">pq2PreBasis_</a>.<a class=\"code hl_function\" href=\"a01671.html#a7318cbabd5f57d0b6cbab1b2dc41fff8\">initializeIndices</a>();</div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> }</div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> </div>\n+<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#a18a80001dfe453ce542ab7896e27c10e\"> 103</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01823.html#a4fbd3d92587a03f3871066968035f194\">GridView</a>& <a class=\"code hl_function\" href=\"a01823.html#a18a80001dfe453ce542ab7896e27c10e\">gridView</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01823.html#a4ba12b2015f3761ec28e95b3a120cffb\">gridView_</a>;</div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> }</div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> </div>\n+<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#a6f5f71bba7ced2b2a1fe84798bd39e81\"> 109</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01823.html#a6f5f71bba7ced2b2a1fe84798bd39e81\">update</a> (<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01823.html#a4fbd3d92587a03f3871066968035f194\">GridView</a>& gv)</div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> {</div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> <a class=\"code hl_variable\" href=\"a01823.html#a9d26725c5f9e2f84e0b504c3bffcfe42\">pq1PreBasis_</a>.<a class=\"code hl_function\" href=\"a01671.html#a9a9c2b3c8b2b46160d68d46cd2ed2c00\">update</a>(gv);</div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> <a class=\"code hl_variable\" href=\"a01823.html#a86ed45c92fecf521019dcc18d90dc4d3\">pq2PreBasis_</a>.<a class=\"code hl_function\" href=\"a01671.html#a9a9c2b3c8b2b46160d68d46cd2ed2c00\">update</a>(gv);</div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> }</div>\n <div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> </div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> EntityType></div>\n-<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> <span class=\"keyword\">const</span> FiniteElement& find(<span class=\"keyword\">const</span> EntityType& e)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> <span class=\"keywordflow\">if</span> (e.type().isCube())</div>\n-<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> <span class=\"keywordflow\">return</span> *cubeVariant_[orient_[is_->index(e)]];</div>\n-<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> <span class=\"keywordflow\">else</span></div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> <span class=\"keywordflow\">return</span> *simplexVariant_[orient_[is_->index(e)]];</div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> }</div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> </div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> <span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> std::vector<std::unique_ptr<LocalFiniteElementVirtualImp<CubeFiniteElement> > > cubeVariant_;</div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> std::vector<std::unique_ptr<LocalFiniteElementVirtualImp<SimplexFiniteElement> > > simplexVariant_;</div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> <span class=\"keyword\">const</span> <span class=\"keyword\">typename</span> GV::IndexSet* is_;</div>\n-<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> std::vector<unsigned char> orient_;</div>\n-<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> };</div>\n-<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> </div>\n-<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> </div>\n-<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span>} <span class=\"comment\">// namespace Impl</span></div>\n-<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> </div>\n+<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#ab02c713869cdc66f6a5baec76211773c\"> 118</a></span> <a class=\"code hl_class\" href=\"a01819.html\">Node</a> <a class=\"code hl_function\" href=\"a01823.html#ab02c713869cdc66f6a5baec76211773c\">makeNode</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01819.html\">Node</a>{};</div>\n+<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> }</div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> </div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#a91e51ff12e346b507bf0c538ea80f0de\"> 124</a></span> <a class=\"code hl_typedef\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">size_type</a> <a class=\"code hl_function\" href=\"a01823.html#a91e51ff12e346b507bf0c538ea80f0de\">size</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> <span class=\"keywordflow\">return</span> 2;</div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> }</div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> </div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n+<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#a496ca50aeae7e9ac1e3cdb4e8118213d\"> 131</a></span> <a class=\"code hl_typedef\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">size_type</a> <a class=\"code hl_function\" href=\"a01823.html#a496ca50aeae7e9ac1e3cdb4e8118213d\">size</a>(<span class=\"keyword\">const</span> SizePrefix& prefix)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> <span class=\"keywordflow\">return</span> sizeImp<useHybridIndices>(prefix);</div>\n+<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> }</div>\n <div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> </div>\n-<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span><span class=\"comment\">// *****************************************************************************</span></div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span><span class=\"comment\">// This is the reusable part of the basis. It contains</span></div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span><span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span><span class=\"comment\">// BrezziDouglasMariniPreBasis</span></div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span><span class=\"comment\">// BrezziDouglasMariniNode</span></div>\n-<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span><span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span><span class=\"comment\">// The pre-basis allows to create the others and is the owner of possible shared</span></div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span><span class=\"comment\">// state. These components do _not_ depend on the global basis and local view</span></div>\n-<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span><span class=\"comment\">// and can be used without a global basis.</span></div>\n-<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span><span class=\"comment\">// *****************************************************************************</span></div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> </div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k></div>\n-<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span><span class=\"keyword\">class </span>BrezziDouglasMariniNode;</div>\n-<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> </div>\n-<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k></div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html\"> 151</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01471.html\">BrezziDouglasMariniPreBasis</a></div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span>{</div>\n-<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dim = GV::dimension;</div>\n-<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> <span class=\"keyword\">using </span>FiniteElementMap = <span class=\"keyword\">typename</span> Impl::BDMLocalFiniteElementMap<GV, dim, double, k>;</div>\n-<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> </div>\n-<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> </div>\n-<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#a73e7fec0c1f6f0c0316bbfceec2c4a00\"> 159</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01471.html#a73e7fec0c1f6f0c0316bbfceec2c4a00\">GridView</a> = GV;</div>\n-<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#a102944d1f32c8b29c6c297f252c7c1f1\"> 160</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01471.html#a102944d1f32c8b29c6c297f252c7c1f1\">size_type</a> = std::size_t;</div>\n-<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> </div>\n-<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#a1de420ec52e71db3023fcfc505f06d07\"> 162</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01467.html\">Node</a> = <a class=\"code hl_class\" href=\"a01467.html\">BrezziDouglasMariniNode<GV, k></a>;</div>\n-<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> </div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#a602c67342e0fbd8820ac3b07727e7a2b\"> 164</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01471.html#a102944d1f32c8b29c6c297f252c7c1f1\">size_type</a> <a class=\"code hl_variable\" href=\"a01471.html#a602c67342e0fbd8820ac3b07727e7a2b\">maxMultiIndexSize</a> = 1;</div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#a5c9a1db7d0b9553e9a5ae8cad57fe4fa\"> 165</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01471.html#a102944d1f32c8b29c6c297f252c7c1f1\">size_type</a> <a class=\"code hl_variable\" href=\"a01471.html#a5c9a1db7d0b9553e9a5ae8cad57fe4fa\">minMultiIndexSize</a> = 1;</div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#adc251df663d009c59b79a4ea89e77ab7\"> 166</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01471.html#a102944d1f32c8b29c6c297f252c7c1f1\">size_type</a> <a class=\"code hl_variable\" href=\"a01471.html#adc251df663d009c59b79a4ea89e77ab7\">multiIndexBufferSize</a> = 1;</div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> </div>\n-<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#a8a676a86dd435bea14de3bc28fd05cd2\"> 169</a></span> <a class=\"code hl_function\" href=\"a01471.html#a8a676a86dd435bea14de3bc28fd05cd2\">BrezziDouglasMariniPreBasis</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01471.html#a73e7fec0c1f6f0c0316bbfceec2c4a00\">GridView</a>& gv) :</div>\n-<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> <a class=\"code hl_variable\" href=\"a01471.html#af43ee62056d6da93f39b88c2a834b38b\">gridView_</a>(gv),</div>\n-<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> <a class=\"code hl_variable\" href=\"a01471.html#aac5619ab7c2f133c3cb1532ccab671ef\">finiteElementMap_</a>(gv)</div>\n-<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> {</div>\n-<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> <span class=\"comment\">// There is no inherent reason why the basis shouldn't work for grids with more than one</span></div>\n-<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> <span class=\"comment\">// element types. Somebody simply has to sit down and implement the missing bits.</span></div>\n-<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> <span class=\"keywordflow\">if</span> (gv.indexSet().types(0).size() > 1)</div>\n-<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"Brezzi-Douglas-Marini basis is only implemented for grids with a single element type"</span>);</div>\n+<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> </div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> <span class=\"keyword\">template</span><<span class=\"keywordtype\">bool</span> hi, <span class=\"keyword\">class </span>SizePrefix,</div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> <span class=\"keyword\">typename</span> std::enable_if<not hi,int>::type = 0></div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> <a class=\"code hl_typedef\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">size_type</a> sizeImp(<span class=\"keyword\">const</span> SizePrefix& prefix)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> <span class=\"keywordflow\">if</span> (prefix.size() == 0)</div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> <span class=\"keywordflow\">return</span> 2;</div>\n+<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> <span class=\"keywordflow\">if</span> (prefix.size() == 1)</div>\n+<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> {</div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> <span class=\"keywordflow\">if</span> (prefix[0] == 0)</div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> <span class=\"keywordflow\">return</span> dim * <a class=\"code hl_variable\" href=\"a01823.html#a86ed45c92fecf521019dcc18d90dc4d3\">pq2PreBasis_</a>.<a class=\"code hl_function\" href=\"a01671.html#adabf2688eef2d33a180ae9cfbde492b1\">size</a>();</div>\n+<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> <span class=\"keywordflow\">if</span> (prefix[0] == 1)</div>\n+<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01823.html#a9d26725c5f9e2f84e0b504c3bffcfe42\">pq1PreBasis_</a>.<a class=\"code hl_function\" href=\"a01671.html#adabf2688eef2d33a180ae9cfbde492b1\">size</a>();</div>\n+<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> }</div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> assert(prefix.size() == 2);</div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> <span class=\"keywordflow\">return</span> 0;</div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> }</div>\n+<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> </div>\n+<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> <span class=\"keyword\">template</span><<span class=\"keywordtype\">bool</span> hi, <span class=\"keyword\">class </span>SizePrefix,</div>\n+<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> <span class=\"keyword\">typename</span> std::enable_if<hi,int>::type = 0></div>\n+<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> <a class=\"code hl_typedef\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">size_type</a> sizeImp(<span class=\"keyword\">const</span> SizePrefix& prefix)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> <span class=\"keywordflow\">if</span> (prefix.size() == 0)</div>\n+<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> <span class=\"keywordflow\">return</span> 2;</div>\n+<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> <span class=\"keywordflow\">if</span> (prefix.size() == 1)</div>\n+<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> {</div>\n+<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> <span class=\"keywordflow\">if</span> (prefix[0] == 0)</div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01823.html#a86ed45c92fecf521019dcc18d90dc4d3\">pq2PreBasis_</a>.<a class=\"code hl_function\" href=\"a01671.html#adabf2688eef2d33a180ae9cfbde492b1\">size</a>();</div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> <span class=\"keywordflow\">if</span> (prefix[0] == 1)</div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01823.html#a9d26725c5f9e2f84e0b504c3bffcfe42\">pq1PreBasis_</a>.<a class=\"code hl_function\" href=\"a01671.html#adabf2688eef2d33a180ae9cfbde492b1\">size</a>();</div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> }</div>\n+<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> <span class=\"keywordflow\">if</span> (prefix.size() == 2)</div>\n+<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> {</div>\n+<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> <span class=\"keywordflow\">if</span> (prefix[0] == 0)</div>\n+<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> <span class=\"keywordflow\">return</span> dim;</div>\n+<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> <span class=\"keywordflow\">if</span> (prefix[0] == 1)</div>\n+<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> <span class=\"keywordflow\">return</span> 0;</div>\n+<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> }</div>\n+<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> assert(prefix.size() == 3);</div>\n+<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> <span class=\"keywordflow\">return</span> 0;</div>\n <div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> }</div>\n <div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> </div>\n-<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#ab5cfa8d3d09efabba16bacfe00ec8395\"> 179</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01471.html#ab5cfa8d3d09efabba16bacfe00ec8395\">initializeIndices</a>()</div>\n-<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> {</div>\n-<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> <a class=\"code hl_variable\" href=\"a01471.html#a652912b1867705a80ee3d8562b916939\">codimOffset_</a>[0] = 0;</div>\n-<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> <a class=\"code hl_variable\" href=\"a01471.html#a652912b1867705a80ee3d8562b916939\">codimOffset_</a>[1] = <a class=\"code hl_variable\" href=\"a01471.html#a652912b1867705a80ee3d8562b916939\">codimOffset_</a>[0] + <a class=\"code hl_variable\" href=\"a01471.html#a1993f6e6d5fe6a4c00774c5065036a75\">dofsPerCodim_</a>[0] * <a class=\"code hl_variable\" href=\"a01471.html#af43ee62056d6da93f39b88c2a834b38b\">gridView_</a>.size(0);</div>\n-<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span> <span class=\"comment\">//if (dim==3) codimOffset_[2] = codimOffset_[1] + dofsPerCodim[1] * gridView_.size(1);</span></div>\n-<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span> }</div>\n-<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> </div>\n-<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#acaba7d4affc7e11e63d12ca6d289dad1\"> 188</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01471.html#a73e7fec0c1f6f0c0316bbfceec2c4a00\">GridView</a>& <a class=\"code hl_function\" href=\"a01471.html#acaba7d4affc7e11e63d12ca6d289dad1\">gridView</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> </div>\n+<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#a93d67530c52138ed6cdf815a4b657eaf\"> 182</a></span> <a class=\"code hl_typedef\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">size_type</a> <a class=\"code hl_function\" href=\"a01823.html#a93d67530c52138ed6cdf815a4b657eaf\">dimension</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span> <span class=\"keywordflow\">return</span> dim * <a class=\"code hl_variable\" href=\"a01823.html#a86ed45c92fecf521019dcc18d90dc4d3\">pq2PreBasis_</a>.<a class=\"code hl_function\" href=\"a01671.html#adabf2688eef2d33a180ae9cfbde492b1\">size</a>() + <a class=\"code hl_variable\" href=\"a01823.html#a9d26725c5f9e2f84e0b504c3bffcfe42\">pq1PreBasis_</a>.<a class=\"code hl_function\" href=\"a01671.html#adabf2688eef2d33a180ae9cfbde492b1\">size</a>();</div>\n+<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> }</div>\n+<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> </div>\n+<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#aeebe78092668f359c8a790810f413372\"> 188</a></span> <a class=\"code hl_typedef\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">size_type</a> <a class=\"code hl_function\" href=\"a01823.html#aeebe78092668f359c8a790810f413372\">maxNodeSize</a>()<span class=\"keyword\"> const</span></div>\n <div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01471.html#af43ee62056d6da93f39b88c2a834b38b\">gridView_</a>;</div>\n+<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span> <span class=\"keywordflow\">return</span> dim * <a class=\"code hl_variable\" href=\"a01823.html#a86ed45c92fecf521019dcc18d90dc4d3\">pq2PreBasis_</a>.<a class=\"code hl_function\" href=\"a01671.html#ac91dcb0f3589b23598df3ced95d50d0c\">maxNodeSize</a>() + <a class=\"code hl_variable\" href=\"a01823.html#a9d26725c5f9e2f84e0b504c3bffcfe42\">pq1PreBasis_</a>.<a class=\"code hl_function\" href=\"a01671.html#ac91dcb0f3589b23598df3ced95d50d0c\">maxNodeSize</a>();</div>\n <div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> }</div>\n <div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> </div>\n-<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> <span class=\"comment\">/* \\brief Update the stored grid view, to be called if the grid has changed */</span></div>\n-<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#aaf7c89c03020de08177fc5763172fe4e\"> 194</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01471.html#aaf7c89c03020de08177fc5763172fe4e\">update</a> (<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01471.html#a73e7fec0c1f6f0c0316bbfceec2c4a00\">GridView</a>& gv)</div>\n-<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> {</div>\n-<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> <a class=\"code hl_variable\" href=\"a01471.html#af43ee62056d6da93f39b88c2a834b38b\">gridView_</a> = gv;</div>\n+<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n+<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#ab5bb04fffb5031fd76d11efcf28d738b\"> 194</a></span> It <a class=\"code hl_function\" href=\"a01823.html#ab5bb04fffb5031fd76d11efcf28d738b\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01819.html\">Node</a>& node, It it)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> <span class=\"keywordflow\">return</span> indicesImp<useHybridIndices>(node, it);</div>\n <div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> }</div>\n <div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> </div>\n-<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#a71dfd3bb1f044e63beb091078958ec09\"> 202</a></span> <a class=\"code hl_class\" href=\"a01467.html\">Node</a> <a class=\"code hl_function\" href=\"a01471.html#a71dfd3bb1f044e63beb091078958ec09\">makeNode</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01467.html\">Node</a>{&<a class=\"code hl_variable\" href=\"a01471.html#aac5619ab7c2f133c3cb1532ccab671ef\">finiteElementMap_</a>};</div>\n-<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span> }</div>\n-<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> </div>\n-<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#ad52ffa5d76a4293f6570f523590c7776\"> 207</a></span> <a class=\"code hl_typedef\" href=\"a01471.html#a102944d1f32c8b29c6c297f252c7c1f1\">size_type</a> <a class=\"code hl_function\" href=\"a01471.html#ad52ffa5d76a4293f6570f523590c7776\">size</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01471.html#a1993f6e6d5fe6a4c00774c5065036a75\">dofsPerCodim_</a>[0] * <a class=\"code hl_variable\" href=\"a01471.html#af43ee62056d6da93f39b88c2a834b38b\">gridView_</a>.size(0) + <a class=\"code hl_variable\" href=\"a01471.html#a1993f6e6d5fe6a4c00774c5065036a75\">dofsPerCodim_</a>[1] * <a class=\"code hl_variable\" href=\"a01471.html#af43ee62056d6da93f39b88c2a834b38b\">gridView_</a>.size(1); <span class=\"comment\">// only 2d</span></div>\n-<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> }</div>\n-<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> </div>\n-<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n-<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#a6c46d94ec8cf7cc85af4e5f8ec60f60a\"> 214</a></span> <a class=\"code hl_typedef\" href=\"a01471.html#a102944d1f32c8b29c6c297f252c7c1f1\">size_type</a> <a class=\"code hl_function\" href=\"a01471.html#a6c46d94ec8cf7cc85af4e5f8ec60f60a\">size</a>(<span class=\"keyword\">const</span> SizePrefix prefix)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span> assert(prefix.size() == 0 || prefix.size() == 1);</div>\n-<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> <span class=\"keywordflow\">return</span> (prefix.size() == 0) ? <a class=\"code hl_function\" href=\"a01471.html#ad52ffa5d76a4293f6570f523590c7776\">size</a>() : 0;</div>\n-<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> }</div>\n-<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> </div>\n-<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#a3ff046bf8b883ccdf97ea293eae3dba0\"> 221</a></span> <a class=\"code hl_typedef\" href=\"a01471.html#a102944d1f32c8b29c6c297f252c7c1f1\">size_type</a> <a class=\"code hl_function\" href=\"a01471.html#a3ff046bf8b883ccdf97ea293eae3dba0\">dimension</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01471.html#ad52ffa5d76a4293f6570f523590c7776\">size</a>();</div>\n-<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> }</div>\n-<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span> </div>\n-<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#aef13302e7f426077b56121d29c1af505\"> 226</a></span> <a class=\"code hl_typedef\" href=\"a01471.html#a102944d1f32c8b29c6c297f252c7c1f1\">size_type</a> <a class=\"code hl_function\" href=\"a01471.html#aef13302e7f426077b56121d29c1af505\">maxNodeSize</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> <span class=\"comment\">// The implementation currently only supports grids with a single element type.</span></div>\n-<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> <span class=\"comment\">// We can therefore return the actual number of dofs here.</span></div>\n-<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span> GeometryType elementType = *(<a class=\"code hl_variable\" href=\"a01471.html#af43ee62056d6da93f39b88c2a834b38b\">gridView_</a>.indexSet().types(0).begin());</div>\n-<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span> <span class=\"keywordtype\">size_t</span> numFaces = ReferenceElements<double,dim>::general(elementType).size(1);</div>\n-<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01471.html#a1993f6e6d5fe6a4c00774c5065036a75\">dofsPerCodim_</a>[0] + <a class=\"code hl_variable\" href=\"a01471.html#a1993f6e6d5fe6a4c00774c5065036a75\">dofsPerCodim_</a>[1] * numFaces;</div>\n-<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> }</div>\n-<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> </div>\n-<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"> 240</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n-<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#afae24105eb45c9cd8753ab732447269f\"> 241</a></span> It <a class=\"code hl_function\" href=\"a01471.html#afae24105eb45c9cd8753ab732447269f\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01467.html\">Node</a>& node, It it)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridIndexSet = <a class=\"code hl_function\" href=\"a01471.html#acaba7d4affc7e11e63d12ca6d289dad1\">gridView</a>().indexSet();</div>\n-<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& element = node.<a class=\"code hl_function\" href=\"a01467.html#ae8e23a4ee0a66bea03e2189c42569638\">element</a>();</div>\n-<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> </div>\n-<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span> <span class=\"comment\">// throw if element is not of predefined type</span></div>\n-<div class=\"line\"><a id=\"l00247\" name=\"l00247\"></a><span class=\"lineno\"> 247</span> <span class=\"keywordflow\">if</span> (not(element.type().isCube()) and not(element.type().isSimplex()))</div>\n-<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"> 248</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"BrezziDouglasMariniBasis only implemented for cube and simplex elements."</span>);</div>\n-<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span> </div>\n-<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span> <span class=\"keywordflow\">for</span>(std::size_t i=0, end=node.<a class=\"code hl_function\" href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">size</a>(); i<end; ++i, ++it)</div>\n-<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span> {</div>\n-<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span> Dune::LocalKey localKey = node.<a class=\"code hl_function\" href=\"a01467.html#a058497cca9f58ef4c540569c10e21922\">finiteElement</a>().localCoefficients().localKey(i);</div>\n-<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"> 253</span> </div>\n-<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"> 254</span> <span class=\"comment\">// The dimension of the entity that the current dof is related to</span></div>\n-<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span> <span class=\"keywordtype\">size_t</span> subentity = localKey.subEntity();</div>\n-<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"> 256</span> <span class=\"keywordtype\">size_t</span> codim = localKey.codim();</div>\n+<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span><span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> </div>\n+<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> MultiIndex></div>\n+<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#a9ef33019c438c6bceea7d2b9c44df05a\"> 202</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01823.html#a9ef33019c438c6bceea7d2b9c44df05a\">multiIndexPushFront</a>(MultiIndex& M, <a class=\"code hl_typedef\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">size_type</a> M0)</div>\n+<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> {</div>\n+<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> M.resize(M.size()+1);</div>\n+<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span> <span class=\"keywordflow\">for</span>(std::size_t i=M.size()-1; i>0; --i)</div>\n+<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> M[i] = M[i-1];</div>\n+<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> M[0] = M0;</div>\n+<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span> }</div>\n+<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> </div>\n+<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> <span class=\"keyword\">template</span><<span class=\"keywordtype\">bool</span> hi, <span class=\"keyword\">class </span>It,</div>\n+<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> <span class=\"keyword\">typename</span> std::enable_if<not hi,int>::type = 0></div>\n+<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#af9b43f29d448a89030668dc23ecfbade\"> 212</a></span> It <a class=\"code hl_function\" href=\"a01823.html#af9b43f29d448a89030668dc23ecfbade\">indicesImp</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01819.html\">Node</a>& node, It multiIndices)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> <span class=\"keyword\">using namespace </span>Dune::Indices;</div>\n+<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> <span class=\"keywordflow\">for</span>(std::size_t child=0; child<dim; ++child)</div>\n+<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span> {</div>\n+<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> <a class=\"code hl_typedef\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">size_type</a> subTreeSize = node.child(_0, 0).<a class=\"code hl_function\" href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">size</a>();</div>\n+<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> <a class=\"code hl_variable\" href=\"a01823.html#a86ed45c92fecf521019dcc18d90dc4d3\">pq2PreBasis_</a>.<a class=\"code hl_function\" href=\"a01671.html#a45c031d3793e53e9413b86d49bffa5b0\">indices</a>(node.child(_0, 0), multiIndices);</div>\n+<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> <span class=\"keywordflow\">for</span> (std::size_t i = 0; i<subTreeSize; ++i)</div>\n+<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span> {</div>\n+<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> <a class=\"code hl_function\" href=\"a01823.html#a9ef33019c438c6bceea7d2b9c44df05a\">multiIndexPushFront</a>(multiIndices[i], 0);</div>\n+<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span> multiIndices[i][1] = multiIndices[i][1]*dim + child;</div>\n+<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> }</div>\n+<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> multiIndices += subTreeSize;</div>\n+<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span> }</div>\n+<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> <a class=\"code hl_typedef\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">size_type</a> subTreeSize = node.child(_1).<a class=\"code hl_function\" href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">size</a>();</div>\n+<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> <a class=\"code hl_variable\" href=\"a01823.html#a9d26725c5f9e2f84e0b504c3bffcfe42\">pq1PreBasis_</a>.<a class=\"code hl_function\" href=\"a01671.html#a45c031d3793e53e9413b86d49bffa5b0\">indices</a>(node.child(_1), multiIndices);</div>\n+<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> <span class=\"keywordflow\">for</span> (std::size_t i = 0; i<subTreeSize; ++i)</div>\n+<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> <a class=\"code hl_function\" href=\"a01823.html#a9ef33019c438c6bceea7d2b9c44df05a\">multiIndexPushFront</a>(multiIndices[i], 1);</div>\n+<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span> multiIndices += subTreeSize;</div>\n+<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span> <span class=\"keywordflow\">return</span> multiIndices;</div>\n+<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> }</div>\n+<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> </div>\n+<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> <span class=\"keyword\">template</span><<span class=\"keywordtype\">bool</span> hi, <span class=\"keyword\">class </span>It,</div>\n+<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> <span class=\"keyword\">typename</span> std::enable_if<hi,int>::type = 0></div>\n+<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#af9b43f29d448a89030668dc23ecfbade\"> 236</a></span> It <a class=\"code hl_function\" href=\"a01823.html#af9b43f29d448a89030668dc23ecfbade\">indicesImp</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01819.html\">Node</a>& node, It multiIndices)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span> <span class=\"keyword\">using namespace </span>Dune::Indices;</div>\n+<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span> <span class=\"keywordflow\">for</span>(std::size_t child=0; child<dim; ++child)</div>\n+<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"> 240</span> {</div>\n+<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span> <a class=\"code hl_typedef\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">size_type</a> subTreeSize = node.child(_0, 0).<a class=\"code hl_function\" href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">size</a>();</div>\n+<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span> <a class=\"code hl_variable\" href=\"a01823.html#a86ed45c92fecf521019dcc18d90dc4d3\">pq2PreBasis_</a>.<a class=\"code hl_function\" href=\"a01671.html#a45c031d3793e53e9413b86d49bffa5b0\">indices</a>(node.child(_0, 0), multiIndices);</div>\n+<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> <span class=\"keywordflow\">for</span> (std::size_t i = 0; i<subTreeSize; ++i)</div>\n+<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> {</div>\n+<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> <a class=\"code hl_function\" href=\"a01823.html#a9ef33019c438c6bceea7d2b9c44df05a\">multiIndexPushFront</a>(multiIndices[i], 0);</div>\n+<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span> multiIndices[i].push_back(i);</div>\n+<div class=\"line\"><a id=\"l00247\" name=\"l00247\"></a><span class=\"lineno\"> 247</span> }</div>\n+<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"> 248</span> multiIndices += subTreeSize;</div>\n+<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span> }</div>\n+<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span> <a class=\"code hl_typedef\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">size_type</a> subTreeSize = node.child(_1).<a class=\"code hl_function\" href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">size</a>();</div>\n+<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span> <a class=\"code hl_variable\" href=\"a01823.html#a9d26725c5f9e2f84e0b504c3bffcfe42\">pq1PreBasis_</a>.<a class=\"code hl_function\" href=\"a01671.html#a45c031d3793e53e9413b86d49bffa5b0\">indices</a>(node.child(_1), multiIndices);</div>\n+<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span> <span class=\"keywordflow\">for</span> (std::size_t i = 0; i<subTreeSize; ++i)</div>\n+<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"> 253</span> <a class=\"code hl_function\" href=\"a01823.html#a9ef33019c438c6bceea7d2b9c44df05a\">multiIndexPushFront</a>(multiIndices[i], 1);</div>\n+<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"> 254</span> multiIndices += subTreeSize;</div>\n+<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span> <span class=\"keywordflow\">return</span> multiIndices;</div>\n+<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"> 256</span> }</div>\n <div class=\"line\"><a id=\"l00257\" name=\"l00257\"></a><span class=\"lineno\"> 257</span> </div>\n-<div class=\"line\"><a id=\"l00258\" name=\"l00258\"></a><span class=\"lineno\"> 258</span> *it = { <a class=\"code hl_variable\" href=\"a01471.html#a652912b1867705a80ee3d8562b916939\">codimOffset_</a>[codim] +</div>\n-<div class=\"line\"><a id=\"l00259\" name=\"l00259\"></a><span class=\"lineno\"> 259</span> <a class=\"code hl_variable\" href=\"a01471.html#a1993f6e6d5fe6a4c00774c5065036a75\">dofsPerCodim_</a>[codim] * gridIndexSet.subIndex(element, subentity, codim) + localKey.index() };</div>\n-<div class=\"line\"><a id=\"l00260\" name=\"l00260\"></a><span class=\"lineno\"> 260</span> }</div>\n-<div class=\"line\"><a id=\"l00261\" name=\"l00261\"></a><span class=\"lineno\"> 261</span> </div>\n-<div class=\"line\"><a id=\"l00262\" name=\"l00262\"></a><span class=\"lineno\"> 262</span> <span class=\"keywordflow\">return</span> it;</div>\n-<div class=\"line\"><a id=\"l00263\" name=\"l00263\"></a><span class=\"lineno\"> 263</span> }</div>\n+<div class=\"line\"><a id=\"l00258\" name=\"l00258\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#a4ba12b2015f3761ec28e95b3a120cffb\"> 258</a></span> <a class=\"code hl_typedef\" href=\"a01823.html#a4fbd3d92587a03f3871066968035f194\">GridView</a> <a class=\"code hl_variable\" href=\"a01823.html#a4ba12b2015f3761ec28e95b3a120cffb\">gridView_</a>;</div>\n+<div class=\"line\"><a id=\"l00259\" name=\"l00259\"></a><span class=\"lineno\"> 259</span> </div>\n+<div class=\"line\"><a id=\"l00260\" name=\"l00260\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#a9d26725c5f9e2f84e0b504c3bffcfe42\"> 260</a></span> <a class=\"code hl_class\" href=\"a01671.html\">PQ1PreBasis</a> <a class=\"code hl_variable\" href=\"a01823.html#a9d26725c5f9e2f84e0b504c3bffcfe42\">pq1PreBasis_</a>;</div>\n+<div class=\"line\"><a id=\"l00261\" name=\"l00261\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01823.html#a86ed45c92fecf521019dcc18d90dc4d3\"> 261</a></span> <a class=\"code hl_class\" href=\"a01671.html\">PQ2PreBasis</a> <a class=\"code hl_variable\" href=\"a01823.html#a86ed45c92fecf521019dcc18d90dc4d3\">pq2PreBasis_</a>;</div>\n+<div class=\"line\"><a id=\"l00262\" name=\"l00262\"></a><span class=\"lineno\"> 262</span>};</div>\n+<div class=\"line\"><a id=\"l00263\" name=\"l00263\"></a><span class=\"lineno\"> 263</span> </div>\n <div class=\"line\"><a id=\"l00264\" name=\"l00264\"></a><span class=\"lineno\"> 264</span> </div>\n-<div class=\"line\"><a id=\"l00265\" name=\"l00265\"></a><span class=\"lineno\"> 265</span><span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00266\" name=\"l00266\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#af43ee62056d6da93f39b88c2a834b38b\"> 266</a></span> <a class=\"code hl_typedef\" href=\"a01471.html#a73e7fec0c1f6f0c0316bbfceec2c4a00\">GridView</a> <a class=\"code hl_variable\" href=\"a01471.html#af43ee62056d6da93f39b88c2a834b38b\">gridView_</a>;</div>\n-<div class=\"line\"><a id=\"l00267\" name=\"l00267\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#a652912b1867705a80ee3d8562b916939\"> 267</a></span> std::array<size_t,dim+1> <a class=\"code hl_variable\" href=\"a01471.html#a652912b1867705a80ee3d8562b916939\">codimOffset_</a>;</div>\n-<div class=\"line\"><a id=\"l00268\" name=\"l00268\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#aac5619ab7c2f133c3cb1532ccab671ef\"> 268</a></span> FiniteElementMap <a class=\"code hl_variable\" href=\"a01471.html#aac5619ab7c2f133c3cb1532ccab671ef\">finiteElementMap_</a>;</div>\n-<div class=\"line\"><a id=\"l00269\" name=\"l00269\"></a><span class=\"lineno\"> 269</span> <span class=\"comment\">// Number of dofs per entity type depending on the entity's codimension and type</span></div>\n-<div class=\"line\"><a id=\"l00270\" name=\"l00270\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01471.html#a1993f6e6d5fe6a4c00774c5065036a75\"> 270</a></span> std::array<int,2> <a class=\"code hl_variable\" href=\"a01471.html#a1993f6e6d5fe6a4c00774c5065036a75\">dofsPerCodim_</a> {{dim*(k-1)*3, dim+(k-1)}};</div>\n-<div class=\"line\"><a id=\"l00271\" name=\"l00271\"></a><span class=\"lineno\"> 271</span>};</div>\n+<div class=\"line\"><a id=\"l00265\" name=\"l00265\"></a><span class=\"lineno\"> 265</span> </div>\n+<div class=\"line\"><a id=\"l00266\" name=\"l00266\"></a><span class=\"lineno\"> 266</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV></div>\n+<div class=\"line\"><a id=\"l00267\" name=\"l00267\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01815.html\"> 267</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01815.html\">TaylorHoodVelocityTree</a> :</div>\n+<div class=\"line\"><a id=\"l00268\" name=\"l00268\"></a><span class=\"lineno\"> 268</span> <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01715.html\">PowerBasisNode</a><LagrangeNode<GV,2>, GV::dimension></div>\n+<div class=\"line\"><a id=\"l00269\" name=\"l00269\"></a><span class=\"lineno\"> 269</span>{</div>\n+<div class=\"line\"><a id=\"l00270\" name=\"l00270\"></a><span class=\"lineno\"> 270</span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01667.html\">PQ2Node</a> = <a class=\"code hl_class\" href=\"a01667.html\">LagrangeNode<GV,2></a>;</div>\n+<div class=\"line\"><a id=\"l00271\" name=\"l00271\"></a><span class=\"lineno\"> 271</span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01715.html\">Base</a> = <a class=\"code hl_class\" href=\"a01715.html\">PowerBasisNode<PQ2Node, GV::dimension></a>;</div>\n <div class=\"line\"><a id=\"l00272\" name=\"l00272\"></a><span class=\"lineno\"> 272</span> </div>\n-<div class=\"line\"><a id=\"l00273\" name=\"l00273\"></a><span class=\"lineno\"> 273</span> </div>\n-<div class=\"line\"><a id=\"l00274\" name=\"l00274\"></a><span class=\"lineno\"> 274</span> </div>\n-<div class=\"line\"><a id=\"l00275\" name=\"l00275\"></a><span class=\"lineno\"> 275</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k></div>\n-<div class=\"line\"><a id=\"l00276\" name=\"l00276\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01467.html\"> 276</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01467.html\">BrezziDouglasMariniNode</a> :</div>\n-<div class=\"line\"><a id=\"l00277\" name=\"l00277\"></a><span class=\"lineno\"> 277</span> <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01711.html\">LeafBasisNode</a></div>\n-<div class=\"line\"><a id=\"l00278\" name=\"l00278\"></a><span class=\"lineno\"> 278</span>{</div>\n-<div class=\"line\"><a id=\"l00279\" name=\"l00279\"></a><span class=\"lineno\"> 279</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dim = GV::dimension;</div>\n+<div class=\"line\"><a id=\"l00273\" name=\"l00273\"></a><span class=\"lineno\"> 273</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00274\" name=\"l00274\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01815.html#a0be9d13cf09261281b9fe16187e90bff\"> 274</a></span> <a class=\"code hl_function\" href=\"a01815.html#a0be9d13cf09261281b9fe16187e90bff\">TaylorHoodVelocityTree</a>()</div>\n+<div class=\"line\"><a id=\"l00275\" name=\"l00275\"></a><span class=\"lineno\"> 275</span> {</div>\n+<div class=\"line\"><a id=\"l00276\" name=\"l00276\"></a><span class=\"lineno\"> 276</span> <span class=\"keywordflow\">for</span>(<span class=\"keywordtype\">int</span> i=0; i<GV::dimension; ++i)</div>\n+<div class=\"line\"><a id=\"l00277\" name=\"l00277\"></a><span class=\"lineno\"> 277</span> this->setChild(i, std::make_shared<PQ2Node>());</div>\n+<div class=\"line\"><a id=\"l00278\" name=\"l00278\"></a><span class=\"lineno\"> 278</span> }</div>\n+<div class=\"line\"><a id=\"l00279\" name=\"l00279\"></a><span class=\"lineno\"> 279</span>};</div>\n <div class=\"line\"><a id=\"l00280\" name=\"l00280\"></a><span class=\"lineno\"> 280</span> </div>\n-<div class=\"line\"><a id=\"l00281\" name=\"l00281\"></a><span class=\"lineno\"> 281</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00282\" name=\"l00282\"></a><span class=\"lineno\"> 282</span> </div>\n-<div class=\"line\"><a id=\"l00283\" name=\"l00283\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01467.html#a49e7d0a643c96351a14b0ddecc3af110\"> 283</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01467.html#a49e7d0a643c96351a14b0ddecc3af110\">size_type</a> = std::size_t;</div>\n-<div class=\"line\"><a id=\"l00284\" name=\"l00284\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01467.html#a2fc6b972db6957aebcc56f216484ec86\"> 284</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01467.html#a2fc6b972db6957aebcc56f216484ec86\">Element</a> = <span class=\"keyword\">typename</span> GV::template Codim<0>::Entity;</div>\n-<div class=\"line\"><a id=\"l00285\" name=\"l00285\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01467.html#a77a908078a6fa30703e91f98696989a1\"> 285</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01467.html#a77a908078a6fa30703e91f98696989a1\">FiniteElementMap</a> = <span class=\"keyword\">typename</span> Impl::BDMLocalFiniteElementMap<GV, dim, double, k>;</div>\n-<div class=\"line\"><a id=\"l00286\" name=\"l00286\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01467.html#ad9a8a43ec0f0a4fde1ee3938c486e075\"> 286</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01467.html#ad9a8a43ec0f0a4fde1ee3938c486e075\">FiniteElement</a> = Impl::GlobalValuedLocalFiniteElement<Impl::ContravariantPiolaTransformator,</div>\n-<div class=\"line\"><a id=\"l00287\" name=\"l00287\"></a><span class=\"lineno\"> 287</span> <span class=\"keyword\">typename</span> FiniteElementMap::FiniteElement,</div>\n-<div class=\"line\"><a id=\"l00288\" name=\"l00288\"></a><span class=\"lineno\"> 288</span> <a class=\"code hl_typedef\" href=\"a01467.html#a2fc6b972db6957aebcc56f216484ec86\">Element</a>>;</div>\n-<div class=\"line\"><a id=\"l00289\" name=\"l00289\"></a><span class=\"lineno\"> 289</span> </div>\n-<div class=\"line\"><a id=\"l00290\" name=\"l00290\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01467.html#ae2c0512c6dc67e01c8d35fa326a76c71\"> 290</a></span> <a class=\"code hl_function\" href=\"a01467.html#ae2c0512c6dc67e01c8d35fa326a76c71\">BrezziDouglasMariniNode</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01467.html#a77a908078a6fa30703e91f98696989a1\">FiniteElementMap</a>* finiteElementMap) :</div>\n-<div class=\"line\"><a id=\"l00291\" name=\"l00291\"></a><span class=\"lineno\"> 291</span> <a class=\"code hl_variable\" href=\"a01467.html#ab6684e2a641164b8affc1aa6f09b56be\">element_</a>(nullptr),</div>\n-<div class=\"line\"><a id=\"l00292\" name=\"l00292\"></a><span class=\"lineno\"> 292</span> <a class=\"code hl_variable\" href=\"a01467.html#a4640aa80acd2da83ba654b01f4b8fbda\">finiteElementMap_</a>(finiteElementMap)</div>\n-<div class=\"line\"><a id=\"l00293\" name=\"l00293\"></a><span class=\"lineno\"> 293</span> {}</div>\n-<div class=\"line\"><a id=\"l00294\" name=\"l00294\"></a><span class=\"lineno\"> 294</span> </div>\n-<div class=\"line\"><a id=\"l00296\" name=\"l00296\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01467.html#ae8e23a4ee0a66bea03e2189c42569638\"> 296</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01467.html#a2fc6b972db6957aebcc56f216484ec86\">Element</a>& <a class=\"code hl_function\" href=\"a01467.html#ae8e23a4ee0a66bea03e2189c42569638\">element</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00297\" name=\"l00297\"></a><span class=\"lineno\"> 297</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00298\" name=\"l00298\"></a><span class=\"lineno\"> 298</span> <span class=\"keywordflow\">return</span> *<a class=\"code hl_variable\" href=\"a01467.html#ab6684e2a641164b8affc1aa6f09b56be\">element_</a>;</div>\n-<div class=\"line\"><a id=\"l00299\" name=\"l00299\"></a><span class=\"lineno\"> 299</span> }</div>\n+<div class=\"line\"><a id=\"l00281\" name=\"l00281\"></a><span class=\"lineno\"> 281</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV></div>\n+<div class=\"line\"><a id=\"l00282\" name=\"l00282\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01819.html\"> 282</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01819.html\">TaylorHoodBasisTree</a> :</div>\n+<div class=\"line\"><a id=\"l00283\" name=\"l00283\"></a><span class=\"lineno\"> 283</span> <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01719.html\">CompositeBasisNode</a><</div>\n+<div class=\"line\"><a id=\"l00284\" name=\"l00284\"></a><span class=\"lineno\"> 284</span> TaylorHoodVelocityTree<GV>,</div>\n+<div class=\"line\"><a id=\"l00285\" name=\"l00285\"></a><span class=\"lineno\"> 285</span> LagrangeNode<GV,1></div>\n+<div class=\"line\"><a id=\"l00286\" name=\"l00286\"></a><span class=\"lineno\"> 286</span> ></div>\n+<div class=\"line\"><a id=\"l00287\" name=\"l00287\"></a><span class=\"lineno\"> 287</span>{</div>\n+<div class=\"line\"><a id=\"l00288\" name=\"l00288\"></a><span class=\"lineno\"> 288</span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01815.html\">VelocityNode</a>=<a class=\"code hl_class\" href=\"a01815.html\">TaylorHoodVelocityTree<GV></a>;</div>\n+<div class=\"line\"><a id=\"l00289\" name=\"l00289\"></a><span class=\"lineno\"> 289</span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01667.html\">PressureNode</a>=<a class=\"code hl_class\" href=\"a01667.html\">LagrangeNode<GV,1></a>;</div>\n+<div class=\"line\"><a id=\"l00290\" name=\"l00290\"></a><span class=\"lineno\"> 290</span> </div>\n+<div class=\"line\"><a id=\"l00291\" name=\"l00291\"></a><span class=\"lineno\"> 291</span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01719.html\">Base</a>=<a class=\"code hl_class\" href=\"a01719.html\">CompositeBasisNode<VelocityNode, PressureNode></a>;</div>\n+<div class=\"line\"><a id=\"l00292\" name=\"l00292\"></a><span class=\"lineno\"> 292</span> </div>\n+<div class=\"line\"><a id=\"l00293\" name=\"l00293\"></a><span class=\"lineno\"> 293</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00294\" name=\"l00294\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01819.html#a046d55e939cbff7263d0df1e2b8e6356\"> 294</a></span> <a class=\"code hl_function\" href=\"a01819.html#a046d55e939cbff7263d0df1e2b8e6356\">TaylorHoodBasisTree</a>()</div>\n+<div class=\"line\"><a id=\"l00295\" name=\"l00295\"></a><span class=\"lineno\"> 295</span> {</div>\n+<div class=\"line\"><a id=\"l00296\" name=\"l00296\"></a><span class=\"lineno\"> 296</span> this-><span class=\"keyword\">template</span> setChild<0>(std::make_shared<VelocityNode>());</div>\n+<div class=\"line\"><a id=\"l00297\" name=\"l00297\"></a><span class=\"lineno\"> 297</span> this-><span class=\"keyword\">template</span> setChild<1>(std::make_shared<PressureNode>());</div>\n+<div class=\"line\"><a id=\"l00298\" name=\"l00298\"></a><span class=\"lineno\"> 298</span> }</div>\n+<div class=\"line\"><a id=\"l00299\" name=\"l00299\"></a><span class=\"lineno\"> 299</span>};</div>\n <div class=\"line\"><a id=\"l00300\" name=\"l00300\"></a><span class=\"lineno\"> 300</span> </div>\n-<div class=\"line\"><a id=\"l00305\" name=\"l00305\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01467.html#a058497cca9f58ef4c540569c10e21922\"> 305</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01467.html#ad9a8a43ec0f0a4fde1ee3938c486e075\">FiniteElement</a>& <a class=\"code hl_function\" href=\"a01467.html#a058497cca9f58ef4c540569c10e21922\">finiteElement</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00306\" name=\"l00306\"></a><span class=\"lineno\"> 306</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00307\" name=\"l00307\"></a><span class=\"lineno\"> 307</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01467.html#a5fb9707fc06bc48d07fd41f6c064fb3d\">finiteElement_</a>;</div>\n-<div class=\"line\"><a id=\"l00308\" name=\"l00308\"></a><span class=\"lineno\"> 308</span> }</div>\n-<div class=\"line\"><a id=\"l00309\" name=\"l00309\"></a><span class=\"lineno\"> 309</span> </div>\n-<div class=\"line\"><a id=\"l00311\" name=\"l00311\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01467.html#adc25f4eeeecf7b88dab88eafc0837ae5\"> 311</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01467.html#adc25f4eeeecf7b88dab88eafc0837ae5\">bind</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01467.html#a2fc6b972db6957aebcc56f216484ec86\">Element</a>& e)</div>\n-<div class=\"line\"><a id=\"l00312\" name=\"l00312\"></a><span class=\"lineno\"> 312</span> {</div>\n-<div class=\"line\"><a id=\"l00313\" name=\"l00313\"></a><span class=\"lineno\"> 313</span> <a class=\"code hl_variable\" href=\"a01467.html#ab6684e2a641164b8affc1aa6f09b56be\">element_</a> = &e;</div>\n-<div class=\"line\"><a id=\"l00314\" name=\"l00314\"></a><span class=\"lineno\"> 314</span> <a class=\"code hl_variable\" href=\"a01467.html#a5fb9707fc06bc48d07fd41f6c064fb3d\">finiteElement_</a>.bind((<a class=\"code hl_variable\" href=\"a01467.html#a4640aa80acd2da83ba654b01f4b8fbda\">finiteElementMap_</a>->find(*<a class=\"code hl_variable\" href=\"a01467.html#ab6684e2a641164b8affc1aa6f09b56be\">element_</a>)), e);</div>\n-<div class=\"line\"><a id=\"l00315\" name=\"l00315\"></a><span class=\"lineno\"> 315</span> this-><a class=\"code hl_function\" href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\">setSize</a>(<a class=\"code hl_variable\" href=\"a01467.html#a5fb9707fc06bc48d07fd41f6c064fb3d\">finiteElement_</a>.size());</div>\n-<div class=\"line\"><a id=\"l00316\" name=\"l00316\"></a><span class=\"lineno\"> 316</span> }</div>\n+<div class=\"line\"><a id=\"l00301\" name=\"l00301\"></a><span class=\"lineno\"> 301</span> </div>\n+<div class=\"line\"><a id=\"l00302\" name=\"l00302\"></a><span class=\"lineno\"> 302</span> </div>\n+<div class=\"line\"><a id=\"l00303\" name=\"l00303\"></a><span class=\"lineno\"> 303</span><span class=\"keyword\">namespace </span>BasisFactory {</div>\n+<div class=\"line\"><a id=\"l00304\" name=\"l00304\"></a><span class=\"lineno\"> 304</span> </div>\n+<div class=\"line\"><a id=\"l00311\" name=\"l00311\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#ga2384fc6a8ee2005fb29adb7221609ce3\"> 311</a></span><span class=\"keyword\">inline</span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00213.html#ga2384fc6a8ee2005fb29adb7221609ce3\">taylorHood</a>()</div>\n+<div class=\"line\"><a id=\"l00312\" name=\"l00312\"></a><span class=\"lineno\"> 312</span>{</div>\n+<div class=\"line\"><a id=\"l00313\" name=\"l00313\"></a><span class=\"lineno\"> 313</span> <span class=\"keywordflow\">return</span> [](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridView) {</div>\n+<div class=\"line\"><a id=\"l00314\" name=\"l00314\"></a><span class=\"lineno\"> 314</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01823.html\">TaylorHoodPreBasis</a><std::decay_t<<span class=\"keyword\">decltype</span>(gridView)>>(gridView);</div>\n+<div class=\"line\"><a id=\"l00315\" name=\"l00315\"></a><span class=\"lineno\"> 315</span> };</div>\n+<div class=\"line\"><a id=\"l00316\" name=\"l00316\"></a><span class=\"lineno\"> 316</span>}</div>\n <div class=\"line\"><a id=\"l00317\" name=\"l00317\"></a><span class=\"lineno\"> 317</span> </div>\n-<div class=\"line\"><a id=\"l00318\" name=\"l00318\"></a><span class=\"lineno\"> 318</span><span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00318\" name=\"l00318\"></a><span class=\"lineno\"> 318</span>} <span class=\"comment\">// end namespace BasisFactory</span></div>\n <div class=\"line\"><a id=\"l00319\" name=\"l00319\"></a><span class=\"lineno\"> 319</span> </div>\n-<div class=\"line\"><a id=\"l00320\" name=\"l00320\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01467.html#a5fb9707fc06bc48d07fd41f6c064fb3d\"> 320</a></span> <a class=\"code hl_typedef\" href=\"a01467.html#ad9a8a43ec0f0a4fde1ee3938c486e075\">FiniteElement</a> <a class=\"code hl_variable\" href=\"a01467.html#a5fb9707fc06bc48d07fd41f6c064fb3d\">finiteElement_</a>;</div>\n-<div class=\"line\"><a id=\"l00321\" name=\"l00321\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01467.html#ab6684e2a641164b8affc1aa6f09b56be\"> 321</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01467.html#a2fc6b972db6957aebcc56f216484ec86\">Element</a>* <a class=\"code hl_variable\" href=\"a01467.html#ab6684e2a641164b8affc1aa6f09b56be\">element_</a>;</div>\n-<div class=\"line\"><a id=\"l00322\" name=\"l00322\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01467.html#a4640aa80acd2da83ba654b01f4b8fbda\"> 322</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01467.html#a77a908078a6fa30703e91f98696989a1\">FiniteElementMap</a>* <a class=\"code hl_variable\" href=\"a01467.html#a4640aa80acd2da83ba654b01f4b8fbda\">finiteElementMap_</a>;</div>\n-<div class=\"line\"><a id=\"l00323\" name=\"l00323\"></a><span class=\"lineno\"> 323</span>};</div>\n-<div class=\"line\"><a id=\"l00324\" name=\"l00324\"></a><span class=\"lineno\"> 324</span> </div>\n-<div class=\"line\"><a id=\"l00325\" name=\"l00325\"></a><span class=\"lineno\"> 325</span> </div>\n-<div class=\"line\"><a id=\"l00326\" name=\"l00326\"></a><span class=\"lineno\"> 326</span> </div>\n-<div class=\"line\"><a id=\"l00327\" name=\"l00327\"></a><span class=\"lineno\"> 327</span><span class=\"keyword\">namespace </span>BasisFactory {</div>\n-<div class=\"line\"><a id=\"l00328\" name=\"l00328\"></a><span class=\"lineno\"> 328</span> </div>\n-<div class=\"line\"><a id=\"l00336\" name=\"l00336\"></a><span class=\"lineno\"> 336</span><span class=\"keyword\">template</span><std::<span class=\"keywordtype\">size_t</span> k></div>\n-<div class=\"line\"><a id=\"l00337\" name=\"l00337\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#ga72847f418332ba3d5444a7f153776610\"> 337</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00213.html#ga72847f418332ba3d5444a7f153776610\">brezziDouglasMarini</a>()</div>\n-<div class=\"line\"><a id=\"l00338\" name=\"l00338\"></a><span class=\"lineno\"> 338</span>{</div>\n-<div class=\"line\"><a id=\"l00339\" name=\"l00339\"></a><span class=\"lineno\"> 339</span> <span class=\"keywordflow\">return</span> [](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridView) {</div>\n-<div class=\"line\"><a id=\"l00340\" name=\"l00340\"></a><span class=\"lineno\"> 340</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01471.html\">BrezziDouglasMariniPreBasis</a><std::decay_t<<span class=\"keyword\">decltype</span>(gridView)>, k>(gridView);</div>\n-<div class=\"line\"><a id=\"l00341\" name=\"l00341\"></a><span class=\"lineno\"> 341</span> };</div>\n-<div class=\"line\"><a id=\"l00342\" name=\"l00342\"></a><span class=\"lineno\"> 342</span>}</div>\n-<div class=\"line\"><a id=\"l00343\" name=\"l00343\"></a><span class=\"lineno\"> 343</span> </div>\n-<div class=\"line\"><a id=\"l00344\" name=\"l00344\"></a><span class=\"lineno\"> 344</span>} <span class=\"comment\">// end namespace BasisFactory</span></div>\n-<div class=\"line\"><a id=\"l00345\" name=\"l00345\"></a><span class=\"lineno\"> 345</span> </div>\n-<div class=\"line\"><a id=\"l00346\" name=\"l00346\"></a><span class=\"lineno\"> 346</span> </div>\n+<div class=\"line\"><a id=\"l00320\" name=\"l00320\"></a><span class=\"lineno\"> 320</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00321\" name=\"l00321\"></a><span class=\"lineno\"> 321</span><span class=\"comment\">// This is the actual global basis implementation based on the reusable parts.</span></div>\n+<div class=\"line\"><a id=\"l00322\" name=\"l00322\"></a><span class=\"lineno\"> 322</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00323\" name=\"l00323\"></a><span class=\"lineno\"> 323</span> </div>\n+<div class=\"line\"><a id=\"l00345\" name=\"l00345\"></a><span class=\"lineno\"> 345</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV></div>\n+<div class=\"line\"><a id=\"l00346\" name=\"l00346\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#ga2ddcf1f3f5bddd7f49ab4d81472aa69a\"> 346</a></span><span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01555.html\">TaylorHoodBasis</a> = <a class=\"code hl_class\" href=\"a01555.html\">DefaultGlobalBasis<TaylorHoodPreBasis<GV></a> >;</div>\n <div class=\"line\"><a id=\"l00347\" name=\"l00347\"></a><span class=\"lineno\"> 347</span> </div>\n-<div class=\"line\"><a id=\"l00348\" name=\"l00348\"></a><span class=\"lineno\"> 348</span><span class=\"comment\">// *****************************************************************************</span></div>\n-<div class=\"line\"><a id=\"l00349\" name=\"l00349\"></a><span class=\"lineno\"> 349</span><span class=\"comment\">// This is the actual global basis implementation based on the reusable parts.</span></div>\n-<div class=\"line\"><a id=\"l00350\" name=\"l00350\"></a><span class=\"lineno\"> 350</span><span class=\"comment\">// *****************************************************************************</span></div>\n-<div class=\"line\"><a id=\"l00351\" name=\"l00351\"></a><span class=\"lineno\"> 351</span> </div>\n-<div class=\"line\"><a id=\"l00359\" name=\"l00359\"></a><span class=\"lineno\"> 359</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV, <span class=\"keywordtype\">int</span> k></div>\n-<div class=\"line\"><a id=\"l00360\" name=\"l00360\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a05987d1b6480619710c578ad80a243e5\"> 360</a></span><span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01555.html\">BrezziDouglasMariniBasis</a> = <a class=\"code hl_class\" href=\"a01555.html\">DefaultGlobalBasis<BrezziDouglasMariniPreBasis<GV, k></a> >;</div>\n-<div class=\"line\"><a id=\"l00361\" name=\"l00361\"></a><span class=\"lineno\"> 361</span> </div>\n-<div class=\"line\"><a id=\"l00362\" name=\"l00362\"></a><span class=\"lineno\"> 362</span>} <span class=\"comment\">// end namespace Functions</span></div>\n-<div class=\"line\"><a id=\"l00363\" name=\"l00363\"></a><span class=\"lineno\"> 363</span>} <span class=\"comment\">// end namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00364\" name=\"l00364\"></a><span class=\"lineno\"> 364</span> </div>\n-<div class=\"line\"><a id=\"l00365\" name=\"l00365\"></a><span class=\"lineno\"> 365</span> </div>\n-<div class=\"line\"><a id=\"l00366\" name=\"l00366\"></a><span class=\"lineno\"> 366</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH</span></div>\n-<div class=\"ttc\" id=\"aa00119_html\"><div class=\"ttname\"><a href=\"a00119.html\">defaultglobalbasis.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00134_html\"><div class=\"ttname\"><a href=\"a00134.html\">globalvaluedlocalfiniteelement.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00191_html\"><div class=\"ttname\"><a href=\"a00191.html\">nodes.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00213_html_ga72847f418332ba3d5444a7f153776610\"><div class=\"ttname\"><a href=\"a00213.html#ga72847f418332ba3d5444a7f153776610\">Dune::Functions::BasisFactory::brezziDouglasMarini</a></div><div class=\"ttdeci\">auto brezziDouglasMarini()</div><div class=\"ttdoc\">Create a pre-basis factory that can create a Brezzi-Douglas-Marini pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:337</div></div>\n+<div class=\"line\"><a id=\"l00348\" name=\"l00348\"></a><span class=\"lineno\"> 348</span> </div>\n+<div class=\"line\"><a id=\"l00349\" name=\"l00349\"></a><span class=\"lineno\"> 349</span> </div>\n+<div class=\"line\"><a id=\"l00350\" name=\"l00350\"></a><span class=\"lineno\"> 350</span>} <span class=\"comment\">// end namespace Functions</span></div>\n+<div class=\"line\"><a id=\"l00351\" name=\"l00351\"></a><span class=\"lineno\"> 351</span>} <span class=\"comment\">// end namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00352\" name=\"l00352\"></a><span class=\"lineno\"> 352</span> </div>\n+<div class=\"line\"><a id=\"l00353\" name=\"l00353\"></a><span class=\"lineno\"> 353</span> </div>\n+<div class=\"line\"><a id=\"l00354\" name=\"l00354\"></a><span class=\"lineno\"> 354</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH</span></div>\n+<div class=\"ttc\" id=\"aa00122_html\"><div class=\"ttname\"><a href=\"a00122.html\">lagrangebasis.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00152_html\"><div class=\"ttname\"><a href=\"a00152.html\">defaultglobalbasis.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00179_html\"><div class=\"ttname\"><a href=\"a00179.html\">nodes.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00213_html_ga2384fc6a8ee2005fb29adb7221609ce3\"><div class=\"ttname\"><a href=\"a00213.html#ga2384fc6a8ee2005fb29adb7221609ce3\">Dune::Functions::BasisFactory::taylorHood</a></div><div class=\"ttdeci\">auto taylorHood()</div><div class=\"ttdoc\">Create a pre-basis factory that can create a Taylor-Hood pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:311</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa01467_html\"><div class=\"ttname\"><a href=\"a01467.html\">Dune::Functions::BrezziDouglasMariniNode</a></div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:278</div></div>\n-<div class=\"ttc\" id=\"aa01467_html_a058497cca9f58ef4c540569c10e21922\"><div class=\"ttname\"><a href=\"a01467.html#a058497cca9f58ef4c540569c10e21922\">Dune::Functions::BrezziDouglasMariniNode::finiteElement</a></div><div class=\"ttdeci\">const FiniteElement & finiteElement() const</div><div class=\"ttdoc\">Return the LocalFiniteElement for the element we are bound to.</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:305</div></div>\n-<div class=\"ttc\" id=\"aa01467_html_a2fc6b972db6957aebcc56f216484ec86\"><div class=\"ttname\"><a href=\"a01467.html#a2fc6b972db6957aebcc56f216484ec86\">Dune::Functions::BrezziDouglasMariniNode::Element</a></div><div class=\"ttdeci\">typename GV::template Codim< 0 >::Entity Element</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:284</div></div>\n-<div class=\"ttc\" id=\"aa01467_html_a4640aa80acd2da83ba654b01f4b8fbda\"><div class=\"ttname\"><a href=\"a01467.html#a4640aa80acd2da83ba654b01f4b8fbda\">Dune::Functions::BrezziDouglasMariniNode::finiteElementMap_</a></div><div class=\"ttdeci\">const FiniteElementMap * finiteElementMap_</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:322</div></div>\n-<div class=\"ttc\" id=\"aa01467_html_a49e7d0a643c96351a14b0ddecc3af110\"><div class=\"ttname\"><a href=\"a01467.html#a49e7d0a643c96351a14b0ddecc3af110\">Dune::Functions::BrezziDouglasMariniNode::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:283</div></div>\n-<div class=\"ttc\" id=\"aa01467_html_a5fb9707fc06bc48d07fd41f6c064fb3d\"><div class=\"ttname\"><a href=\"a01467.html#a5fb9707fc06bc48d07fd41f6c064fb3d\">Dune::Functions::BrezziDouglasMariniNode::finiteElement_</a></div><div class=\"ttdeci\">FiniteElement finiteElement_</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:320</div></div>\n-<div class=\"ttc\" id=\"aa01467_html_a77a908078a6fa30703e91f98696989a1\"><div class=\"ttname\"><a href=\"a01467.html#a77a908078a6fa30703e91f98696989a1\">Dune::Functions::BrezziDouglasMariniNode::FiniteElementMap</a></div><div class=\"ttdeci\">typename Impl::BDMLocalFiniteElementMap< GV, dim, double, k > FiniteElementMap</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:285</div></div>\n-<div class=\"ttc\" id=\"aa01467_html_ab6684e2a641164b8affc1aa6f09b56be\"><div class=\"ttname\"><a href=\"a01467.html#ab6684e2a641164b8affc1aa6f09b56be\">Dune::Functions::BrezziDouglasMariniNode::element_</a></div><div class=\"ttdeci\">const Element * element_</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:321</div></div>\n-<div class=\"ttc\" id=\"aa01467_html_ad9a8a43ec0f0a4fde1ee3938c486e075\"><div class=\"ttname\"><a href=\"a01467.html#ad9a8a43ec0f0a4fde1ee3938c486e075\">Dune::Functions::BrezziDouglasMariniNode::FiniteElement</a></div><div class=\"ttdeci\">Impl::GlobalValuedLocalFiniteElement< Impl::ContravariantPiolaTransformator, typename FiniteElementMap::FiniteElement, Element > FiniteElement</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:288</div></div>\n-<div class=\"ttc\" id=\"aa01467_html_adc25f4eeeecf7b88dab88eafc0837ae5\"><div class=\"ttname\"><a href=\"a01467.html#adc25f4eeeecf7b88dab88eafc0837ae5\">Dune::Functions::BrezziDouglasMariniNode::bind</a></div><div class=\"ttdeci\">void bind(const Element &e)</div><div class=\"ttdoc\">Bind to element.</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:311</div></div>\n-<div class=\"ttc\" id=\"aa01467_html_ae2c0512c6dc67e01c8d35fa326a76c71\"><div class=\"ttname\"><a href=\"a01467.html#ae2c0512c6dc67e01c8d35fa326a76c71\">Dune::Functions::BrezziDouglasMariniNode::BrezziDouglasMariniNode</a></div><div class=\"ttdeci\">BrezziDouglasMariniNode(const FiniteElementMap *finiteElementMap)</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:290</div></div>\n-<div class=\"ttc\" id=\"aa01467_html_ae8e23a4ee0a66bea03e2189c42569638\"><div class=\"ttname\"><a href=\"a01467.html#ae8e23a4ee0a66bea03e2189c42569638\">Dune::Functions::BrezziDouglasMariniNode::element</a></div><div class=\"ttdeci\">const Element & element() const</div><div class=\"ttdoc\">Return current element, throw if unbound.</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:296</div></div>\n-<div class=\"ttc\" id=\"aa01471_html\"><div class=\"ttname\"><a href=\"a01471.html\">Dune::Functions::BrezziDouglasMariniPreBasis</a></div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:152</div></div>\n-<div class=\"ttc\" id=\"aa01471_html_a102944d1f32c8b29c6c297f252c7c1f1\"><div class=\"ttname\"><a href=\"a01471.html#a102944d1f32c8b29c6c297f252c7c1f1\">Dune::Functions::BrezziDouglasMariniPreBasis::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:160</div></div>\n-<div class=\"ttc\" id=\"aa01471_html_a1993f6e6d5fe6a4c00774c5065036a75\"><div class=\"ttname\"><a href=\"a01471.html#a1993f6e6d5fe6a4c00774c5065036a75\">Dune::Functions::BrezziDouglasMariniPreBasis::dofsPerCodim_</a></div><div class=\"ttdeci\">std::array< int, 2 > dofsPerCodim_</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:270</div></div>\n-<div class=\"ttc\" id=\"aa01471_html_a3ff046bf8b883ccdf97ea293eae3dba0\"><div class=\"ttname\"><a href=\"a01471.html#a3ff046bf8b883ccdf97ea293eae3dba0\">Dune::Functions::BrezziDouglasMariniPreBasis::dimension</a></div><div class=\"ttdeci\">size_type dimension() const</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:221</div></div>\n-<div class=\"ttc\" id=\"aa01471_html_a5c9a1db7d0b9553e9a5ae8cad57fe4fa\"><div class=\"ttname\"><a href=\"a01471.html#a5c9a1db7d0b9553e9a5ae8cad57fe4fa\">Dune::Functions::BrezziDouglasMariniPreBasis::minMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type minMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:165</div></div>\n-<div class=\"ttc\" id=\"aa01471_html_a602c67342e0fbd8820ac3b07727e7a2b\"><div class=\"ttname\"><a href=\"a01471.html#a602c67342e0fbd8820ac3b07727e7a2b\">Dune::Functions::BrezziDouglasMariniPreBasis::maxMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type maxMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:164</div></div>\n-<div class=\"ttc\" id=\"aa01471_html_a652912b1867705a80ee3d8562b916939\"><div class=\"ttname\"><a href=\"a01471.html#a652912b1867705a80ee3d8562b916939\">Dune::Functions::BrezziDouglasMariniPreBasis::codimOffset_</a></div><div class=\"ttdeci\">std::array< size_t, dim+1 > codimOffset_</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:267</div></div>\n-<div class=\"ttc\" id=\"aa01471_html_a6c46d94ec8cf7cc85af4e5f8ec60f60a\"><div class=\"ttname\"><a href=\"a01471.html#a6c46d94ec8cf7cc85af4e5f8ec60f60a\">Dune::Functions::BrezziDouglasMariniPreBasis::size</a></div><div class=\"ttdeci\">size_type size(const SizePrefix prefix) const</div><div class=\"ttdoc\">Return number possible values for next position in multi index.</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:214</div></div>\n-<div class=\"ttc\" id=\"aa01471_html_a71dfd3bb1f044e63beb091078958ec09\"><div class=\"ttname\"><a href=\"a01471.html#a71dfd3bb1f044e63beb091078958ec09\">Dune::Functions::BrezziDouglasMariniPreBasis::makeNode</a></div><div class=\"ttdeci\">Node makeNode() const</div><div class=\"ttdoc\">Create tree node.</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:202</div></div>\n-<div class=\"ttc\" id=\"aa01471_html_a73e7fec0c1f6f0c0316bbfceec2c4a00\"><div class=\"ttname\"><a href=\"a01471.html#a73e7fec0c1f6f0c0316bbfceec2c4a00\">Dune::Functions::BrezziDouglasMariniPreBasis::GridView</a></div><div class=\"ttdeci\">GV GridView</div><div class=\"ttdoc\">The grid view that the FE space is defined on.</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:159</div></div>\n-<div class=\"ttc\" id=\"aa01471_html_a8a676a86dd435bea14de3bc28fd05cd2\"><div class=\"ttname\"><a href=\"a01471.html#a8a676a86dd435bea14de3bc28fd05cd2\">Dune::Functions::BrezziDouglasMariniPreBasis::BrezziDouglasMariniPreBasis</a></div><div class=\"ttdeci\">BrezziDouglasMariniPreBasis(const GridView &gv)</div><div class=\"ttdoc\">Constructor for a given grid view object.</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:169</div></div>\n-<div class=\"ttc\" id=\"aa01471_html_aac5619ab7c2f133c3cb1532ccab671ef\"><div class=\"ttname\"><a href=\"a01471.html#aac5619ab7c2f133c3cb1532ccab671ef\">Dune::Functions::BrezziDouglasMariniPreBasis::finiteElementMap_</a></div><div class=\"ttdeci\">FiniteElementMap finiteElementMap_</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:268</div></div>\n-<div class=\"ttc\" id=\"aa01471_html_aaf7c89c03020de08177fc5763172fe4e\"><div class=\"ttname\"><a href=\"a01471.html#aaf7c89c03020de08177fc5763172fe4e\">Dune::Functions::BrezziDouglasMariniPreBasis::update</a></div><div class=\"ttdeci\">void update(const GridView &gv)</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:194</div></div>\n-<div class=\"ttc\" id=\"aa01471_html_ab5cfa8d3d09efabba16bacfe00ec8395\"><div class=\"ttname\"><a href=\"a01471.html#ab5cfa8d3d09efabba16bacfe00ec8395\">Dune::Functions::BrezziDouglasMariniPreBasis::initializeIndices</a></div><div class=\"ttdeci\">void initializeIndices()</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:179</div></div>\n-<div class=\"ttc\" id=\"aa01471_html_acaba7d4affc7e11e63d12ca6d289dad1\"><div class=\"ttname\"><a href=\"a01471.html#acaba7d4affc7e11e63d12ca6d289dad1\">Dune::Functions::BrezziDouglasMariniPreBasis::gridView</a></div><div class=\"ttdeci\">const GridView & gridView() const</div><div class=\"ttdoc\">Obtain the grid view that the basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:188</div></div>\n-<div class=\"ttc\" id=\"aa01471_html_ad52ffa5d76a4293f6570f523590c7776\"><div class=\"ttname\"><a href=\"a01471.html#ad52ffa5d76a4293f6570f523590c7776\">Dune::Functions::BrezziDouglasMariniPreBasis::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:207</div></div>\n-<div class=\"ttc\" id=\"aa01471_html_adc251df663d009c59b79a4ea89e77ab7\"><div class=\"ttname\"><a href=\"a01471.html#adc251df663d009c59b79a4ea89e77ab7\">Dune::Functions::BrezziDouglasMariniPreBasis::multiIndexBufferSize</a></div><div class=\"ttdeci\">static constexpr size_type multiIndexBufferSize</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:166</div></div>\n-<div class=\"ttc\" id=\"aa01471_html_aef13302e7f426077b56121d29c1af505\"><div class=\"ttname\"><a href=\"a01471.html#aef13302e7f426077b56121d29c1af505\">Dune::Functions::BrezziDouglasMariniPreBasis::maxNodeSize</a></div><div class=\"ttdeci\">size_type maxNodeSize() const</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:226</div></div>\n-<div class=\"ttc\" id=\"aa01471_html_af43ee62056d6da93f39b88c2a834b38b\"><div class=\"ttname\"><a href=\"a01471.html#af43ee62056d6da93f39b88c2a834b38b\">Dune::Functions::BrezziDouglasMariniPreBasis::gridView_</a></div><div class=\"ttdeci\">GridView gridView_</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:266</div></div>\n-<div class=\"ttc\" id=\"aa01471_html_afae24105eb45c9cd8753ab732447269f\"><div class=\"ttname\"><a href=\"a01471.html#afae24105eb45c9cd8753ab732447269f\">Dune::Functions::BrezziDouglasMariniPreBasis::indices</a></div><div class=\"ttdeci\">It indices(const Node &node, It it) const</div><div class=\"ttdoc\">Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.</div><div class=\"ttdef\"><b>Definition:</b> brezzidouglasmarinibasis.hh:241</div></div>\n <div class=\"ttc\" id=\"aa01555_html\"><div class=\"ttname\"><a href=\"a01555.html\">Dune::Functions::DefaultGlobalBasis</a></div><div class=\"ttdoc\">Global basis for given pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:46</div></div>\n+<div class=\"ttc\" id=\"aa01667_html\"><div class=\"ttname\"><a href=\"a01667.html\">Dune::Functions::LagrangeNode</a></div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:387</div></div>\n+<div class=\"ttc\" id=\"aa01671_html\"><div class=\"ttname\"><a href=\"a01671.html\">Dune::Functions::LagrangePreBasis< GV, 1 ></a></div></div>\n+<div class=\"ttc\" id=\"aa01671_html_a45c031d3793e53e9413b86d49bffa5b0\"><div class=\"ttname\"><a href=\"a01671.html#a45c031d3793e53e9413b86d49bffa5b0\">Dune::Functions::LagrangePreBasis::indices</a></div><div class=\"ttdeci\">It indices(const Node &node, It it) const</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:192</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_a7318cbabd5f57d0b6cbab1b2dc41fff8\"><div class=\"ttname\"><a href=\"a01671.html#a7318cbabd5f57d0b6cbab1b2dc41fff8\">Dune::Functions::LagrangePreBasis::initializeIndices</a></div><div class=\"ttdeci\">void initializeIndices()</div><div class=\"ttdoc\">Initialize the global indices.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:96</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_a9a9c2b3c8b2b46160d68d46cd2ed2c00\"><div class=\"ttname\"><a href=\"a01671.html#a9a9c2b3c8b2b46160d68d46cd2ed2c00\">Dune::Functions::LagrangePreBasis::update</a></div><div class=\"ttdeci\">void update(const GridView &gv)</div><div class=\"ttdoc\">Update the stored grid view, to be called if the grid has changed.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:126</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_ac91dcb0f3589b23598df3ced95d50d0c\"><div class=\"ttname\"><a href=\"a01671.html#ac91dcb0f3589b23598df3ced95d50d0c\">Dune::Functions::LagrangePreBasis::maxNodeSize</a></div><div class=\"ttdeci\">size_type maxNodeSize() const</div><div class=\"ttdoc\">Get the maximal number of DOFs associated to node for any element.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:184</div></div>\n+<div class=\"ttc\" id=\"aa01671_html_adabf2688eef2d33a180ae9cfbde492b1\"><div class=\"ttname\"><a href=\"a01671.html#adabf2688eef2d33a180ae9cfbde492b1\">Dune::Functions::LagrangePreBasis::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdoc\">Same as size(prefix) with empty prefix.</div><div class=\"ttdef\"><b>Definition:</b> lagrangebasis.hh:140</div></div>\n <div class=\"ttc\" id=\"aa01707_html_a859d50513645ef2ea0188d0779c1df30\"><div class=\"ttname\"><a href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">Dune::Functions::BasisNodeMixin::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:142</div></div>\n-<div class=\"ttc\" id=\"aa01707_html_ae93815e5c4012f7be5d11786f40d267a\"><div class=\"ttname\"><a href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\">Dune::Functions::BasisNodeMixin::setSize</a></div><div class=\"ttdeci\">void setSize(const size_type size)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:164</div></div>\n-<div class=\"ttc\" id=\"aa01711_html\"><div class=\"ttname\"><a href=\"a01711.html\">Dune::Functions::LeafBasisNode</a></div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:186</div></div>\n+<div class=\"ttc\" id=\"aa01715_html\"><div class=\"ttname\"><a href=\"a01715.html\">Dune::Functions::PowerBasisNode</a></div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:193</div></div>\n+<div class=\"ttc\" id=\"aa01719_html\"><div class=\"ttname\"><a href=\"a01719.html\">Dune::Functions::CompositeBasisNode</a></div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:219</div></div>\n+<div class=\"ttc\" id=\"aa01815_html\"><div class=\"ttname\"><a href=\"a01815.html\">Dune::Functions::TaylorHoodVelocityTree</a></div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:269</div></div>\n+<div class=\"ttc\" id=\"aa01815_html_a0be9d13cf09261281b9fe16187e90bff\"><div class=\"ttname\"><a href=\"a01815.html#a0be9d13cf09261281b9fe16187e90bff\">Dune::Functions::TaylorHoodVelocityTree::TaylorHoodVelocityTree</a></div><div class=\"ttdeci\">TaylorHoodVelocityTree()</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:274</div></div>\n+<div class=\"ttc\" id=\"aa01819_html\"><div class=\"ttname\"><a href=\"a01819.html\">Dune::Functions::TaylorHoodBasisTree</a></div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:287</div></div>\n+<div class=\"ttc\" id=\"aa01819_html_a046d55e939cbff7263d0df1e2b8e6356\"><div class=\"ttname\"><a href=\"a01819.html#a046d55e939cbff7263d0df1e2b8e6356\">Dune::Functions::TaylorHoodBasisTree::TaylorHoodBasisTree</a></div><div class=\"ttdeci\">TaylorHoodBasisTree()</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:294</div></div>\n+<div class=\"ttc\" id=\"aa01823_html\"><div class=\"ttname\"><a href=\"a01823.html\">Dune::Functions::TaylorHoodPreBasis</a></div><div class=\"ttdoc\">Pre-basis for lowest order Taylor-Hood basis.</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:61</div></div>\n+<div class=\"ttc\" id=\"aa01823_html_a12fa8eb410a271861631e77ada59b3ba\"><div class=\"ttname\"><a href=\"a01823.html#a12fa8eb410a271861631e77ada59b3ba\">Dune::Functions::TaylorHoodPreBasis::TaylorHoodPreBasis</a></div><div class=\"ttdeci\">TaylorHoodPreBasis(const GridView &gv)</div><div class=\"ttdoc\">Constructor for a given grid view object.</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:89</div></div>\n+<div class=\"ttc\" id=\"aa01823_html_a18a80001dfe453ce542ab7896e27c10e\"><div class=\"ttname\"><a href=\"a01823.html#a18a80001dfe453ce542ab7896e27c10e\">Dune::Functions::TaylorHoodPreBasis::gridView</a></div><div class=\"ttdeci\">const GridView & gridView() const</div><div class=\"ttdoc\">Obtain the grid view that the basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:103</div></div>\n+<div class=\"ttc\" id=\"aa01823_html_a2ab779870149b404f47be6e5550257ea\"><div class=\"ttname\"><a href=\"a01823.html#a2ab779870149b404f47be6e5550257ea\">Dune::Functions::TaylorHoodPreBasis::minMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type minMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:78</div></div>\n+<div class=\"ttc\" id=\"aa01823_html_a496ca50aeae7e9ac1e3cdb4e8118213d\"><div class=\"ttname\"><a href=\"a01823.html#a496ca50aeae7e9ac1e3cdb4e8118213d\">Dune::Functions::TaylorHoodPreBasis::size</a></div><div class=\"ttdeci\">size_type size(const SizePrefix &prefix) const</div><div class=\"ttdoc\">Return number of possible values for next position in multi index.</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:131</div></div>\n+<div class=\"ttc\" id=\"aa01823_html_a4ba12b2015f3761ec28e95b3a120cffb\"><div class=\"ttname\"><a href=\"a01823.html#a4ba12b2015f3761ec28e95b3a120cffb\">Dune::Functions::TaylorHoodPreBasis::gridView_</a></div><div class=\"ttdeci\">GridView gridView_</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:258</div></div>\n+<div class=\"ttc\" id=\"aa01823_html_a4fbd3d92587a03f3871066968035f194\"><div class=\"ttname\"><a href=\"a01823.html#a4fbd3d92587a03f3871066968035f194\">Dune::Functions::TaylorHoodPreBasis::GridView</a></div><div class=\"ttdeci\">GV GridView</div><div class=\"ttdoc\">The grid view that the FE basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:69</div></div>\n+<div class=\"ttc\" id=\"aa01823_html_a6f5f71bba7ced2b2a1fe84798bd39e81\"><div class=\"ttname\"><a href=\"a01823.html#a6f5f71bba7ced2b2a1fe84798bd39e81\">Dune::Functions::TaylorHoodPreBasis::update</a></div><div class=\"ttdeci\">void update(const GridView &gv)</div><div class=\"ttdoc\">Update the stored grid view, to be called if the grid has changed.</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:109</div></div>\n+<div class=\"ttc\" id=\"aa01823_html_a86ed45c92fecf521019dcc18d90dc4d3\"><div class=\"ttname\"><a href=\"a01823.html#a86ed45c92fecf521019dcc18d90dc4d3\">Dune::Functions::TaylorHoodPreBasis::pq2PreBasis_</a></div><div class=\"ttdeci\">PQ2PreBasis pq2PreBasis_</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:261</div></div>\n+<div class=\"ttc\" id=\"aa01823_html_a91e51ff12e346b507bf0c538ea80f0de\"><div class=\"ttname\"><a href=\"a01823.html#a91e51ff12e346b507bf0c538ea80f0de\">Dune::Functions::TaylorHoodPreBasis::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdoc\">Same as size(prefix) with empty prefix.</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:124</div></div>\n+<div class=\"ttc\" id=\"aa01823_html_a93d67530c52138ed6cdf815a4b657eaf\"><div class=\"ttname\"><a href=\"a01823.html#a93d67530c52138ed6cdf815a4b657eaf\">Dune::Functions::TaylorHoodPreBasis::dimension</a></div><div class=\"ttdeci\">size_type dimension() const</div><div class=\"ttdoc\">Get the total dimension of the space spanned by this basis.</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:182</div></div>\n+<div class=\"ttc\" id=\"aa01823_html_a9d26725c5f9e2f84e0b504c3bffcfe42\"><div class=\"ttname\"><a href=\"a01823.html#a9d26725c5f9e2f84e0b504c3bffcfe42\">Dune::Functions::TaylorHoodPreBasis::pq1PreBasis_</a></div><div class=\"ttdeci\">PQ1PreBasis pq1PreBasis_</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:260</div></div>\n+<div class=\"ttc\" id=\"aa01823_html_a9ef33019c438c6bceea7d2b9c44df05a\"><div class=\"ttname\"><a href=\"a01823.html#a9ef33019c438c6bceea7d2b9c44df05a\">Dune::Functions::TaylorHoodPreBasis::multiIndexPushFront</a></div><div class=\"ttdeci\">static const void multiIndexPushFront(MultiIndex &M, size_type M0)</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:202</div></div>\n+<div class=\"ttc\" id=\"aa01823_html_aa392e5ef9f61616b5761fe47dec36471\"><div class=\"ttname\"><a href=\"a01823.html#aa392e5ef9f61616b5761fe47dec36471\">Dune::Functions::TaylorHoodPreBasis::maxMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type maxMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:77</div></div>\n+<div class=\"ttc\" id=\"aa01823_html_ab02c713869cdc66f6a5baec76211773c\"><div class=\"ttname\"><a href=\"a01823.html#ab02c713869cdc66f6a5baec76211773c\">Dune::Functions::TaylorHoodPreBasis::makeNode</a></div><div class=\"ttdeci\">Node makeNode() const</div><div class=\"ttdoc\">Create tree node.</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:118</div></div>\n+<div class=\"ttc\" id=\"aa01823_html_ab5bb04fffb5031fd76d11efcf28d738b\"><div class=\"ttname\"><a href=\"a01823.html#ab5bb04fffb5031fd76d11efcf28d738b\">Dune::Functions::TaylorHoodPreBasis::indices</a></div><div class=\"ttdeci\">It indices(const Node &node, It it) const</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:194</div></div>\n+<div class=\"ttc\" id=\"aa01823_html_ac232b435a11882f871f15bb1dc9b70aa\"><div class=\"ttname\"><a href=\"a01823.html#ac232b435a11882f871f15bb1dc9b70aa\">Dune::Functions::TaylorHoodPreBasis::multiIndexBufferSize</a></div><div class=\"ttdeci\">static constexpr size_type multiIndexBufferSize</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:79</div></div>\n+<div class=\"ttc\" id=\"aa01823_html_ae9dddae8c0e1f977aee5acbcaef8cca7\"><div class=\"ttname\"><a href=\"a01823.html#ae9dddae8c0e1f977aee5acbcaef8cca7\">Dune::Functions::TaylorHoodPreBasis::initializeIndices</a></div><div class=\"ttdeci\">void initializeIndices()</div><div class=\"ttdoc\">Initialize the global indices.</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:96</div></div>\n+<div class=\"ttc\" id=\"aa01823_html_aeebe78092668f359c8a790810f413372\"><div class=\"ttname\"><a href=\"a01823.html#aeebe78092668f359c8a790810f413372\">Dune::Functions::TaylorHoodPreBasis::maxNodeSize</a></div><div class=\"ttdeci\">size_type maxNodeSize() const</div><div class=\"ttdoc\">Get the maximal number of DOFs associated to node for any element.</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:188</div></div>\n+<div class=\"ttc\" id=\"aa01823_html_aeed4421421902dc5900eedca651e56b9\"><div class=\"ttname\"><a href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">Dune::Functions::TaylorHoodPreBasis::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdoc\">Type used for indices and size information.</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:72</div></div>\n+<div class=\"ttc\" id=\"aa01823_html_af9b43f29d448a89030668dc23ecfbade\"><div class=\"ttname\"><a href=\"a01823.html#af9b43f29d448a89030668dc23ecfbade\">Dune::Functions::TaylorHoodPreBasis::indicesImp</a></div><div class=\"ttdeci\">It indicesImp(const Node &node, It multiIndices) const</div><div class=\"ttdef\"><b>Definition:</b> taylorhoodbasis.hh:212</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,511 +5,438 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-brezzidouglasmarinibasis.hh\n+taylorhoodbasis.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH\n- 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH\n+ 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH\n+ 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH\n 5\n- 6#include <array>\n- 7#include <dune/common/exceptions.hh>\n- 8#include <dune/geometry/referenceelements.hh>\n+ 6#include <dune/common/exceptions.hh>\n+ 7#include <dune/common/reservedvector.hh>\n+ 8#include <dune/common/indices.hh>\n 9\n- 10#include <dune/localfunctions/common/virtualinterface.hh>\n- 11#include <dune/localfunctions/common/virtualwrappers.hh>\n+ 10#include <dune/typetree/powernode.hh>\n+ 11#include <dune/typetree/compositenode.hh>\n 12\n- 13#include <dune/localfunctions/brezzidouglasmarini/\n-brezzidouglasmarini1cube2d.hh>\n- 14#include <dune/localfunctions/brezzidouglasmarini/\n-brezzidouglasmarini1cube3d.hh>\n- 15#include <dune/localfunctions/brezzidouglasmarini/\n-brezzidouglasmarini1simplex2d.hh>\n- 16#include <dune/localfunctions/brezzidouglasmarini/\n-brezzidouglasmarini2cube2d.hh>\n- 17#include <dune/localfunctions/brezzidouglasmarini/\n-brezzidouglasmarini2simplex2d.hh>\n- 18\n- 19#include <dune/functions/functionspacebases/\n-globalvaluedlocalfiniteelement.hh>\n- 20#include <dune/functions/functionspacebases/nodes.hh>\n- 21#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n- 22\n- 23namespace Dune {\n- 24namespace Functions {\n- 25\n- 26namespace Impl {\n- 27\n- 28 template<int dim, typename D, typename R, std::size_t k>\n- 29 struct BDMSimplexLocalInfo\n- 30 {\n- 31 static_assert((AlwaysFalse<D>::value),\"The requested type of BDM element is\n-not implemented, sorry!\");\n- 32 };\n+ 13#include <dune/functions/functionspacebases/nodes.hh>\n+ 14\n+ 15#include <dune/functions/functionspacebases/lagrangebasis.hh>\n+ 16#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n+ 17\n+ 18namespace Dune {\n+ 19namespace Functions {\n+ 20\n+ 21\n+ 22/\n+/ *****************************************************************************\n+ 23// This is the reusable part of the basis. It contains\n+ 24//\n+ 25// TaylorHoodPreBasis\n+ 26// TaylorHoodBasisTree\n+ 27// TaylorHoodVelocityTree\n+ 28//\n+ 29// The pre-basis allows to create the others and is the owner of possible\n+shared\n+ 30// state. These components do _not_ depend on the global basis and local\n+view\n+ 31// and can be used without a global basis.\n+ 32/\n+/ *****************************************************************************\n 33\n- 34 template<typename D, typename R>\n- 35 struct BDMSimplexLocalInfo<2,D,R,1>\n- 36 {\n- 37 using FiniteElement = BDM1Simplex2DLocalFiniteElement<D,R>;\n- 38 static const std::size_t Variants = 8;\n- 39 };\n- 40\n- 41 template<typename D, typename R>\n- 42 struct BDMSimplexLocalInfo<2,D,R,2>\n- 43 {\n- 44 using FiniteElement = BDM2Simplex2DLocalFiniteElement<D,R>;\n- 45 static const std::size_t Variants = 8;\n- 46 };\n- 47\n- 48 template<int dim, typename D, typename R, std::size_t k>\n- 49 struct BDMCubeLocalInfo\n- 50 {\n- 51 static_assert((AlwaysFalse<D>::value),\"The requested type of BDM element is\n-not implemented, sorry!\");\n- 52 };\n- 53\n- 54 template<typename D, typename R>\n- 55 struct BDMCubeLocalInfo<2,D,R,1>\n- 56 {\n- 57 using FiniteElement = BDM1Cube2DLocalFiniteElement<D,R>;\n- 58 static const std::size_t Variants = 16;\n- 59 };\n- 60\n- 61 template<typename D, typename R>\n- 62 struct BDMCubeLocalInfo<2,D,R,2>\n- 63 {\n- 64 using FiniteElement = BDM2Cube2DLocalFiniteElement<D,R>;\n- 65 static const std::size_t Variants = 16;\n- 66 };\n+ 34template<typename GV>\n+ 35class TaylorHoodVelocityTree;\n+ 36\n+ 37template<typename GV>\n+ 38class TaylorHoodBasisTree;\n+ 39\n+ 59template<typename GV, bool HI=false>\n+60class TaylorHoodPreBasis\n+ 61{\n+ 62 static const bool useHybridIndices = HI;\n+ 63\n+ 64 static const int dim = GV::dimension;\n+ 65\n+ 66public:\n 67\n- 68 template<typename D, typename R>\n- 69 struct BDMCubeLocalInfo<3,D,R,1>\n- 70 {\n- 71 using FiniteElement = BDM1Cube3DLocalFiniteElement<D,R>;\n- 72 static const std::size_t Variants = 64;\n- 73 };\n- 74\n- 75 template<typename GV, int dim, typename R, std::size_t k>\n- 76 class BDMLocalFiniteElementMap\n- 77 {\n- 78 using D = typename GV::ctype;\n- 79 using CubeFiniteElement = typename BDMCubeLocalInfo<dim, D, R, k>::\n-FiniteElement;\n- 80 using SimplexFiniteElement = typename BDMSimplexLocalInfo<dim, D, R, k>::\n-FiniteElement;\n- 81\n- 82 public:\n- 83\n- 84 using T = LocalBasisTraits<D, dim, FieldVector<D,dim>, R, dim,\n-FieldVector<R,dim>, FieldMatrix<D,dim,dim> >;\n- 85 using FiniteElement = LocalFiniteElementVirtualInterface<T>;\n- 86\n- 87 BDMLocalFiniteElementMap(const GV& gv)\n- 88 : is_(&(gv.indexSet())), orient_(gv.size(0))\n- 89 {\n- 90 cubeVariant_.resize(BDMCubeLocalInfo<dim, D, R, k>::Variants);\n- 91 simplexVariant_.resize(BDMSimplexLocalInfo<dim, D, R, k>::Variants);\n- 92\n- 93 // create all variants\n- 94 for (size_t i = 0; i < cubeVariant_.size(); i++)\n- 95 cubeVariant_[i] = std::\n-make_unique<LocalFiniteElementVirtualImp<CubeFiniteElement> >(CubeFiniteElement\n-(i));\n- 96\n- 97 for (size_t i = 0; i < simplexVariant_.size(); i++)\n- 98 simplexVariant_[i] = std::\n-make_unique<LocalFiniteElementVirtualImp<SimplexFiniteElement> >\n-(SimplexFiniteElement(i));\n- 99\n- 100 // compute orientation for all elements\n- 101 // loop once over the grid\n- 102 for(const auto& cell : elements(gv))\n- 103 {\n- 104 unsigned int myId = is_->index(cell);\n- 105 orient_[myId] = 0;\n- 106\n- 107 for (const auto& intersection : intersections(gv,cell))\n- 108 {\n- 109 if (intersection.neighbor() && (is_->index(intersection.outside()) >\n-myId))\n- 110 orient_[myId] |= (1 << intersection.indexInInside());\n- 111 }\n- 112 }\n+69 using GridView = GV;\n+ 70\n+72 using size_type = std::size_t;\n+ 73\n+75 using Node = TaylorHoodBasisTree<GV>;\n+ 76\n+77 static constexpr size_type maxMultiIndexSize = useHybridIndices ? 3 : 2;\n+78 static constexpr size_type minMultiIndexSize = 2;\n+79 static constexpr size_type multiIndexBufferSize = maxMultiIndexSize;\n+ 80\n+ 81private:\n+ 82\n+ 83 using PQ1PreBasis = LagrangePreBasis<GV,1>;\n+ 84 using PQ2PreBasis = LagrangePreBasis<GV,2>;\n+ 85\n+ 86public:\n+ 87\n+89 TaylorHoodPreBasis(const GridView& gv) :\n+ 90 gridView_(gv),\n+ 91 pq1PreBasis_(gv),\n+ 92 pq2PreBasis_(gv)\n+ 93 {}\n+ 94\n+96 void initializeIndices()\n+ 97 {\n+ 98 pq1PreBasis_.initializeIndices();\n+ 99 pq2PreBasis_.initializeIndices();\n+ 100 }\n+ 101\n+103 const GridView& gridView() const\n+ 104 {\n+ 105 return gridView_;\n+ 106 }\n+ 107\n+109 void update (const GridView& gv)\n+ 110 {\n+ 111 pq1PreBasis_.update(gv);\n+ 112 pq2PreBasis_.update(gv);\n 113 }\n 114\n- 116 template<class EntityType>\n- 117 const FiniteElement& find(const EntityType& e) const\n- 118 {\n- 119 if (e.type().isCube())\n- 120 return *cubeVariant_[orient_[is_->index(e)]];\n- 121 else\n- 122 return *simplexVariant_[orient_[is_->index(e)]];\n- 123 }\n- 124\n- 125 private:\n- 126 std::vector<std::\n-unique_ptr<LocalFiniteElementVirtualImp<CubeFiniteElement> > > cubeVariant_;\n- 127 std::vector<std::\n-unique_ptr<LocalFiniteElementVirtualImp<SimplexFiniteElement> > >\n-simplexVariant_;\n- 128 const typename GV::IndexSet* is_;\n- 129 std::vector<unsigned char> orient_;\n- 130 };\n- 131\n- 132\n- 133} // namespace Impl\n- 134\n+118 Node makeNode() const\n+ 119 {\n+ 120 return Node{};\n+ 121 }\n+ 122\n+124 size_type size() const\n+ 125 {\n+ 126 return 2;\n+ 127 }\n+ 128\n+ 130 template<class SizePrefix>\n+131 size_type size(const SizePrefix& prefix) const\n+ 132 {\n+ 133 return sizeImp<useHybridIndices>(prefix);\n+ 134 }\n 135\n- 136/\n-/ *****************************************************************************\n- 137// This is the reusable part of the basis. It contains\n- 138//\n- 139// BrezziDouglasMariniPreBasis\n- 140// BrezziDouglasMariniNode\n- 141//\n- 142// The pre-basis allows to create the others and is the owner of possible\n-shared\n- 143// state. These components do _not_ depend on the global basis and local\n-view\n- 144// and can be used without a global basis.\n- 145/\n-/ *****************************************************************************\n- 146\n- 147template<typename GV, int k>\n- 148class BrezziDouglasMariniNode;\n- 149\n- 150template<typename GV, int k>\n-151class BrezziDouglasMariniPreBasis\n- 152{\n- 153 static const int dim = GV::dimension;\n- 154 using FiniteElementMap = typename Impl::BDMLocalFiniteElementMap<GV, dim,\n-double, k>;\n- 155\n- 156public:\n- 157\n-159 using GridView = GV;\n-160 using size_type = std::size_t;\n- 161\n-162 using Node = BrezziDouglasMariniNode<GV,_k>;\n- 163\n-164 static constexpr size_type maxMultiIndexSize = 1;\n-165 static constexpr size_type minMultiIndexSize = 1;\n-166 static constexpr size_type multiIndexBufferSize = 1;\n- 167\n-169 BrezziDouglasMariniPreBasis(const GridView& gv) :\n- 170 gridView_(gv),\n- 171 finiteElementMap_(gv)\n- 172 {\n- 173 // There is no inherent reason why the basis shouldn't work for grids with\n-more than one\n- 174 // element types. Somebody simply has to sit down and implement the\n-missing bits.\n- 175 if (gv.indexSet().types(0).size() > 1)\n- 176 DUNE_THROW(Dune::NotImplemented, \"Brezzi-Douglas-Marini basis is only\n-implemented for grids with a single element type\");\n+ 136private:\n+ 137\n+ 138 template<bool hi, class SizePrefix,\n+ 139 typename std::enable_if<not hi,int>::type = 0>\n+ 140 size_type sizeImp(const SizePrefix& prefix) const\n+ 141 {\n+ 142 if (prefix.size() == 0)\n+ 143 return 2;\n+ 144 if (prefix.size() == 1)\n+ 145 {\n+ 146 if (prefix[0] == 0)\n+ 147 return dim * pq2PreBasis_.size();\n+ 148 if (prefix[0] == 1)\n+ 149 return pq1PreBasis_.size();\n+ 150 }\n+ 151 assert(prefix.size() == 2);\n+ 152 return 0;\n+ 153 }\n+ 154\n+ 155 template<bool hi, class SizePrefix,\n+ 156 typename std::enable_if<hi,int>::type = 0>\n+ 157 size_type sizeImp(const SizePrefix& prefix) const\n+ 158 {\n+ 159 if (prefix.size() == 0)\n+ 160 return 2;\n+ 161 if (prefix.size() == 1)\n+ 162 {\n+ 163 if (prefix[0] == 0)\n+ 164 return pq2PreBasis_.size();\n+ 165 if (prefix[0] == 1)\n+ 166 return pq1PreBasis_.size();\n+ 167 }\n+ 168 if (prefix.size() == 2)\n+ 169 {\n+ 170 if (prefix[0] == 0)\n+ 171 return dim;\n+ 172 if (prefix[0] == 1)\n+ 173 return 0;\n+ 174 }\n+ 175 assert(prefix.size() == 3);\n+ 176 return 0;\n 177 }\n 178\n-179 void initializeIndices()\n- 180 {\n- 181 codimOffset_[0] = 0;\n- 182 codimOffset_[1] = codimOffset_[0] + dofsPerCodim_[0] * gridView_.size(0);\n- 183 //if (dim==3) codimOffset_[2] = codimOffset_[1] + dofsPerCodim[1] *\n-gridView_.size(1);\n- 184 }\n- 185\n-188 const GridView& gridView() const\n+ 179public:\n+ 180\n+182 size_type dimension() const\n+ 183 {\n+ 184 return dim * pq2PreBasis_.size() + pq1PreBasis_.size();\n+ 185 }\n+ 186\n+188 size_type maxNodeSize() const\n 189 {\n- 190 return gridView_;\n+ 190 return dim * pq2PreBasis_.maxNodeSize() + pq1PreBasis_.maxNodeSize();\n 191 }\n 192\n- 193 /* \\brief Update the stored grid view, to be called if the grid has\n-changed */\n-194 void update (const GridView& gv)\n+ 193 template<typename It>\n+194 It indices(const Node& node, It it) const\n 195 {\n- 196 gridView_ = gv;\n+ 196 return indicesImp<useHybridIndices>(node, it);\n 197 }\n 198\n-202 Node makeNode() const\n+ 199protected:\n+ 200\n+ 201 template<class MultiIndex>\n+202 static const void multiIndexPushFront(MultiIndex& M, size_type M0)\n 203 {\n- 204 return Node{&finiteElementMap_};\n- 205 }\n- 206\n-207 size_type size() const\n- 208 {\n- 209 return dofsPerCodim_[0] * gridView_.size(0) + dofsPerCodim_[1] *\n-gridView_.size(1); // only 2d\n- 210 }\n- 211\n- 213 template<class SizePrefix>\n-214 size_type size(const SizePrefix prefix) const\n- 215 {\n- 216 assert(prefix.size() == 0 || prefix.size() == 1);\n- 217 return (prefix.size() == 0) ? size() : 0;\n- 218 }\n- 219\n-221 size_type dimension() const\n- 222 {\n- 223 return size();\n- 224 }\n- 225\n-226 size_type maxNodeSize() const\n- 227 {\n- 228 // The implementation currently only supports grids with a single element\n-type.\n- 229 // We can therefore return the actual number of dofs here.\n- 230 GeometryType elementType = *(gridView_.indexSet().types(0).begin());\n- 231 size_t numFaces = ReferenceElements<double,dim>::general(elementType).size\n-(1);\n- 232 return dofsPerCodim_[0] + dofsPerCodim_[1] * numFaces;\n- 233 }\n- 234\n- 240 template<typename It>\n-241 It indices(const Node& node, It it) const\n- 242 {\n- 243 const auto& gridIndexSet = gridView().indexSet();\n- 244 const auto& element = node.element();\n- 245\n- 246 // throw if element is not of predefined type\n- 247 if (not(element.type().isCube()) and not(element.type().isSimplex()))\n- 248 DUNE_THROW(Dune::NotImplemented, \"BrezziDouglasMariniBasis only\n-implemented for cube and simplex elements.\");\n- 249\n- 250 for(std::size_t i=0, end=node.size(); i<end; ++i, ++it)\n- 251 {\n- 252 Dune::LocalKey localKey = node.finiteElement().localCoefficients\n-().localKey(i);\n- 253\n- 254 // The dimension of the entity that the current dof is related to\n- 255 size_t subentity = localKey.subEntity();\n- 256 size_t codim = localKey.codim();\n+ 204 M.resize(M.size()+1);\n+ 205 for(std::size_t i=M.size()-1; i>0; --i)\n+ 206 M[i] = M[i-1];\n+ 207 M[0] = M0;\n+ 208 }\n+ 209\n+ 210 template<bool hi, class It,\n+ 211 typename std::enable_if<not hi,int>::type = 0>\n+212 It indicesImp(const Node& node, It multiIndices) const\n+ 213 {\n+ 214 using namespace Dune::Indices;\n+ 215 for(std::size_t child=0; child<dim; ++child)\n+ 216 {\n+ 217 size_type subTreeSize = node.child(_0, 0).size();\n+ 218 pq2PreBasis_.indices(node.child(_0, 0), multiIndices);\n+ 219 for (std::size_t i = 0; i<subTreeSize; ++i)\n+ 220 {\n+ 221 multiIndexPushFront(multiIndices[i], 0);\n+ 222 multiIndices[i][1] = multiIndices[i][1]*dim + child;\n+ 223 }\n+ 224 multiIndices += subTreeSize;\n+ 225 }\n+ 226 size_type subTreeSize = node.child(_1).size();\n+ 227 pq1PreBasis_.indices(node.child(_1), multiIndices);\n+ 228 for (std::size_t i = 0; i<subTreeSize; ++i)\n+ 229 multiIndexPushFront(multiIndices[i], 1);\n+ 230 multiIndices += subTreeSize;\n+ 231 return multiIndices;\n+ 232 }\n+ 233\n+ 234 template<bool hi, class It,\n+ 235 typename std::enable_if<hi,int>::type = 0>\n+236 It indicesImp(const Node& node, It multiIndices) const\n+ 237 {\n+ 238 using namespace Dune::Indices;\n+ 239 for(std::size_t child=0; child<dim; ++child)\n+ 240 {\n+ 241 size_type subTreeSize = node.child(_0, 0).size();\n+ 242 pq2PreBasis_.indices(node.child(_0, 0), multiIndices);\n+ 243 for (std::size_t i = 0; i<subTreeSize; ++i)\n+ 244 {\n+ 245 multiIndexPushFront(multiIndices[i], 0);\n+ 246 multiIndices[i].push_back(i);\n+ 247 }\n+ 248 multiIndices += subTreeSize;\n+ 249 }\n+ 250 size_type subTreeSize = node.child(_1).size();\n+ 251 pq1PreBasis_.indices(node.child(_1), multiIndices);\n+ 252 for (std::size_t i = 0; i<subTreeSize; ++i)\n+ 253 multiIndexPushFront(multiIndices[i], 1);\n+ 254 multiIndices += subTreeSize;\n+ 255 return multiIndices;\n+ 256 }\n 257\n- 258 *it = { codimOffset_[codim] +\n- 259 dofsPerCodim_[codim] * gridIndexSet.subIndex(element, subentity, codim) +\n-localKey.index() };\n- 260 }\n- 261\n- 262 return it;\n- 263 }\n+258 GridView gridView_;\n+ 259\n+260 PQ1PreBasis pq1PreBasis_;\n+261 PQ2PreBasis pq2PreBasis_;\n+ 262};\n+ 263\n 264\n- 265protected:\n-266 GridView gridView_;\n-267 std::array<size_t,dim+1> codimOffset_;\n-268 FiniteElementMap finiteElementMap_;\n- 269 // Number of dofs per entity type depending on the entity's codimension\n-and type\n-270 std::array<int,2> dofsPerCodim_ {{dim*(k-1)*3, dim+(k-1)}};\n- 271};\n+ 265\n+ 266template<typename GV>\n+267class TaylorHoodVelocityTree :\n+ 268 public PowerBasisNode<LagrangeNode<GV,2>, GV::dimension>\n+ 269{\n+ 270 using PQ2Node = LagrangeNode<GV,2>;\n+ 271 using Base = PowerBasisNode<PQ2Node,_GV::dimension>;\n 272\n- 273\n- 274\n- 275template<typename GV, int k>\n-276class BrezziDouglasMariniNode :\n- 277 public LeafBasisNode\n- 278{\n- 279 static const int dim = GV::dimension;\n+ 273public:\n+274 TaylorHoodVelocityTree()\n+ 275 {\n+ 276 for(int i=0; i<GV::dimension; ++i)\n+ 277 this->setChild(i, std::make_shared<PQ2Node>());\n+ 278 }\n+ 279};\n 280\n- 281public:\n- 282\n-283 using size_type = std::size_t;\n-284 using Element = typename GV::template Codim<0>::Entity;\n-285 using FiniteElementMap = typename Impl::BDMLocalFiniteElementMap<GV, dim,\n-double, k>;\n-286 using FiniteElement = Impl::GlobalValuedLocalFiniteElement<Impl::\n-ContravariantPiolaTransformator,\n- 287 typename FiniteElementMap::FiniteElement,\n- 288 Element>;\n- 289\n-290 BrezziDouglasMariniNode(const FiniteElementMap* finiteElementMap) :\n- 291 element_(nullptr),\n- 292 finiteElementMap_(finiteElementMap)\n- 293 {}\n- 294\n-296 const Element& element() const\n- 297 {\n- 298 return *element_;\n- 299 }\n+ 281template<typename GV>\n+282class TaylorHoodBasisTree :\n+ 283 public CompositeBasisNode<\n+ 284 TaylorHoodVelocityTree<GV>,\n+ 285 LagrangeNode<GV,1>\n+ 286 >\n+ 287{\n+ 288 using VelocityNode=TaylorHoodVelocityTree<GV>;\n+ 289 using PressureNode=LagrangeNode<GV,1>;\n+ 290\n+ 291 using Base=CompositeBasisNode<VelocityNode,_PressureNode>;\n+ 292\n+ 293public:\n+294 TaylorHoodBasisTree()\n+ 295 {\n+ 296 this->template setChild<0>(std::make_shared<VelocityNode>());\n+ 297 this->template setChild<1>(std::make_shared<PressureNode>());\n+ 298 }\n+ 299};\n 300\n-305 const FiniteElement& finiteElement() const\n- 306 {\n- 307 return finiteElement_;\n- 308 }\n- 309\n-311 void bind(const Element& e)\n- 312 {\n- 313 element_ = &e;\n- 314 finiteElement_.bind((finiteElementMap_->find(*element_)), e);\n- 315 this->setSize(finiteElement_.size());\n- 316 }\n+ 301\n+ 302\n+ 303namespace BasisFactory {\n+ 304\n+311inline auto taylorHood()\n+ 312{\n+ 313 return [](const auto& gridView) {\n+ 314 return TaylorHoodPreBasis<std::decay_t<decltype(gridView)>>(gridView);\n+ 315 };\n+ 316}\n 317\n- 318protected:\n+ 318} // end namespace BasisFactory\n 319\n-320 FiniteElement finiteElement_;\n-321 const Element* element_;\n-322 const FiniteElementMap* finiteElementMap_;\n- 323};\n- 324\n- 325\n- 326\n- 327namespace BasisFactory {\n- 328\n- 336template<std::size_t k>\n-337auto brezziDouglasMarini()\n- 338{\n- 339 return [](const auto& gridView) {\n- 340 return BrezziDouglasMariniPreBasis<std::decay_t<decltype(gridView)>, k>\n-(gridView);\n- 341 };\n- 342}\n- 343\n- 344} // end namespace BasisFactory\n- 345\n- 346\n- 347\n- 348/\n+ 320/\n / *****************************************************************************\n- 349// This is the actual global basis implementation based on the reusable\n+ 321// This is the actual global basis implementation based on the reusable\n parts.\n- 350/\n+ 322/\n / *****************************************************************************\n- 351\n- 359template<typename GV, int k>\n-360using BrezziDouglasMariniBasis =\n-DefaultGlobalBasis<BrezziDouglasMariniPreBasis<GV,_k> >;\n- 361\n- 362} // end namespace Functions\n- 363} // end namespace Dune\n- 364\n- 365\n- 366#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BREZZIDOUGLASMARINIBASIS_HH\n+ 323\n+ 345template<typename GV>\n+346using TaylorHoodBasis = DefaultGlobalBasis<TaylorHoodPreBasis<GV> >;\n+ 347\n+ 348\n+ 349\n+ 350} // end namespace Functions\n+ 351} // end namespace Dune\n+ 352\n+ 353\n+ 354#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_TAYLORHOODBASIS_HH\n+lagrangebasis.hh\n defaultglobalbasis.hh\n-globalvaluedlocalfiniteelement.hh\n nodes.hh\n-Dune::Functions::BasisFactory::brezziDouglasMarini\n-auto brezziDouglasMarini()\n-Create a pre-basis factory that can create a Brezzi-Douglas-Marini pre-basis.\n-Definition: brezzidouglasmarinibasis.hh:337\n+Dune::Functions::BasisFactory::taylorHood\n+auto taylorHood()\n+Create a pre-basis factory that can create a Taylor-Hood pre-basis.\n+Definition: taylorhoodbasis.hh:311\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::BrezziDouglasMariniNode\n-Definition: brezzidouglasmarinibasis.hh:278\n-Dune::Functions::BrezziDouglasMariniNode::finiteElement\n-const FiniteElement & finiteElement() const\n-Return the LocalFiniteElement for the element we are bound to.\n-Definition: brezzidouglasmarinibasis.hh:305\n-Dune::Functions::BrezziDouglasMariniNode::Element\n-typename GV::template Codim< 0 >::Entity Element\n-Definition: brezzidouglasmarinibasis.hh:284\n-Dune::Functions::BrezziDouglasMariniNode::finiteElementMap_\n-const FiniteElementMap * finiteElementMap_\n-Definition: brezzidouglasmarinibasis.hh:322\n-Dune::Functions::BrezziDouglasMariniNode::size_type\n-std::size_t size_type\n-Definition: brezzidouglasmarinibasis.hh:283\n-Dune::Functions::BrezziDouglasMariniNode::finiteElement_\n-FiniteElement finiteElement_\n-Definition: brezzidouglasmarinibasis.hh:320\n-Dune::Functions::BrezziDouglasMariniNode::FiniteElementMap\n-typename Impl::BDMLocalFiniteElementMap< GV, dim, double, k > FiniteElementMap\n-Definition: brezzidouglasmarinibasis.hh:285\n-Dune::Functions::BrezziDouglasMariniNode::element_\n-const Element * element_\n-Definition: brezzidouglasmarinibasis.hh:321\n-Dune::Functions::BrezziDouglasMariniNode::FiniteElement\n-Impl::GlobalValuedLocalFiniteElement< Impl::ContravariantPiolaTransformator,\n-typename FiniteElementMap::FiniteElement, Element > FiniteElement\n-Definition: brezzidouglasmarinibasis.hh:288\n-Dune::Functions::BrezziDouglasMariniNode::bind\n-void bind(const Element &e)\n-Bind to element.\n-Definition: brezzidouglasmarinibasis.hh:311\n-Dune::Functions::BrezziDouglasMariniNode::BrezziDouglasMariniNode\n-BrezziDouglasMariniNode(const FiniteElementMap *finiteElementMap)\n-Definition: brezzidouglasmarinibasis.hh:290\n-Dune::Functions::BrezziDouglasMariniNode::element\n-const Element & element() const\n-Return current element, throw if unbound.\n-Definition: brezzidouglasmarinibasis.hh:296\n-Dune::Functions::BrezziDouglasMariniPreBasis\n-Definition: brezzidouglasmarinibasis.hh:152\n-Dune::Functions::BrezziDouglasMariniPreBasis::size_type\n-std::size_t size_type\n-Definition: brezzidouglasmarinibasis.hh:160\n-Dune::Functions::BrezziDouglasMariniPreBasis::dofsPerCodim_\n-std::array< int, 2 > dofsPerCodim_\n-Definition: brezzidouglasmarinibasis.hh:270\n-Dune::Functions::BrezziDouglasMariniPreBasis::dimension\n-size_type dimension() const\n-Definition: brezzidouglasmarinibasis.hh:221\n-Dune::Functions::BrezziDouglasMariniPreBasis::minMultiIndexSize\n-static constexpr size_type minMultiIndexSize\n-Definition: brezzidouglasmarinibasis.hh:165\n-Dune::Functions::BrezziDouglasMariniPreBasis::maxMultiIndexSize\n-static constexpr size_type maxMultiIndexSize\n-Definition: brezzidouglasmarinibasis.hh:164\n-Dune::Functions::BrezziDouglasMariniPreBasis::codimOffset_\n-std::array< size_t, dim+1 > codimOffset_\n-Definition: brezzidouglasmarinibasis.hh:267\n-Dune::Functions::BrezziDouglasMariniPreBasis::size\n-size_type size(const SizePrefix prefix) const\n-Return number possible values for next position in multi index.\n-Definition: brezzidouglasmarinibasis.hh:214\n-Dune::Functions::BrezziDouglasMariniPreBasis::makeNode\n-Node makeNode() const\n-Create tree node.\n-Definition: brezzidouglasmarinibasis.hh:202\n-Dune::Functions::BrezziDouglasMariniPreBasis::GridView\n-GV GridView\n-The grid view that the FE space is defined on.\n-Definition: brezzidouglasmarinibasis.hh:159\n-Dune::Functions::BrezziDouglasMariniPreBasis::BrezziDouglasMariniPreBasis\n-BrezziDouglasMariniPreBasis(const GridView &gv)\n-Constructor for a given grid view object.\n-Definition: brezzidouglasmarinibasis.hh:169\n-Dune::Functions::BrezziDouglasMariniPreBasis::finiteElementMap_\n-FiniteElementMap finiteElementMap_\n-Definition: brezzidouglasmarinibasis.hh:268\n-Dune::Functions::BrezziDouglasMariniPreBasis::update\n-void update(const GridView &gv)\n-Definition: brezzidouglasmarinibasis.hh:194\n-Dune::Functions::BrezziDouglasMariniPreBasis::initializeIndices\n-void initializeIndices()\n-Definition: brezzidouglasmarinibasis.hh:179\n-Dune::Functions::BrezziDouglasMariniPreBasis::gridView\n-const GridView & gridView() const\n-Obtain the grid view that the basis is defined on.\n-Definition: brezzidouglasmarinibasis.hh:188\n-Dune::Functions::BrezziDouglasMariniPreBasis::size\n-size_type size() const\n-Definition: brezzidouglasmarinibasis.hh:207\n-Dune::Functions::BrezziDouglasMariniPreBasis::multiIndexBufferSize\n-static constexpr size_type multiIndexBufferSize\n-Definition: brezzidouglasmarinibasis.hh:166\n-Dune::Functions::BrezziDouglasMariniPreBasis::maxNodeSize\n-size_type maxNodeSize() const\n-Definition: brezzidouglasmarinibasis.hh:226\n-Dune::Functions::BrezziDouglasMariniPreBasis::gridView_\n-GridView gridView_\n-Definition: brezzidouglasmarinibasis.hh:266\n-Dune::Functions::BrezziDouglasMariniPreBasis::indices\n-It indices(const Node &node, It it) const\n-Maps from subtree index set [0..size-1] to a globally unique multi index in\n-global basis.\n-Definition: brezzidouglasmarinibasis.hh:241\n Dune::Functions::DefaultGlobalBasis\n Global basis for given pre-basis.\n Definition: defaultglobalbasis.hh:46\n+Dune::Functions::LagrangeNode\n+Definition: lagrangebasis.hh:387\n+Dune::Functions::LagrangePreBasis<_GV,_1_>\n+Dune::Functions::LagrangePreBasis::indices\n+It indices(const Node &node, It it) const\n+Definition: lagrangebasis.hh:192\n+Dune::Functions::LagrangePreBasis::initializeIndices\n+void initializeIndices()\n+Initialize the global indices.\n+Definition: lagrangebasis.hh:96\n+Dune::Functions::LagrangePreBasis::update\n+void update(const GridView &gv)\n+Update the stored grid view, to be called if the grid has changed.\n+Definition: lagrangebasis.hh:126\n+Dune::Functions::LagrangePreBasis::maxNodeSize\n+size_type maxNodeSize() const\n+Get the maximal number of DOFs associated to node for any element.\n+Definition: lagrangebasis.hh:184\n+Dune::Functions::LagrangePreBasis::size\n+size_type size() const\n+Same as size(prefix) with empty prefix.\n+Definition: lagrangebasis.hh:140\n Dune::Functions::BasisNodeMixin::size\n size_type size() const\n Definition: nodes.hh:142\n-Dune::Functions::BasisNodeMixin::setSize\n-void setSize(const size_type size)\n-Definition: nodes.hh:164\n-Dune::Functions::LeafBasisNode\n-Definition: nodes.hh:186\n+Dune::Functions::PowerBasisNode\n+Definition: nodes.hh:193\n+Dune::Functions::CompositeBasisNode\n+Definition: nodes.hh:219\n+Dune::Functions::TaylorHoodVelocityTree\n+Definition: taylorhoodbasis.hh:269\n+Dune::Functions::TaylorHoodVelocityTree::TaylorHoodVelocityTree\n+TaylorHoodVelocityTree()\n+Definition: taylorhoodbasis.hh:274\n+Dune::Functions::TaylorHoodBasisTree\n+Definition: taylorhoodbasis.hh:287\n+Dune::Functions::TaylorHoodBasisTree::TaylorHoodBasisTree\n+TaylorHoodBasisTree()\n+Definition: taylorhoodbasis.hh:294\n+Dune::Functions::TaylorHoodPreBasis\n+Pre-basis for lowest order Taylor-Hood basis.\n+Definition: taylorhoodbasis.hh:61\n+Dune::Functions::TaylorHoodPreBasis::TaylorHoodPreBasis\n+TaylorHoodPreBasis(const GridView &gv)\n+Constructor for a given grid view object.\n+Definition: taylorhoodbasis.hh:89\n+Dune::Functions::TaylorHoodPreBasis::gridView\n+const GridView & gridView() const\n+Obtain the grid view that the basis is defined on.\n+Definition: taylorhoodbasis.hh:103\n+Dune::Functions::TaylorHoodPreBasis::minMultiIndexSize\n+static constexpr size_type minMultiIndexSize\n+Definition: taylorhoodbasis.hh:78\n+Dune::Functions::TaylorHoodPreBasis::size\n+size_type size(const SizePrefix &prefix) const\n+Return number of possible values for next position in multi index.\n+Definition: taylorhoodbasis.hh:131\n+Dune::Functions::TaylorHoodPreBasis::gridView_\n+GridView gridView_\n+Definition: taylorhoodbasis.hh:258\n+Dune::Functions::TaylorHoodPreBasis::GridView\n+GV GridView\n+The grid view that the FE basis is defined on.\n+Definition: taylorhoodbasis.hh:69\n+Dune::Functions::TaylorHoodPreBasis::update\n+void update(const GridView &gv)\n+Update the stored grid view, to be called if the grid has changed.\n+Definition: taylorhoodbasis.hh:109\n+Dune::Functions::TaylorHoodPreBasis::pq2PreBasis_\n+PQ2PreBasis pq2PreBasis_\n+Definition: taylorhoodbasis.hh:261\n+Dune::Functions::TaylorHoodPreBasis::size\n+size_type size() const\n+Same as size(prefix) with empty prefix.\n+Definition: taylorhoodbasis.hh:124\n+Dune::Functions::TaylorHoodPreBasis::dimension\n+size_type dimension() const\n+Get the total dimension of the space spanned by this basis.\n+Definition: taylorhoodbasis.hh:182\n+Dune::Functions::TaylorHoodPreBasis::pq1PreBasis_\n+PQ1PreBasis pq1PreBasis_\n+Definition: taylorhoodbasis.hh:260\n+Dune::Functions::TaylorHoodPreBasis::multiIndexPushFront\n+static const void multiIndexPushFront(MultiIndex &M, size_type M0)\n+Definition: taylorhoodbasis.hh:202\n+Dune::Functions::TaylorHoodPreBasis::maxMultiIndexSize\n+static constexpr size_type maxMultiIndexSize\n+Definition: taylorhoodbasis.hh:77\n+Dune::Functions::TaylorHoodPreBasis::makeNode\n+Node makeNode() const\n+Create tree node.\n+Definition: taylorhoodbasis.hh:118\n+Dune::Functions::TaylorHoodPreBasis::indices\n+It indices(const Node &node, It it) const\n+Definition: taylorhoodbasis.hh:194\n+Dune::Functions::TaylorHoodPreBasis::multiIndexBufferSize\n+static constexpr size_type multiIndexBufferSize\n+Definition: taylorhoodbasis.hh:79\n+Dune::Functions::TaylorHoodPreBasis::initializeIndices\n+void initializeIndices()\n+Initialize the global indices.\n+Definition: taylorhoodbasis.hh:96\n+Dune::Functions::TaylorHoodPreBasis::maxNodeSize\n+size_type maxNodeSize() const\n+Get the maximal number of DOFs associated to node for any element.\n+Definition: taylorhoodbasis.hh:188\n+Dune::Functions::TaylorHoodPreBasis::size_type\n+std::size_t size_type\n+Type used for indices and size information.\n+Definition: taylorhoodbasis.hh:72\n+Dune::Functions::TaylorHoodPreBasis::indicesImp\n+It indicesImp(const Node &node, It multiIndices) const\n+Definition: taylorhoodbasis.hh:212\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00185.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00185.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: boundarydofs.hh File Reference</title>\n+<title>dune-functions: rannacherturekbasis.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -63,37 +63,61 @@\n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n+<a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> |\n+<a href=\"#typedef-members\">Typedefs</a> |\n <a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">boundarydofs.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">rannacherturekbasis.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <utility></code><br />\n-<code>#include <<a class=\"el\" href=\"a00152_source.html\">dune/functions/functionspacebases/subentitydofs.hh</a>></code><br />\n+<div class=\"textblock\"><code>#include <dune/common/exceptions.hh></code><br />\n+<code>#include <dune/grid/common/capabilities.hh></code><br />\n+<code>#include <dune/localfunctions/common/localfiniteelementvariant.hh></code><br />\n+<code>#include <dune/localfunctions/rannacherturek.hh></code><br />\n+<code>#include <dune/localfunctions/crouzeixraviart.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00179_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00152_source.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></code><br />\n </div>\n <p><a href=\"a00185_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n+Classes</h2></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01743.html\">Dune::Functions::RannacherTurekPreBasis< GV ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Pre-basis for a Rannacher-Turek basis. <a href=\"a01743.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01739.html\">Dune::Functions::RannacherTurekNode< GV ></a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+</table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:a00224\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00224.html\">Dune::Functions::BasisFactory</a></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+</table><table class=\"memberdecls\">\n+<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"typedef-members\" name=\"typedef-members\"></a>\n+Typedefs</h2></td></tr>\n+<tr class=\"memitem:ga3ad2af46f38ffff87851eb5734df272d\"><td class=\"memTemplParams\" colspan=\"2\">template<typename GV > </td></tr>\n+<tr class=\"memitem:ga3ad2af46f38ffff87851eb5734df272d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#ga3ad2af46f38ffff87851eb5734df272d\">Dune::Functions::RannacherTurekBasis</a> = DefaultGlobalBasis< RannacherTurekPreBasis< GV > ></td></tr>\n+<tr class=\"memdesc:ga3ad2af46f38ffff87851eb5734df272d\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Rannacher-Turek basis. <a href=\"a00213.html#ga3ad2af46f38ffff87851eb5734df272d\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga3ad2af46f38ffff87851eb5734df272d\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n Functions</h2></td></tr>\n-<tr class=\"memitem:gaa60b94e3da01aa62a555f6955a7f09e5\"><td class=\"memTemplParams\" colspan=\"2\">template<class Basis , class F , decltype(std::declval< std::decay_t< F > >()(0, std::declval< typename Basis::LocalView >(), std::declval< typename Basis::GridView::Intersection >()), 0) = 0> </td></tr>\n-<tr class=\"memitem:gaa60b94e3da01aa62a555f6955a7f09e5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00214.html#gaa60b94e3da01aa62a555f6955a7f09e5\">Dune::Functions::forEachBoundaryDOF</a> (const Basis &basis, F &&f)</td></tr>\n-<tr class=\"memdesc:gaa60b94e3da01aa62a555f6955a7f09e5\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Loop over all DOFs on the boundary. <a href=\"a00214.html#gaa60b94e3da01aa62a555f6955a7f09e5\">More...</a><br /></td></tr>\n-<tr class=\"separator:gaa60b94e3da01aa62a555f6955a7f09e5\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga366449c1a41fc29ff55fed0c1485f60b\"><td class=\"memTemplParams\" colspan=\"2\">template<class Dummy = void> </td></tr>\n+<tr class=\"memitem:ga366449c1a41fc29ff55fed0c1485f60b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#ga366449c1a41fc29ff55fed0c1485f60b\">Dune::Functions::BasisFactory::rannacherTurek</a> ()</td></tr>\n+<tr class=\"memdesc:ga366449c1a41fc29ff55fed0c1485f60b\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a pre-basis factory that can create a Rannacher-Turek pre-basis. <a href=\"a00213.html#ga366449c1a41fc29ff55fed0c1485f60b\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga366449c1a41fc29ff55fed0c1485f60b\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,27 +5,45 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-Namespaces | Functions\n-boundarydofs.hh File Reference\n-#include <utility>\n-#include <dune/functions/functionspacebases/subentitydofs.hh>\n+Classes | Namespaces | Typedefs | Functions\n+rannacherturekbasis.hh File Reference\n+#include <dune/common/exceptions.hh>\n+#include <dune/grid/common/capabilities.hh>\n+#include <dune/localfunctions/common/localfiniteelementvariant.hh>\n+#include <dune/localfunctions/rannacherturek.hh>\n+#include <dune/localfunctions/crouzeixraviart.hh>\n+#include <dune/functions/functionspacebases/nodes.hh>\n+#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n Go_to_the_source_code_of_this_file.\n+ Classes\n+class \u00a0Dune::Functions::RannacherTurekPreBasis<_GV_>\n+\u00a0 Pre-basis for a Rannacher-Turek basis. More...\n+\u00a0\n+class \u00a0Dune::Functions::RannacherTurekNode<_GV_>\n+\u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n+namespace \u00a0Dune::Functions::BasisFactory\n+\u00a0\n+ Typedefs\n+template<typename GV >\n+using\u00a0Dune::Functions::RannacherTurekBasis = DefaultGlobalBasis<\n+ RannacherTurekPreBasis< GV > >\n+\u00a0 Rannacher-Turek basis. More...\n+\u00a0\n Functions\n-template<class Basis , class F , decltype(std::declval< std::decay_t< F > >()\n-(0, std::declval< typename Basis::LocalView >(), std::declval< typename\n-Basis::GridView::Intersection >()), 0) = 0>\n-void\u00a0Dune::Functions::forEachBoundaryDOF (const Basis &basis, F &&f)\n-\u00a0 Loop over all DOFs on the boundary. More...\n+template<class Dummy = void>\n+auto\u00a0Dune::Functions::BasisFactory::rannacherTurek ()\n+\u00a0 Create a pre-basis factory that can create a Rannacher-Turek pre-basis.\n+ More...\n \u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00185_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00185_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: boundarydofs.hh Source File</title>\n+<title>dune-functions: rannacherturekbasis.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,99 +62,251 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">boundarydofs.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">rannacherturekbasis.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00185.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BOUNDARYDOFS_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BOUNDARYDOFS_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RANNACHERTUREKBASIS_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RANNACHERTUREKBASIS_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <utility></span></div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <dune/common/exceptions.hh></span></div>\n <div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span> </div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00152.html\">dune/functions/functionspacebases/subentitydofs.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <dune/grid/common/capabilities.hh></span></div>\n <div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/localfunctions/common/localfiniteelementvariant.hh></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/localfunctions/rannacherturek.hh></span></div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <dune/localfunctions/crouzeixraviart.hh></span></div>\n <div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>Basis, <span class=\"keyword\">class </span>F,</div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> <span class=\"keyword\">decltype</span>(std::declval<std::decay_t<F>>()(0, std::declval<typename Basis::LocalView>(),std::declval<typename Basis::GridView::Intersection>()), 0) = 0></div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00214.html#gaa60b94e3da01aa62a555f6955a7f09e5\"> 36</a></span><span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a00214.html#gaa60b94e3da01aa62a555f6955a7f09e5\">forEachBoundaryDOF</a>(<span class=\"keyword\">const</span> Basis& basis, F&& f)</div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span>{</div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> <span class=\"keyword\">auto</span> localView = basis.localView();</div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> <span class=\"keyword\">auto</span> seDOFs = <a class=\"code hl_function\" href=\"a00214.html#ga0b9da94fff21e98877d0e3fe1c1554c7\">subEntityDOFs</a>(basis);</div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridView = basis.gridView();</div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">auto</span>&& element : elements(gridView))</div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> <span class=\"keywordflow\">if</span> (element.hasBoundaryIntersections())</div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> {</div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> localView.bind(element);</div>\n-<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& intersection: intersections(gridView, element))</div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> <span class=\"keywordflow\">if</span> (intersection.boundary())</div>\n-<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">auto</span> localIndex: seDOFs.bind(localView,intersection))</div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> f(localIndex, localView, intersection);</div>\n-<div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> }</div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span>}</div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> </div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> </div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> </div>\n-<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>Basis, <span class=\"keyword\">class </span>F,</div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> <span class=\"keyword\">decltype</span>(std::declval<std::decay_t<F>>()(0, std::declval<typename Basis::LocalView>()),0) = 0></div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span><span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a00214.html#gaa60b94e3da01aa62a555f6955a7f09e5\">forEachBoundaryDOF</a>(<span class=\"keyword\">const</span> Basis& basis, F&& f)</div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span>{</div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> <span class=\"keyword\">auto</span> localView = basis.localView();</div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> <span class=\"keyword\">auto</span> seDOFs = <a class=\"code hl_function\" href=\"a00214.html#ga0b9da94fff21e98877d0e3fe1c1554c7\">subEntityDOFs</a>(basis);</div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridView = basis.gridView();</div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">auto</span>&& element : elements(gridView))</div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> <span class=\"keywordflow\">if</span> (element.hasBoundaryIntersections())</div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> {</div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> localView.bind(element);</div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& intersection: intersections(gridView, element))</div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> <span class=\"keywordflow\">if</span> (intersection.boundary())</div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">auto</span> localIndex: seDOFs.bind(localView,intersection))</div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> f(localIndex, localView);</div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> }</div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span>}</div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00179.html\">dune/functions/functionspacebases/nodes.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00152.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span> </div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"comment\">// This is the reusable part of the basis. It contains</span></div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"comment\">//</span></div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"comment\">// RannacherTurekPreBasis</span></div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span><span class=\"comment\">// RannacherTurekNode</span></div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"comment\">//</span></div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span><span class=\"comment\">// The pre-basis allows to create the others and is the owner of possible shared</span></div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span><span class=\"comment\">// state. These components do _not_ depend on the global basis and local view</span></div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span><span class=\"comment\">// and can be used without a global basis.</span></div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span><span class=\"comment\">// *****************************************************************************</span></div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> </div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV></div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span><span class=\"keyword\">class </span>RannacherTurekNode;</div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> </div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV></div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span><span class=\"keyword\">class </span>RannacherTurekPreBasis;</div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> </div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV></div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html\"> 51</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01743.html\">RannacherTurekPreBasis</a></div>\n+<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span>{</div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dim = GV::dimension;</div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> </div>\n+<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> </div>\n+<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#a5c7c1da97270ba99143631790b29f558\"> 58</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01743.html#a5c7c1da97270ba99143631790b29f558\">GridView</a> = GV;</div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> </div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#a3d9ace6e885c64bfc5776f0273f06e3d\"> 61</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01743.html#a3d9ace6e885c64bfc5776f0273f06e3d\">size_type</a> = std::size_t;</div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> </div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#a8baece8242d5dd2a48373b3a881b4d1e\"> 64</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01739.html\">Node</a> = <a class=\"code hl_class\" href=\"a01739.html\">RannacherTurekNode<GV></a>;</div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> </div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#a1fb0d4aecaa56bf627e26d3aa10db05f\"> 66</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01743.html#a3d9ace6e885c64bfc5776f0273f06e3d\">size_type</a> <a class=\"code hl_variable\" href=\"a01743.html#a1fb0d4aecaa56bf627e26d3aa10db05f\">maxMultiIndexSize</a> = 1;</div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#a2207314a85448f44a5b4ec1b8cfa959b\"> 67</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01743.html#a3d9ace6e885c64bfc5776f0273f06e3d\">size_type</a> <a class=\"code hl_variable\" href=\"a01743.html#a2207314a85448f44a5b4ec1b8cfa959b\">minMultiIndexSize</a> = 1;</div>\n+<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#a07cae145cee28936ff386f5c19f43d2b\"> 68</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01743.html#a3d9ace6e885c64bfc5776f0273f06e3d\">size_type</a> <a class=\"code hl_variable\" href=\"a01743.html#a07cae145cee28936ff386f5c19f43d2b\">multiIndexBufferSize</a> = 1;</div>\n+<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> </div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#a84b73fe9692fdf3c6b10889d79c950eb\"> 71</a></span> <a class=\"code hl_function\" href=\"a01743.html#a84b73fe9692fdf3c6b10889d79c950eb\">RannacherTurekPreBasis</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01743.html#a5c7c1da97270ba99143631790b29f558\">GridView</a>& gv) :</div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> <a class=\"code hl_variable\" href=\"a01743.html#af0f9576a6cb9c4ae4f1b41ce0e4a9f8c\">gridView_</a>(gv)</div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> {</div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">auto</span> type : gv.indexSet().types(0))</div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> <span class=\"keywordflow\">if</span> (!type.isSimplex() && !type.isCube())</div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> DUNE_THROW(Dune::NotImplemented, <span class=\"stringliteral\">"Rannacher-Turek or Crouzeix-Raviart elements are only implemented for grids with simplex or cube elements."</span>);</div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> }</div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> </div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#a0ed55e98e0c70dc52075cc48f1371256\"> 80</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01743.html#a0ed55e98e0c70dc52075cc48f1371256\">initializeIndices</a>()</div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> {}</div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> </div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#a960b8283558fb35d91bd74d52e4cedf5\"> 84</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01743.html#a5c7c1da97270ba99143631790b29f558\">GridView</a>& <a class=\"code hl_function\" href=\"a01743.html#a960b8283558fb35d91bd74d52e4cedf5\">gridView</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01743.html#af0f9576a6cb9c4ae4f1b41ce0e4a9f8c\">gridView_</a>;</div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> }</div>\n <div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> </div>\n-<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> </div>\n-<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> </div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>Basis, <span class=\"keyword\">class </span>F,</div>\n-<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> <span class=\"keyword\">decltype</span>(std::declval<std::decay_t<F>>()(std::declval<typename Basis::MultiIndex>()),0) = 0></div>\n-<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span><span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a00214.html#gaa60b94e3da01aa62a555f6955a7f09e5\">forEachBoundaryDOF</a>(<span class=\"keyword\">const</span> Basis& basis, F&& f)</div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span>{</div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> <span class=\"keyword\">auto</span> localView = basis.localView();</div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> <span class=\"keyword\">auto</span> seDOFs = <a class=\"code hl_function\" href=\"a00214.html#ga0b9da94fff21e98877d0e3fe1c1554c7\">subEntityDOFs</a>(basis);</div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridView = basis.gridView();</div>\n-<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">auto</span>&& element : elements(gridView))</div>\n-<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> <span class=\"keywordflow\">if</span> (element.hasBoundaryIntersections())</div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> {</div>\n-<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> localView.bind(element);</div>\n-<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& intersection: intersections(gridView, element))</div>\n-<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> <span class=\"keywordflow\">if</span> (intersection.boundary())</div>\n-<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> <span class=\"keywordflow\">for</span>(<span class=\"keyword\">auto</span> localIndex: seDOFs.bind(localView,intersection))</div>\n-<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> f(localView.index(localIndex));</div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> }</div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span>}</div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> </div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> </div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> </div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span>} <span class=\"comment\">// namespace Functions</span></div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span>} <span class=\"comment\">// namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> </div>\n-<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BOUNDARYDOFS_HH</span></div>\n-<div class=\"ttc\" id=\"aa00152_html\"><div class=\"ttname\"><a href=\"a00152.html\">subentitydofs.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00214_html_ga0b9da94fff21e98877d0e3fe1c1554c7\"><div class=\"ttname\"><a href=\"a00214.html#ga0b9da94fff21e98877d0e3fe1c1554c7\">Dune::Functions::subEntityDOFs</a></div><div class=\"ttdeci\">auto subEntityDOFs(const T &)</div><div class=\"ttdoc\">Create SubEntityDOFs object.</div><div class=\"ttdef\"><b>Definition:</b> subentitydofs.hh:160</div></div>\n-<div class=\"ttc\" id=\"aa00214_html_gaa60b94e3da01aa62a555f6955a7f09e5\"><div class=\"ttname\"><a href=\"a00214.html#gaa60b94e3da01aa62a555f6955a7f09e5\">Dune::Functions::forEachBoundaryDOF</a></div><div class=\"ttdeci\">void forEachBoundaryDOF(const Basis &basis, F &&f)</div><div class=\"ttdoc\">Loop over all DOFs on the boundary.</div><div class=\"ttdef\"><b>Definition:</b> boundarydofs.hh:36</div></div>\n+<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#a3f70bfaa27f3b798c6580cf54d4d5d3e\"> 90</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01743.html#a3f70bfaa27f3b798c6580cf54d4d5d3e\">update</a> (<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01743.html#a5c7c1da97270ba99143631790b29f558\">GridView</a>& gv)</div>\n+<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> {</div>\n+<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> <a class=\"code hl_variable\" href=\"a01743.html#af0f9576a6cb9c4ae4f1b41ce0e4a9f8c\">gridView_</a> = gv;</div>\n+<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> }</div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> </div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#a3e7a4c632321e1a5052bfbb39325c436\"> 98</a></span> <a class=\"code hl_class\" href=\"a01739.html\">Node</a> <a class=\"code hl_function\" href=\"a01743.html#a3e7a4c632321e1a5052bfbb39325c436\">makeNode</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01739.html\">Node</a>{};</div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> }</div>\n+<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> </div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#a8cf6720c8ed670f281421f8aa2bfb357\"> 104</a></span> <a class=\"code hl_typedef\" href=\"a01743.html#a3d9ace6e885c64bfc5776f0273f06e3d\">size_type</a> <a class=\"code hl_function\" href=\"a01743.html#a8cf6720c8ed670f281421f8aa2bfb357\">size</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> <span class=\"keywordflow\">return</span> (<a class=\"code hl_typedef\" href=\"a01743.html#a3d9ace6e885c64bfc5776f0273f06e3d\">size_type</a>)(<a class=\"code hl_variable\" href=\"a01743.html#af0f9576a6cb9c4ae4f1b41ce0e4a9f8c\">gridView_</a>.size(1));</div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> }</div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> </div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#a239f02b11282a9345e57e725e1de1a85\"> 111</a></span> <a class=\"code hl_typedef\" href=\"a01743.html#a3d9ace6e885c64bfc5776f0273f06e3d\">size_type</a> <a class=\"code hl_function\" href=\"a01743.html#a239f02b11282a9345e57e725e1de1a85\">size</a>(<span class=\"keyword\">const</span> SizePrefix prefix)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> assert(prefix.size() == 0 || prefix.size() == 1);</div>\n+<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> <span class=\"keywordflow\">return</span> (prefix.size() == 0) ? <a class=\"code hl_function\" href=\"a01743.html#a8cf6720c8ed670f281421f8aa2bfb357\">size</a>() : 0;</div>\n+<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> }</div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> </div>\n+<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#a7d1d523f4994837ef4d8630b5307d740\"> 118</a></span> <a class=\"code hl_typedef\" href=\"a01743.html#a3d9ace6e885c64bfc5776f0273f06e3d\">size_type</a> <a class=\"code hl_function\" href=\"a01743.html#a7d1d523f4994837ef4d8630b5307d740\">dimension</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01743.html#a8cf6720c8ed670f281421f8aa2bfb357\">size</a>();</div>\n+<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> }</div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> </div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#ab8a64c7e222db3908f784433f5d75d5a\"> 124</a></span> <a class=\"code hl_typedef\" href=\"a01743.html#a3d9ace6e885c64bfc5776f0273f06e3d\">size_type</a> <a class=\"code hl_function\" href=\"a01743.html#ab8a64c7e222db3908f784433f5d75d5a\">maxNodeSize</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> <span class=\"keywordflow\">return</span> 2*GV::dimension;</div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> }</div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> </div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#a549dc350a01f60e289fd98a079f22e70\"> 130</a></span> It <a class=\"code hl_function\" href=\"a01743.html#a549dc350a01f60e289fd98a079f22e70\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01739.html\">Node</a>& node, It it)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> <span class=\"keywordflow\">for</span> (<a class=\"code hl_typedef\" href=\"a01743.html#a3d9ace6e885c64bfc5776f0273f06e3d\">size_type</a> i = 0, end = node.<a class=\"code hl_function\" href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">size</a>() ; i < end ; ++i, ++it)</div>\n+<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> {</div>\n+<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> Dune::LocalKey localKey = node.<a class=\"code hl_function\" href=\"a01739.html#ad5e9058f5914d22589a73b38f17002c3\">finiteElement</a>().localCoefficients().localKey(i);</div>\n+<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridIndexSet = <a class=\"code hl_function\" href=\"a01743.html#a960b8283558fb35d91bd74d52e4cedf5\">gridView</a>().indexSet();</div>\n+<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> <span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& element = node.<a class=\"code hl_function\" href=\"a01739.html#af9535c76766e944992fb2e4770c5ba07\">element</a>();</div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> </div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> *it = {{ (<a class=\"code hl_typedef\" href=\"a01743.html#a3d9ace6e885c64bfc5776f0273f06e3d\">size_type</a>)(gridIndexSet.subIndex(element,localKey.subEntity(),1)) }};</div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> }</div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> <span class=\"keywordflow\">return</span> it;</div>\n+<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> }</div>\n+<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> </div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span><span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01743.html#af0f9576a6cb9c4ae4f1b41ce0e4a9f8c\"> 144</a></span> <a class=\"code hl_typedef\" href=\"a01743.html#a5c7c1da97270ba99143631790b29f558\">GridView</a> <a class=\"code hl_variable\" href=\"a01743.html#af0f9576a6cb9c4ae4f1b41ce0e4a9f8c\">gridView_</a>;</div>\n+<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span>};</div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> </div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> </div>\n+<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> </div>\n+<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV></div>\n+<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01739.html\"> 150</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01739.html\">RannacherTurekNode</a> :</div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01711.html\">LeafBasisNode</a></div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span>{</div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> dim = GV::dimension;</div>\n+<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> maxSize = 2*dim;</div>\n+<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> </div>\n+<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> hasFixedElementType = Capabilities::hasSingleGeometryType<typename GV::Grid>::v;</div>\n+<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> </div>\n+<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> <span class=\"keyword\">using </span>CubeFiniteElement = RannacherTurekLocalFiniteElement<typename GV::ctype,double,dim>;</div>\n+<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> <span class=\"keyword\">using </span>SimplexFiniteElement = CrouzeixRaviartLocalFiniteElement<typename GV::ctype,double,dim>;</div>\n+<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> </div>\n+<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> topologyId = Capabilities::hasSingleGeometryType<typename GV::Grid>::topologyId; <span class=\"comment\">// meaningless if hasFixedElementType is false</span></div>\n+<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> <span class=\"keyword\">constexpr</span> <span class=\"keyword\">static</span> GeometryType type = GeometryType(topologyId, GV::dimension);</div>\n+<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> </div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> </div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01739.html#a9dbe2c18666614408917636ee5cd7bec\"> 166</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">size_type</a> = std::size_t;</div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01739.html#aab9f789278d34c7b4aaa68ba1a13d779\"> 167</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01739.html#aab9f789278d34c7b4aaa68ba1a13d779\">Element</a> = <span class=\"keyword\">typename</span> GV::template Codim<0>::Entity;</div>\n+<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01739.html#a21e31af66b721afe385c0a16d7dd9c23\"> 168</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01739.html#a21e31af66b721afe385c0a16d7dd9c23\">FiniteElement</a> = std::conditional_t<hasFixedElementType,</div>\n+<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> std::conditional_t<type.isCube(),CubeFiniteElement,SimplexFiniteElement>,</div>\n+<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> LocalFiniteElementVariant<CubeFiniteElement, SimplexFiniteElement> >;</div>\n+<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> </div>\n+<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01739.html#ab74087a937bec260f15e9daa92babf87\"> 172</a></span> <a class=\"code hl_function\" href=\"a01739.html#ab74087a937bec260f15e9daa92babf87\">RannacherTurekNode</a>() :</div>\n+<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> <a class=\"code hl_variable\" href=\"a01739.html#a3846e648d27ba98f6ca857a62205cb3c\">finiteElement_</a>(),</div>\n+<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> <a class=\"code hl_variable\" href=\"a01739.html#ac0de4ad121f7e1e47bbfc818850c9746\">element_</a>(nullptr)</div>\n+<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> {}</div>\n+<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> </div>\n+<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01739.html#af9535c76766e944992fb2e4770c5ba07\"> 178</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01739.html#aab9f789278d34c7b4aaa68ba1a13d779\">Element</a>& <a class=\"code hl_function\" href=\"a01739.html#af9535c76766e944992fb2e4770c5ba07\">element</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> <span class=\"keywordflow\">return</span> *<a class=\"code hl_variable\" href=\"a01739.html#ac0de4ad121f7e1e47bbfc818850c9746\">element_</a>;</div>\n+<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> }</div>\n+<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> </div>\n+<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01739.html#ad5e9058f5914d22589a73b38f17002c3\"> 187</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01739.html#a21e31af66b721afe385c0a16d7dd9c23\">FiniteElement</a>& <a class=\"code hl_function\" href=\"a01739.html#ad5e9058f5914d22589a73b38f17002c3\">finiteElement</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01739.html#a3846e648d27ba98f6ca857a62205cb3c\">finiteElement_</a>;</div>\n+<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span> }</div>\n+<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> </div>\n+<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01739.html#a22e762e4542d8c55291b31ae2098428e\"> 193</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01739.html#a22e762e4542d8c55291b31ae2098428e\">bind</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01739.html#aab9f789278d34c7b4aaa68ba1a13d779\">Element</a>& e)</div>\n+<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> {</div>\n+<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> <a class=\"code hl_variable\" href=\"a01739.html#ac0de4ad121f7e1e47bbfc818850c9746\">element_</a> = &e;</div>\n+<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> (!hasFixedElementType)</div>\n+<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> <a class=\"code hl_variable\" href=\"a01739.html#a3846e648d27ba98f6ca857a62205cb3c\">finiteElement_</a> = e.type().isCube() ? <span class=\"keyword\">static_cast<</span><a class=\"code hl_typedef\" href=\"a01739.html#a21e31af66b721afe385c0a16d7dd9c23\">FiniteElement</a><span class=\"keyword\">></span>(CubeFiniteElement())</div>\n+<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> : <span class=\"keyword\">static_cast<</span><a class=\"code hl_typedef\" href=\"a01739.html#a21e31af66b721afe385c0a16d7dd9c23\">FiniteElement</a><span class=\"keyword\">></span>(SimplexFiniteElement()) ;</div>\n+<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> this-><a class=\"code hl_function\" href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\">setSize</a>(<a class=\"code hl_variable\" href=\"a01739.html#a3846e648d27ba98f6ca857a62205cb3c\">finiteElement_</a>.size());</div>\n+<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> }</div>\n+<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> </div>\n+<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span><span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> </div>\n+<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01739.html#a3846e648d27ba98f6ca857a62205cb3c\"> 204</a></span> <a class=\"code hl_typedef\" href=\"a01739.html#a21e31af66b721afe385c0a16d7dd9c23\">FiniteElement</a> <a class=\"code hl_variable\" href=\"a01739.html#a3846e648d27ba98f6ca857a62205cb3c\">finiteElement_</a>;</div>\n+<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01739.html#ac0de4ad121f7e1e47bbfc818850c9746\"> 205</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01739.html#aab9f789278d34c7b4aaa68ba1a13d779\">Element</a>* <a class=\"code hl_variable\" href=\"a01739.html#ac0de4ad121f7e1e47bbfc818850c9746\">element_</a>;</div>\n+<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span>};</div>\n+<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> </div>\n+<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span> </div>\n+<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> </div>\n+<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span><span class=\"keyword\">namespace </span>BasisFactory {</div>\n+<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> </div>\n+<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Dummy=<span class=\"keywordtype\">void</span>></div>\n+<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#ga366449c1a41fc29ff55fed0c1485f60b\"> 218</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00213.html#ga366449c1a41fc29ff55fed0c1485f60b\">rannacherTurek</a>()</div>\n+<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span>{</div>\n+<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span> <span class=\"keywordflow\">return</span> [](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& gridView) {</div>\n+<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_class\" href=\"a01743.html\">RannacherTurekPreBasis</a><std::decay_t<<span class=\"keyword\">decltype</span>(gridView)>>(gridView);</div>\n+<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span> };</div>\n+<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span>}</div>\n+<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> </div>\n+<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span>} <span class=\"comment\">// end namespace BasisFactory</span></div>\n+<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> </div>\n+<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> </div>\n+<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> </div>\n+<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> </div>\n+<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span><span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> GV></div>\n+<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#ga3ad2af46f38ffff87851eb5734df272d\"> 242</a></span><span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01555.html\">RannacherTurekBasis</a> = <a class=\"code hl_class\" href=\"a01555.html\">DefaultGlobalBasis<RannacherTurekPreBasis<GV></a> >;</div>\n+<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> </div>\n+<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span>} <span class=\"comment\">// end namespace Functions</span></div>\n+<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span>} <span class=\"comment\">// end namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span> </div>\n+<div class=\"line\"><a id=\"l00247\" name=\"l00247\"></a><span class=\"lineno\"> 247</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RANNACHERTUREKBASIS_HH</span></div>\n+<div class=\"ttc\" id=\"aa00152_html\"><div class=\"ttname\"><a href=\"a00152.html\">defaultglobalbasis.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00179_html\"><div class=\"ttname\"><a href=\"a00179.html\">nodes.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00213_html_ga366449c1a41fc29ff55fed0c1485f60b\"><div class=\"ttname\"><a href=\"a00213.html#ga366449c1a41fc29ff55fed0c1485f60b\">Dune::Functions::BasisFactory::rannacherTurek</a></div><div class=\"ttdeci\">auto rannacherTurek()</div><div class=\"ttdoc\">Create a pre-basis factory that can create a Rannacher-Turek pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:218</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n+<div class=\"ttc\" id=\"aa01555_html\"><div class=\"ttname\"><a href=\"a01555.html\">Dune::Functions::DefaultGlobalBasis</a></div><div class=\"ttdoc\">Global basis for given pre-basis.</div><div class=\"ttdef\"><b>Definition:</b> defaultglobalbasis.hh:46</div></div>\n+<div class=\"ttc\" id=\"aa01707_html_a859d50513645ef2ea0188d0779c1df30\"><div class=\"ttname\"><a href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">Dune::Functions::BasisNodeMixin::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:142</div></div>\n+<div class=\"ttc\" id=\"aa01707_html_aa8a0b9332c5d9fd44b680acc810502cd\"><div class=\"ttname\"><a href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">Dune::Functions::BasisNodeMixin::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:128</div></div>\n+<div class=\"ttc\" id=\"aa01707_html_ae93815e5c4012f7be5d11786f40d267a\"><div class=\"ttname\"><a href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\">Dune::Functions::BasisNodeMixin::setSize</a></div><div class=\"ttdeci\">void setSize(const size_type size)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:164</div></div>\n+<div class=\"ttc\" id=\"aa01711_html\"><div class=\"ttname\"><a href=\"a01711.html\">Dune::Functions::LeafBasisNode</a></div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:186</div></div>\n+<div class=\"ttc\" id=\"aa01739_html\"><div class=\"ttname\"><a href=\"a01739.html\">Dune::Functions::RannacherTurekNode</a></div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:152</div></div>\n+<div class=\"ttc\" id=\"aa01739_html_a21e31af66b721afe385c0a16d7dd9c23\"><div class=\"ttname\"><a href=\"a01739.html#a21e31af66b721afe385c0a16d7dd9c23\">Dune::Functions::RannacherTurekNode::FiniteElement</a></div><div class=\"ttdeci\">std::conditional_t< hasFixedElementType, std::conditional_t< type.isCube(), CubeFiniteElement, SimplexFiniteElement >, LocalFiniteElementVariant< CubeFiniteElement, SimplexFiniteElement > > FiniteElement</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:170</div></div>\n+<div class=\"ttc\" id=\"aa01739_html_a22e762e4542d8c55291b31ae2098428e\"><div class=\"ttname\"><a href=\"a01739.html#a22e762e4542d8c55291b31ae2098428e\">Dune::Functions::RannacherTurekNode::bind</a></div><div class=\"ttdeci\">void bind(const Element &e)</div><div class=\"ttdoc\">Bind to element.</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:193</div></div>\n+<div class=\"ttc\" id=\"aa01739_html_a3846e648d27ba98f6ca857a62205cb3c\"><div class=\"ttname\"><a href=\"a01739.html#a3846e648d27ba98f6ca857a62205cb3c\">Dune::Functions::RannacherTurekNode::finiteElement_</a></div><div class=\"ttdeci\">FiniteElement finiteElement_</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:204</div></div>\n+<div class=\"ttc\" id=\"aa01739_html_aab9f789278d34c7b4aaa68ba1a13d779\"><div class=\"ttname\"><a href=\"a01739.html#aab9f789278d34c7b4aaa68ba1a13d779\">Dune::Functions::RannacherTurekNode::Element</a></div><div class=\"ttdeci\">typename GV::template Codim< 0 >::Entity Element</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:167</div></div>\n+<div class=\"ttc\" id=\"aa01739_html_ab74087a937bec260f15e9daa92babf87\"><div class=\"ttname\"><a href=\"a01739.html#ab74087a937bec260f15e9daa92babf87\">Dune::Functions::RannacherTurekNode::RannacherTurekNode</a></div><div class=\"ttdeci\">RannacherTurekNode()</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:172</div></div>\n+<div class=\"ttc\" id=\"aa01739_html_ac0de4ad121f7e1e47bbfc818850c9746\"><div class=\"ttname\"><a href=\"a01739.html#ac0de4ad121f7e1e47bbfc818850c9746\">Dune::Functions::RannacherTurekNode::element_</a></div><div class=\"ttdeci\">const Element * element_</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:205</div></div>\n+<div class=\"ttc\" id=\"aa01739_html_ad5e9058f5914d22589a73b38f17002c3\"><div class=\"ttname\"><a href=\"a01739.html#ad5e9058f5914d22589a73b38f17002c3\">Dune::Functions::RannacherTurekNode::finiteElement</a></div><div class=\"ttdeci\">const FiniteElement & finiteElement() const</div><div class=\"ttdoc\">Return the LocalFiniteElement for the element we are bound to.</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:187</div></div>\n+<div class=\"ttc\" id=\"aa01739_html_af9535c76766e944992fb2e4770c5ba07\"><div class=\"ttname\"><a href=\"a01739.html#af9535c76766e944992fb2e4770c5ba07\">Dune::Functions::RannacherTurekNode::element</a></div><div class=\"ttdeci\">const Element & element() const</div><div class=\"ttdoc\">Return current element, throw if unbound.</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:178</div></div>\n+<div class=\"ttc\" id=\"aa01743_html\"><div class=\"ttname\"><a href=\"a01743.html\">Dune::Functions::RannacherTurekPreBasis</a></div><div class=\"ttdoc\">Pre-basis for a Rannacher-Turek basis.</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:52</div></div>\n+<div class=\"ttc\" id=\"aa01743_html_a07cae145cee28936ff386f5c19f43d2b\"><div class=\"ttname\"><a href=\"a01743.html#a07cae145cee28936ff386f5c19f43d2b\">Dune::Functions::RannacherTurekPreBasis::multiIndexBufferSize</a></div><div class=\"ttdeci\">static constexpr size_type multiIndexBufferSize</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:68</div></div>\n+<div class=\"ttc\" id=\"aa01743_html_a0ed55e98e0c70dc52075cc48f1371256\"><div class=\"ttname\"><a href=\"a01743.html#a0ed55e98e0c70dc52075cc48f1371256\">Dune::Functions::RannacherTurekPreBasis::initializeIndices</a></div><div class=\"ttdeci\">void initializeIndices()</div><div class=\"ttdoc\">Initialize the global indices.</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:80</div></div>\n+<div class=\"ttc\" id=\"aa01743_html_a1fb0d4aecaa56bf627e26d3aa10db05f\"><div class=\"ttname\"><a href=\"a01743.html#a1fb0d4aecaa56bf627e26d3aa10db05f\">Dune::Functions::RannacherTurekPreBasis::maxMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type maxMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:66</div></div>\n+<div class=\"ttc\" id=\"aa01743_html_a2207314a85448f44a5b4ec1b8cfa959b\"><div class=\"ttname\"><a href=\"a01743.html#a2207314a85448f44a5b4ec1b8cfa959b\">Dune::Functions::RannacherTurekPreBasis::minMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type minMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:67</div></div>\n+<div class=\"ttc\" id=\"aa01743_html_a239f02b11282a9345e57e725e1de1a85\"><div class=\"ttname\"><a href=\"a01743.html#a239f02b11282a9345e57e725e1de1a85\">Dune::Functions::RannacherTurekPreBasis::size</a></div><div class=\"ttdeci\">size_type size(const SizePrefix prefix) const</div><div class=\"ttdoc\">Return number of possible values for next position in multi index.</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:111</div></div>\n+<div class=\"ttc\" id=\"aa01743_html_a3d9ace6e885c64bfc5776f0273f06e3d\"><div class=\"ttname\"><a href=\"a01743.html#a3d9ace6e885c64bfc5776f0273f06e3d\">Dune::Functions::RannacherTurekPreBasis::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdoc\">Type used for indices and size information.</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:61</div></div>\n+<div class=\"ttc\" id=\"aa01743_html_a3e7a4c632321e1a5052bfbb39325c436\"><div class=\"ttname\"><a href=\"a01743.html#a3e7a4c632321e1a5052bfbb39325c436\">Dune::Functions::RannacherTurekPreBasis::makeNode</a></div><div class=\"ttdeci\">Node makeNode() const</div><div class=\"ttdoc\">Create tree node.</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:98</div></div>\n+<div class=\"ttc\" id=\"aa01743_html_a3f70bfaa27f3b798c6580cf54d4d5d3e\"><div class=\"ttname\"><a href=\"a01743.html#a3f70bfaa27f3b798c6580cf54d4d5d3e\">Dune::Functions::RannacherTurekPreBasis::update</a></div><div class=\"ttdeci\">void update(const GridView &gv)</div><div class=\"ttdoc\">Update the stored grid view, to be called if the grid has changed.</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:90</div></div>\n+<div class=\"ttc\" id=\"aa01743_html_a549dc350a01f60e289fd98a079f22e70\"><div class=\"ttname\"><a href=\"a01743.html#a549dc350a01f60e289fd98a079f22e70\">Dune::Functions::RannacherTurekPreBasis::indices</a></div><div class=\"ttdeci\">It indices(const Node &node, It it) const</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:130</div></div>\n+<div class=\"ttc\" id=\"aa01743_html_a5c7c1da97270ba99143631790b29f558\"><div class=\"ttname\"><a href=\"a01743.html#a5c7c1da97270ba99143631790b29f558\">Dune::Functions::RannacherTurekPreBasis::GridView</a></div><div class=\"ttdeci\">GV GridView</div><div class=\"ttdoc\">The grid view that the FE basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:58</div></div>\n+<div class=\"ttc\" id=\"aa01743_html_a7d1d523f4994837ef4d8630b5307d740\"><div class=\"ttname\"><a href=\"a01743.html#a7d1d523f4994837ef4d8630b5307d740\">Dune::Functions::RannacherTurekPreBasis::dimension</a></div><div class=\"ttdeci\">size_type dimension() const</div><div class=\"ttdoc\">Get the total dimension of the space spanned by this basis.</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:118</div></div>\n+<div class=\"ttc\" id=\"aa01743_html_a84b73fe9692fdf3c6b10889d79c950eb\"><div class=\"ttname\"><a href=\"a01743.html#a84b73fe9692fdf3c6b10889d79c950eb\">Dune::Functions::RannacherTurekPreBasis::RannacherTurekPreBasis</a></div><div class=\"ttdeci\">RannacherTurekPreBasis(const GridView &gv)</div><div class=\"ttdoc\">Constructor for a given grid view object.</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:71</div></div>\n+<div class=\"ttc\" id=\"aa01743_html_a8cf6720c8ed670f281421f8aa2bfb357\"><div class=\"ttname\"><a href=\"a01743.html#a8cf6720c8ed670f281421f8aa2bfb357\">Dune::Functions::RannacherTurekPreBasis::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdoc\">Same as size(prefix) with empty prefix.</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:104</div></div>\n+<div class=\"ttc\" id=\"aa01743_html_a960b8283558fb35d91bd74d52e4cedf5\"><div class=\"ttname\"><a href=\"a01743.html#a960b8283558fb35d91bd74d52e4cedf5\">Dune::Functions::RannacherTurekPreBasis::gridView</a></div><div class=\"ttdeci\">const GridView & gridView() const</div><div class=\"ttdoc\">Obtain the grid view that the basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:84</div></div>\n+<div class=\"ttc\" id=\"aa01743_html_ab8a64c7e222db3908f784433f5d75d5a\"><div class=\"ttname\"><a href=\"a01743.html#ab8a64c7e222db3908f784433f5d75d5a\">Dune::Functions::RannacherTurekPreBasis::maxNodeSize</a></div><div class=\"ttdeci\">size_type maxNodeSize() const</div><div class=\"ttdoc\">Get the maximal number of DOFs associated to node for any element.</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:124</div></div>\n+<div class=\"ttc\" id=\"aa01743_html_af0f9576a6cb9c4ae4f1b41ce0e4a9f8c\"><div class=\"ttname\"><a href=\"a01743.html#af0f9576a6cb9c4ae4f1b41ce0e4a9f8c\">Dune::Functions::RannacherTurekPreBasis::gridView_</a></div><div class=\"ttdeci\">GridView gridView_</div><div class=\"ttdef\"><b>Definition:</b> rannacherturekbasis.hh:144</div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,104 +5,340 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-boundarydofs.hh\n+rannacherturekbasis.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BOUNDARYDOFS_HH\n- 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BOUNDARYDOFS_HH\n+ 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RANNACHERTUREKBASIS_HH\n+ 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RANNACHERTUREKBASIS_HH\n 5\n- 6#include <utility>\n+ 6#include <dune/common/exceptions.hh>\n 7\n- 8#include <dune/functions/functionspacebases/subentitydofs.hh>\n+ 8#include <dune/grid/common/capabilities.hh>\n 9\n- 10namespace Dune {\n- 11namespace Functions {\n- 12\n+ 10#include <dune/localfunctions/common/localfiniteelementvariant.hh>\n+ 11#include <dune/localfunctions/rannacherturek.hh>\n+ 12#include <dune/localfunctions/crouzeixraviart.hh>\n 13\n- 14\n- 34template<class Basis, class F,\n- 35 decltype(std::declval<std::decay_t<F>>()(0, std::declval<typename Basis::\n-LocalView>(),std::declval<typename Basis::GridView::Intersection>()), 0) = 0>\n-36void forEachBoundaryDOF(const Basis& basis, F&& f)\n- 37{\n- 38 auto localView = basis.localView();\n- 39 auto seDOFs = subEntityDOFs(basis);\n- 40 const auto& gridView = basis.gridView();\n- 41 for(auto&& element : elements(gridView))\n- 42 if (element.hasBoundaryIntersections())\n- 43 {\n- 44 localView.bind(element);\n- 45 for(const auto& intersection: intersections(gridView, element))\n- 46 if (intersection.boundary())\n- 47 for(auto localIndex: seDOFs.bind(localView,intersection))\n- 48 f(localIndex, localView, intersection);\n- 49 }\n- 50}\n- 51\n- 52\n- 53\n- 71template<class Basis, class F,\n- 72 decltype(std::declval<std::decay_t<F>>()(0, std::declval<typename Basis::\n-LocalView>()),0) = 0>\n- 73void forEachBoundaryDOF(const Basis& basis, F&& f)\n- 74{\n- 75 auto localView = basis.localView();\n- 76 auto seDOFs = subEntityDOFs(basis);\n- 77 const auto& gridView = basis.gridView();\n- 78 for(auto&& element : elements(gridView))\n- 79 if (element.hasBoundaryIntersections())\n- 80 {\n- 81 localView.bind(element);\n- 82 for(const auto& intersection: intersections(gridView, element))\n- 83 if (intersection.boundary())\n- 84 for(auto localIndex: seDOFs.bind(localView,intersection))\n- 85 f(localIndex, localView);\n- 86 }\n- 87}\n+ 14#include <dune/functions/functionspacebases/nodes.hh>\n+ 15#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n+ 16\n+ 17\n+ 18namespace Dune {\n+ 19namespace Functions {\n+ 20\n+ 21/\n+/ *****************************************************************************\n+ 22// This is the reusable part of the basis. It contains\n+ 23//\n+ 24// RannacherTurekPreBasis\n+ 25// RannacherTurekNode\n+ 26//\n+ 27// The pre-basis allows to create the others and is the owner of possible\n+shared\n+ 28// state. These components do _not_ depend on the global basis and local\n+view\n+ 29// and can be used without a global basis.\n+ 30/\n+/ *****************************************************************************\n+ 31\n+ 32template<typename GV>\n+ 33class RannacherTurekNode;\n+ 34\n+ 35template<typename GV>\n+ 36class RannacherTurekPreBasis;\n+ 37\n+ 50template<typename GV>\n+51class RannacherTurekPreBasis\n+ 52{\n+ 53 static const int dim = GV::dimension;\n+ 54\n+ 55public:\n+ 56\n+58 using GridView = GV;\n+ 59\n+61 using size_type = std::size_t;\n+ 62\n+64 using Node = RannacherTurekNode<GV>;\n+ 65\n+66 static constexpr size_type maxMultiIndexSize = 1;\n+67 static constexpr size_type minMultiIndexSize = 1;\n+68 static constexpr size_type multiIndexBufferSize = 1;\n+ 69\n+71 RannacherTurekPreBasis(const GridView& gv) :\n+ 72 gridView_(gv)\n+ 73 {\n+ 74 for(auto type : gv.indexSet().types(0))\n+ 75 if (!type.isSimplex() && !type.isCube())\n+ 76 DUNE_THROW(Dune::NotImplemented, \"Rannacher-Turek or Crouzeix-Raviart\n+elements are only implemented for grids with simplex or cube elements.\");\n+ 77 }\n+ 78\n+80 void initializeIndices()\n+ 81 {}\n+ 82\n+84 const GridView& gridView() const\n+ 85 {\n+ 86 return gridView_;\n+ 87 }\n 88\n- 89\n- 90\n- 107template<class Basis, class F,\n- 108 decltype(std::declval<std::decay_t<F>>()(std::declval<typename Basis::\n-MultiIndex>()),0) = 0>\n- 109void forEachBoundaryDOF(const Basis& basis, F&& f)\n- 110{\n- 111 auto localView = basis.localView();\n- 112 auto seDOFs = subEntityDOFs(basis);\n- 113 const auto& gridView = basis.gridView();\n- 114 for(auto&& element : elements(gridView))\n- 115 if (element.hasBoundaryIntersections())\n- 116 {\n- 117 localView.bind(element);\n- 118 for(const auto& intersection: intersections(gridView, element))\n- 119 if (intersection.boundary())\n- 120 for(auto localIndex: seDOFs.bind(localView,intersection))\n- 121 f(localView.index(localIndex));\n- 122 }\n- 123}\n- 124\n- 125\n- 126\n- 127} // namespace Functions\n- 128} // namespace Dune\n- 129\n- 130#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_BOUNDARYDOFS_HH\n-subentitydofs.hh\n-Dune::Functions::subEntityDOFs\n-auto subEntityDOFs(const T &)\n-Create SubEntityDOFs object.\n-Definition: subentitydofs.hh:160\n-Dune::Functions::forEachBoundaryDOF\n-void forEachBoundaryDOF(const Basis &basis, F &&f)\n-Loop over all DOFs on the boundary.\n-Definition: boundarydofs.hh:36\n+90 void update (const GridView& gv)\n+ 91 {\n+ 92 gridView_ = gv;\n+ 93 }\n+ 94\n+98 Node makeNode() const\n+ 99 {\n+ 100 return Node{};\n+ 101 }\n+ 102\n+104 size_type size() const\n+ 105 {\n+ 106 return (size_type)(gridView_.size(1));\n+ 107 }\n+ 108\n+ 110 template<class SizePrefix>\n+111 size_type size(const SizePrefix prefix) const\n+ 112 {\n+ 113 assert(prefix.size() == 0 || prefix.size() == 1);\n+ 114 return (prefix.size() == 0) ? size() : 0;\n+ 115 }\n+ 116\n+118 size_type dimension() const\n+ 119 {\n+ 120 return size();\n+ 121 }\n+ 122\n+124 size_type maxNodeSize() const\n+ 125 {\n+ 126 return 2*GV::dimension;\n+ 127 }\n+ 128\n+ 129 template<typename It>\n+130 It indices(const Node& node, It it) const\n+ 131 {\n+ 132 for (size_type i = 0, end = node.size() ; i < end ; ++i, ++it)\n+ 133 {\n+ 134 Dune::LocalKey localKey = node.finiteElement().localCoefficients\n+().localKey(i);\n+ 135 const auto& gridIndexSet = gridView().indexSet();\n+ 136 const auto& element = node.element();\n+ 137\n+ 138 *it = {{ (size_type)(gridIndexSet.subIndex(element,localKey.subEntity\n+(),1)) }};\n+ 139 }\n+ 140 return it;\n+ 141 }\n+ 142\n+ 143protected:\n+144 GridView gridView_;\n+ 145};\n+ 146\n+ 147\n+ 148\n+ 149template<typename GV>\n+150class RannacherTurekNode :\n+ 151 public LeafBasisNode\n+ 152{\n+ 153 static const int dim = GV::dimension;\n+ 154 static const int maxSize = 2*dim;\n+ 155\n+ 156 constexpr static bool hasFixedElementType = Capabilities::\n+hasSingleGeometryType<typename GV::Grid>::v;\n+ 157\n+ 158 using CubeFiniteElement = RannacherTurekLocalFiniteElement<typename GV::\n+ctype,double,dim>;\n+ 159 using SimplexFiniteElement = CrouzeixRaviartLocalFiniteElement<typename\n+GV::ctype,double,dim>;\n+ 160\n+ 161 constexpr static unsigned int topologyId = Capabilities::\n+hasSingleGeometryType<typename GV::Grid>::topologyId; // meaningless if\n+hasFixedElementType is false\n+ 162 constexpr static GeometryType type = GeometryType(topologyId, GV::\n+dimension);\n+ 163\n+ 164public:\n+ 165\n+166 using size_type = std::size_t;\n+167 using Element = typename GV::template Codim<0>::Entity;\n+168 using FiniteElement = std::conditional_t<hasFixedElementType,\n+ 169 std::conditional_t<type.isCube(),CubeFiniteElement,SimplexFiniteElement>,\n+ 170 LocalFiniteElementVariant<CubeFiniteElement, SimplexFiniteElement> >;\n+ 171\n+172 RannacherTurekNode() :\n+ 173 finiteElement_(),\n+ 174 element_(nullptr)\n+ 175 {}\n+ 176\n+178 const Element& element() const\n+ 179 {\n+ 180 return *element_;\n+ 181 }\n+ 182\n+187 const FiniteElement& finiteElement() const\n+ 188 {\n+ 189 return finiteElement_;\n+ 190 }\n+ 191\n+193 void bind(const Element& e)\n+ 194 {\n+ 195 element_ = &e;\n+ 196 if constexpr (!hasFixedElementType)\n+ 197 finiteElement_ = e.type().isCube() ? static_cast<FiniteElement>\n+(CubeFiniteElement())\n+ 198 : static_cast<FiniteElement>(SimplexFiniteElement()) ;\n+ 199 this->setSize(finiteElement_.size());\n+ 200 }\n+ 201\n+ 202protected:\n+ 203\n+204 FiniteElement finiteElement_;\n+205 const Element* element_;\n+ 206};\n+ 207\n+ 208\n+ 209\n+ 210namespace BasisFactory {\n+ 211\n+ 217template<class Dummy=void>\n+218auto rannacherTurek()\n+ 219{\n+ 220 return [](const auto& gridView) {\n+ 221 return RannacherTurekPreBasis<std::decay_t<decltype(gridView)>>(gridView);\n+ 222 };\n+ 223}\n+ 224\n+ 225} // end namespace BasisFactory\n+ 226\n+ 227\n+ 228\n+ 229\n+ 241template<typename GV>\n+242using RannacherTurekBasis = DefaultGlobalBasis<RannacherTurekPreBasis<GV> >;\n+ 243\n+ 244} // end namespace Functions\n+ 245} // end namespace Dune\n+ 246\n+ 247#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_RANNACHERTUREKBASIS_HH\n+defaultglobalbasis.hh\n+nodes.hh\n+Dune::Functions::BasisFactory::rannacherTurek\n+auto rannacherTurek()\n+Create a pre-basis factory that can create a Rannacher-Turek pre-basis.\n+Definition: rannacherturekbasis.hh:218\n Dune\n Definition: polynomial.hh:10\n+Dune::Functions::DefaultGlobalBasis\n+Global basis for given pre-basis.\n+Definition: defaultglobalbasis.hh:46\n+Dune::Functions::BasisNodeMixin::size\n+size_type size() const\n+Definition: nodes.hh:142\n+Dune::Functions::BasisNodeMixin::size_type\n+std::size_t size_type\n+Definition: nodes.hh:128\n+Dune::Functions::BasisNodeMixin::setSize\n+void setSize(const size_type size)\n+Definition: nodes.hh:164\n+Dune::Functions::LeafBasisNode\n+Definition: nodes.hh:186\n+Dune::Functions::RannacherTurekNode\n+Definition: rannacherturekbasis.hh:152\n+Dune::Functions::RannacherTurekNode::FiniteElement\n+std::conditional_t< hasFixedElementType, std::conditional_t< type.isCube(),\n+CubeFiniteElement, SimplexFiniteElement >, LocalFiniteElementVariant<\n+CubeFiniteElement, SimplexFiniteElement > > FiniteElement\n+Definition: rannacherturekbasis.hh:170\n+Dune::Functions::RannacherTurekNode::bind\n+void bind(const Element &e)\n+Bind to element.\n+Definition: rannacherturekbasis.hh:193\n+Dune::Functions::RannacherTurekNode::finiteElement_\n+FiniteElement finiteElement_\n+Definition: rannacherturekbasis.hh:204\n+Dune::Functions::RannacherTurekNode::Element\n+typename GV::template Codim< 0 >::Entity Element\n+Definition: rannacherturekbasis.hh:167\n+Dune::Functions::RannacherTurekNode::RannacherTurekNode\n+RannacherTurekNode()\n+Definition: rannacherturekbasis.hh:172\n+Dune::Functions::RannacherTurekNode::element_\n+const Element * element_\n+Definition: rannacherturekbasis.hh:205\n+Dune::Functions::RannacherTurekNode::finiteElement\n+const FiniteElement & finiteElement() const\n+Return the LocalFiniteElement for the element we are bound to.\n+Definition: rannacherturekbasis.hh:187\n+Dune::Functions::RannacherTurekNode::element\n+const Element & element() const\n+Return current element, throw if unbound.\n+Definition: rannacherturekbasis.hh:178\n+Dune::Functions::RannacherTurekPreBasis\n+Pre-basis for a Rannacher-Turek basis.\n+Definition: rannacherturekbasis.hh:52\n+Dune::Functions::RannacherTurekPreBasis::multiIndexBufferSize\n+static constexpr size_type multiIndexBufferSize\n+Definition: rannacherturekbasis.hh:68\n+Dune::Functions::RannacherTurekPreBasis::initializeIndices\n+void initializeIndices()\n+Initialize the global indices.\n+Definition: rannacherturekbasis.hh:80\n+Dune::Functions::RannacherTurekPreBasis::maxMultiIndexSize\n+static constexpr size_type maxMultiIndexSize\n+Definition: rannacherturekbasis.hh:66\n+Dune::Functions::RannacherTurekPreBasis::minMultiIndexSize\n+static constexpr size_type minMultiIndexSize\n+Definition: rannacherturekbasis.hh:67\n+Dune::Functions::RannacherTurekPreBasis::size\n+size_type size(const SizePrefix prefix) const\n+Return number of possible values for next position in multi index.\n+Definition: rannacherturekbasis.hh:111\n+Dune::Functions::RannacherTurekPreBasis::size_type\n+std::size_t size_type\n+Type used for indices and size information.\n+Definition: rannacherturekbasis.hh:61\n+Dune::Functions::RannacherTurekPreBasis::makeNode\n+Node makeNode() const\n+Create tree node.\n+Definition: rannacherturekbasis.hh:98\n+Dune::Functions::RannacherTurekPreBasis::update\n+void update(const GridView &gv)\n+Update the stored grid view, to be called if the grid has changed.\n+Definition: rannacherturekbasis.hh:90\n+Dune::Functions::RannacherTurekPreBasis::indices\n+It indices(const Node &node, It it) const\n+Definition: rannacherturekbasis.hh:130\n+Dune::Functions::RannacherTurekPreBasis::GridView\n+GV GridView\n+The grid view that the FE basis is defined on.\n+Definition: rannacherturekbasis.hh:58\n+Dune::Functions::RannacherTurekPreBasis::dimension\n+size_type dimension() const\n+Get the total dimension of the space spanned by this basis.\n+Definition: rannacherturekbasis.hh:118\n+Dune::Functions::RannacherTurekPreBasis::RannacherTurekPreBasis\n+RannacherTurekPreBasis(const GridView &gv)\n+Constructor for a given grid view object.\n+Definition: rannacherturekbasis.hh:71\n+Dune::Functions::RannacherTurekPreBasis::size\n+size_type size() const\n+Same as size(prefix) with empty prefix.\n+Definition: rannacherturekbasis.hh:104\n+Dune::Functions::RannacherTurekPreBasis::gridView\n+const GridView & gridView() const\n+Obtain the grid view that the basis is defined on.\n+Definition: rannacherturekbasis.hh:84\n+Dune::Functions::RannacherTurekPreBasis::maxNodeSize\n+size_type maxNodeSize() const\n+Get the maximal number of DOFs associated to node for any element.\n+Definition: rannacherturekbasis.hh:124\n+Dune::Functions::RannacherTurekPreBasis::gridView_\n+GridView gridView_\n+Definition: rannacherturekbasis.hh:144\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00188.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00188.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: compositebasis.hh File Reference</title>\n+<title>dune-functions: subspacelocalview.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -64,60 +64,37 @@\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n-<a href=\"#namespaces\">Namespaces</a> |\n-<a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">compositebasis.hh File Reference</div></div>\n+<a href=\"#namespaces\">Namespaces</a> </div>\n+ <div class=\"headertitle\"><div class=\"title\">subspacelocalview.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <div class=\"textblock\"><code>#include <tuple></code><br />\n-<code>#include <utility></code><br />\n-<code>#include <dune/common/std/apply.hh></code><br />\n-<code>#include <dune/common/hybridutilities.hh></code><br />\n-<code>#include <dune/common/reservedvector.hh></code><br />\n-<code>#include <dune/common/typeutilities.hh></code><br />\n-<code>#include <dune/common/tupleutility.hh></code><br />\n-<code>#include <dune/common/tuplevector.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00056_source.html\">dune/functions/common/staticforloop.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00092_source.html\">dune/functions/common/type_traits.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00050_source.html\">dune/functions/common/utility.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00179_source.html\">dune/functions/functionspacebases/basistags.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00191_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code><br />\n+<code>#include <dune/common/concept.hh></code><br />\n+<code>#include <dune/typetree/childextraction.hh></code><br />\n <code>#include <<a class=\"el\" href=\"a02876_source.html\">dune/functions/functionspacebases/concepts.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00119_source.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></code><br />\n </div>\n <p><a href=\"a00188_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01503.html\">Dune::Functions::CompositePreBasis< IMS, SPB ></a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">A pre-basis for composite bases. <a href=\"a01503.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01811.html\">Dune::Functions::SubspaceLocalView< RLV, PP ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">The restriction of a finite element basis to a single element. <a href=\"a01811.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a00224\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00224.html\">Dune::Functions::BasisFactory</a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a00225\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00225.html\">Dune::Functions::BasisBuilder</a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-</table><table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n-Functions</h2></td></tr>\n-<tr class=\"memitem:ga0ee62f9744ec8ba58fdfc4c68df34449\"><td class=\"memTemplParams\" colspan=\"2\">template<typename... Args, std::enable_if_t< Concept::isIndexMergingStrategy< typename LastType< Args... >::type >(), int > = 0> </td></tr>\n-<tr class=\"memitem:ga0ee62f9744ec8ba58fdfc4c68df34449\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#ga0ee62f9744ec8ba58fdfc4c68df34449\">Dune::Functions::BasisFactory::composite</a> (Args &&... args)</td></tr>\n-<tr class=\"memdesc:ga0ee62f9744ec8ba58fdfc4c68df34449\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a factory builder that can build a <a class=\"el\" href=\"a01503.html\" title=\"A pre-basis for composite bases.\">CompositePreBasis</a>. <a href=\"a00213.html#ga0ee62f9744ec8ba58fdfc4c68df34449\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga0ee62f9744ec8ba58fdfc4c68df34449\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,47 +5,26 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-Classes | Namespaces | Functions\n-compositebasis.hh File Reference\n+Classes | Namespaces\n+subspacelocalview.hh File Reference\n #include <tuple>\n-#include <utility>\n-#include <dune/common/std/apply.hh>\n-#include <dune/common/hybridutilities.hh>\n-#include <dune/common/reservedvector.hh>\n-#include <dune/common/typeutilities.hh>\n-#include <dune/common/tupleutility.hh>\n-#include <dune/common/tuplevector.hh>\n-#include <dune/functions/common/staticforloop.hh>\n-#include <dune/functions/common/type_traits.hh>\n-#include <dune/functions/common/utility.hh>\n-#include <dune/functions/functionspacebases/basistags.hh>\n-#include <dune/functions/functionspacebases/nodes.hh>\n+#include <dune/common/concept.hh>\n+#include <dune/typetree/childextraction.hh>\n #include <dune/functions/functionspacebases/concepts.hh>\n-#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-class \u00a0Dune::Functions::CompositePreBasis<_IMS,_SPB_>\n-\u00a0 A pre-basis for composite bases. More...\n+class \u00a0Dune::Functions::SubspaceLocalView<_RLV,_PP_>\n+\u00a0 The restriction of a finite element basis to a single element. More...\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n-namespace \u00a0Dune::Functions::BasisFactory\n-\u00a0\n-namespace \u00a0Dune::Functions::BasisBuilder\n-\u00a0\n- Functions\n-template<typename... Args, std::enable_if_t< Concept::isIndexMergingStrategy<\n-typename LastType< Args... >::type >(), int > = 0>\n-auto\u00a0Dune::Functions::BasisFactory::composite (Args &&... args)\n-\u00a0 Create a factory builder that can build a CompositePreBasis. More...\n-\u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00188_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00188_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: compositebasis.hh Source File</title>\n+<title>dune-functions: subspacelocalview.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -62,422 +62,162 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">compositebasis.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">subspacelocalview.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00188.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <tuple></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <utility></span></div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span> </div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <tuple></span></div>\n <div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/common/std/apply.hh></span></div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/hybridutilities.hh></span></div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/common/reservedvector.hh></span></div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <dune/common/typeutilities.hh></span></div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <dune/common/hybridutilities.hh></span></div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <dune/common/tupleutility.hh></span></div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <dune/common/tuplevector.hh></span></div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/common/concept.hh></span></div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span> </div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/typetree/childextraction.hh></span></div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span> </div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a02876.html\">dune/functions/functionspacebases/concepts.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span> </div>\n <div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00056.html\">dune/functions/common/staticforloop.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00092.html\">dune/functions/common/type_traits.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00050.html\">dune/functions/common/utility.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00179.html\">dune/functions/functionspacebases/basistags.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00191.html\">dune/functions/functionspacebases/nodes.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a02876.html\">dune/functions/functionspacebases/concepts.hh</a>></span></div>\n-<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00119.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span> </div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> </div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> RB, <span class=\"keyword\">class</span> PP></div>\n+<div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span><span class=\"keyword\">class </span><a class=\"code hl_function\" href=\"a00219.html#a17589fdc18b015644525c7ad037e6441\">SubspaceBasis</a>;</div>\n <div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> </div>\n <div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> </div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span><span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> </div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span><span class=\"comment\">// *****************************************************************************</span></div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span><span class=\"comment\">// This is the reusable part of the composite bases. It contains</span></div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span><span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span><span class=\"comment\">// CompositePreBasis</span></div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span><span class=\"comment\">//</span></div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span><span class=\"comment\">// The pre-basis allows to create the others and is the owner of possible shared</span></div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span><span class=\"comment\">// state. These components do _not_ depend on the global basis and local view</span></div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span><span class=\"comment\">// and can be used without a global basis.</span></div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span><span class=\"comment\">// *****************************************************************************</span></div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> </div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> </div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> RLV, <span class=\"keyword\">class</span> PP></div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html\"> 29</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01811.html\">SubspaceLocalView</a></div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span>{</div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> <span class=\"keyword\">using </span>PrefixPath = PP;</div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> </div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> </div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#aa1f3b0a89f5d186299ed0a5329562815\"> 35</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01811.html#aa1f3b0a89f5d186299ed0a5329562815\">RootLocalView</a> = RLV;</div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> </div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#a3a627e895c213316cb666677fb9176de\"> 38</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01807.html\">GlobalBasis</a> = <a class=\"code hl_class\" href=\"a01807.html\">SubspaceBasis<typename RootLocalView::GlobalBasis, PrefixPath></a>;</div>\n <div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> </div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>IMS, <span class=\"keyword\">class</span>... SPB></div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html\"> 52</a></span><span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01503.html\">CompositePreBasis</a></div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span>{</div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">bool</span> isBlocked = std::is_same_v<IMS,BasisFactory::BlockedLexicographic> or std::is_same_v<IMS,BasisFactory::BlockedInterleaved>;</div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> </div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#aa3fbd381a090703bb2f0ea3bde8a3031\"> 58</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01503.html#aa3fbd381a090703bb2f0ea3bde8a3031\">SubPreBases</a> = std::tuple<SPB...>;</div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> </div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> <span class=\"keyword\">template</span><std::<span class=\"keywordtype\">size_t</span> i></div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#ab02c441bc5d90d3b584df84e606582a7\"> 62</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01503.html#ab02c441bc5d90d3b584df84e606582a7\">SubPreBasis</a> = std::tuple_element_t<i, SubPreBases>;</div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> </div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#aa04cac815e90325c4ec524e0dc7b22ee\"> 65</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01503.html#aa04cac815e90325c4ec524e0dc7b22ee\">GridView</a> = <span class=\"keyword\">typename</span> std::tuple_element_t<0, SubPreBases>::GridView;</div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> </div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\"> 68</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> = std::size_t;</div>\n-<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> </div>\n-<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#a13b5ee8d5de52affa35662093b32de00\"> 71</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01503.html#a13b5ee8d5de52affa35662093b32de00\">IndexMergingStrategy</a> = IMS;</div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> </div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span><span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#aa0689626cbb089b66e5932b4a4ed6a6e\"> 74</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> std::size_t <a class=\"code hl_variable\" href=\"a01503.html#aa0689626cbb089b66e5932b4a4ed6a6e\">children</a> = <span class=\"keyword\">sizeof</span>...(SPB);</div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#aa050bf0c521425f496729c3947a61bae\"> 41</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01811.html#aa050bf0c521425f496729c3947a61bae\">GridView</a> = <span class=\"keyword\">typename</span> <a class=\"code hl_typedef\" href=\"a01807.html#a6e7dd708494382dad7cc288ce6cfe6b8\">GlobalBasis::GridView</a>;</div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> </div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#aa8331a332fffea09e3bddd41d3d0530b\"> 44</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01811.html#aa8331a332fffea09e3bddd41d3d0530b\">Element</a> = <span class=\"keyword\">typename</span> GridView::template Codim<0>::Entity;</div>\n+<div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> </div>\n+<div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#aa53cfe0f5da6f163c89cfe7efd03977d\"> 47</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01811.html#aa53cfe0f5da6f163c89cfe7efd03977d\">size_type</a> = std::size_t;</div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> </div>\n+<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#ae4f87d4a8978c25f211132aa6001290c\"> 50</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01811.html#ae4f87d4a8978c25f211132aa6001290c\">RootTree</a> = <span class=\"keyword\">typename</span> RootLocalView::Tree;</div>\n+<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> </div>\n+<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#a04b95239bc90b94a1332233663446cd2\"> 53</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01811.html#a04b95239bc90b94a1332233663446cd2\">Tree</a> = <span class=\"keyword\">typename</span> TypeTree::ChildForTreePath<RootTree, PrefixPath>;</div>\n+<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> </div>\n+<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#a332b6754582b1108ef353b1b78ae01a3\"> 56</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01811.html#a332b6754582b1108ef353b1b78ae01a3\">MultiIndex</a> = <span class=\"keyword\">typename</span> RootLocalView::MultiIndex;</div>\n+<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> </div>\n+<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#aa0d1d0d89f2dd443da6da8d77f6a344f\"> 59</a></span> <a class=\"code hl_function\" href=\"a01811.html#aa0d1d0d89f2dd443da6da8d77f6a344f\">SubspaceLocalView</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01807.html\">GlobalBasis</a>& <a class=\"code hl_function\" href=\"a01811.html#ab86e2da3d257ff25f989a0b51dd7fa95\">globalBasis</a>, <span class=\"keyword\">const</span> PrefixPath& <span class=\"comment\">/*prefixPath*/</span>) :</div>\n+<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> <a class=\"code hl_variable\" href=\"a01811.html#a2fb2643d53fb7511f2eb6ddff751043c\">globalBasis_</a>(&<a class=\"code hl_function\" href=\"a01811.html#ab86e2da3d257ff25f989a0b51dd7fa95\">globalBasis</a>),</div>\n+<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> <a class=\"code hl_variable\" href=\"a01811.html#a6db2abe3c910a2aad3a91f732e34c95a\">rootLocalView_</a>(<a class=\"code hl_function\" href=\"a01811.html#ab86e2da3d257ff25f989a0b51dd7fa95\">globalBasis</a>.rootBasis().localView())</div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> {</div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span><span class=\"comment\">// static_assert(models<Concept::BasisTree<GridView>, Tree>(), "Tree type passed to SubspaceLocalView does not model the BasisNode concept.");</span></div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> }</div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> </div>\n+<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#a8d67dd96c63054ab2caccf7c50975838\"> 71</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01811.html#a8d67dd96c63054ab2caccf7c50975838\">bind</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01811.html#aa8331a332fffea09e3bddd41d3d0530b\">Element</a>& e)</div>\n+<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> {</div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> <a class=\"code hl_variable\" href=\"a01811.html#a6db2abe3c910a2aad3a91f732e34c95a\">rootLocalView_</a>.bind(e);</div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> }</div>\n <div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> </div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#ac2d58cfa5b4b07bdfbec63a296c9a5d6\"> 76</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01503.html#ac2d58cfa5b4b07bdfbec63a296c9a5d6\">ChildIndices</a> = std::make_index_sequence<children>;</div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> </div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> </div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#a38b6a4eb5dc345ee88c046d107c9b811\"> 81</a></span> <span class=\"keyword\">using </span><a class=\"code hl_class\" href=\"a01719.html\">Node</a> = <a class=\"code hl_class\" href=\"a01719.html\">CompositeBasisNode</a><<span class=\"keyword\">typename</span> SPB::Node...>;</div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> </div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#affd187f58c7f8a750b11ab48abc3d94e\"> 83</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> <a class=\"code hl_variable\" href=\"a01503.html#affd187f58c7f8a750b11ab48abc3d94e\">maxMultiIndexSize</a> = std::max({SPB::maxMultiIndexSize...}) + isBlocked;</div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#aee4f8b5f159f44d9a0fc61c60c615c19\"> 84</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> <a class=\"code hl_variable\" href=\"a01503.html#aee4f8b5f159f44d9a0fc61c60c615c19\">minMultiIndexSize</a> = std::min({SPB::minMultiIndexSize...}) + isBlocked;</div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#ad57d4c09c40d5a87d3e899a2c2df0f35\"> 85</a></span> <span class=\"keyword\">static</span> <span class=\"keyword\">constexpr</span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> <a class=\"code hl_variable\" href=\"a01503.html#ad57d4c09c40d5a87d3e899a2c2df0f35\">multiIndexBufferSize</a> = std::max({SPB::multiIndexBufferSize...}) + isBlocked;</div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> </div>\n-<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>... SFArgs,</div>\n-<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> disableCopyMove<<a class=\"code hl_function\" href=\"a01503.html#a4530439b525f32c80febe548adb3f628\">CompositePreBasis</a>, SFArgs...> = 0,</div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> <a class=\"code hl_typedef\" href=\"a00215.html#ga673247dd74bcdd9e5acfc7735faf8a5b\">enableIfConstructible</a><std::tuple<SPB...>, SFArgs...> = 0></div>\n-<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#a4530439b525f32c80febe548adb3f628\"> 95</a></span> <a class=\"code hl_function\" href=\"a01503.html#a4530439b525f32c80febe548adb3f628\">CompositePreBasis</a>(SFArgs&&... sfArgs) :</div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> subPreBases_(std::forward<SFArgs>(sfArgs)...)</div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> {</div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> Hybrid::forEach(subPreBases_, [&](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& <a class=\"code hl_function\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">subPreBasis</a>){</div>\n-<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> <span class=\"keyword\">static_assert</span>(models<Concept::PreBasis<GridView>, std::decay_t<<span class=\"keyword\">decltype</span>(<a class=\"code hl_function\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">subPreBasis</a>)>>(), <span class=\"stringliteral\">"Subprebases passed to CompositePreBasis does not model the PreBasis concept."</span>);</div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> });</div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> }</div>\n-<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> </div>\n-<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>GV,</div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> std::enable_if_t<std::conjunction_v<</div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> std::bool_constant<(<a class=\"code hl_variable\" href=\"a01503.html#aa0689626cbb089b66e5932b4a4ed6a6e\">children</a> > 1)>, <span class=\"comment\">// Avoid ambiguous constructor if there's only one child</span></div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> std::is_same<GV, GridView>,</div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> std::is_constructible<SPB, GridView>...</div>\n-<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> >, <span class=\"keywordtype\">int</span>> = 0></div>\n-<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#a76f2fc67456c26241e478b632e522b2c\"> 115</a></span> <a class=\"code hl_function\" href=\"a01503.html#a76f2fc67456c26241e478b632e522b2c\">CompositePreBasis</a>(<span class=\"keyword\">const</span> GV& gv) :</div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> subPreBases_(SPB(gv)...)</div>\n-<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> {</div>\n-<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> Hybrid::forEach(subPreBases_, [&](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>& <a class=\"code hl_function\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">subPreBasis</a>){</div>\n-<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> <span class=\"keyword\">static_assert</span>(models<Concept::PreBasis<GridView>, std::decay_t<<span class=\"keyword\">decltype</span>(<a class=\"code hl_function\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">subPreBasis</a>)>>(), <span class=\"stringliteral\">"Subprebases passed to CompositePreBasis does not model the PreBasis concept."</span>);</div>\n-<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> });</div>\n-<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> }</div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> </div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#aa8d56e734a40a838d9f1407caec24a2e\"> 124</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01503.html#aa8d56e734a40a838d9f1407caec24a2e\">initializeIndices</a>()</div>\n-<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> {</div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> Hybrid::forEach(<a class=\"code hl_typedef\" href=\"a01503.html#ac2d58cfa5b4b07bdfbec63a296c9a5d6\">ChildIndices</a>(), [&](<span class=\"keyword\">auto</span> i) {</div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> this-><a class=\"code hl_function\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">subPreBasis</a>(i).initializeIndices();</div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> });</div>\n-<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> }</div>\n-<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> </div>\n-<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#aebc2c16cfb6f0e3f2e73ca2e3d028b58\"> 132</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01503.html#aa04cac815e90325c4ec524e0dc7b22ee\">GridView</a>& <a class=\"code hl_function\" href=\"a01503.html#aebc2c16cfb6f0e3f2e73ca2e3d028b58\">gridView</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> <span class=\"keywordflow\">return</span> std::get<0>(subPreBases_).gridView();</div>\n-<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> }</div>\n-<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> </div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#ac5a69d51a76acbc5edb4fa55c97aa26c\"> 138</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01503.html#ac5a69d51a76acbc5edb4fa55c97aa26c\">update</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01503.html#aa04cac815e90325c4ec524e0dc7b22ee\">GridView</a>& gv)</div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> {</div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> Hybrid::forEach(<a class=\"code hl_typedef\" href=\"a01503.html#ac2d58cfa5b4b07bdfbec63a296c9a5d6\">ChildIndices</a>(), [&](<span class=\"keyword\">auto</span> i) {</div>\n-<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> this-><a class=\"code hl_function\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">subPreBasis</a>(i).update(gv);</div>\n-<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> });</div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> }</div>\n-<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> </div>\n-<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#aa7aa72102c6058b4a640d61bbce06732\"> 148</a></span> <a class=\"code hl_class\" href=\"a01719.html\">Node</a> <a class=\"code hl_function\" href=\"a01503.html#aa7aa72102c6058b4a640d61bbce06732\">makeNode</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> <span class=\"keyword\">auto</span> node = <a class=\"code hl_class\" href=\"a01719.html\">Node</a>{};</div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> Hybrid::forEach(<a class=\"code hl_typedef\" href=\"a01503.html#ac2d58cfa5b4b07bdfbec63a296c9a5d6\">ChildIndices</a>(), [&](<span class=\"keyword\">auto</span> i) {</div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> node.setChild(this-><a class=\"code hl_function\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">subPreBasis</a>(i).<a class=\"code hl_function\" href=\"a01503.html#aa7aa72102c6058b4a640d61bbce06732\">makeNode</a>(), i);</div>\n-<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> });</div>\n-<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> <span class=\"keywordflow\">return</span> node;</div>\n-<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> }</div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#a2d7c1e74433fb663cbed0c2ab6fc7198\"> 80</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01811.html#aa8331a332fffea09e3bddd41d3d0530b\">Element</a>& <a class=\"code hl_function\" href=\"a01811.html#a2d7c1e74433fb663cbed0c2ab6fc7198\">element</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01811.html#a6db2abe3c910a2aad3a91f732e34c95a\">rootLocalView_</a>.element();</div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> }</div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> </div>\n+<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#a210cb18bf65e34f621e0bffd6cb19384\"> 89</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01811.html#a210cb18bf65e34f621e0bffd6cb19384\">unbind</a>()</div>\n+<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> {</div>\n+<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> <a class=\"code hl_variable\" href=\"a01811.html#a6db2abe3c910a2aad3a91f732e34c95a\">rootLocalView_</a>.unbind();</div>\n+<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> }</div>\n+<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> </div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#a31341266e49615ffc56949f471bb61a8\"> 96</a></span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a01811.html#a31341266e49615ffc56949f471bb61a8\">bound</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01811.html#a6db2abe3c910a2aad3a91f732e34c95a\">rootLocalView_</a>.bound();</div>\n+<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> }</div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> </div>\n+<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#acd8c1a7b0ab5a820590b96e441524c06\"> 105</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01811.html#a04b95239bc90b94a1332233663446cd2\">Tree</a>& <a class=\"code hl_function\" href=\"a01811.html#acd8c1a7b0ab5a820590b96e441524c06\">tree</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> <span class=\"keywordflow\">return</span> TypeTree::child(<a class=\"code hl_variable\" href=\"a01811.html#a6db2abe3c910a2aad3a91f732e34c95a\">rootLocalView_</a>.tree(), <a class=\"code hl_variable\" href=\"a01811.html#a2fb2643d53fb7511f2eb6ddff751043c\">globalBasis_</a>-><a class=\"code hl_function\" href=\"a01807.html#a7c1756f78b770fbbe6937b8a146cdc81\">prefixPath</a>());</div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> }</div>\n+<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> </div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#a3bd132c98fd23a67c253c9475540ac90\"> 112</a></span> <a class=\"code hl_typedef\" href=\"a01811.html#aa53cfe0f5da6f163c89cfe7efd03977d\">size_type</a> <a class=\"code hl_function\" href=\"a01811.html#a3bd132c98fd23a67c253c9475540ac90\">size</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01811.html#a6db2abe3c910a2aad3a91f732e34c95a\">rootLocalView_</a>.size();</div>\n+<div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> }</div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> </div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#ac553ded1a00894bfb703f41a86f8ce06\"> 123</a></span> <a class=\"code hl_typedef\" href=\"a01811.html#aa53cfe0f5da6f163c89cfe7efd03977d\">size_type</a> <a class=\"code hl_function\" href=\"a01811.html#ac553ded1a00894bfb703f41a86f8ce06\">maxSize</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01811.html#a6db2abe3c910a2aad3a91f732e34c95a\">rootLocalView_</a>.maxSize();</div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> }</div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> </div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#adb5c1fb9c9e3eb19ebb3333e4401f9aa\"> 129</a></span> <a class=\"code hl_typedef\" href=\"a01811.html#a332b6754582b1108ef353b1b78ae01a3\">MultiIndex</a> <a class=\"code hl_function\" href=\"a01811.html#adb5c1fb9c9e3eb19ebb3333e4401f9aa\">index</a>(<a class=\"code hl_typedef\" href=\"a01811.html#aa53cfe0f5da6f163c89cfe7efd03977d\">size_type</a> i)<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01811.html#a6db2abe3c910a2aad3a91f732e34c95a\">rootLocalView_</a>.index(i);</div>\n+<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> }</div>\n+<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> </div>\n+<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#ab86e2da3d257ff25f989a0b51dd7fa95\"> 136</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01807.html\">GlobalBasis</a>& <a class=\"code hl_function\" href=\"a01811.html#ab86e2da3d257ff25f989a0b51dd7fa95\">globalBasis</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> <span class=\"keywordflow\">return</span> *<a class=\"code hl_variable\" href=\"a01811.html#a2fb2643d53fb7511f2eb6ddff751043c\">globalBasis_</a>;</div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> }</div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> </div>\n+<div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#aa28ae73e021d001a954cafe23c570900\"> 141</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01811.html#aa1f3b0a89f5d186299ed0a5329562815\">RootLocalView</a>& <a class=\"code hl_function\" href=\"a01811.html#aa28ae73e021d001a954cafe23c570900\">rootLocalView</a>()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01811.html#a6db2abe3c910a2aad3a91f732e34c95a\">rootLocalView_</a>;</div>\n+<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> }</div>\n+<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> </div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span><span class=\"keyword\">protected</span>:</div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#a2fb2643d53fb7511f2eb6ddff751043c\"> 147</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01807.html\">GlobalBasis</a>* <a class=\"code hl_variable\" href=\"a01811.html#a2fb2643d53fb7511f2eb6ddff751043c\">globalBasis_</a>;</div>\n+<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01811.html#a6db2abe3c910a2aad3a91f732e34c95a\"> 148</a></span> <a class=\"code hl_typedef\" href=\"a01811.html#aa1f3b0a89f5d186299ed0a5329562815\">RootLocalView</a> <a class=\"code hl_variable\" href=\"a01811.html#a6db2abe3c910a2aad3a91f732e34c95a\">rootLocalView_</a>;</div>\n+<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span>};</div>\n+<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> </div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> </div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> </div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span>} <span class=\"comment\">// end namespace Functions</span></div>\n+<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span>} <span class=\"comment\">// end namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> </div>\n <div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> </div>\n-<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#a907545160aa50ff2214aabada7979d1b\"> 158</a></span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> <a class=\"code hl_function\" href=\"a01503.html#a907545160aa50ff2214aabada7979d1b\">size</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01503.html#a907545160aa50ff2214aabada7979d1b\">size</a>(Dune::ReservedVector<size_type, multiIndexBufferSize>{});</div>\n-<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> }</div>\n-<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> </div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#a406befa892b2d2d3f570ca32401c0b5e\"> 165</a></span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> <a class=\"code hl_function\" href=\"a01503.html#a406befa892b2d2d3f570ca32401c0b5e\">size</a>(<span class=\"keyword\">const</span> SizePrefix& prefix)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01503.html#a907545160aa50ff2214aabada7979d1b\">size</a>(prefix, <a class=\"code hl_typedef\" href=\"a01503.html#a13b5ee8d5de52affa35662093b32de00\">IndexMergingStrategy</a>{});</div>\n-<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> }</div>\n-<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> </div>\n-<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span><span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> </div>\n-<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n-<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> <a class=\"code hl_function\" href=\"a01503.html#a907545160aa50ff2214aabada7979d1b\">size</a>(<span class=\"keyword\">const</span> SizePrefix& prefix, <a class=\"code hl_struct\" href=\"a01427.html\">BasisFactory::BlockedLexicographic</a>)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> <span class=\"keywordflow\">if</span> (prefix.size() == 0)</div>\n-<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_variable\" href=\"a01503.html#aa0689626cbb089b66e5932b4a4ed6a6e\">children</a>;</div>\n-<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> </div>\n-<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> <span class=\"keywordflow\">return</span> Hybrid::switchCases(<a class=\"code hl_typedef\" href=\"a01503.html#ac2d58cfa5b4b07bdfbec63a296c9a5d6\">ChildIndices</a>(), prefix[0], [&] (<span class=\"keyword\">auto</span> i) {</div>\n-<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> SizePrefix subPrefix;</div>\n-<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> <span class=\"keywordflow\">for</span>(std::size_t i=1; i<prefix.size(); ++i)</div>\n-<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> subPrefix.push_back(prefix[i]);</div>\n-<div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> <span class=\"keywordflow\">return</span> this->subPreBasis(i).size(subPrefix);</div>\n-<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span> }, []() {</div>\n-<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a>(0);</div>\n-<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> });</div>\n-<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> }</div>\n-<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> </div>\n-<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizePrefix></div>\n-<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> <a class=\"code hl_function\" href=\"a01503.html#a907545160aa50ff2214aabada7979d1b\">size</a>(<span class=\"keyword\">const</span> SizePrefix& prefix, BasisFactory::FlatLexicographic)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> result = 0;</div>\n-<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> <span class=\"keywordflow\">if</span> (prefix.size() == 0)</div>\n-<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> Hybrid::forEach(<a class=\"code hl_typedef\" href=\"a01503.html#ac2d58cfa5b4b07bdfbec63a296c9a5d6\">ChildIndices</a>(), [&](<span class=\"keyword\">auto</span> i) {</div>\n-<div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> result += this-><a class=\"code hl_function\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">subPreBasis</a>(i).size();</div>\n-<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> });</div>\n-<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> <span class=\"keywordflow\">else</span> {</div>\n-<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> shiftedFirstDigit = prefix[0];</div>\n-<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> staticFindInRange<0, children>([&](<span class=\"keyword\">auto</span> i) {</div>\n-<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> <span class=\"keyword\">auto</span> firstDigitSize = this-><a class=\"code hl_function\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">subPreBasis</a>(i).size();</div>\n-<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> <span class=\"keywordflow\">if</span> (shiftedFirstDigit < firstDigitSize)</div>\n-<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> {</div>\n-<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> SizePrefix subPrefix;</div>\n-<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> subPrefix.push_back(shiftedFirstDigit);</div>\n-<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> <span class=\"keywordflow\">for</span>(std::size_t i=1; i<prefix.size(); ++i)</div>\n-<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span> subPrefix.push_back(prefix[i]);</div>\n-<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> result = this-><a class=\"code hl_function\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">subPreBasis</a>(i).size(subPrefix);</div>\n-<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> <span class=\"keywordflow\">return</span> <span class=\"keyword\">true</span>;</div>\n-<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span> }</div>\n-<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> shiftedFirstDigit -= firstDigitSize;</div>\n-<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> <span class=\"keywordflow\">return</span> <span class=\"keyword\">false</span>;</div>\n-<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> });</div>\n-<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"> 212</span> }</div>\n-<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span> <span class=\"keywordflow\">return</span> result;</div>\n-<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> }</div>\n-<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> </div>\n-<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> </div>\n-<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#a5a2dc8e82bcce40460968aa8f97c1ceb\"> 219</a></span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> <a class=\"code hl_function\" href=\"a01503.html#a5a2dc8e82bcce40460968aa8f97c1ceb\">dimension</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> r=0;</div>\n-<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span> <span class=\"comment\">// Accumulate dimension() for all subprebases</span></div>\n-<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> Hybrid::forEach(<a class=\"code hl_typedef\" href=\"a01503.html#ac2d58cfa5b4b07bdfbec63a296c9a5d6\">ChildIndices</a>(), [&](<span class=\"keyword\">auto</span> i) {</div>\n-<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> r += this-><a class=\"code hl_function\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">subPreBasis</a>(i).dimension();</div>\n-<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span> });</div>\n-<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> <span class=\"keywordflow\">return</span> r;</div>\n-<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> }</div>\n-<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> </div>\n-<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#a29400a9b23aa71a87ce69a2b86ca4ce1\"> 230</a></span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> <a class=\"code hl_function\" href=\"a01503.html#a29400a9b23aa71a87ce69a2b86ca4ce1\">maxNodeSize</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> r=0;</div>\n-<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> <span class=\"comment\">// Accumulate maxNodeSize() for all subprebases</span></div>\n-<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> Hybrid::forEach(<a class=\"code hl_typedef\" href=\"a01503.html#ac2d58cfa5b4b07bdfbec63a296c9a5d6\">ChildIndices</a>(), [&](<span class=\"keyword\">auto</span> i) {</div>\n-<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> r += this-><a class=\"code hl_function\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">subPreBasis</a>(i).maxNodeSize();</div>\n-<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span> });</div>\n-<div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span> <span class=\"keywordflow\">return</span> r;</div>\n-<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span> }</div>\n-<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span> </div>\n-<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span> <span class=\"keyword\">template</span><std::<span class=\"keywordtype\">size_t</span> i></div>\n-<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\"> 242</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01503.html#ab02c441bc5d90d3b584df84e606582a7\">SubPreBasis<i></a>& <a class=\"code hl_function\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">subPreBasis</a>(Dune::index_constant<i> = {}) <span class=\"keyword\">const</span></div>\n-<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> {</div>\n-<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> <span class=\"keywordflow\">return</span> std::get<i>(subPreBases_);</div>\n-<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> }</div>\n-<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span> </div>\n-<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"> 248</span> <span class=\"keyword\">template</span><std::<span class=\"keywordtype\">size_t</span> i></div>\n-<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#a10433c71a9cc503c7ef174ed23f06a13\"> 249</a></span> <a class=\"code hl_typedef\" href=\"a01503.html#ab02c441bc5d90d3b584df84e606582a7\">SubPreBasis<i></a>& <a class=\"code hl_function\" href=\"a01503.html#a10433c71a9cc503c7ef174ed23f06a13\">subPreBasis</a>(Dune::index_constant<i> = {})</div>\n-<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span> {</div>\n-<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span> <span class=\"keywordflow\">return</span> std::get<i>(subPreBases_);</div>\n-<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span> }</div>\n-<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"> 253</span> </div>\n-<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n-<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01503.html#a82feeaac018c244e749e6310332e2a3a\"> 256</a></span> It <a class=\"code hl_function\" href=\"a01503.html#a82feeaac018c244e749e6310332e2a3a\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_class\" href=\"a01719.html\">Node</a>& node, It it)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00257\" name=\"l00257\"></a><span class=\"lineno\"> 257</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00258\" name=\"l00258\"></a><span class=\"lineno\"> 258</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a01503.html#a82feeaac018c244e749e6310332e2a3a\">indices</a>(node, it, <a class=\"code hl_typedef\" href=\"a01503.html#a13b5ee8d5de52affa35662093b32de00\">IndexMergingStrategy</a>{});</div>\n-<div class=\"line\"><a id=\"l00259\" name=\"l00259\"></a><span class=\"lineno\"> 259</span> }</div>\n-<div class=\"line\"><a id=\"l00260\" name=\"l00260\"></a><span class=\"lineno\"> 260</span> </div>\n-<div class=\"line\"><a id=\"l00261\" name=\"l00261\"></a><span class=\"lineno\"> 261</span><span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00262\" name=\"l00262\"></a><span class=\"lineno\"> 262</span> </div>\n-<div class=\"line\"><a id=\"l00263\" name=\"l00263\"></a><span class=\"lineno\"> 263</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n-<div class=\"line\"><a id=\"l00264\" name=\"l00264\"></a><span class=\"lineno\"> 264</span> It <a class=\"code hl_function\" href=\"a01503.html#a82feeaac018c244e749e6310332e2a3a\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01503.html#a38b6a4eb5dc345ee88c046d107c9b811\">Node</a>& node, It multiIndices, <a class=\"code hl_struct\" href=\"a01419.html\">BasisFactory::FlatLexicographic</a>)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00265\" name=\"l00265\"></a><span class=\"lineno\"> 265</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00266\" name=\"l00266\"></a><span class=\"lineno\"> 266</span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> firstComponentOffset = 0;</div>\n-<div class=\"line\"><a id=\"l00267\" name=\"l00267\"></a><span class=\"lineno\"> 267</span> <span class=\"comment\">// Loop over all children</span></div>\n-<div class=\"line\"><a id=\"l00268\" name=\"l00268\"></a><span class=\"lineno\"> 268</span> Hybrid::forEach(<a class=\"code hl_typedef\" href=\"a01503.html#ac2d58cfa5b4b07bdfbec63a296c9a5d6\">ChildIndices</a>(), [&](<span class=\"keyword\">auto</span> child){</div>\n-<div class=\"line\"><a id=\"l00269\" name=\"l00269\"></a><span class=\"lineno\"> 269</span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> subTreeSize = node.child(child).<a class=\"code hl_function\" href=\"a01503.html#a907545160aa50ff2214aabada7979d1b\">size</a>();</div>\n-<div class=\"line\"><a id=\"l00270\" name=\"l00270\"></a><span class=\"lineno\"> 270</span> <span class=\"comment\">// Fill indices for current child into index buffer starting from current</span></div>\n-<div class=\"line\"><a id=\"l00271\" name=\"l00271\"></a><span class=\"lineno\"> 271</span> <span class=\"comment\">// buffer position and shift first index component of any index for current</span></div>\n-<div class=\"line\"><a id=\"l00272\" name=\"l00272\"></a><span class=\"lineno\"> 272</span> <span class=\"comment\">// child by suitable offset to get lexicographic indices.</span></div>\n-<div class=\"line\"><a id=\"l00273\" name=\"l00273\"></a><span class=\"lineno\"> 273</span> <a class=\"code hl_function\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">subPreBasis</a>(child).indices(node.child(child), multiIndices);</div>\n-<div class=\"line\"><a id=\"l00274\" name=\"l00274\"></a><span class=\"lineno\"> 274</span> <span class=\"keywordflow\">for</span> (std::size_t i = 0; i<subTreeSize; ++i)</div>\n-<div class=\"line\"><a id=\"l00275\" name=\"l00275\"></a><span class=\"lineno\"> 275</span> multiIndices[i][0] += firstComponentOffset;</div>\n-<div class=\"line\"><a id=\"l00276\" name=\"l00276\"></a><span class=\"lineno\"> 276</span> <span class=\"comment\">// Increment offset by the size for first index component of the current child</span></div>\n-<div class=\"line\"><a id=\"l00277\" name=\"l00277\"></a><span class=\"lineno\"> 277</span> firstComponentOffset += <a class=\"code hl_function\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">subPreBasis</a>(child).size();</div>\n-<div class=\"line\"><a id=\"l00278\" name=\"l00278\"></a><span class=\"lineno\"> 278</span> <span class=\"comment\">// Increment buffer iterator by the number of indices processed for current child</span></div>\n-<div class=\"line\"><a id=\"l00279\" name=\"l00279\"></a><span class=\"lineno\"> 279</span> multiIndices += subTreeSize;</div>\n-<div class=\"line\"><a id=\"l00280\" name=\"l00280\"></a><span class=\"lineno\"> 280</span> });</div>\n-<div class=\"line\"><a id=\"l00281\" name=\"l00281\"></a><span class=\"lineno\"> 281</span> <span class=\"keywordflow\">return</span> multiIndices;</div>\n-<div class=\"line\"><a id=\"l00282\" name=\"l00282\"></a><span class=\"lineno\"> 282</span> }</div>\n-<div class=\"line\"><a id=\"l00283\" name=\"l00283\"></a><span class=\"lineno\"> 283</span> </div>\n-<div class=\"line\"><a id=\"l00284\" name=\"l00284\"></a><span class=\"lineno\"> 284</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> MultiIndex></div>\n-<div class=\"line\"><a id=\"l00285\" name=\"l00285\"></a><span class=\"lineno\"> 285</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> multiIndexPushFront(MultiIndex& M, <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> M0)</div>\n-<div class=\"line\"><a id=\"l00286\" name=\"l00286\"></a><span class=\"lineno\"> 286</span> {</div>\n-<div class=\"line\"><a id=\"l00287\" name=\"l00287\"></a><span class=\"lineno\"> 287</span> M.resize(M.size()+1);</div>\n-<div class=\"line\"><a id=\"l00288\" name=\"l00288\"></a><span class=\"lineno\"> 288</span> <span class=\"keywordflow\">for</span>(std::size_t i=M.size()-1; i>0; --i)</div>\n-<div class=\"line\"><a id=\"l00289\" name=\"l00289\"></a><span class=\"lineno\"> 289</span> M[i] = M[i-1];</div>\n-<div class=\"line\"><a id=\"l00290\" name=\"l00290\"></a><span class=\"lineno\"> 290</span> M[0] = M0;</div>\n-<div class=\"line\"><a id=\"l00291\" name=\"l00291\"></a><span class=\"lineno\"> 291</span> }</div>\n-<div class=\"line\"><a id=\"l00292\" name=\"l00292\"></a><span class=\"lineno\"> 292</span> </div>\n-<div class=\"line\"><a id=\"l00293\" name=\"l00293\"></a><span class=\"lineno\"> 293</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> It></div>\n-<div class=\"line\"><a id=\"l00294\" name=\"l00294\"></a><span class=\"lineno\"> 294</span> It <a class=\"code hl_function\" href=\"a01503.html#a82feeaac018c244e749e6310332e2a3a\">indices</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01503.html#a38b6a4eb5dc345ee88c046d107c9b811\">Node</a>& node, It multiIndices, BasisFactory::BlockedLexicographic)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00295\" name=\"l00295\"></a><span class=\"lineno\"> 295</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00296\" name=\"l00296\"></a><span class=\"lineno\"> 296</span> <span class=\"comment\">// Loop over all children</span></div>\n-<div class=\"line\"><a id=\"l00297\" name=\"l00297\"></a><span class=\"lineno\"> 297</span> Hybrid::forEach(<a class=\"code hl_typedef\" href=\"a01503.html#ac2d58cfa5b4b07bdfbec63a296c9a5d6\">ChildIndices</a>(), [&](<span class=\"keyword\">auto</span> child){</div>\n-<div class=\"line\"><a id=\"l00298\" name=\"l00298\"></a><span class=\"lineno\"> 298</span> <a class=\"code hl_typedef\" href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">size_type</a> subTreeSize = node.child(child).<a class=\"code hl_function\" href=\"a01503.html#a907545160aa50ff2214aabada7979d1b\">size</a>();</div>\n-<div class=\"line\"><a id=\"l00299\" name=\"l00299\"></a><span class=\"lineno\"> 299</span> <span class=\"comment\">// Fill indices for current child into index buffer starting from current position</span></div>\n-<div class=\"line\"><a id=\"l00300\" name=\"l00300\"></a><span class=\"lineno\"> 300</span> <a class=\"code hl_function\" href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">subPreBasis</a>(child).indices(node.child(child), multiIndices);</div>\n-<div class=\"line\"><a id=\"l00301\" name=\"l00301\"></a><span class=\"lineno\"> 301</span> <span class=\"comment\">// Insert child index before first component of all indices of current child.</span></div>\n-<div class=\"line\"><a id=\"l00302\" name=\"l00302\"></a><span class=\"lineno\"> 302</span> <span class=\"keywordflow\">for</span> (std::size_t i = 0; i<subTreeSize; ++i)</div>\n-<div class=\"line\"><a id=\"l00303\" name=\"l00303\"></a><span class=\"lineno\"> 303</span> this->multiIndexPushFront(multiIndices[i], child);</div>\n-<div class=\"line\"><a id=\"l00304\" name=\"l00304\"></a><span class=\"lineno\"> 304</span> <span class=\"comment\">// Increment buffer iterator by the number of indices processed for current child</span></div>\n-<div class=\"line\"><a id=\"l00305\" name=\"l00305\"></a><span class=\"lineno\"> 305</span> multiIndices += subTreeSize;</div>\n-<div class=\"line\"><a id=\"l00306\" name=\"l00306\"></a><span class=\"lineno\"> 306</span> });</div>\n-<div class=\"line\"><a id=\"l00307\" name=\"l00307\"></a><span class=\"lineno\"> 307</span> <span class=\"keywordflow\">return</span> multiIndices;</div>\n-<div class=\"line\"><a id=\"l00308\" name=\"l00308\"></a><span class=\"lineno\"> 308</span> }</div>\n-<div class=\"line\"><a id=\"l00309\" name=\"l00309\"></a><span class=\"lineno\"> 309</span> </div>\n-<div class=\"line\"><a id=\"l00310\" name=\"l00310\"></a><span class=\"lineno\"> 310</span> std::tuple<SPB...> subPreBases_;</div>\n-<div class=\"line\"><a id=\"l00311\" name=\"l00311\"></a><span class=\"lineno\"> 311</span>};</div>\n-<div class=\"line\"><a id=\"l00312\" name=\"l00312\"></a><span class=\"lineno\"> 312</span> </div>\n-<div class=\"line\"><a id=\"l00313\" name=\"l00313\"></a><span class=\"lineno\"> 313</span> </div>\n-<div class=\"line\"><a id=\"l00314\" name=\"l00314\"></a><span class=\"lineno\"> 314</span> </div>\n-<div class=\"line\"><a id=\"l00315\" name=\"l00315\"></a><span class=\"lineno\"> 315</span><span class=\"keyword\">namespace </span>BasisFactory {</div>\n-<div class=\"line\"><a id=\"l00316\" name=\"l00316\"></a><span class=\"lineno\"> 316</span> </div>\n-<div class=\"line\"><a id=\"l00317\" name=\"l00317\"></a><span class=\"lineno\"> 317</span><span class=\"keyword\">namespace </span>Imp {</div>\n-<div class=\"line\"><a id=\"l00318\" name=\"l00318\"></a><span class=\"lineno\"> 318</span> </div>\n-<div class=\"line\"><a id=\"l00319\" name=\"l00319\"></a><span class=\"lineno\"> 319</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>IndexMergingStrategy, <span class=\"keyword\">class</span>... ChildPreBasisFactory></div>\n-<div class=\"line\"><a id=\"l00320\" name=\"l00320\"></a><span class=\"lineno\"> 320</span><span class=\"keyword\">class </span>CompositePreBasisFactory</div>\n-<div class=\"line\"><a id=\"l00321\" name=\"l00321\"></a><span class=\"lineno\"> 321</span>{</div>\n-<div class=\"line\"><a id=\"l00322\" name=\"l00322\"></a><span class=\"lineno\"> 322</span> </div>\n-<div class=\"line\"><a id=\"l00323\" name=\"l00323\"></a><span class=\"lineno\"> 323</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>GridView, <span class=\"keyword\">class</span>... ChildPreBasis></div>\n-<div class=\"line\"><a id=\"l00324\" name=\"l00324\"></a><span class=\"lineno\"> 324</span> <span class=\"keyword\">auto</span> makePreBasisFromChildPreBases(<span class=\"keyword\">const</span> GridView&, ChildPreBasis&&... childPreBasis)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00325\" name=\"l00325\"></a><span class=\"lineno\"> 325</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00326\" name=\"l00326\"></a><span class=\"lineno\"> 326</span> <span class=\"keywordflow\">return</span> CompositePreBasis<IndexMergingStrategy, std::decay_t<ChildPreBasis>...>(std::forward<ChildPreBasis>(childPreBasis)...);</div>\n-<div class=\"line\"><a id=\"l00327\" name=\"l00327\"></a><span class=\"lineno\"> 327</span> }</div>\n-<div class=\"line\"><a id=\"l00328\" name=\"l00328\"></a><span class=\"lineno\"> 328</span> </div>\n-<div class=\"line\"><a id=\"l00329\" name=\"l00329\"></a><span class=\"lineno\"> 329</span><span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00330\" name=\"l00330\"></a><span class=\"lineno\"> 330</span> </div>\n-<div class=\"line\"><a id=\"l00331\" name=\"l00331\"></a><span class=\"lineno\"> 331</span> CompositePreBasisFactory(<span class=\"keyword\">const</span> ChildPreBasisFactory&... childPreBasisFactory) :</div>\n-<div class=\"line\"><a id=\"l00332\" name=\"l00332\"></a><span class=\"lineno\"> 332</span> childPreBasisFactories_(childPreBasisFactory...)</div>\n-<div class=\"line\"><a id=\"l00333\" name=\"l00333\"></a><span class=\"lineno\"> 333</span> {}</div>\n-<div class=\"line\"><a id=\"l00334\" name=\"l00334\"></a><span class=\"lineno\"> 334</span> </div>\n-<div class=\"line\"><a id=\"l00335\" name=\"l00335\"></a><span class=\"lineno\"> 335</span> CompositePreBasisFactory(ChildPreBasisFactory&&... childPreBasisFactory) :</div>\n-<div class=\"line\"><a id=\"l00336\" name=\"l00336\"></a><span class=\"lineno\"> 336</span> childPreBasisFactories_(std::move(childPreBasisFactory)...)</div>\n-<div class=\"line\"><a id=\"l00337\" name=\"l00337\"></a><span class=\"lineno\"> 337</span> {}</div>\n-<div class=\"line\"><a id=\"l00338\" name=\"l00338\"></a><span class=\"lineno\"> 338</span> </div>\n-<div class=\"line\"><a id=\"l00339\" name=\"l00339\"></a><span class=\"lineno\"> 339</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Gr<span class=\"keywordtype\">id</span>View></div>\n-<div class=\"line\"><a id=\"l00340\" name=\"l00340\"></a><span class=\"lineno\"> 340</span> <span class=\"keyword\">auto</span> operator()(<span class=\"keyword\">const</span> GridView& gridView)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00341\" name=\"l00341\"></a><span class=\"lineno\"> 341</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00342\" name=\"l00342\"></a><span class=\"lineno\"> 342</span> <span class=\"comment\">// Use std::apply to unpack the tuple childPreBasisFactories_</span></div>\n-<div class=\"line\"><a id=\"l00343\" name=\"l00343\"></a><span class=\"lineno\"> 343</span> <span class=\"keywordflow\">return</span> std::apply([&](<span class=\"keyword\">const</span> <span class=\"keyword\">auto</span>&... childPreBasisFactory) {</div>\n-<div class=\"line\"><a id=\"l00344\" name=\"l00344\"></a><span class=\"lineno\"> 344</span> <span class=\"keywordflow\">return</span> this->makePreBasisFromChildPreBases(gridView, childPreBasisFactory(gridView)...);</div>\n-<div class=\"line\"><a id=\"l00345\" name=\"l00345\"></a><span class=\"lineno\"> 345</span> }, childPreBasisFactories_);</div>\n-<div class=\"line\"><a id=\"l00346\" name=\"l00346\"></a><span class=\"lineno\"> 346</span> }</div>\n-<div class=\"line\"><a id=\"l00347\" name=\"l00347\"></a><span class=\"lineno\"> 347</span> </div>\n-<div class=\"line\"><a id=\"l00348\" name=\"l00348\"></a><span class=\"lineno\"> 348</span><span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00349\" name=\"l00349\"></a><span class=\"lineno\"> 349</span> std::tuple<ChildPreBasisFactory...> childPreBasisFactories_;</div>\n-<div class=\"line\"><a id=\"l00350\" name=\"l00350\"></a><span class=\"lineno\"> 350</span>};</div>\n-<div class=\"line\"><a id=\"l00351\" name=\"l00351\"></a><span class=\"lineno\"> 351</span> </div>\n-<div class=\"line\"><a id=\"l00352\" name=\"l00352\"></a><span class=\"lineno\"> 352</span>} <span class=\"comment\">// end namespace BasisFactory::Imp</span></div>\n-<div class=\"line\"><a id=\"l00353\" name=\"l00353\"></a><span class=\"lineno\"> 353</span> </div>\n-<div class=\"line\"><a id=\"l00354\" name=\"l00354\"></a><span class=\"lineno\"> 354</span> </div>\n-<div class=\"line\"><a id=\"l00355\" name=\"l00355\"></a><span class=\"lineno\"> 355</span> </div>\n-<div class=\"line\"><a id=\"l00366\" name=\"l00366\"></a><span class=\"lineno\"> 366</span><span class=\"keyword\">template</span><</div>\n-<div class=\"line\"><a id=\"l00367\" name=\"l00367\"></a><span class=\"lineno\"> 367</span> <span class=\"keyword\">typename</span>... Args,</div>\n-<div class=\"line\"><a id=\"l00368\" name=\"l00368\"></a><span class=\"lineno\"> 368</span> std::enable_if_t<<a class=\"code hl_function\" href=\"a00220.html#a067e42f1ca7d6c4131518e5eb269da35\">Concept::isIndexMergingStrategy</a><<span class=\"keyword\">typename</span> LastType<Args...>::type>(),<span class=\"keywordtype\">int</span>> = 0></div>\n-<div class=\"line\"><a id=\"l00369\" name=\"l00369\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00213.html#ga0ee62f9744ec8ba58fdfc4c68df34449\"> 369</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00213.html#ga0ee62f9744ec8ba58fdfc4c68df34449\">composite</a>(Args&&... args)</div>\n-<div class=\"line\"><a id=\"l00370\" name=\"l00370\"></a><span class=\"lineno\"> 370</span>{</div>\n-<div class=\"line\"><a id=\"l00371\" name=\"l00371\"></a><span class=\"lineno\"> 371</span> <span class=\"comment\">// We have to separate the last entry which is the IndexMergingStrategy</span></div>\n-<div class=\"line\"><a id=\"l00372\" name=\"l00372\"></a><span class=\"lineno\"> 372</span> <span class=\"comment\">// and the preceding ones, which are the ChildPreBasisFactories</span></div>\n-<div class=\"line\"><a id=\"l00373\" name=\"l00373\"></a><span class=\"lineno\"> 373</span> </div>\n-<div class=\"line\"><a id=\"l00374\" name=\"l00374\"></a><span class=\"lineno\"> 374</span> <span class=\"keyword\">using </span>ArgTuple = std::tuple<std::decay_t<Args>...>;</div>\n-<div class=\"line\"><a id=\"l00375\" name=\"l00375\"></a><span class=\"lineno\"> 375</span> </div>\n-<div class=\"line\"><a id=\"l00376\" name=\"l00376\"></a><span class=\"lineno\"> 376</span> <span class=\"comment\">// Compute number of children and index of the IndexMergingStrategy argument</span></div>\n-<div class=\"line\"><a id=\"l00377\" name=\"l00377\"></a><span class=\"lineno\"> 377</span> <span class=\"keyword\">constexpr</span> std::size_t children = Dune::SizeOf<Args...>::value-1;</div>\n-<div class=\"line\"><a id=\"l00378\" name=\"l00378\"></a><span class=\"lineno\"> 378</span> </div>\n-<div class=\"line\"><a id=\"l00379\" name=\"l00379\"></a><span class=\"lineno\"> 379</span> <span class=\"comment\">// Use last type as IndexMergingStrategy</span></div>\n-<div class=\"line\"><a id=\"l00380\" name=\"l00380\"></a><span class=\"lineno\"> 380</span> <span class=\"keyword\">using </span><a class=\"code hl_struct\" href=\"a01415.html\">IndexMergingStrategy</a> = std::tuple_element_t<children, ArgTuple>;</div>\n-<div class=\"line\"><a id=\"l00381\" name=\"l00381\"></a><span class=\"lineno\"> 381</span> </div>\n-<div class=\"line\"><a id=\"l00382\" name=\"l00382\"></a><span class=\"lineno\"> 382</span> <span class=\"comment\">// Index sequence for all but the last entry for partial tuple unpacking</span></div>\n-<div class=\"line\"><a id=\"l00383\" name=\"l00383\"></a><span class=\"lineno\"> 383</span> <span class=\"keyword\">auto</span> childIndices = std::make_index_sequence<children>{};</div>\n-<div class=\"line\"><a id=\"l00384\" name=\"l00384\"></a><span class=\"lineno\"> 384</span> </div>\n-<div class=\"line\"><a id=\"l00385\" name=\"l00385\"></a><span class=\"lineno\"> 385</span> <span class=\"comment\">// Unpack tuple only for those entries related to children</span></div>\n-<div class=\"line\"><a id=\"l00386\" name=\"l00386\"></a><span class=\"lineno\"> 386</span> <span class=\"keywordflow\">return</span> applyPartial([](<span class=\"keyword\">auto</span>&&... childPreBasisFactory){</div>\n-<div class=\"line\"><a id=\"l00387\" name=\"l00387\"></a><span class=\"lineno\"> 387</span> <span class=\"keywordflow\">return</span> Imp::CompositePreBasisFactory<<a class=\"code hl_struct\" href=\"a01415.html\">IndexMergingStrategy</a>, std::decay_t<<span class=\"keyword\">decltype</span>(childPreBasisFactory)>...>(std::forward<<span class=\"keyword\">decltype</span>(childPreBasisFactory)>(childPreBasisFactory)...);</div>\n-<div class=\"line\"><a id=\"l00388\" name=\"l00388\"></a><span class=\"lineno\"> 388</span> },</div>\n-<div class=\"line\"><a id=\"l00389\" name=\"l00389\"></a><span class=\"lineno\"> 389</span> std::forward_as_tuple(std::forward<Args>(args)...),</div>\n-<div class=\"line\"><a id=\"l00390\" name=\"l00390\"></a><span class=\"lineno\"> 390</span> childIndices);</div>\n-<div class=\"line\"><a id=\"l00391\" name=\"l00391\"></a><span class=\"lineno\"> 391</span>}</div>\n-<div class=\"line\"><a id=\"l00392\" name=\"l00392\"></a><span class=\"lineno\"> 392</span> </div>\n-<div class=\"line\"><a id=\"l00404\" name=\"l00404\"></a><span class=\"lineno\"> 404</span><span class=\"keyword\">template</span><</div>\n-<div class=\"line\"><a id=\"l00405\" name=\"l00405\"></a><span class=\"lineno\"> 405</span> <span class=\"keyword\">typename</span>... Args,</div>\n-<div class=\"line\"><a id=\"l00406\" name=\"l00406\"></a><span class=\"lineno\"> 406</span> std::enable_if_t<not <a class=\"code hl_function\" href=\"a00220.html#a067e42f1ca7d6c4131518e5eb269da35\">Concept::isIndexMergingStrategy</a><<span class=\"keyword\">typename</span> <a class=\"code hl_struct\" href=\"a01383.html\">LastType</a><Args...>::type>(),<span class=\"keywordtype\">int</span>> = 0></div>\n-<div class=\"line\"><a id=\"l00407\" name=\"l00407\"></a><span class=\"lineno\"> 407</span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00213.html#ga0ee62f9744ec8ba58fdfc4c68df34449\">composite</a>(Args&&... args)</div>\n-<div class=\"line\"><a id=\"l00408\" name=\"l00408\"></a><span class=\"lineno\"> 408</span>{</div>\n-<div class=\"line\"><a id=\"l00409\" name=\"l00409\"></a><span class=\"lineno\"> 409</span> <span class=\"keywordflow\">return</span> Imp::CompositePreBasisFactory<BasisFactory::BlockedLexicographic, std::decay_t<Args>...>(std::forward<Args>(args)...);</div>\n-<div class=\"line\"><a id=\"l00410\" name=\"l00410\"></a><span class=\"lineno\"> 410</span>}</div>\n-<div class=\"line\"><a id=\"l00411\" name=\"l00411\"></a><span class=\"lineno\"> 411</span> </div>\n-<div class=\"line\"><a id=\"l00412\" name=\"l00412\"></a><span class=\"lineno\"> 412</span>} <span class=\"comment\">// end namespace BasisFactory</span></div>\n-<div class=\"line\"><a id=\"l00413\" name=\"l00413\"></a><span class=\"lineno\"> 413</span> </div>\n-<div class=\"line\"><a id=\"l00414\" name=\"l00414\"></a><span class=\"lineno\"> 414</span><span class=\"comment\">// Backward compatibility</span></div>\n-<div class=\"line\"><a id=\"l00415\" name=\"l00415\"></a><span class=\"lineno\"> 415</span><span class=\"keyword\">namespace </span>BasisBuilder {</div>\n-<div class=\"line\"><a id=\"l00416\" name=\"l00416\"></a><span class=\"lineno\"> 416</span> </div>\n-<div class=\"line\"><a id=\"l00417\" name=\"l00417\"></a><span class=\"lineno\"> 417</span> <span class=\"keyword\">using namespace </span>BasisFactory;</div>\n-<div class=\"line\"><a id=\"l00418\" name=\"l00418\"></a><span class=\"lineno\"> 418</span> </div>\n-<div class=\"line\"><a id=\"l00419\" name=\"l00419\"></a><span class=\"lineno\"> 419</span>}</div>\n-<div class=\"line\"><a id=\"l00420\" name=\"l00420\"></a><span class=\"lineno\"> 420</span> </div>\n-<div class=\"line\"><a id=\"l00421\" name=\"l00421\"></a><span class=\"lineno\"> 421</span> </div>\n-<div class=\"line\"><a id=\"l00422\" name=\"l00422\"></a><span class=\"lineno\"> 422</span> </div>\n-<div class=\"line\"><a id=\"l00423\" name=\"l00423\"></a><span class=\"lineno\"> 423</span>} <span class=\"comment\">// end namespace Functions</span></div>\n-<div class=\"line\"><a id=\"l00424\" name=\"l00424\"></a><span class=\"lineno\"> 424</span>} <span class=\"comment\">// end namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00425\" name=\"l00425\"></a><span class=\"lineno\"> 425</span> </div>\n-<div class=\"line\"><a id=\"l00426\" name=\"l00426\"></a><span class=\"lineno\"> 426</span> </div>\n-<div class=\"line\"><a id=\"l00427\" name=\"l00427\"></a><span class=\"lineno\"> 427</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH</span></div>\n-<div class=\"ttc\" id=\"aa00050_html\"><div class=\"ttname\"><a href=\"a00050.html\">utility.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00056_html\"><div class=\"ttname\"><a href=\"a00056.html\">staticforloop.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00092_html\"><div class=\"ttname\"><a href=\"a00092.html\">type_traits.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00119_html\"><div class=\"ttname\"><a href=\"a00119.html\">defaultglobalbasis.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00179_html\"><div class=\"ttname\"><a href=\"a00179.html\">basistags.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00191_html\"><div class=\"ttname\"><a href=\"a00191.html\">nodes.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00213_html_ga0ee62f9744ec8ba58fdfc4c68df34449\"><div class=\"ttname\"><a href=\"a00213.html#ga0ee62f9744ec8ba58fdfc4c68df34449\">Dune::Functions::BasisFactory::composite</a></div><div class=\"ttdeci\">auto composite(Args &&... args)</div><div class=\"ttdoc\">Create a factory builder that can build a CompositePreBasis.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:369</div></div>\n-<div class=\"ttc\" id=\"aa00215_html_ga673247dd74bcdd9e5acfc7735faf8a5b\"><div class=\"ttname\"><a href=\"a00215.html#ga673247dd74bcdd9e5acfc7735faf8a5b\">Dune::Functions::enableIfConstructible</a></div><div class=\"ttdeci\">typename std::enable_if< std::is_constructible< T, Args... >::value, int >::type enableIfConstructible</div><div class=\"ttdoc\">Helper to constrain forwarding constructors.</div><div class=\"ttdef\"><b>Definition:</b> type_traits.hh:26</div></div>\n+<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> </div>\n+<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH</span></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa00220_html_a067e42f1ca7d6c4131518e5eb269da35\"><div class=\"ttname\"><a href=\"a00220.html#a067e42f1ca7d6c4131518e5eb269da35\">Dune::Functions::Concept::isIndexMergingStrategy</a></div><div class=\"ttdeci\">static constexpr bool isIndexMergingStrategy()</div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:23</div></div>\n-<div class=\"ttc\" id=\"aa01383_html\"><div class=\"ttname\"><a href=\"a01383.html\">Dune::Functions::LastType</a></div><div class=\"ttdoc\">Get last entry of type list.</div><div class=\"ttdef\"><b>Definition:</b> utility.hh:222</div></div>\n-<div class=\"ttc\" id=\"aa01415_html\"><div class=\"ttname\"><a href=\"a01415.html\">Dune::Functions::BasisFactory::IndexMergingStrategy</a></div><div class=\"ttdoc\">Base class for index merging strategies to simplify detection.</div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:44</div></div>\n-<div class=\"ttc\" id=\"aa01419_html\"><div class=\"ttname\"><a href=\"a01419.html\">Dune::Functions::BasisFactory::FlatLexicographic</a></div><div class=\"ttdoc\">Lexicographic merging of direct children without blocking.</div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:80</div></div>\n-<div class=\"ttc\" id=\"aa01427_html\"><div class=\"ttname\"><a href=\"a01427.html\">Dune::Functions::BasisFactory::BlockedLexicographic</a></div><div class=\"ttdoc\">Lexicographic merging of direct children with blocking (i.e. creating one block per direct child).</div><div class=\"ttdef\"><b>Definition:</b> basistags.hh:148</div></div>\n-<div class=\"ttc\" id=\"aa01503_html\"><div class=\"ttname\"><a href=\"a01503.html\">Dune::Functions::CompositePreBasis</a></div><div class=\"ttdoc\">A pre-basis for composite bases.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:53</div></div>\n-<div class=\"ttc\" id=\"aa01503_html_a10433c71a9cc503c7ef174ed23f06a13\"><div class=\"ttname\"><a href=\"a01503.html#a10433c71a9cc503c7ef174ed23f06a13\">Dune::Functions::CompositePreBasis::subPreBasis</a></div><div class=\"ttdeci\">SubPreBasis< i > & subPreBasis(Dune::index_constant< i >={})</div><div class=\"ttdoc\">Mutable access to the stored prebasis of the factor in the power space.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:249</div></div>\n-<div class=\"ttc\" id=\"aa01503_html_a13b5ee8d5de52affa35662093b32de00\"><div class=\"ttname\"><a href=\"a01503.html#a13b5ee8d5de52affa35662093b32de00\">Dune::Functions::CompositePreBasis::IndexMergingStrategy</a></div><div class=\"ttdeci\">IMS IndexMergingStrategy</div><div class=\"ttdoc\">Strategy used to merge the global indices of the child pre-bases.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:71</div></div>\n-<div class=\"ttc\" id=\"aa01503_html_a29400a9b23aa71a87ce69a2b86ca4ce1\"><div class=\"ttname\"><a href=\"a01503.html#a29400a9b23aa71a87ce69a2b86ca4ce1\">Dune::Functions::CompositePreBasis::maxNodeSize</a></div><div class=\"ttdeci\">size_type maxNodeSize() const</div><div class=\"ttdoc\">Get the maximal number of DOFs associated to node for any element.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:230</div></div>\n-<div class=\"ttc\" id=\"aa01503_html_a2b525fdcdc6faa0551084c2c147dc92a\"><div class=\"ttname\"><a href=\"a01503.html#a2b525fdcdc6faa0551084c2c147dc92a\">Dune::Functions::CompositePreBasis::subPreBasis</a></div><div class=\"ttdeci\">const SubPreBasis< i > & subPreBasis(Dune::index_constant< i >={}) const</div><div class=\"ttdoc\">Const access to the stored prebasis of the factor in the power space.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:242</div></div>\n-<div class=\"ttc\" id=\"aa01503_html_a3193f75ae98cc4643fb767d9fe7c95b9\"><div class=\"ttname\"><a href=\"a01503.html#a3193f75ae98cc4643fb767d9fe7c95b9\">Dune::Functions::CompositePreBasis::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdoc\">Type used for indices and size information.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:68</div></div>\n-<div class=\"ttc\" id=\"aa01503_html_a38b6a4eb5dc345ee88c046d107c9b811\"><div class=\"ttname\"><a href=\"a01503.html#a38b6a4eb5dc345ee88c046d107c9b811\">Dune::Functions::CompositePreBasis::Node</a></div><div class=\"ttdeci\">CompositeBasisNode< typename SPB::Node... > Node</div><div class=\"ttdoc\">Template mapping root tree path to type of created tree node.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:81</div></div>\n-<div class=\"ttc\" id=\"aa01503_html_a406befa892b2d2d3f570ca32401c0b5e\"><div class=\"ttname\"><a href=\"a01503.html#a406befa892b2d2d3f570ca32401c0b5e\">Dune::Functions::CompositePreBasis::size</a></div><div class=\"ttdeci\">size_type size(const SizePrefix &prefix) const</div><div class=\"ttdoc\">Return number of possible values for next position in multi index.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:165</div></div>\n-<div class=\"ttc\" id=\"aa01503_html_a4530439b525f32c80febe548adb3f628\"><div class=\"ttname\"><a href=\"a01503.html#a4530439b525f32c80febe548adb3f628\">Dune::Functions::CompositePreBasis::CompositePreBasis</a></div><div class=\"ttdeci\">CompositePreBasis(SFArgs &&... sfArgs)</div><div class=\"ttdoc\">Constructor for given child pre-basis objects.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:95</div></div>\n-<div class=\"ttc\" id=\"aa01503_html_a5a2dc8e82bcce40460968aa8f97c1ceb\"><div class=\"ttname\"><a href=\"a01503.html#a5a2dc8e82bcce40460968aa8f97c1ceb\">Dune::Functions::CompositePreBasis::dimension</a></div><div class=\"ttdeci\">size_type dimension() const</div><div class=\"ttdoc\">Get the total dimension of the space spanned by this basis.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:219</div></div>\n-<div class=\"ttc\" id=\"aa01503_html_a76f2fc67456c26241e478b632e522b2c\"><div class=\"ttname\"><a href=\"a01503.html#a76f2fc67456c26241e478b632e522b2c\">Dune::Functions::CompositePreBasis::CompositePreBasis</a></div><div class=\"ttdeci\">CompositePreBasis(const GV &gv)</div><div class=\"ttdoc\">Constructor for given GridView.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:115</div></div>\n-<div class=\"ttc\" id=\"aa01503_html_a82feeaac018c244e749e6310332e2a3a\"><div class=\"ttname\"><a href=\"a01503.html#a82feeaac018c244e749e6310332e2a3a\">Dune::Functions::CompositePreBasis::indices</a></div><div class=\"ttdeci\">It indices(const Node &node, It it) const</div><div class=\"ttdoc\">Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:256</div></div>\n-<div class=\"ttc\" id=\"aa01503_html_a907545160aa50ff2214aabada7979d1b\"><div class=\"ttname\"><a href=\"a01503.html#a907545160aa50ff2214aabada7979d1b\">Dune::Functions::CompositePreBasis::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdoc\">Same as size(prefix) with empty prefix.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:158</div></div>\n-<div class=\"ttc\" id=\"aa01503_html_aa04cac815e90325c4ec524e0dc7b22ee\"><div class=\"ttname\"><a href=\"a01503.html#aa04cac815e90325c4ec524e0dc7b22ee\">Dune::Functions::CompositePreBasis::GridView</a></div><div class=\"ttdeci\">typename std::tuple_element_t< 0, SubPreBases >::GridView GridView</div><div class=\"ttdoc\">The grid view that the FE basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:65</div></div>\n-<div class=\"ttc\" id=\"aa01503_html_aa0689626cbb089b66e5932b4a4ed6a6e\"><div class=\"ttname\"><a href=\"a01503.html#aa0689626cbb089b66e5932b4a4ed6a6e\">Dune::Functions::CompositePreBasis::children</a></div><div class=\"ttdeci\">static const std::size_t children</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:74</div></div>\n-<div class=\"ttc\" id=\"aa01503_html_aa3fbd381a090703bb2f0ea3bde8a3031\"><div class=\"ttname\"><a href=\"a01503.html#aa3fbd381a090703bb2f0ea3bde8a3031\">Dune::Functions::CompositePreBasis::SubPreBases</a></div><div class=\"ttdeci\">std::tuple< SPB... > SubPreBases</div><div class=\"ttdoc\">Tuple of child pre-bases.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:58</div></div>\n-<div class=\"ttc\" id=\"aa01503_html_aa7aa72102c6058b4a640d61bbce06732\"><div class=\"ttname\"><a href=\"a01503.html#aa7aa72102c6058b4a640d61bbce06732\">Dune::Functions::CompositePreBasis::makeNode</a></div><div class=\"ttdeci\">Node makeNode() const</div><div class=\"ttdoc\">Create tree node.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:148</div></div>\n-<div class=\"ttc\" id=\"aa01503_html_aa8d56e734a40a838d9f1407caec24a2e\"><div class=\"ttname\"><a href=\"a01503.html#aa8d56e734a40a838d9f1407caec24a2e\">Dune::Functions::CompositePreBasis::initializeIndices</a></div><div class=\"ttdeci\">void initializeIndices()</div><div class=\"ttdoc\">Initialize the global indices.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:124</div></div>\n-<div class=\"ttc\" id=\"aa01503_html_ab02c441bc5d90d3b584df84e606582a7\"><div class=\"ttname\"><a href=\"a01503.html#ab02c441bc5d90d3b584df84e606582a7\">Dune::Functions::CompositePreBasis::SubPreBasis</a></div><div class=\"ttdeci\">std::tuple_element_t< i, SubPreBases > SubPreBasis</div><div class=\"ttdoc\">Export individual child pre-bases by index.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:62</div></div>\n-<div class=\"ttc\" id=\"aa01503_html_ac2d58cfa5b4b07bdfbec63a296c9a5d6\"><div class=\"ttname\"><a href=\"a01503.html#ac2d58cfa5b4b07bdfbec63a296c9a5d6\">Dune::Functions::CompositePreBasis::ChildIndices</a></div><div class=\"ttdeci\">std::make_index_sequence< children > ChildIndices</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:76</div></div>\n-<div class=\"ttc\" id=\"aa01503_html_ac5a69d51a76acbc5edb4fa55c97aa26c\"><div class=\"ttname\"><a href=\"a01503.html#ac5a69d51a76acbc5edb4fa55c97aa26c\">Dune::Functions::CompositePreBasis::update</a></div><div class=\"ttdeci\">void update(const GridView &gv)</div><div class=\"ttdoc\">Update the stored grid view, to be called if the grid has changed.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:138</div></div>\n-<div class=\"ttc\" id=\"aa01503_html_ad57d4c09c40d5a87d3e899a2c2df0f35\"><div class=\"ttname\"><a href=\"a01503.html#ad57d4c09c40d5a87d3e899a2c2df0f35\">Dune::Functions::CompositePreBasis::multiIndexBufferSize</a></div><div class=\"ttdeci\">static constexpr size_type multiIndexBufferSize</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:85</div></div>\n-<div class=\"ttc\" id=\"aa01503_html_aebc2c16cfb6f0e3f2e73ca2e3d028b58\"><div class=\"ttname\"><a href=\"a01503.html#aebc2c16cfb6f0e3f2e73ca2e3d028b58\">Dune::Functions::CompositePreBasis::gridView</a></div><div class=\"ttdeci\">const GridView & gridView() const</div><div class=\"ttdoc\">Obtain the grid view that the basis is defined on.</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:132</div></div>\n-<div class=\"ttc\" id=\"aa01503_html_aee4f8b5f159f44d9a0fc61c60c615c19\"><div class=\"ttname\"><a href=\"a01503.html#aee4f8b5f159f44d9a0fc61c60c615c19\">Dune::Functions::CompositePreBasis::minMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type minMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:84</div></div>\n-<div class=\"ttc\" id=\"aa01503_html_affd187f58c7f8a750b11ab48abc3d94e\"><div class=\"ttname\"><a href=\"a01503.html#affd187f58c7f8a750b11ab48abc3d94e\">Dune::Functions::CompositePreBasis::maxMultiIndexSize</a></div><div class=\"ttdeci\">static constexpr size_type maxMultiIndexSize</div><div class=\"ttdef\"><b>Definition:</b> compositebasis.hh:83</div></div>\n-<div class=\"ttc\" id=\"aa01719_html\"><div class=\"ttname\"><a href=\"a01719.html\">Dune::Functions::CompositeBasisNode</a></div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:219</div></div>\n+<div class=\"ttc\" id=\"aa00219_html_a17589fdc18b015644525c7ad037e6441\"><div class=\"ttname\"><a href=\"a00219.html#a17589fdc18b015644525c7ad037e6441\">Dune::Functions::SubspaceBasis</a></div><div class=\"ttdeci\">SubspaceBasis(const RB &, const TP) -> SubspaceBasis< RB, TP ></div></div>\n+<div class=\"ttc\" id=\"aa01807_html\"><div class=\"ttname\"><a href=\"a01807.html\">Dune::Functions::SubspaceBasis</a></div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:38</div></div>\n+<div class=\"ttc\" id=\"aa01807_html_a6e7dd708494382dad7cc288ce6cfe6b8\"><div class=\"ttname\"><a href=\"a01807.html#a6e7dd708494382dad7cc288ce6cfe6b8\">Dune::Functions::SubspaceBasis::GridView</a></div><div class=\"ttdeci\">typename RootBasis::GridView GridView</div><div class=\"ttdoc\">The grid view that the FE space is defined on.</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:48</div></div>\n+<div class=\"ttc\" id=\"aa01807_html_a7c1756f78b770fbbe6937b8a146cdc81\"><div class=\"ttname\"><a href=\"a01807.html#a7c1756f78b770fbbe6937b8a146cdc81\">Dune::Functions::SubspaceBasis::prefixPath</a></div><div class=\"ttdeci\">const PrefixPath & prefixPath() const</div><div class=\"ttdef\"><b>Definition:</b> subspacebasis.hh:118</div></div>\n+<div class=\"ttc\" id=\"aa01811_html\"><div class=\"ttname\"><a href=\"a01811.html\">Dune::Functions::SubspaceLocalView</a></div><div class=\"ttdoc\">The restriction of a finite element basis to a single element.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:30</div></div>\n+<div class=\"ttc\" id=\"aa01811_html_a04b95239bc90b94a1332233663446cd2\"><div class=\"ttname\"><a href=\"a01811.html#a04b95239bc90b94a1332233663446cd2\">Dune::Functions::SubspaceLocalView::Tree</a></div><div class=\"ttdeci\">typename TypeTree::ChildForTreePath< RootTree, PrefixPath > Tree</div><div class=\"ttdoc\">Tree of local finite elements / local shape function sets.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:53</div></div>\n+<div class=\"ttc\" id=\"aa01811_html_a210cb18bf65e34f621e0bffd6cb19384\"><div class=\"ttname\"><a href=\"a01811.html#a210cb18bf65e34f621e0bffd6cb19384\">Dune::Functions::SubspaceLocalView::unbind</a></div><div class=\"ttdeci\">void unbind()</div><div class=\"ttdoc\">Unbind from the current element.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:89</div></div>\n+<div class=\"ttc\" id=\"aa01811_html_a2d7c1e74433fb663cbed0c2ab6fc7198\"><div class=\"ttname\"><a href=\"a01811.html#a2d7c1e74433fb663cbed0c2ab6fc7198\">Dune::Functions::SubspaceLocalView::element</a></div><div class=\"ttdeci\">const Element & element() const</div><div class=\"ttdoc\">Return the grid element that the view is bound to.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:80</div></div>\n+<div class=\"ttc\" id=\"aa01811_html_a2fb2643d53fb7511f2eb6ddff751043c\"><div class=\"ttname\"><a href=\"a01811.html#a2fb2643d53fb7511f2eb6ddff751043c\">Dune::Functions::SubspaceLocalView::globalBasis_</a></div><div class=\"ttdeci\">const GlobalBasis * globalBasis_</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:147</div></div>\n+<div class=\"ttc\" id=\"aa01811_html_a31341266e49615ffc56949f471bb61a8\"><div class=\"ttname\"><a href=\"a01811.html#a31341266e49615ffc56949f471bb61a8\">Dune::Functions::SubspaceLocalView::bound</a></div><div class=\"ttdeci\">bool bound() const</div><div class=\"ttdoc\">Return if the view is bound to a grid element.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:96</div></div>\n+<div class=\"ttc\" id=\"aa01811_html_a332b6754582b1108ef353b1b78ae01a3\"><div class=\"ttname\"><a href=\"a01811.html#a332b6754582b1108ef353b1b78ae01a3\">Dune::Functions::SubspaceLocalView::MultiIndex</a></div><div class=\"ttdeci\">typename RootLocalView::MultiIndex MultiIndex</div><div class=\"ttdoc\">Type used for global numbering of the basis vectors.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:56</div></div>\n+<div class=\"ttc\" id=\"aa01811_html_a3bd132c98fd23a67c253c9475540ac90\"><div class=\"ttname\"><a href=\"a01811.html#a3bd132c98fd23a67c253c9475540ac90\">Dune::Functions::SubspaceLocalView::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdoc\">Total number of degrees of freedom on this element.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:112</div></div>\n+<div class=\"ttc\" id=\"aa01811_html_a6db2abe3c910a2aad3a91f732e34c95a\"><div class=\"ttname\"><a href=\"a01811.html#a6db2abe3c910a2aad3a91f732e34c95a\">Dune::Functions::SubspaceLocalView::rootLocalView_</a></div><div class=\"ttdeci\">RootLocalView rootLocalView_</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:148</div></div>\n+<div class=\"ttc\" id=\"aa01811_html_a8d67dd96c63054ab2caccf7c50975838\"><div class=\"ttname\"><a href=\"a01811.html#a8d67dd96c63054ab2caccf7c50975838\">Dune::Functions::SubspaceLocalView::bind</a></div><div class=\"ttdeci\">void bind(const Element &e)</div><div class=\"ttdoc\">Bind the view to a grid element.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:71</div></div>\n+<div class=\"ttc\" id=\"aa01811_html_aa050bf0c521425f496729c3947a61bae\"><div class=\"ttname\"><a href=\"a01811.html#aa050bf0c521425f496729c3947a61bae\">Dune::Functions::SubspaceLocalView::GridView</a></div><div class=\"ttdeci\">typename GlobalBasis::GridView GridView</div><div class=\"ttdoc\">The grid view the global FE basis lives on.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:41</div></div>\n+<div class=\"ttc\" id=\"aa01811_html_aa0d1d0d89f2dd443da6da8d77f6a344f\"><div class=\"ttname\"><a href=\"a01811.html#aa0d1d0d89f2dd443da6da8d77f6a344f\">Dune::Functions::SubspaceLocalView::SubspaceLocalView</a></div><div class=\"ttdeci\">SubspaceLocalView(const GlobalBasis &globalBasis, const PrefixPath &)</div><div class=\"ttdoc\">Construct local view for a given global finite element basis.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:59</div></div>\n+<div class=\"ttc\" id=\"aa01811_html_aa1f3b0a89f5d186299ed0a5329562815\"><div class=\"ttname\"><a href=\"a01811.html#aa1f3b0a89f5d186299ed0a5329562815\">Dune::Functions::SubspaceLocalView::RootLocalView</a></div><div class=\"ttdeci\">RLV RootLocalView</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:35</div></div>\n+<div class=\"ttc\" id=\"aa01811_html_aa28ae73e021d001a954cafe23c570900\"><div class=\"ttname\"><a href=\"a01811.html#aa28ae73e021d001a954cafe23c570900\">Dune::Functions::SubspaceLocalView::rootLocalView</a></div><div class=\"ttdeci\">const RootLocalView & rootLocalView() const</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:141</div></div>\n+<div class=\"ttc\" id=\"aa01811_html_aa53cfe0f5da6f163c89cfe7efd03977d\"><div class=\"ttname\"><a href=\"a01811.html#aa53cfe0f5da6f163c89cfe7efd03977d\">Dune::Functions::SubspaceLocalView::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdoc\">The type used for sizes.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:47</div></div>\n+<div class=\"ttc\" id=\"aa01811_html_aa8331a332fffea09e3bddd41d3d0530b\"><div class=\"ttname\"><a href=\"a01811.html#aa8331a332fffea09e3bddd41d3d0530b\">Dune::Functions::SubspaceLocalView::Element</a></div><div class=\"ttdeci\">typename GridView::template Codim< 0 >::Entity Element</div><div class=\"ttdoc\">Type of the grid element we are bound to.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:44</div></div>\n+<div class=\"ttc\" id=\"aa01811_html_ab86e2da3d257ff25f989a0b51dd7fa95\"><div class=\"ttname\"><a href=\"a01811.html#ab86e2da3d257ff25f989a0b51dd7fa95\">Dune::Functions::SubspaceLocalView::globalBasis</a></div><div class=\"ttdeci\">const GlobalBasis & globalBasis() const</div><div class=\"ttdoc\">Return the global basis that we are a view on.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:136</div></div>\n+<div class=\"ttc\" id=\"aa01811_html_ac553ded1a00894bfb703f41a86f8ce06\"><div class=\"ttname\"><a href=\"a01811.html#ac553ded1a00894bfb703f41a86f8ce06\">Dune::Functions::SubspaceLocalView::maxSize</a></div><div class=\"ttdeci\">size_type maxSize() const</div><div class=\"ttdoc\">Maximum local size for any element on the GridView.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:123</div></div>\n+<div class=\"ttc\" id=\"aa01811_html_acd8c1a7b0ab5a820590b96e441524c06\"><div class=\"ttname\"><a href=\"a01811.html#acd8c1a7b0ab5a820590b96e441524c06\">Dune::Functions::SubspaceLocalView::tree</a></div><div class=\"ttdeci\">const Tree & tree() const</div><div class=\"ttdoc\">Return the local ansatz tree associated to the bound entity.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:105</div></div>\n+<div class=\"ttc\" id=\"aa01811_html_adb5c1fb9c9e3eb19ebb3333e4401f9aa\"><div class=\"ttname\"><a href=\"a01811.html#adb5c1fb9c9e3eb19ebb3333e4401f9aa\">Dune::Functions::SubspaceLocalView::index</a></div><div class=\"ttdeci\">MultiIndex index(size_type i) const</div><div class=\"ttdoc\">Maps from subtree index set [0..size-1] to a globally unique multi index in global basis.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:129</div></div>\n+<div class=\"ttc\" id=\"aa01811_html_ae4f87d4a8978c25f211132aa6001290c\"><div class=\"ttname\"><a href=\"a01811.html#ae4f87d4a8978c25f211132aa6001290c\">Dune::Functions::SubspaceLocalView::RootTree</a></div><div class=\"ttdeci\">typename RootLocalView::Tree RootTree</div><div class=\"ttdoc\">Tree of local finite elements / local shape function sets.</div><div class=\"ttdef\"><b>Definition:</b> subspacelocalview.hh:50</div></div>\n <div class=\"ttc\" id=\"aa02876_html\"><div class=\"ttname\"><a href=\"a02876.html\">concepts.hh</a></div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -5,541 +5,228 @@\n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n * functionspacebases\n-compositebasis.hh\n+subspacelocalview.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH\n- 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH\n+ 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH\n+ 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH\n 5\n- 6#include <tuple>\n- 7#include <utility>\n+ 6\n+ 7#include <tuple>\n 8\n- 9#include <dune/common/std/apply.hh>\n- 10#include <dune/common/hybridutilities.hh>\n- 11#include <dune/common/reservedvector.hh>\n- 12#include <dune/common/typeutilities.hh>\n- 13#include <dune/common/hybridutilities.hh>\n- 14#include <dune/common/tupleutility.hh>\n- 15#include <dune/common/tuplevector.hh>\n+ 9#include <dune/common/concept.hh>\n+ 10\n+ 11#include <dune/typetree/childextraction.hh>\n+ 12\n+ 13#include <dune/functions/functionspacebases/concepts.hh>\n+ 14\n+ 15\n 16\n- 17#include <dune/functions/common/staticforloop.hh>\n- 18#include <dune/functions/common/type_traits.hh>\n- 19#include <dune/functions/common/utility.hh>\n- 20#include <dune/functions/functionspacebases/basistags.hh>\n- 21#include <dune/functions/functionspacebases/nodes.hh>\n- 22#include <dune/functions/functionspacebases/concepts.hh>\n- 23#include <dune/functions/functionspacebases/defaultglobalbasis.hh>\n+ 17namespace Dune {\n+ 18namespace Functions {\n+ 19\n+ 20\n+ 21\n+ 22template<class RB, class PP>\n+ 23class SubspaceBasis;\n 24\n 25\n- 26namespace Dune {\n- 27namespace Functions {\n- 28\n- 29/\n-/ *****************************************************************************\n- 30// This is the reusable part of the composite bases. It contains\n- 31//\n- 32// CompositePreBasis\n- 33//\n- 34// The pre-basis allows to create the others and is the owner of possible\n-shared\n- 35// state. These components do _not_ depend on the global basis and local\n-view\n- 36// and can be used without a global basis.\n- 37/\n-/ *****************************************************************************\n- 38\n+ 26\n+ 28template<class RLV, class PP>\n+29class SubspaceLocalView\n+ 30{\n+ 31 using PrefixPath = PP;\n+ 32\n+ 33public:\n+ 34\n+35 using RootLocalView = RLV;\n+ 36\n+38 using GlobalBasis = SubspaceBasis<typename_RootLocalView::GlobalBasis,\n+PrefixPath>;\n 39\n- 51template<class IMS, class... SPB>\n-52class CompositePreBasis\n- 53{\n- 54 static const bool isBlocked = std::is_same_v<IMS,BasisFactory::\n-BlockedLexicographic> or std::is_same_v<IMS,BasisFactory::BlockedInterleaved>;\n- 55public:\n- 56\n-58 using SubPreBases = std::tuple<SPB...>;\n- 59\n- 61 template<std::size_t i>\n-62 using SubPreBasis = std::tuple_element_t<i, SubPreBases>;\n- 63\n-65 using GridView = typename std::tuple_element_t<0, SubPreBases>::GridView;\n- 66\n-68 using size_type = std::size_t;\n- 69\n-71 using IndexMergingStrategy = IMS;\n- 72\n- 73protected:\n-74 static const std::size_t children = sizeof...(SPB);\n+41 using GridView = typename GlobalBasis::GridView;\n+ 42\n+44 using Element = typename GridView::template Codim<0>::Entity;\n+ 45\n+47 using size_type = std::size_t;\n+ 48\n+50 using RootTree = typename RootLocalView::Tree;\n+ 51\n+53 using Tree = typename TypeTree::ChildForTreePath<RootTree, PrefixPath>;\n+ 54\n+56 using MultiIndex = typename RootLocalView::MultiIndex;\n+ 57\n+59 SubspaceLocalView(const GlobalBasis& globalBasis, const PrefixPath& /\n+*prefixPath*/) :\n+ 60 globalBasis_(&globalBasis),\n+ 61 rootLocalView_(globalBasis.rootBasis().localView())\n+ 62 {\n+ 63// static_assert(models<Concept::BasisTree<GridView>, Tree>(), \"Tree type\n+passed to SubspaceLocalView does not model the BasisNode concept.\");\n+ 64 }\n+ 65\n+71 void bind(const Element& e)\n+ 72 {\n+ 73 rootLocalView_.bind(e);\n+ 74 }\n 75\n-76 using ChildIndices = std::make_index_sequence<children>;\n- 77\n- 78public:\n- 79\n-81 using Node = CompositeBasisNode<typename SPB::Node...>;\n- 82\n-83 static constexpr size_type maxMultiIndexSize = std::max({SPB::\n-maxMultiIndexSize...}) + isBlocked;\n-84 static constexpr size_type minMultiIndexSize = std::min({SPB::\n-minMultiIndexSize...}) + isBlocked;\n-85 static constexpr size_type multiIndexBufferSize = std::max({SPB::\n-multiIndexBufferSize...}) + isBlocked;\n- 86\n- 92 template<class... SFArgs,\n- 93 disableCopyMove<CompositePreBasis, SFArgs...> = 0,\n- 94 enableIfConstructible<std::tuple<SPB...>, SFArgs...> = 0>\n-95 CompositePreBasis(SFArgs&&... sfArgs) :\n- 96 subPreBases_(std::forward<SFArgs>(sfArgs)...)\n+80 const Element& element() const\n+ 81 {\n+ 82 return rootLocalView_.element();\n+ 83 }\n+ 84\n+89 void unbind()\n+ 90 {\n+ 91 rootLocalView_.unbind();\n+ 92 }\n+ 93\n+96 bool bound() const\n 97 {\n- 98 Hybrid::forEach(subPreBases_, [&](const auto& subPreBasis){\n- 99 static_assert(models<Concept::PreBasis<GridView>, std::decay_t<decltype\n-(subPreBasis)>>(), \"Subprebases passed to CompositePreBasis does not model the\n-PreBasis concept.\");\n- 100 });\n- 101 }\n- 102\n- 109 template<class GV,\n- 110 std::enable_if_t<std::conjunction_v<\n- 111 std::bool_constant<(children > 1)>, // Avoid ambiguous constructor if\n-there's only one child\n- 112 std::is_same<GV, GridView>,\n- 113 std::is_constructible<SPB, GridView>...\n- 114 >, int> = 0>\n-115 CompositePreBasis(const GV& gv) :\n- 116 subPreBases_(SPB(gv)...)\n- 117 {\n- 118 Hybrid::forEach(subPreBases_, [&](const auto& subPreBasis){\n- 119 static_assert(models<Concept::PreBasis<GridView>, std::decay_t<decltype\n-(subPreBasis)>>(), \"Subprebases passed to CompositePreBasis does not model the\n-PreBasis concept.\");\n- 120 });\n- 121 }\n- 122\n-124 void initializeIndices()\n- 125 {\n- 126 Hybrid::forEach(ChildIndices(), [&](auto i) {\n- 127 this->subPreBasis(i).initializeIndices();\n- 128 });\n- 129 }\n- 130\n-132 const GridView& gridView() const\n- 133 {\n- 134 return std::get<0>(subPreBases_).gridView();\n- 135 }\n- 136\n-138 void update(const GridView& gv)\n- 139 {\n- 140 Hybrid::forEach(ChildIndices(), [&](auto i) {\n- 141 this->subPreBasis(i).update(gv);\n- 142 });\n- 143 }\n- 144\n-148 Node makeNode() const\n- 149 {\n- 150 auto node = Node{};\n- 151 Hybrid::forEach(ChildIndices(), [&](auto i) {\n- 152 node.setChild(this->subPreBasis(i).makeNode(), i);\n- 153 });\n- 154 return node;\n- 155 }\n+ 98 return rootLocalView_.bound();\n+ 99 }\n+ 100\n+105 const Tree& tree() const\n+ 106 {\n+ 107 return TypeTree::child(rootLocalView_.tree(), globalBasis_->prefixPath());\n+ 108 }\n+ 109\n+112 size_type size() const\n+ 113 {\n+ 114 return rootLocalView_.size();\n+ 115 }\n+ 116\n+123 size_type maxSize() const\n+ 124 {\n+ 125 return rootLocalView_.maxSize();\n+ 126 }\n+ 127\n+129 MultiIndex index(size_type i) const\n+ 130 {\n+ 131 return rootLocalView_.index(i);\n+ 132 }\n+ 133\n+136 const GlobalBasis& globalBasis() const\n+ 137 {\n+ 138 return *globalBasis_;\n+ 139 }\n+ 140\n+141 const RootLocalView& rootLocalView() const\n+ 142 {\n+ 143 return rootLocalView_;\n+ 144 }\n+ 145\n+ 146protected:\n+147 const GlobalBasis* globalBasis_;\n+148 RootLocalView rootLocalView_;\n+ 149};\n+ 150\n+ 151\n+ 152\n+ 153} // end namespace Functions\n+ 154} // end namespace Dune\n+ 155\n 156\n-158 size_type size() const\n- 159 {\n- 160 return size(Dune::ReservedVector<size_type, multiIndexBufferSize>{});\n- 161 }\n- 162\n- 164 template<class SizePrefix>\n-165 size_type size(const SizePrefix& prefix) const\n- 166 {\n- 167 return size(prefix, IndexMergingStrategy{});\n- 168 }\n- 169\n- 170private:\n- 171\n- 172 template<class SizePrefix>\n- 173 size_type size(const SizePrefix& prefix, BasisFactory::\n-BlockedLexicographic) const\n- 174 {\n- 175 if (prefix.size() == 0)\n- 176 return children;\n- 177\n- 178 return Hybrid::switchCases(ChildIndices(), prefix[0], [&] (auto i) {\n- 179 SizePrefix subPrefix;\n- 180 for(std::size_t i=1; i<prefix.size(); ++i)\n- 181 subPrefix.push_back(prefix[i]);\n- 182 return this->subPreBasis(i).size(subPrefix);\n- 183 }, []() {\n- 184 return size_type(0);\n- 185 });\n- 186 }\n- 187\n- 188 template<class SizePrefix>\n- 189 size_type size(const SizePrefix& prefix, BasisFactory::FlatLexicographic)\n-const\n- 190 {\n- 191 size_type result = 0;\n- 192 if (prefix.size() == 0)\n- 193 Hybrid::forEach(ChildIndices(), [&](auto i) {\n- 194 result += this->subPreBasis(i).size();\n- 195 });\n- 196 else {\n- 197 size_type shiftedFirstDigit = prefix[0];\n- 198 staticFindInRange<0, children>([&](auto i) {\n- 199 auto firstDigitSize = this->subPreBasis(i).size();\n- 200 if (shiftedFirstDigit < firstDigitSize)\n- 201 {\n- 202 SizePrefix subPrefix;\n- 203 subPrefix.push_back(shiftedFirstDigit);\n- 204 for(std::size_t i=1; i<prefix.size(); ++i)\n- 205 subPrefix.push_back(prefix[i]);\n- 206 result = this->subPreBasis(i).size(subPrefix);\n- 207 return true;\n- 208 }\n- 209 shiftedFirstDigit -= firstDigitSize;\n- 210 return false;\n- 211 });\n- 212 }\n- 213 return result;\n- 214 }\n- 215\n- 216public:\n- 217\n-219 size_type dimension() const\n- 220 {\n- 221 size_type r=0;\n- 222 // Accumulate dimension() for all subprebases\n- 223 Hybrid::forEach(ChildIndices(), [&](auto i) {\n- 224 r += this->subPreBasis(i).dimension();\n- 225 });\n- 226 return r;\n- 227 }\n- 228\n-230 size_type maxNodeSize() const\n- 231 {\n- 232 size_type r=0;\n- 233 // Accumulate maxNodeSize() for all subprebases\n- 234 Hybrid::forEach(ChildIndices(), [&](auto i) {\n- 235 r += this->subPreBasis(i).maxNodeSize();\n- 236 });\n- 237 return r;\n- 238 }\n- 239\n- 241 template<std::size_t i>\n-242 const SubPreBasis<i>& subPreBasis(Dune::index_constant<i> = {}) const\n- 243 {\n- 244 return std::get<i>(subPreBases_);\n- 245 }\n- 246\n- 248 template<std::size_t i>\n-249 SubPreBasis<i>& subPreBasis(Dune::index_constant<i> = {})\n- 250 {\n- 251 return std::get<i>(subPreBases_);\n- 252 }\n- 253\n- 255 template<typename It>\n-256 It indices(const Node& node, It it) const\n- 257 {\n- 258 return indices(node, it, IndexMergingStrategy{});\n- 259 }\n- 260\n- 261private:\n- 262\n- 263 template<typename It>\n- 264 It indices(const Node& node, It multiIndices, BasisFactory::\n-FlatLexicographic) const\n- 265 {\n- 266 size_type firstComponentOffset = 0;\n- 267 // Loop over all children\n- 268 Hybrid::forEach(ChildIndices(), [&](auto child){\n- 269 size_type subTreeSize = node.child(child).size();\n- 270 // Fill indices for current child into index buffer starting from current\n- 271 // buffer position and shift first index component of any index for\n-current\n- 272 // child by suitable offset to get lexicographic indices.\n- 273 subPreBasis(child).indices(node.child(child), multiIndices);\n- 274 for (std::size_t i = 0; i<subTreeSize; ++i)\n- 275 multiIndices[i][0] += firstComponentOffset;\n- 276 // Increment offset by the size for first index component of the current\n-child\n- 277 firstComponentOffset += subPreBasis(child).size();\n- 278 // Increment buffer iterator by the number of indices processed for\n-current child\n- 279 multiIndices += subTreeSize;\n- 280 });\n- 281 return multiIndices;\n- 282 }\n- 283\n- 284 template<class MultiIndex>\n- 285 static void multiIndexPushFront(MultiIndex& M, size_type M0)\n- 286 {\n- 287 M.resize(M.size()+1);\n- 288 for(std::size_t i=M.size()-1; i>0; --i)\n- 289 M[i] = M[i-1];\n- 290 M[0] = M0;\n- 291 }\n- 292\n- 293 template<typename It>\n- 294 It indices(const Node& node, It multiIndices, BasisFactory::\n-BlockedLexicographic) const\n- 295 {\n- 296 // Loop over all children\n- 297 Hybrid::forEach(ChildIndices(), [&](auto child){\n- 298 size_type subTreeSize = node.child(child).size();\n- 299 // Fill indices for current child into index buffer starting from current\n-position\n- 300 subPreBasis(child).indices(node.child(child), multiIndices);\n- 301 // Insert child index before first component of all indices of current\n-child.\n- 302 for (std::size_t i = 0; i<subTreeSize; ++i)\n- 303 this->multiIndexPushFront(multiIndices[i], child);\n- 304 // Increment buffer iterator by the number of indices processed for\n-current child\n- 305 multiIndices += subTreeSize;\n- 306 });\n- 307 return multiIndices;\n- 308 }\n- 309\n- 310 std::tuple<SPB...> subPreBases_;\n- 311};\n- 312\n- 313\n- 314\n- 315namespace BasisFactory {\n- 316\n- 317namespace Imp {\n- 318\n- 319template<class IndexMergingStrategy, class... ChildPreBasisFactory>\n- 320class CompositePreBasisFactory\n- 321{\n- 322\n- 323 template<class GridView, class... ChildPreBasis>\n- 324 auto makePreBasisFromChildPreBases(const GridView&, ChildPreBasis&&...\n-childPreBasis) const\n- 325 {\n- 326 return CompositePreBasis<IndexMergingStrategy, std::\n-decay_t<ChildPreBasis>...>(std::forward<ChildPreBasis>(childPreBasis)...);\n- 327 }\n- 328\n- 329public:\n- 330\n- 331 CompositePreBasisFactory(const ChildPreBasisFactory&...\n-childPreBasisFactory) :\n- 332 childPreBasisFactories_(childPreBasisFactory...)\n- 333 {}\n- 334\n- 335 CompositePreBasisFactory(ChildPreBasisFactory&&... childPreBasisFactory) :\n- 336 childPreBasisFactories_(std::move(childPreBasisFactory)...)\n- 337 {}\n- 338\n- 339 template<class GridView>\n- 340 auto operator()(const GridView& gridView) const\n- 341 {\n- 342 // Use std::apply to unpack the tuple childPreBasisFactories_\n- 343 return std::apply([&](const auto&... childPreBasisFactory) {\n- 344 return this->makePreBasisFromChildPreBases(gridView, childPreBasisFactory\n-(gridView)...);\n- 345 }, childPreBasisFactories_);\n- 346 }\n- 347\n- 348private:\n- 349 std::tuple<ChildPreBasisFactory...> childPreBasisFactories_;\n- 350};\n- 351\n- 352} // end namespace BasisFactory::Imp\n- 353\n- 354\n- 355\n- 366template<\n- 367 typename... Args,\n- 368 std::enable_if_t<Concept::isIndexMergingStrategy<typename\n-LastType<Args...>::type>(),int> = 0>\n-369auto composite(Args&&... args)\n- 370{\n- 371 // We have to separate the last entry which is the IndexMergingStrategy\n- 372 // and the preceding ones, which are the ChildPreBasisFactories\n- 373\n- 374 using ArgTuple = std::tuple<std::decay_t<Args>...>;\n- 375\n- 376 // Compute number of children and index of the IndexMergingStrategy\n-argument\n- 377 constexpr std::size_t children = Dune::SizeOf<Args...>::value-1;\n- 378\n- 379 // Use last type as IndexMergingStrategy\n- 380 using IndexMergingStrategy = std::tuple_element_t<children, ArgTuple>;\n- 381\n- 382 // Index sequence for all but the last entry for partial tuple unpacking\n- 383 auto childIndices = std::make_index_sequence<children>{};\n- 384\n- 385 // Unpack tuple only for those entries related to children\n- 386 return applyPartial([](auto&&... childPreBasisFactory){\n- 387 return Imp::CompositePreBasisFactory<IndexMergingStrategy, std::\n-decay_t<decltype(childPreBasisFactory)>...>(std::forward<decltype\n-(childPreBasisFactory)>(childPreBasisFactory)...);\n- 388 },\n- 389 std::forward_as_tuple(std::forward<Args>(args)...),\n- 390 childIndices);\n- 391}\n- 392\n- 404template<\n- 405 typename... Args,\n- 406 std::enable_if_t<not Concept::isIndexMergingStrategy<typename\n-LastType<Args...>::type>(),int> = 0>\n- 407auto composite(Args&&... args)\n- 408{\n- 409 return Imp::CompositePreBasisFactory<BasisFactory::BlockedLexicographic,\n-std::decay_t<Args>...>(std::forward<Args>(args)...);\n- 410}\n- 411\n- 412} // end namespace BasisFactory\n- 413\n- 414// Backward compatibility\n- 415namespace BasisBuilder {\n- 416\n- 417 using namespace BasisFactory;\n- 418\n- 419}\n- 420\n- 421\n- 422\n- 423} // end namespace Functions\n- 424} // end namespace Dune\n- 425\n- 426\n- 427#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_COMPOSITEBASIS_HH\n-utility.hh\n-staticforloop.hh\n-type_traits.hh\n-defaultglobalbasis.hh\n-basistags.hh\n-nodes.hh\n-Dune::Functions::BasisFactory::composite\n-auto composite(Args &&... args)\n-Create a factory builder that can build a CompositePreBasis.\n-Definition: compositebasis.hh:369\n-Dune::Functions::enableIfConstructible\n-typename std::enable_if< std::is_constructible< T, Args... >::value, int >::\n-type enableIfConstructible\n-Helper to constrain forwarding constructors.\n-Definition: type_traits.hh:26\n+ 157\n+ 158#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_SUBSPACELOCALVIEW_HH\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::Concept::isIndexMergingStrategy\n-static constexpr bool isIndexMergingStrategy()\n-Definition: basistags.hh:23\n-Dune::Functions::LastType\n-Get last entry of type list.\n-Definition: utility.hh:222\n-Dune::Functions::BasisFactory::IndexMergingStrategy\n-Base class for index merging strategies to simplify detection.\n-Definition: basistags.hh:44\n-Dune::Functions::BasisFactory::FlatLexicographic\n-Lexicographic merging of direct children without blocking.\n-Definition: basistags.hh:80\n-Dune::Functions::BasisFactory::BlockedLexicographic\n-Lexicographic merging of direct children with blocking (i.e. creating one block\n-per direct child).\n-Definition: basistags.hh:148\n-Dune::Functions::CompositePreBasis\n-A pre-basis for composite bases.\n-Definition: compositebasis.hh:53\n-Dune::Functions::CompositePreBasis::subPreBasis\n-SubPreBasis< i > & subPreBasis(Dune::index_constant< i >={})\n-Mutable access to the stored prebasis of the factor in the power space.\n-Definition: compositebasis.hh:249\n-Dune::Functions::CompositePreBasis::IndexMergingStrategy\n-IMS IndexMergingStrategy\n-Strategy used to merge the global indices of the child pre-bases.\n-Definition: compositebasis.hh:71\n-Dune::Functions::CompositePreBasis::maxNodeSize\n-size_type maxNodeSize() const\n-Get the maximal number of DOFs associated to node for any element.\n-Definition: compositebasis.hh:230\n-Dune::Functions::CompositePreBasis::subPreBasis\n-const SubPreBasis< i > & subPreBasis(Dune::index_constant< i >={}) const\n-Const access to the stored prebasis of the factor in the power space.\n-Definition: compositebasis.hh:242\n-Dune::Functions::CompositePreBasis::size_type\n+Dune::Functions::SubspaceBasis\n+SubspaceBasis(const RB &, const TP) -> SubspaceBasis< RB, TP >\n+Dune::Functions::SubspaceBasis\n+Definition: subspacebasis.hh:38\n+Dune::Functions::SubspaceBasis::GridView\n+typename RootBasis::GridView GridView\n+The grid view that the FE space is defined on.\n+Definition: subspacebasis.hh:48\n+Dune::Functions::SubspaceBasis::prefixPath\n+const PrefixPath & prefixPath() const\n+Definition: subspacebasis.hh:118\n+Dune::Functions::SubspaceLocalView\n+The restriction of a finite element basis to a single element.\n+Definition: subspacelocalview.hh:30\n+Dune::Functions::SubspaceLocalView::Tree\n+typename TypeTree::ChildForTreePath< RootTree, PrefixPath > Tree\n+Tree of local finite elements / local shape function sets.\n+Definition: subspacelocalview.hh:53\n+Dune::Functions::SubspaceLocalView::unbind\n+void unbind()\n+Unbind from the current element.\n+Definition: subspacelocalview.hh:89\n+Dune::Functions::SubspaceLocalView::element\n+const Element & element() const\n+Return the grid element that the view is bound to.\n+Definition: subspacelocalview.hh:80\n+Dune::Functions::SubspaceLocalView::globalBasis_\n+const GlobalBasis * globalBasis_\n+Definition: subspacelocalview.hh:147\n+Dune::Functions::SubspaceLocalView::bound\n+bool bound() const\n+Return if the view is bound to a grid element.\n+Definition: subspacelocalview.hh:96\n+Dune::Functions::SubspaceLocalView::MultiIndex\n+typename RootLocalView::MultiIndex MultiIndex\n+Type used for global numbering of the basis vectors.\n+Definition: subspacelocalview.hh:56\n+Dune::Functions::SubspaceLocalView::size\n+size_type size() const\n+Total number of degrees of freedom on this element.\n+Definition: subspacelocalview.hh:112\n+Dune::Functions::SubspaceLocalView::rootLocalView_\n+RootLocalView rootLocalView_\n+Definition: subspacelocalview.hh:148\n+Dune::Functions::SubspaceLocalView::bind\n+void bind(const Element &e)\n+Bind the view to a grid element.\n+Definition: subspacelocalview.hh:71\n+Dune::Functions::SubspaceLocalView::GridView\n+typename GlobalBasis::GridView GridView\n+The grid view the global FE basis lives on.\n+Definition: subspacelocalview.hh:41\n+Dune::Functions::SubspaceLocalView::SubspaceLocalView\n+SubspaceLocalView(const GlobalBasis &globalBasis, const PrefixPath &)\n+Construct local view for a given global finite element basis.\n+Definition: subspacelocalview.hh:59\n+Dune::Functions::SubspaceLocalView::RootLocalView\n+RLV RootLocalView\n+Definition: subspacelocalview.hh:35\n+Dune::Functions::SubspaceLocalView::rootLocalView\n+const RootLocalView & rootLocalView() const\n+Definition: subspacelocalview.hh:141\n+Dune::Functions::SubspaceLocalView::size_type\n std::size_t size_type\n-Type used for indices and size information.\n-Definition: compositebasis.hh:68\n-Dune::Functions::CompositePreBasis::Node\n-CompositeBasisNode< typename SPB::Node... > Node\n-Template mapping root tree path to type of created tree node.\n-Definition: compositebasis.hh:81\n-Dune::Functions::CompositePreBasis::size\n-size_type size(const SizePrefix &prefix) const\n-Return number of possible values for next position in multi index.\n-Definition: compositebasis.hh:165\n-Dune::Functions::CompositePreBasis::CompositePreBasis\n-CompositePreBasis(SFArgs &&... sfArgs)\n-Constructor for given child pre-basis objects.\n-Definition: compositebasis.hh:95\n-Dune::Functions::CompositePreBasis::dimension\n-size_type dimension() const\n-Get the total dimension of the space spanned by this basis.\n-Definition: compositebasis.hh:219\n-Dune::Functions::CompositePreBasis::CompositePreBasis\n-CompositePreBasis(const GV &gv)\n-Constructor for given GridView.\n-Definition: compositebasis.hh:115\n-Dune::Functions::CompositePreBasis::indices\n-It indices(const Node &node, It it) const\n+The type used for sizes.\n+Definition: subspacelocalview.hh:47\n+Dune::Functions::SubspaceLocalView::Element\n+typename GridView::template Codim< 0 >::Entity Element\n+Type of the grid element we are bound to.\n+Definition: subspacelocalview.hh:44\n+Dune::Functions::SubspaceLocalView::globalBasis\n+const GlobalBasis & globalBasis() const\n+Return the global basis that we are a view on.\n+Definition: subspacelocalview.hh:136\n+Dune::Functions::SubspaceLocalView::maxSize\n+size_type maxSize() const\n+Maximum local size for any element on the GridView.\n+Definition: subspacelocalview.hh:123\n+Dune::Functions::SubspaceLocalView::tree\n+const Tree & tree() const\n+Return the local ansatz tree associated to the bound entity.\n+Definition: subspacelocalview.hh:105\n+Dune::Functions::SubspaceLocalView::index\n+MultiIndex index(size_type i) const\n Maps from subtree index set [0..size-1] to a globally unique multi index in\n global basis.\n-Definition: compositebasis.hh:256\n-Dune::Functions::CompositePreBasis::size\n-size_type size() const\n-Same as size(prefix) with empty prefix.\n-Definition: compositebasis.hh:158\n-Dune::Functions::CompositePreBasis::GridView\n-typename std::tuple_element_t< 0, SubPreBases >::GridView GridView\n-The grid view that the FE basis is defined on.\n-Definition: compositebasis.hh:65\n-Dune::Functions::CompositePreBasis::children\n-static const std::size_t children\n-Definition: compositebasis.hh:74\n-Dune::Functions::CompositePreBasis::SubPreBases\n-std::tuple< SPB... > SubPreBases\n-Tuple of child pre-bases.\n-Definition: compositebasis.hh:58\n-Dune::Functions::CompositePreBasis::makeNode\n-Node makeNode() const\n-Create tree node.\n-Definition: compositebasis.hh:148\n-Dune::Functions::CompositePreBasis::initializeIndices\n-void initializeIndices()\n-Initialize the global indices.\n-Definition: compositebasis.hh:124\n-Dune::Functions::CompositePreBasis::SubPreBasis\n-std::tuple_element_t< i, SubPreBases > SubPreBasis\n-Export individual child pre-bases by index.\n-Definition: compositebasis.hh:62\n-Dune::Functions::CompositePreBasis::ChildIndices\n-std::make_index_sequence< children > ChildIndices\n-Definition: compositebasis.hh:76\n-Dune::Functions::CompositePreBasis::update\n-void update(const GridView &gv)\n-Update the stored grid view, to be called if the grid has changed.\n-Definition: compositebasis.hh:138\n-Dune::Functions::CompositePreBasis::multiIndexBufferSize\n-static constexpr size_type multiIndexBufferSize\n-Definition: compositebasis.hh:85\n-Dune::Functions::CompositePreBasis::gridView\n-const GridView & gridView() const\n-Obtain the grid view that the basis is defined on.\n-Definition: compositebasis.hh:132\n-Dune::Functions::CompositePreBasis::minMultiIndexSize\n-static constexpr size_type minMultiIndexSize\n-Definition: compositebasis.hh:84\n-Dune::Functions::CompositePreBasis::maxMultiIndexSize\n-static constexpr size_type maxMultiIndexSize\n-Definition: compositebasis.hh:83\n-Dune::Functions::CompositeBasisNode\n-Definition: nodes.hh:219\n+Definition: subspacelocalview.hh:129\n+Dune::Functions::SubspaceLocalView::RootTree\n+typename RootLocalView::Tree RootTree\n+Tree of local finite elements / local shape function sets.\n+Definition: subspacelocalview.hh:50\n concepts.hh\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00191.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00191.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: nodes.hh File Reference</title>\n+<title>dune-functions: istlvectorbackend.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,65 +58,61 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_8457ebf380090bd61e5d3eab5b7eb9a1.html\">backends</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n-<a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> |\n <a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">nodes.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">istlvectorbackend.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <cassert></code><br />\n-<code>#include <memory></code><br />\n+<div class=\"textblock\"><code>#include <cstddef></code><br />\n+<code>#include <utility></code><br />\n+<code>#include <type_traits></code><br />\n+<code>#include <dune/common/std/type_traits.hh></code><br />\n <code>#include <dune/common/indices.hh></code><br />\n-<code>#include <dune/typetree/leafnode.hh></code><br />\n-<code>#include <dune/typetree/powernode.hh></code><br />\n-<code>#include <dune/typetree/compositenode.hh></code><br />\n-<code>#include <dune/typetree/traversal.hh></code><br />\n-<code>#include <dune/typetree/visitor.hh></code><br />\n+<code>#include <dune/common/hybridutilities.hh></code><br />\n+<code>#include <dune/common/concept.hh></code><br />\n+<code>#include <<a class=\"el\" href=\"a00062_source.html\">dune/functions/common/indexaccess.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a02876_source.html\">dune/functions/functionspacebases/concepts.hh</a>></code><br />\n </div>\n <p><a href=\"a00191_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n-<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n-Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01707.html\">Dune::Functions::BasisNodeMixin</a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01711.html\">Dune::Functions::LeafBasisNode</a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01715.html\">Dune::Functions::PowerBasisNode< T, n ></a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01719.html\">Dune::Functions::CompositeBasisNode< T ></a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-</table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n Functions</h2></td></tr>\n-<tr class=\"memitem:a475e15e64943b3461f2f87a7805a3c8e\"><td class=\"memTemplParams\" colspan=\"2\">template<typename Tree > </td></tr>\n-<tr class=\"memitem:a475e15e64943b3461f2f87a7805a3c8e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a475e15e64943b3461f2f87a7805a3c8e\">Dune::Functions::clearSize</a> (Tree &tree, std::size_t offset)</td></tr>\n-<tr class=\"separator:a475e15e64943b3461f2f87a7805a3c8e\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a4dc892a209e0f55bc65eadaf2c808454\"><td class=\"memTemplParams\" colspan=\"2\">template<typename Tree , typename Entity > </td></tr>\n-<tr class=\"memitem:a4dc892a209e0f55bc65eadaf2c808454\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a4dc892a209e0f55bc65eadaf2c808454\">Dune::Functions::bindTree</a> (Tree &tree, const Entity &entity, std::size_t offset=0)</td></tr>\n-<tr class=\"separator:a4dc892a209e0f55bc65eadaf2c808454\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a5e19b913a34ad68144f4fd873c51b977\"><td class=\"memTemplParams\" colspan=\"2\">template<typename Tree > </td></tr>\n-<tr class=\"memitem:a5e19b913a34ad68144f4fd873c51b977\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">void </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#a5e19b913a34ad68144f4fd873c51b977\">Dune::Functions::initializeTree</a> (Tree &tree, std::size_t treeIndexOffset=0)</td></tr>\n-<tr class=\"separator:a5e19b913a34ad68144f4fd873c51b977\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ad0a3b4e397e76b3d02cb06a7793fdb7b\"><td class=\"memTemplParams\" colspan=\"2\">template<class V > </td></tr>\n+<tr class=\"memitem:ad0a3b4e397e76b3d02cb06a7793fdb7b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">constexpr auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#ad0a3b4e397e76b3d02cb06a7793fdb7b\">Dune::Functions::fieldTypes</a> ()</td></tr>\n+<tr class=\"memdesc:ad0a3b4e397e76b3d02cb06a7793fdb7b\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Generate list of field types in container. <a href=\"a00219.html#ad0a3b4e397e76b3d02cb06a7793fdb7b\">More...</a><br /></td></tr>\n+<tr class=\"separator:ad0a3b4e397e76b3d02cb06a7793fdb7b\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:af8b09a0411c63ab6a6500a7b6edb9dfb\"><td class=\"memTemplParams\" colspan=\"2\">template<class V > </td></tr>\n+<tr class=\"memitem:af8b09a0411c63ab6a6500a7b6edb9dfb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">constexpr bool </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html#af8b09a0411c63ab6a6500a7b6edb9dfb\">Dune::Functions::hasUniqueFieldType</a> ()</td></tr>\n+<tr class=\"memdesc:af8b09a0411c63ab6a6500a7b6edb9dfb\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Check if container has a unique field type. <a href=\"a00219.html#af8b09a0411c63ab6a6500a7b6edb9dfb\">More...</a><br /></td></tr>\n+<tr class=\"separator:af8b09a0411c63ab6a6500a7b6edb9dfb\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:gae5b9f62f85e3d638423142695a74d056\"><td class=\"memTemplParams\" colspan=\"2\">template<class Vector > </td></tr>\n+<tr class=\"memitem:gae5b9f62f85e3d638423142695a74d056\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00214.html#gae5b9f62f85e3d638423142695a74d056\">Dune::Functions::istlVectorBackend</a> (Vector &v)</td></tr>\n+<tr class=\"memdesc:gae5b9f62f85e3d638423142695a74d056\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Return a vector backend wrapping non-const ISTL like containers. <a href=\"a00214.html#gae5b9f62f85e3d638423142695a74d056\">More...</a><br /></td></tr>\n+<tr class=\"separator:gae5b9f62f85e3d638423142695a74d056\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga50a181637103e7abc011235a9fd30611\"><td class=\"memTemplParams\" colspan=\"2\">template<class Vector > </td></tr>\n+<tr class=\"memitem:ga50a181637103e7abc011235a9fd30611\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00214.html#ga50a181637103e7abc011235a9fd30611\">Dune::Functions::istlVectorBackend</a> (const Vector &v)</td></tr>\n+<tr class=\"memdesc:ga50a181637103e7abc011235a9fd30611\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Return a vector backend wrapping const ISTL like containers. <a href=\"a00214.html#ga50a181637103e7abc011235a9fd30611\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga50a181637103e7abc011235a9fd30611\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,48 +4,47 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * functionspacebases\n-Classes | Namespaces | Functions\n-nodes.hh File Reference\n-#include <cassert>\n-#include <memory>\n+ * backends\n+Namespaces | Functions\n+istlvectorbackend.hh File Reference\n+#include <cstddef>\n+#include <utility>\n+#include <type_traits>\n+#include <dune/common/std/type_traits.hh>\n #include <dune/common/indices.hh>\n-#include <dune/typetree/leafnode.hh>\n-#include <dune/typetree/powernode.hh>\n-#include <dune/typetree/compositenode.hh>\n-#include <dune/typetree/traversal.hh>\n-#include <dune/typetree/visitor.hh>\n+#include <dune/common/hybridutilities.hh>\n+#include <dune/common/concept.hh>\n+#include <dune/functions/common/indexaccess.hh>\n+#include <dune/functions/functionspacebases/concepts.hh>\n Go_to_the_source_code_of_this_file.\n- Classes\n-class \u00a0Dune::Functions::BasisNodeMixin\n-\u00a0\n-class \u00a0Dune::Functions::LeafBasisNode\n-\u00a0\n-class \u00a0Dune::Functions::PowerBasisNode<_T,_n_>\n-\u00a0\n-class \u00a0Dune::Functions::CompositeBasisNode<_T_>\n-\u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n Functions\n-template<typename Tree >\n-void\u00a0Dune::Functions::clearSize (Tree &tree, std::size_t offset)\n-\u00a0\n-template<typename Tree , typename Entity >\n-void\u00a0Dune::Functions::bindTree (Tree &tree, const Entity &entity, std::size_t\n- offset=0)\n-\u00a0\n-template<typename Tree >\n-void\u00a0Dune::Functions::initializeTree (Tree &tree, std::size_t\n- treeIndexOffset=0)\n+template<class V >\n+constexpr auto\u00a0Dune::Functions::fieldTypes ()\n+\u00a0 Generate list of field types in container. More...\n+\u00a0\n+template<class V >\n+constexpr bool\u00a0Dune::Functions::hasUniqueFieldType ()\n+\u00a0 Check if container has a unique field type. More...\n+\u00a0\n+template<class Vector >\n+ auto\u00a0Dune::Functions::istlVectorBackend (Vector &v)\n+\u00a0 Return a vector backend wrapping non-const ISTL like\n+ containers. More...\n+\u00a0\n+template<class Vector >\n+ auto\u00a0Dune::Functions::istlVectorBackend (const Vector &v)\n+\u00a0 Return a vector backend wrapping const ISTL like containers.\n+ More...\n \u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00191_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00191_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: nodes.hh Source File</title>\n+<title>dune-functions: istlvectorbackend.hh Source File</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,318 +58,339 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_8457ebf380090bd61e5d3eab5b7eb9a1.html\">backends</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n- <div class=\"headertitle\"><div class=\"title\">nodes.hh</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">istlvectorbackend.hh</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <a href=\"a00191.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a id=\"l00001\" name=\"l00001\"></a><span class=\"lineno\"> 1</span><span class=\"comment\">// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-</span></div>\n <div class=\"line\"><a id=\"l00002\" name=\"l00002\"></a><span class=\"lineno\"> 2</span><span class=\"comment\">// vi: set et ts=4 sw=2 sts=2:</span></div>\n-<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH</span></div>\n-<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH</span></div>\n+<div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH</span></div>\n+<div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n-<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <cassert></span></div>\n-<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <memory></span></div>\n-<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span> </div>\n-<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span><span class=\"preprocessor\">#include <dune/common/indices.hh></span></div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span> </div>\n-<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/typetree/leafnode.hh></span></div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <dune/typetree/powernode.hh></span></div>\n-<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <dune/typetree/compositenode.hh></span></div>\n-<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span><span class=\"preprocessor\">#include <dune/typetree/traversal.hh></span></div>\n-<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <dune/typetree/visitor.hh></span></div>\n-<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span> </div>\n-<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n-<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> <span class=\"keyword\">namespace </span>Functions {</div>\n-<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span> </div>\n-<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span> </div>\n-<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> <span class=\"keyword\">namespace </span>Impl {</div>\n-<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span> </div>\n+<div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span><span class=\"preprocessor\">#include <cstddef></span></div>\n+<div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <utility></span></div>\n+<div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <type_traits></span></div>\n+<div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <dune/common/std/type_traits.hh></span></div>\n+<div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span><span class=\"preprocessor\">#include <dune/common/indices.hh></span></div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <dune/common/hybridutilities.hh></span></div>\n+<div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span><span class=\"preprocessor\">#include <dune/common/concept.hh></span></div>\n+<div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n+<div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00062.html\">dune/functions/common/indexaccess.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a02876.html\">dune/functions/functionspacebases/concepts.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span> </div>\n+<div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n+<div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n+<div class=\"line\"><a id=\"l00020\" name=\"l00020\"></a><span class=\"lineno\"> 20</span><span class=\"keyword\">namespace </span>Functions {</div>\n+<div class=\"line\"><a id=\"l00021\" name=\"l00021\"></a><span class=\"lineno\"> 21</span> </div>\n+<div class=\"line\"><a id=\"l00022\" name=\"l00022\"></a><span class=\"lineno\"> 22</span><span class=\"keyword\">namespace </span>Impl {</div>\n <div class=\"line\"><a id=\"l00023\" name=\"l00023\"></a><span class=\"lineno\"> 23</span> </div>\n-<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span> <span class=\"keyword\">struct </span>ClearSizeVisitor</div>\n-<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> : <span class=\"keyword\">public</span> TypeTree::TreeVisitor</div>\n-<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span> , <span class=\"keyword\">public</span> TypeTree::DynamicTraversal</div>\n-<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span> {</div>\n-<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> </div>\n-<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath></div>\n-<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> <span class=\"keywordtype\">void</span> pre(Node& node, TreePath treePath)</div>\n-<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span> {</div>\n-<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> leaf(node,treePath);</div>\n-<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span> node.setSize(0);</div>\n-<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span> }</div>\n-<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> </div>\n-<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath></div>\n-<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> <span class=\"keywordtype\">void</span> leaf(Node& node, TreePath treePath)</div>\n-<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> {</div>\n-<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> node.setOffset(offset_);</div>\n-<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> }</div>\n-<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> </div>\n-<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> ClearSizeVisitor(std::size_t offset)</div>\n-<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> : offset_(offset)</div>\n-<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span> {}</div>\n+<div class=\"line\"><a id=\"l00024\" name=\"l00024\"></a><span class=\"lineno\"> 24</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>V,</div>\n+<div class=\"line\"><a id=\"l00025\" name=\"l00025\"></a><span class=\"lineno\"> 25</span> std::enable_if_t<not Dune::models<Imp::Concept::HasStaticIndexAccess, V>() , <span class=\"keywordtype\">int</span>> = 0></div>\n+<div class=\"line\"><a id=\"l00026\" name=\"l00026\"></a><span class=\"lineno\"> 26</span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00219.html#ad0a3b4e397e76b3d02cb06a7793fdb7b\">fieldTypes</a>(V&& <span class=\"comment\">/*v*/</span>)</div>\n+<div class=\"line\"><a id=\"l00027\" name=\"l00027\"></a><span class=\"lineno\"> 27</span>{</div>\n+<div class=\"line\"><a id=\"l00028\" name=\"l00028\"></a><span class=\"lineno\"> 28</span> <span class=\"keywordflow\">return</span> TypeList<V>{};</div>\n+<div class=\"line\"><a id=\"l00029\" name=\"l00029\"></a><span class=\"lineno\"> 29</span>}</div>\n+<div class=\"line\"><a id=\"l00030\" name=\"l00030\"></a><span class=\"lineno\"> 30</span> </div>\n+<div class=\"line\"><a id=\"l00031\" name=\"l00031\"></a><span class=\"lineno\"> 31</span><span class=\"keyword\">template</span><<span class=\"keyword\">class </span>V,</div>\n+<div class=\"line\"><a id=\"l00032\" name=\"l00032\"></a><span class=\"lineno\"> 32</span> std::enable_if_t<Dune::models<Imp::Concept::HasStaticIndexAccess, V>(), <span class=\"keywordtype\">int</span>> = 0></div>\n+<div class=\"line\"><a id=\"l00033\" name=\"l00033\"></a><span class=\"lineno\"> 33</span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00219.html#ad0a3b4e397e76b3d02cb06a7793fdb7b\">fieldTypes</a>(V&& v)</div>\n+<div class=\"line\"><a id=\"l00034\" name=\"l00034\"></a><span class=\"lineno\"> 34</span>{</div>\n+<div class=\"line\"><a id=\"l00035\" name=\"l00035\"></a><span class=\"lineno\"> 35</span> <span class=\"keywordflow\">if</span> <span class=\"keyword\">constexpr</span> (Dune::models<Imp::Concept::HasDynamicIndexAccess<std::size_t>, V>())</div>\n+<div class=\"line\"><a id=\"l00036\" name=\"l00036\"></a><span class=\"lineno\"> 36</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00219.html#ad0a3b4e397e76b3d02cb06a7793fdb7b\">fieldTypes</a>(v[std::size_t{0}]);</div>\n+<div class=\"line\"><a id=\"l00037\" name=\"l00037\"></a><span class=\"lineno\"> 37</span> <span class=\"keywordflow\">else</span></div>\n+<div class=\"line\"><a id=\"l00038\" name=\"l00038\"></a><span class=\"lineno\"> 38</span> {</div>\n+<div class=\"line\"><a id=\"l00039\" name=\"l00039\"></a><span class=\"lineno\"> 39</span> <span class=\"keyword\">auto</span> indexRange = <span class=\"keyword\">typename</span> <span class=\"keyword\">decltype</span>(range(Hybrid::size(v)))::integer_sequence();</div>\n+<div class=\"line\"><a id=\"l00040\" name=\"l00040\"></a><span class=\"lineno\"> 40</span> <span class=\"keywordflow\">return</span> unpackIntegerSequence([&](<span class=\"keyword\">auto</span>... i) {</div>\n+<div class=\"line\"><a id=\"l00041\" name=\"l00041\"></a><span class=\"lineno\"> 41</span> <span class=\"keywordflow\">return</span> uniqueTypeList(std::tuple_cat(<a class=\"code hl_function\" href=\"a00219.html#ad0a3b4e397e76b3d02cb06a7793fdb7b\">fieldTypes</a>(v[i])...));</div>\n+<div class=\"line\"><a id=\"l00042\" name=\"l00042\"></a><span class=\"lineno\"> 42</span> }, indexRange);</div>\n+<div class=\"line\"><a id=\"l00043\" name=\"l00043\"></a><span class=\"lineno\"> 43</span> }</div>\n+<div class=\"line\"><a id=\"l00044\" name=\"l00044\"></a><span class=\"lineno\"> 44</span>}</div>\n <div class=\"line\"><a id=\"l00045\" name=\"l00045\"></a><span class=\"lineno\"> 45</span> </div>\n-<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span> <span class=\"keyword\">const</span> std::size_t offset_;</div>\n+<div class=\"line\"><a id=\"l00046\" name=\"l00046\"></a><span class=\"lineno\"> 46</span>} <span class=\"comment\">// namespace Impl</span></div>\n <div class=\"line\"><a id=\"l00047\" name=\"l00047\"></a><span class=\"lineno\"> 47</span> </div>\n-<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> };</div>\n+<div class=\"line\"><a id=\"l00048\" name=\"l00048\"></a><span class=\"lineno\"> 48</span> </div>\n <div class=\"line\"><a id=\"l00049\" name=\"l00049\"></a><span class=\"lineno\"> 49</span> </div>\n-<div class=\"line\"><a id=\"l00050\" name=\"l00050\"></a><span class=\"lineno\"> 50</span> </div>\n-<div class=\"line\"><a id=\"l00051\" name=\"l00051\"></a><span class=\"lineno\"> 51</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Entity></div>\n-<div class=\"line\"><a id=\"l00052\" name=\"l00052\"></a><span class=\"lineno\"> 52</span> <span class=\"keyword\">struct </span>BindVisitor</div>\n-<div class=\"line\"><a id=\"l00053\" name=\"l00053\"></a><span class=\"lineno\"> 53</span> : <span class=\"keyword\">public</span> TypeTree::TreeVisitor</div>\n-<div class=\"line\"><a id=\"l00054\" name=\"l00054\"></a><span class=\"lineno\"> 54</span> , <span class=\"keyword\">public</span> TypeTree::DynamicTraversal</div>\n-<div class=\"line\"><a id=\"l00055\" name=\"l00055\"></a><span class=\"lineno\"> 55</span> {</div>\n-<div class=\"line\"><a id=\"l00056\" name=\"l00056\"></a><span class=\"lineno\"> 56</span> </div>\n-<div class=\"line\"><a id=\"l00057\" name=\"l00057\"></a><span class=\"lineno\"> 57</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath></div>\n-<div class=\"line\"><a id=\"l00058\" name=\"l00058\"></a><span class=\"lineno\"> 58</span> <span class=\"keywordtype\">void</span> pre(Node& node, TreePath)</div>\n-<div class=\"line\"><a id=\"l00059\" name=\"l00059\"></a><span class=\"lineno\"> 59</span> {</div>\n-<div class=\"line\"><a id=\"l00060\" name=\"l00060\"></a><span class=\"lineno\"> 60</span> node.setOffset(offset_);</div>\n-<div class=\"line\"><a id=\"l00061\" name=\"l00061\"></a><span class=\"lineno\"> 61</span> }</div>\n-<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span> </div>\n-<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"> 63</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath></div>\n-<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span> <span class=\"keywordtype\">void</span> post(Node& node, TreePath)</div>\n-<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> {</div>\n-<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span> node.setSize(offset_ - node.offset());</div>\n-<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> }</div>\n-<div class=\"line\"><a id=\"l00068\" name=\"l00068\"></a><span class=\"lineno\"> 68</span> </div>\n-<div class=\"line\"><a id=\"l00069\" name=\"l00069\"></a><span class=\"lineno\"> 69</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath></div>\n-<div class=\"line\"><a id=\"l00070\" name=\"l00070\"></a><span class=\"lineno\"> 70</span> <span class=\"keywordtype\">void</span> leaf(Node& node, TreePath)</div>\n-<div class=\"line\"><a id=\"l00071\" name=\"l00071\"></a><span class=\"lineno\"> 71</span> {</div>\n-<div class=\"line\"><a id=\"l00072\" name=\"l00072\"></a><span class=\"lineno\"> 72</span> node.setOffset(offset_);</div>\n-<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span> node.bind(entity_);</div>\n-<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"> 74</span> offset_ += node.size();</div>\n-<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span> }</div>\n-<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> </div>\n-<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span> BindVisitor(<span class=\"keyword\">const</span> Entity& entity, std::size_t offset = 0)</div>\n-<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> : entity_(entity)</div>\n-<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> , offset_(offset)</div>\n-<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> {}</div>\n-<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span> </div>\n-<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> <span class=\"keyword\">const</span> Entity& entity_;</div>\n-<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span> std::size_t offset_;</div>\n-<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span> </div>\n-<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span> };</div>\n-<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span> </div>\n-<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span> </div>\n-<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span> <span class=\"keyword\">struct </span>InitializeTreeVisitor :</div>\n-<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span> <span class=\"keyword\">public</span> TypeTree::TreeVisitor,</div>\n-<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span> <span class=\"keyword\">public</span> TypeTree::DynamicTraversal</div>\n-<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span> {</div>\n-<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath></div>\n-<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span> <span class=\"keywordtype\">void</span> pre(Node& node, TreePath)</div>\n-<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span> {</div>\n-<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span> node.setTreeIndex(treeIndex_);</div>\n-<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span> ++treeIndex_;</div>\n-<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span> }</div>\n-<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span> </div>\n-<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Node, <span class=\"keyword\">typename</span> TreePath></div>\n-<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span> <span class=\"keywordtype\">void</span> leaf(Node& node, TreePath)</div>\n-<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span> {</div>\n-<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span> node.setTreeIndex(treeIndex_);</div>\n-<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> ++treeIndex_;</div>\n-<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> }</div>\n-<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> </div>\n-<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> InitializeTreeVisitor(std::size_t treeIndexOffset = 0) :</div>\n-<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> treeIndex_(treeIndexOffset)</div>\n-<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> {}</div>\n-<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> </div>\n-<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> std::size_t treeIndex_;</div>\n-<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> };</div>\n-<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> </div>\n-<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> } <span class=\"comment\">// end namespace Impl</span></div>\n+<div class=\"line\"><a id=\"l00062\" name=\"l00062\"></a><span class=\"lineno\"> 62</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> V></div>\n+<div class=\"line\"><a id=\"l00063\" name=\"l00063\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#ad0a3b4e397e76b3d02cb06a7793fdb7b\"> 63</a></span><span class=\"keyword\">constexpr</span> <span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00219.html#ad0a3b4e397e76b3d02cb06a7793fdb7b\">fieldTypes</a>()</div>\n+<div class=\"line\"><a id=\"l00064\" name=\"l00064\"></a><span class=\"lineno\"> 64</span>{</div>\n+<div class=\"line\"><a id=\"l00065\" name=\"l00065\"></a><span class=\"lineno\"> 65</span> <span class=\"keywordflow\">return</span> <span class=\"keyword\">decltype</span>(<a class=\"code hl_function\" href=\"a00219.html#ad0a3b4e397e76b3d02cb06a7793fdb7b\">Impl::fieldTypes</a>(std::declval<V>())){};</div>\n+<div class=\"line\"><a id=\"l00066\" name=\"l00066\"></a><span class=\"lineno\"> 66</span>}</div>\n+<div class=\"line\"><a id=\"l00067\" name=\"l00067\"></a><span class=\"lineno\"> 67</span> </div>\n+<div class=\"line\"><a id=\"l00073\" name=\"l00073\"></a><span class=\"lineno\"> 73</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> V></div>\n+<div class=\"line\"><a id=\"l00074\" name=\"l00074\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#af8b09a0411c63ab6a6500a7b6edb9dfb\"> 74</a></span><span class=\"keyword\">constexpr</span> <span class=\"keywordtype\">bool</span> <a class=\"code hl_function\" href=\"a00219.html#af8b09a0411c63ab6a6500a7b6edb9dfb\">hasUniqueFieldType</a>()</div>\n+<div class=\"line\"><a id=\"l00075\" name=\"l00075\"></a><span class=\"lineno\"> 75</span>{</div>\n+<div class=\"line\"><a id=\"l00076\" name=\"l00076\"></a><span class=\"lineno\"> 76</span> <span class=\"keywordflow\">return</span> std::tuple_size<std::decay_t<decltype(fieldTypes<V>())>>::value==1;</div>\n+<div class=\"line\"><a id=\"l00077\" name=\"l00077\"></a><span class=\"lineno\"> 77</span>}</div>\n+<div class=\"line\"><a id=\"l00078\" name=\"l00078\"></a><span class=\"lineno\"> 78</span> </div>\n+<div class=\"line\"><a id=\"l00079\" name=\"l00079\"></a><span class=\"lineno\"> 79</span> </div>\n+<div class=\"line\"><a id=\"l00080\" name=\"l00080\"></a><span class=\"lineno\"> 80</span> </div>\n+<div class=\"line\"><a id=\"l00081\" name=\"l00081\"></a><span class=\"lineno\"> 81</span><span class=\"keyword\">namespace </span>Impl {</div>\n+<div class=\"line\"><a id=\"l00082\" name=\"l00082\"></a><span class=\"lineno\"> 82</span> </div>\n+<div class=\"line\"><a id=\"l00083\" name=\"l00083\"></a><span class=\"lineno\"> 83</span><span class=\"comment\">/*</span></div>\n+<div class=\"line\"><a id=\"l00084\" name=\"l00084\"></a><span class=\"lineno\"> 84</span><span class=\"comment\"> * \\brief A wrapper providing multi-index access to vector entries</span></div>\n+<div class=\"line\"><a id=\"l00085\" name=\"l00085\"></a><span class=\"lineno\"> 85</span><span class=\"comment\"> *</span></div>\n+<div class=\"line\"><a id=\"l00086\" name=\"l00086\"></a><span class=\"lineno\"> 86</span><span class=\"comment\"> * The wrapped vector type should be an istl like random</span></div>\n+<div class=\"line\"><a id=\"l00087\" name=\"l00087\"></a><span class=\"lineno\"> 87</span><span class=\"comment\"> * access container providing operator[] and size() methods.</span></div>\n+<div class=\"line\"><a id=\"l00088\" name=\"l00088\"></a><span class=\"lineno\"> 88</span><span class=\"comment\"> * For classical containers this should support indices</span></div>\n+<div class=\"line\"><a id=\"l00089\" name=\"l00089\"></a><span class=\"lineno\"> 89</span><span class=\"comment\"> * of type std::size_t. For multi-type containers indices</span></div>\n+<div class=\"line\"><a id=\"l00090\" name=\"l00090\"></a><span class=\"lineno\"> 90</span><span class=\"comment\"> * of the form Dune::index_constant<i> should be supported</span></div>\n+<div class=\"line\"><a id=\"l00091\" name=\"l00091\"></a><span class=\"lineno\"> 91</span><span class=\"comment\"> * while size() should be a static constexpr method.</span></div>\n+<div class=\"line\"><a id=\"l00092\" name=\"l00092\"></a><span class=\"lineno\"> 92</span><span class=\"comment\"> *</span></div>\n+<div class=\"line\"><a id=\"l00093\" name=\"l00093\"></a><span class=\"lineno\"> 93</span><span class=\"comment\"> * When resolving multi-indices the backend appends indices</span></div>\n+<div class=\"line\"><a id=\"l00094\" name=\"l00094\"></a><span class=\"lineno\"> 94</span><span class=\"comment\"> * using operator[] as long as the result is not a scalar.</span></div>\n+<div class=\"line\"><a id=\"l00095\" name=\"l00095\"></a><span class=\"lineno\"> 95</span><span class=\"comment\"> * If this exhausts the digits of the multi-index, additional</span></div>\n+<div class=\"line\"><a id=\"l00096\" name=\"l00096\"></a><span class=\"lineno\"> 96</span><span class=\"comment\"> * zero`s are appended.</span></div>\n+<div class=\"line\"><a id=\"l00097\" name=\"l00097\"></a><span class=\"lineno\"> 97</span><span class=\"comment\"> *</span></div>\n+<div class=\"line\"><a id=\"l00098\" name=\"l00098\"></a><span class=\"lineno\"> 98</span><span class=\"comment\"> * \\tparam V Type of the raw wrapper vector</span></div>\n+<div class=\"line\"><a id=\"l00099\" name=\"l00099\"></a><span class=\"lineno\"> 99</span><span class=\"comment\"> */</span></div>\n+<div class=\"line\"><a id=\"l00100\" name=\"l00100\"></a><span class=\"lineno\"> 100</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> V></div>\n+<div class=\"line\"><a id=\"l00101\" name=\"l00101\"></a><span class=\"lineno\"> 101</span><span class=\"keyword\">class </span>ISTLVectorBackend</div>\n+<div class=\"line\"><a id=\"l00102\" name=\"l00102\"></a><span class=\"lineno\"> 102</span>{</div>\n+<div class=\"line\"><a id=\"l00103\" name=\"l00103\"></a><span class=\"lineno\"> 103</span> </div>\n+<div class=\"line\"><a id=\"l00104\" name=\"l00104\"></a><span class=\"lineno\"> 104</span> <span class=\"comment\">// Template aliases for using detection idiom.</span></div>\n+<div class=\"line\"><a id=\"l00105\" name=\"l00105\"></a><span class=\"lineno\"> 105</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C></div>\n+<div class=\"line\"><a id=\"l00106\" name=\"l00106\"></a><span class=\"lineno\"> 106</span> <span class=\"keyword\">using </span>dynamicIndexAccess_t = <span class=\"keyword\">decltype</span>(std::declval<C>()[0]);</div>\n+<div class=\"line\"><a id=\"l00107\" name=\"l00107\"></a><span class=\"lineno\"> 107</span> </div>\n+<div class=\"line\"><a id=\"l00108\" name=\"l00108\"></a><span class=\"lineno\"> 108</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C></div>\n+<div class=\"line\"><a id=\"l00109\" name=\"l00109\"></a><span class=\"lineno\"> 109</span> <span class=\"keyword\">using </span>staticIndexAccess_t = <span class=\"keyword\">decltype</span>(std::declval<C>()[Dune::Indices::_0]);</div>\n+<div class=\"line\"><a id=\"l00110\" name=\"l00110\"></a><span class=\"lineno\"> 110</span> </div>\n+<div class=\"line\"><a id=\"l00111\" name=\"l00111\"></a><span class=\"lineno\"> 111</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C></div>\n+<div class=\"line\"><a id=\"l00112\" name=\"l00112\"></a><span class=\"lineno\"> 112</span> <span class=\"keyword\">using </span>resizeMethod_t = <span class=\"keyword\">decltype</span>(std::declval<C>().resize(0));</div>\n+<div class=\"line\"><a id=\"l00113\" name=\"l00113\"></a><span class=\"lineno\"> 113</span> </div>\n <div class=\"line\"><a id=\"l00114\" name=\"l00114\"></a><span class=\"lineno\"> 114</span> </div>\n <div class=\"line\"><a id=\"l00115\" name=\"l00115\"></a><span class=\"lineno\"> 115</span> </div>\n-<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01707.html\"> 116</a></span> <span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01707.html\">BasisNodeMixin</a></div>\n-<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> {</div>\n-<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> </div>\n-<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> <span class=\"keyword\">friend</span> <span class=\"keyword\">struct </span>Impl::ClearSizeVisitor;</div>\n-<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> </div>\n-<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span>></div>\n-<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> <span class=\"keyword\">friend</span> <span class=\"keyword\">struct </span>Impl::BindVisitor;</div>\n-<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> </div>\n-<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> <span class=\"keyword\">friend</span> <span class=\"keyword\">struct </span>Impl::InitializeTreeVisitor;</div>\n+<div class=\"line\"><a id=\"l00116\" name=\"l00116\"></a><span class=\"lineno\"> 116</span> <span class=\"comment\">// Short cuts for feature detection</span></div>\n+<div class=\"line\"><a id=\"l00117\" name=\"l00117\"></a><span class=\"lineno\"> 117</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C></div>\n+<div class=\"line\"><a id=\"l00118\" name=\"l00118\"></a><span class=\"lineno\"> 118</span> <span class=\"keyword\">using </span>hasDynamicIndexAccess = Dune::Std::is_detected<dynamicIndexAccess_t, std::remove_reference_t<C>>;</div>\n+<div class=\"line\"><a id=\"l00119\" name=\"l00119\"></a><span class=\"lineno\"> 119</span> </div>\n+<div class=\"line\"><a id=\"l00120\" name=\"l00120\"></a><span class=\"lineno\"> 120</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C></div>\n+<div class=\"line\"><a id=\"l00121\" name=\"l00121\"></a><span class=\"lineno\"> 121</span> <span class=\"keyword\">using </span>hasStaticIndexAccess = Dune::Std::is_detected<staticIndexAccess_t, std::remove_reference_t<C>>;</div>\n+<div class=\"line\"><a id=\"l00122\" name=\"l00122\"></a><span class=\"lineno\"> 122</span> </div>\n+<div class=\"line\"><a id=\"l00123\" name=\"l00123\"></a><span class=\"lineno\"> 123</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C></div>\n+<div class=\"line\"><a id=\"l00124\" name=\"l00124\"></a><span class=\"lineno\"> 124</span> <span class=\"keyword\">using </span>hasResizeMethod = Dune::Std::is_detected<resizeMethod_t, std::remove_reference_t<C>>;</div>\n <div class=\"line\"><a id=\"l00125\" name=\"l00125\"></a><span class=\"lineno\"> 125</span> </div>\n-<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> <span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> </div>\n-<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\"> 128</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">size_type</a> = std::size_t;</div>\n-<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> </div>\n-<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01707.html#ab139683837b0ab0b546e925b18fa4f0c\"> 130</a></span> <a class=\"code hl_function\" href=\"a01707.html#ab139683837b0ab0b546e925b18fa4f0c\">BasisNodeMixin</a>() :</div>\n-<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> offset_(0),</div>\n-<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> size_(0),</div>\n-<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> treeIndex_(0)</div>\n-<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> {}</div>\n-<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> </div>\n-<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01707.html#a0e22d133c4157b51c1e9f091aebc59cd\"> 136</a></span> <a class=\"code hl_typedef\" href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">size_type</a> <a class=\"code hl_function\" href=\"a01707.html#a0e22d133c4157b51c1e9f091aebc59cd\">localIndex</a>(<a class=\"code hl_typedef\" href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">size_type</a> i)<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> assert(i < size_);</div>\n-<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> <span class=\"keywordflow\">return</span> offset_ + i;</div>\n-<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> }</div>\n+<div class=\"line\"><a id=\"l00126\" name=\"l00126\"></a><span class=\"lineno\"> 126</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C></div>\n+<div class=\"line\"><a id=\"l00127\" name=\"l00127\"></a><span class=\"lineno\"> 127</span> <span class=\"keyword\">using </span>isDynamicVector = Dune::Std::is_detected<dynamicIndexAccess_t, std::remove_reference_t<C>>;</div>\n+<div class=\"line\"><a id=\"l00128\" name=\"l00128\"></a><span class=\"lineno\"> 128</span> </div>\n+<div class=\"line\"><a id=\"l00129\" name=\"l00129\"></a><span class=\"lineno\"> 129</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C></div>\n+<div class=\"line\"><a id=\"l00130\" name=\"l00130\"></a><span class=\"lineno\"> 130</span> <span class=\"keyword\">using </span>isStaticVector = Dune::Std::bool_constant<</div>\n+<div class=\"line\"><a id=\"l00131\" name=\"l00131\"></a><span class=\"lineno\"> 131</span> Dune::Std::is_detected_v<staticIndexAccess_t, std::remove_reference_t<C>></div>\n+<div class=\"line\"><a id=\"l00132\" name=\"l00132\"></a><span class=\"lineno\"> 132</span> and not Dune::Std::is_detected_v<dynamicIndexAccess_t, std::remove_reference_t<C>>>;</div>\n+<div class=\"line\"><a id=\"l00133\" name=\"l00133\"></a><span class=\"lineno\"> 133</span> </div>\n+<div class=\"line\"><a id=\"l00134\" name=\"l00134\"></a><span class=\"lineno\"> 134</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C></div>\n+<div class=\"line\"><a id=\"l00135\" name=\"l00135\"></a><span class=\"lineno\"> 135</span> <span class=\"keyword\">using </span>isScalar = Dune::Std::bool_constant<not Dune::Std::is_detected_v<staticIndexAccess_t, std::remove_reference_t<C>>>;</div>\n+<div class=\"line\"><a id=\"l00136\" name=\"l00136\"></a><span class=\"lineno\"> 136</span> </div>\n+<div class=\"line\"><a id=\"l00137\" name=\"l00137\"></a><span class=\"lineno\"> 137</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> C></div>\n+<div class=\"line\"><a id=\"l00138\" name=\"l00138\"></a><span class=\"lineno\"> 138</span> <span class=\"keyword\">using </span>isVector = Dune::Std::bool_constant<Dune::Std::is_detected_v<staticIndexAccess_t, std::remove_reference_t<C>>>;</div>\n+<div class=\"line\"><a id=\"l00139\" name=\"l00139\"></a><span class=\"lineno\"> 139</span> </div>\n+<div class=\"line\"><a id=\"l00140\" name=\"l00140\"></a><span class=\"lineno\"> 140</span> </div>\n <div class=\"line\"><a id=\"l00141\" name=\"l00141\"></a><span class=\"lineno\"> 141</span> </div>\n-<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\"> 142</a></span> <a class=\"code hl_typedef\" href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">size_type</a> <a class=\"code hl_function\" href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">size</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> <span class=\"keywordflow\">return</span> size_;</div>\n-<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> }</div>\n-<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> </div>\n-<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01707.html#a0537018999ae62e89fa51d6b2acaa9c5\"> 147</a></span> <a class=\"code hl_typedef\" href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">size_type</a> <a class=\"code hl_function\" href=\"a01707.html#a0537018999ae62e89fa51d6b2acaa9c5\">treeIndex</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> <span class=\"keywordflow\">return</span> treeIndex_;</div>\n-<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> }</div>\n-<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> </div>\n-<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> <span class=\"keyword\">protected</span>:</div>\n-<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> </div>\n-<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01707.html#a29b5cf3ba3af7802e3bf447297ff643e\"> 154</a></span> <a class=\"code hl_typedef\" href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">size_type</a> <a class=\"code hl_function\" href=\"a01707.html#a29b5cf3ba3af7802e3bf447297ff643e\">offset</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> <span class=\"keywordflow\">return</span> offset_;</div>\n-<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> }</div>\n-<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> </div>\n-<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01707.html#a8a136ce33ce5d6a43e4acee36760b842\"> 159</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01707.html#a8a136ce33ce5d6a43e4acee36760b842\">setOffset</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">size_type</a> <a class=\"code hl_function\" href=\"a01707.html#a29b5cf3ba3af7802e3bf447297ff643e\">offset</a>)</div>\n-<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> {</div>\n-<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> offset_ = <a class=\"code hl_function\" href=\"a01707.html#a29b5cf3ba3af7802e3bf447297ff643e\">offset</a>;</div>\n-<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> }</div>\n-<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> </div>\n-<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\"> 164</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\">setSize</a>(<span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">size_type</a> <a class=\"code hl_function\" href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">size</a>)</div>\n-<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> {</div>\n-<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> size_ = <a class=\"code hl_function\" href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">size</a>;</div>\n-<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> }</div>\n-<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> </div>\n-<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01707.html#afcf81cc8651554885951ad00ca6d2465\"> 169</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a01707.html#afcf81cc8651554885951ad00ca6d2465\">setTreeIndex</a>(<a class=\"code hl_typedef\" href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">size_type</a> <a class=\"code hl_function\" href=\"a01707.html#a0537018999ae62e89fa51d6b2acaa9c5\">treeIndex</a>)</div>\n-<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> {</div>\n-<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> treeIndex_ = <a class=\"code hl_function\" href=\"a01707.html#a0537018999ae62e89fa51d6b2acaa9c5\">treeIndex</a>;</div>\n-<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> }</div>\n-<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> </div>\n-<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> <span class=\"keyword\">private</span>:</div>\n-<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> </div>\n-<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> <a class=\"code hl_typedef\" href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">size_type</a> offset_;</div>\n-<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> <a class=\"code hl_typedef\" href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">size_type</a> size_;</div>\n-<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> <a class=\"code hl_typedef\" href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">size_type</a> treeIndex_;</div>\n-<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> </div>\n-<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> };</div>\n-<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> </div>\n+<div class=\"line\"><a id=\"l00142\" name=\"l00142\"></a><span class=\"lineno\"> 142</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span>... Args></div>\n+<div class=\"line\"><a id=\"l00143\" name=\"l00143\"></a><span class=\"lineno\"> 143</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> forwardToResize(Args&&... args)</div>\n+<div class=\"line\"><a id=\"l00144\" name=\"l00144\"></a><span class=\"lineno\"> 144</span> {</div>\n+<div class=\"line\"><a id=\"l00145\" name=\"l00145\"></a><span class=\"lineno\"> 145</span> resize(std::forward<Args>(args)...);</div>\n+<div class=\"line\"><a id=\"l00146\" name=\"l00146\"></a><span class=\"lineno\"> 146</span> }</div>\n+<div class=\"line\"><a id=\"l00147\" name=\"l00147\"></a><span class=\"lineno\"> 147</span> </div>\n+<div class=\"line\"><a id=\"l00148\" name=\"l00148\"></a><span class=\"lineno\"> 148</span> </div>\n+<div class=\"line\"><a id=\"l00149\" name=\"l00149\"></a><span class=\"lineno\"> 149</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>C, <span class=\"keyword\">class </span>SizeProvider,</div>\n+<div class=\"line\"><a id=\"l00150\" name=\"l00150\"></a><span class=\"lineno\"> 150</span> std::enable_if_t<hasResizeMethod<C>::value, <span class=\"keywordtype\">int</span>> = 0></div>\n+<div class=\"line\"><a id=\"l00151\" name=\"l00151\"></a><span class=\"lineno\"> 151</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> resize(C&& c, <span class=\"keyword\">const</span> SizeProvider& sizeProvider, <span class=\"keyword\">typename</span> SizeProvider::SizePrefix prefix)</div>\n+<div class=\"line\"><a id=\"l00152\" name=\"l00152\"></a><span class=\"lineno\"> 152</span> {</div>\n+<div class=\"line\"><a id=\"l00153\" name=\"l00153\"></a><span class=\"lineno\"> 153</span> <span class=\"keyword\">auto</span> size = sizeProvider.size(prefix);</div>\n+<div class=\"line\"><a id=\"l00154\" name=\"l00154\"></a><span class=\"lineno\"> 154</span> <span class=\"keywordflow\">if</span> (size==0)</div>\n+<div class=\"line\"><a id=\"l00155\" name=\"l00155\"></a><span class=\"lineno\"> 155</span> {</div>\n+<div class=\"line\"><a id=\"l00156\" name=\"l00156\"></a><span class=\"lineno\"> 156</span> <span class=\"comment\">// If size==0 this prefix refers to a single coefficient c.</span></div>\n+<div class=\"line\"><a id=\"l00157\" name=\"l00157\"></a><span class=\"lineno\"> 157</span> <span class=\"comment\">// But being in this overload means that c is not a scalar</span></div>\n+<div class=\"line\"><a id=\"l00158\" name=\"l00158\"></a><span class=\"lineno\"> 158</span> <span class=\"comment\">// because is has a resize() method. Since operator[] deliberately</span></div>\n+<div class=\"line\"><a id=\"l00159\" name=\"l00159\"></a><span class=\"lineno\"> 159</span> <span class=\"comment\">// supports implicit padding of multi-indices by as many</span></div>\n+<div class=\"line\"><a id=\"l00160\" name=\"l00160\"></a><span class=\"lineno\"> 160</span> <span class=\"comment\">// [0]'s as needed to resolve a scalar entry, we should also</span></div>\n+<div class=\"line\"><a id=\"l00161\" name=\"l00161\"></a><span class=\"lineno\"> 161</span> <span class=\"comment\">// except a non-scalar c here. However, this requires that</span></div>\n+<div class=\"line\"><a id=\"l00162\" name=\"l00162\"></a><span class=\"lineno\"> 162</span> <span class=\"comment\">// we silently believe that whatever size c already has is</span></div>\n+<div class=\"line\"><a id=\"l00163\" name=\"l00163\"></a><span class=\"lineno\"> 163</span> <span class=\"comment\">// intended by the user. The only exception is c.size()==0</span></div>\n+<div class=\"line\"><a id=\"l00164\" name=\"l00164\"></a><span class=\"lineno\"> 164</span> <span class=\"comment\">// which is not acceptable but we also cannot know the desired size.</span></div>\n+<div class=\"line\"><a id=\"l00165\" name=\"l00165\"></a><span class=\"lineno\"> 165</span> <span class=\"keywordflow\">if</span> (c.size()==0)</div>\n+<div class=\"line\"><a id=\"l00166\" name=\"l00166\"></a><span class=\"lineno\"> 166</span> DUNE_THROW(RangeError, <span class=\"stringliteral\">"The vector entry v["</span> << prefix << <span class=\"stringliteral\">"] should refer to a "</span></div>\n+<div class=\"line\"><a id=\"l00167\" name=\"l00167\"></a><span class=\"lineno\"> 167</span> << <span class=\"stringliteral\">"scalar coefficient, but is a dynamically sized vector of size==0"</span>);</div>\n+<div class=\"line\"><a id=\"l00168\" name=\"l00168\"></a><span class=\"lineno\"> 168</span> <span class=\"keywordflow\">else</span></div>\n+<div class=\"line\"><a id=\"l00169\" name=\"l00169\"></a><span class=\"lineno\"> 169</span> <span class=\"comment\">// Accept non-zero sized coefficients to avoid that resize(basis)</span></div>\n+<div class=\"line\"><a id=\"l00170\" name=\"l00170\"></a><span class=\"lineno\"> 170</span> <span class=\"comment\">// fails for a vector that works with operator[] and already</span></div>\n+<div class=\"line\"><a id=\"l00171\" name=\"l00171\"></a><span class=\"lineno\"> 171</span> <span class=\"comment\">// has the appropriate size.</span></div>\n+<div class=\"line\"><a id=\"l00172\" name=\"l00172\"></a><span class=\"lineno\"> 172</span> <span class=\"keywordflow\">return</span>;</div>\n+<div class=\"line\"><a id=\"l00173\" name=\"l00173\"></a><span class=\"lineno\"> 173</span> }</div>\n+<div class=\"line\"><a id=\"l00174\" name=\"l00174\"></a><span class=\"lineno\"> 174</span> c.resize(size);</div>\n+<div class=\"line\"><a id=\"l00175\" name=\"l00175\"></a><span class=\"lineno\"> 175</span> prefix.push_back(0);</div>\n+<div class=\"line\"><a id=\"l00176\" name=\"l00176\"></a><span class=\"lineno\"> 176</span> <span class=\"keywordflow\">for</span>(std::size_t i=0; i<size; ++i)</div>\n+<div class=\"line\"><a id=\"l00177\" name=\"l00177\"></a><span class=\"lineno\"> 177</span> {</div>\n+<div class=\"line\"><a id=\"l00178\" name=\"l00178\"></a><span class=\"lineno\"> 178</span> prefix.back() = i;</div>\n+<div class=\"line\"><a id=\"l00179\" name=\"l00179\"></a><span class=\"lineno\"> 179</span> resize(c[i], sizeProvider, prefix);</div>\n+<div class=\"line\"><a id=\"l00180\" name=\"l00180\"></a><span class=\"lineno\"> 180</span> }</div>\n+<div class=\"line\"><a id=\"l00181\" name=\"l00181\"></a><span class=\"lineno\"> 181</span> }</div>\n <div class=\"line\"><a id=\"l00182\" name=\"l00182\"></a><span class=\"lineno\"> 182</span> </div>\n-<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01711.html\"> 183</a></span> <span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01711.html\">LeafBasisNode</a> :</div>\n-<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span> <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01707.html\">BasisNodeMixin</a>,</div>\n-<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> <span class=\"keyword\">public</span> TypeTree::LeafNode</div>\n-<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> {};</div>\n-<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> </div>\n-<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> </div>\n-<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> T, std::<span class=\"keywordtype\">size_t</span> n></div>\n-<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01715.html\"> 190</a></span> <span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01715.html\">PowerBasisNode</a> :</div>\n-<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01707.html\">BasisNodeMixin</a>,</div>\n-<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> <span class=\"keyword\">public</span> TypeTree::PowerNode<T,n></div>\n-<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> {</div>\n+<div class=\"line\"><a id=\"l00183\" name=\"l00183\"></a><span class=\"lineno\"> 183</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>C, <span class=\"keyword\">class </span>SizeProvider,</div>\n+<div class=\"line\"><a id=\"l00184\" name=\"l00184\"></a><span class=\"lineno\"> 184</span> std::enable_if_t<not hasResizeMethod<C>::value, <span class=\"keywordtype\">int</span>> = 0,</div>\n+<div class=\"line\"><a id=\"l00185\" name=\"l00185\"></a><span class=\"lineno\"> 185</span> std::enable_if_t<isVector<C>::value, <span class=\"keywordtype\">int</span>> = 0></div>\n+<div class=\"line\"><a id=\"l00186\" name=\"l00186\"></a><span class=\"lineno\"> 186</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> resize(C&& c, <span class=\"keyword\">const</span> SizeProvider& sizeProvider, <span class=\"keyword\">typename</span> SizeProvider::SizePrefix prefix)</div>\n+<div class=\"line\"><a id=\"l00187\" name=\"l00187\"></a><span class=\"lineno\"> 187</span> {</div>\n+<div class=\"line\"><a id=\"l00188\" name=\"l00188\"></a><span class=\"lineno\"> 188</span> <span class=\"keyword\">auto</span> size = sizeProvider.size(prefix);</div>\n+<div class=\"line\"><a id=\"l00189\" name=\"l00189\"></a><span class=\"lineno\"> 189</span> <span class=\"comment\">// If size == 0 there's nothing to do:</span></div>\n+<div class=\"line\"><a id=\"l00190\" name=\"l00190\"></a><span class=\"lineno\"> 190</span> <span class=\"comment\">// We can't resize c and it's already</span></div>\n+<div class=\"line\"><a id=\"l00191\" name=\"l00191\"></a><span class=\"lineno\"> 191</span> <span class=\"comment\">// large enough anyway.</span></div>\n+<div class=\"line\"><a id=\"l00192\" name=\"l00192\"></a><span class=\"lineno\"> 192</span> <span class=\"keywordflow\">if</span> (size == 0)</div>\n+<div class=\"line\"><a id=\"l00193\" name=\"l00193\"></a><span class=\"lineno\"> 193</span> <span class=\"keywordflow\">return</span>;</div>\n <div class=\"line\"><a id=\"l00194\" name=\"l00194\"></a><span class=\"lineno\"> 194</span> </div>\n-<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> <span class=\"keyword\">using </span>Node = TypeTree::PowerNode<T,n>;</div>\n-<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> </div>\n-<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> <span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> </div>\n-<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01715.html#a730fb3161aee6967017fb7b6de624c00\"> 199</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01715.html#a730fb3161aee6967017fb7b6de624c00\">Element</a> = <span class=\"keyword\">typename</span> T::Element;</div>\n-<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> </div>\n-<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01715.html#ac162976f8cac3b609f4706aefde700c0\"> 201</a></span> <a class=\"code hl_function\" href=\"a01715.html#ac162976f8cac3b609f4706aefde700c0\">PowerBasisNode</a>() = <span class=\"keywordflow\">default</span>;</div>\n-<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> </div>\n-<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01715.html#aa773c868e1fd0662b133a9c401fe9b4b\"> 203</a></span> <a class=\"code hl_function\" href=\"a01715.html#aa773c868e1fd0662b133a9c401fe9b4b\">PowerBasisNode</a>(<span class=\"keyword\">const</span> <span class=\"keyword\">typename</span> Node::NodeStorage& children) :</div>\n-<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> Node(children)</div>\n-<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span> {}</div>\n-<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> </div>\n-<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01715.html#a5b32a16f032d0492e10cd9349a00063d\"> 207</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01715.html#a730fb3161aee6967017fb7b6de624c00\">Element</a>& <a class=\"code hl_function\" href=\"a01715.html#a5b32a16f032d0492e10cd9349a00063d\">element</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> <span class=\"keywordflow\">return</span> this->child(Dune::Indices::_0).element();</div>\n-<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> }</div>\n-<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> </div>\n-<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"> 212</span> };</div>\n-<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span> </div>\n-<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> </div>\n-<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span>... T></div>\n-<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01719.html\"> 216</a></span> <span class=\"keyword\">class </span><a class=\"code hl_class\" href=\"a01719.html\">CompositeBasisNode</a> :</div>\n-<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> <span class=\"keyword\">public</span> <a class=\"code hl_class\" href=\"a01707.html\">BasisNodeMixin</a>,</div>\n-<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> <span class=\"keyword\">public</span> TypeTree::CompositeNode<T...></div>\n-<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> {</div>\n+<div class=\"line\"><a id=\"l00195\" name=\"l00195\"></a><span class=\"lineno\"> 195</span> <span class=\"comment\">// If size>0 but c does not have the appropriate</span></div>\n+<div class=\"line\"><a id=\"l00196\" name=\"l00196\"></a><span class=\"lineno\"> 196</span> <span class=\"comment\">// size we throw an exception.</span></div>\n+<div class=\"line\"><a id=\"l00197\" name=\"l00197\"></a><span class=\"lineno\"> 197</span> <span class=\"comment\">//</span></div>\n+<div class=\"line\"><a id=\"l00198\" name=\"l00198\"></a><span class=\"lineno\"> 198</span> <span class=\"comment\">// We could perhaps also allow c.size()>size.</span></div>\n+<div class=\"line\"><a id=\"l00199\" name=\"l00199\"></a><span class=\"lineno\"> 199</span> <span class=\"comment\">// But then looping the loop below gets complicated:</span></div>\n+<div class=\"line\"><a id=\"l00200\" name=\"l00200\"></a><span class=\"lineno\"> 200</span> <span class=\"comment\">// We're not allowed to loop until c.size(). But</span></div>\n+<div class=\"line\"><a id=\"l00201\" name=\"l00201\"></a><span class=\"lineno\"> 201</span> <span class=\"comment\">// we also cannot use size for termination,</span></div>\n+<div class=\"line\"><a id=\"l00202\" name=\"l00202\"></a><span class=\"lineno\"> 202</span> <span class=\"comment\">// because this fails if c is a static vector.</span></div>\n+<div class=\"line\"><a id=\"l00203\" name=\"l00203\"></a><span class=\"lineno\"> 203</span> <span class=\"keywordflow\">if</span> (c.size() != size)</div>\n+<div class=\"line\"><a id=\"l00204\" name=\"l00204\"></a><span class=\"lineno\"> 204</span> DUNE_THROW(RangeError, <span class=\"stringliteral\">"Can't resize non-resizable entry v["</span> << prefix << <span class=\"stringliteral\">"] of size "</span> << c.size() << <span class=\"stringliteral\">" to size("</span> << prefix << <span class=\"stringliteral\">")="</span> << size);</div>\n+<div class=\"line\"><a id=\"l00205\" name=\"l00205\"></a><span class=\"lineno\"> 205</span> </div>\n+<div class=\"line\"><a id=\"l00206\" name=\"l00206\"></a><span class=\"lineno\"> 206</span> <span class=\"comment\">// Recursively resize all entries of c now.</span></div>\n+<div class=\"line\"><a id=\"l00207\" name=\"l00207\"></a><span class=\"lineno\"> 207</span> <span class=\"keyword\">using namespace </span>Dune::Hybrid;</div>\n+<div class=\"line\"><a id=\"l00208\" name=\"l00208\"></a><span class=\"lineno\"> 208</span> prefix.push_back(0);</div>\n+<div class=\"line\"><a id=\"l00209\" name=\"l00209\"></a><span class=\"lineno\"> 209</span> forEach(integralRange(Hybrid::size(c)), [&](<span class=\"keyword\">auto</span>&& i) {</div>\n+<div class=\"line\"><a id=\"l00210\" name=\"l00210\"></a><span class=\"lineno\"> 210</span> prefix.back() = i;</div>\n+<div class=\"line\"><a id=\"l00211\" name=\"l00211\"></a><span class=\"lineno\"> 211</span> <span class=\"comment\">// Here we'd simply like to call resize(c[i], sizeProvider, prefix);</span></div>\n+<div class=\"line\"><a id=\"l00212\" name=\"l00212\"></a><span class=\"lineno\"> 212</span> <span class=\"comment\">// but even gcc-7 does not except this bus reports</span></div>\n+<div class=\"line\"><a id=\"l00213\" name=\"l00213\"></a><span class=\"lineno\"> 213</span> <span class=\"comment\">// "error: \u2018this\u2019 was not captured for this lambda function"</span></div>\n+<div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> <span class=\"comment\">// although there's no 'this' because we're in a static method.</span></div>\n+<div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span> <span class=\"comment\">// Bypassing this by and additional method that does perfect</span></div>\n+<div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span> <span class=\"comment\">// forwarding allows to workaround this.</span></div>\n+<div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span> ISTLVectorBackend<V>::forwardToResize(c[i], sizeProvider, prefix);</div>\n+<div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> });</div>\n+<div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> }</div>\n <div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span> </div>\n-<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> <span class=\"keyword\">using </span>Node = TypeTree::CompositeNode<T...>;</div>\n-<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span> </div>\n-<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> <span class=\"keyword\">public</span>:</div>\n-<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> </div>\n-<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01719.html#abdd9920608523a7ca70b6b330f133b89\"> 225</a></span> <span class=\"keyword\">using </span><a class=\"code hl_typedef\" href=\"a01719.html#abdd9920608523a7ca70b6b330f133b89\">Element</a> = <span class=\"keyword\">typename</span> Node::template Child<0>::Type::Element;</div>\n-<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> </div>\n-<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01719.html#a0366c531894faebfab57f755debf90eb\"> 227</a></span> <a class=\"code hl_function\" href=\"a01719.html#a0366c531894faebfab57f755debf90eb\">CompositeBasisNode</a>() = <span class=\"keywordflow\">default</span>;</div>\n-<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> </div>\n-<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01719.html#a2f068a781f0d898766b3f393d849f14e\"> 229</a></span> <a class=\"code hl_function\" href=\"a01719.html#a2f068a781f0d898766b3f393d849f14e\">CompositeBasisNode</a>(<span class=\"keyword\">const</span> <span class=\"keyword\">typename</span> Node::NodeStorage& children) :</div>\n-<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span> Node(children)</div>\n-<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span> {}</div>\n-<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> </div>\n-<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span>... Children></div>\n-<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01719.html#ac9d87ea800634bfc8e45ccd2f0b41acf\"> 234</a></span> <a class=\"code hl_function\" href=\"a01719.html#ac9d87ea800634bfc8e45ccd2f0b41acf\">CompositeBasisNode</a>(<span class=\"keyword\">const</span> std::shared_ptr<Children>&... children) :</div>\n-<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> Node(children...)</div>\n-<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span> {}</div>\n+<div class=\"line\"><a id=\"l00221\" name=\"l00221\"></a><span class=\"lineno\"> 221</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>C, <span class=\"keyword\">class </span>SizeProvider,</div>\n+<div class=\"line\"><a id=\"l00222\" name=\"l00222\"></a><span class=\"lineno\"> 222</span> std::enable_if_t<not hasResizeMethod<C>::value, <span class=\"keywordtype\">int</span>> = 0,</div>\n+<div class=\"line\"><a id=\"l00223\" name=\"l00223\"></a><span class=\"lineno\"> 223</span> std::enable_if_t<isScalar<C>::value, <span class=\"keywordtype\">int</span>> = 0></div>\n+<div class=\"line\"><a id=\"l00224\" name=\"l00224\"></a><span class=\"lineno\"> 224</span> <span class=\"keyword\">static</span> <span class=\"keywordtype\">void</span> resize(C&&, <span class=\"keyword\">const</span> SizeProvider& sizeProvider, <span class=\"keyword\">typename</span> SizeProvider::SizePrefix prefix)</div>\n+<div class=\"line\"><a id=\"l00225\" name=\"l00225\"></a><span class=\"lineno\"> 225</span> {</div>\n+<div class=\"line\"><a id=\"l00226\" name=\"l00226\"></a><span class=\"lineno\"> 226</span> <span class=\"keyword\">auto</span> size = sizeProvider.size(prefix);</div>\n+<div class=\"line\"><a id=\"l00227\" name=\"l00227\"></a><span class=\"lineno\"> 227</span> <span class=\"keywordflow\">if</span> (size != 0)</div>\n+<div class=\"line\"><a id=\"l00228\" name=\"l00228\"></a><span class=\"lineno\"> 228</span> DUNE_THROW(RangeError, <span class=\"stringliteral\">"Can't resize scalar vector entry v["</span> << prefix << <span class=\"stringliteral\">"] to size("</span> << prefix << <span class=\"stringliteral\">")="</span> << size);</div>\n+<div class=\"line\"><a id=\"l00229\" name=\"l00229\"></a><span class=\"lineno\"> 229</span> }</div>\n+<div class=\"line\"><a id=\"l00230\" name=\"l00230\"></a><span class=\"lineno\"> 230</span> </div>\n+<div class=\"line\"><a id=\"l00231\" name=\"l00231\"></a><span class=\"lineno\"> 231</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>C, <span class=\"keyword\">class </span>T,</div>\n+<div class=\"line\"><a id=\"l00232\" name=\"l00232\"></a><span class=\"lineno\"> 232</span> std::enable_if_t<std::is_assignable<C&,T>::value, <span class=\"keywordtype\">int</span>> = 0></div>\n+<div class=\"line\"><a id=\"l00233\" name=\"l00233\"></a><span class=\"lineno\"> 233</span> <span class=\"keywordtype\">void</span> recursiveAssign(C& c, <span class=\"keyword\">const</span> T& t)</div>\n+<div class=\"line\"><a id=\"l00234\" name=\"l00234\"></a><span class=\"lineno\"> 234</span> {</div>\n+<div class=\"line\"><a id=\"l00235\" name=\"l00235\"></a><span class=\"lineno\"> 235</span> c = t;</div>\n+<div class=\"line\"><a id=\"l00236\" name=\"l00236\"></a><span class=\"lineno\"> 236</span> }</div>\n <div class=\"line\"><a id=\"l00237\" name=\"l00237\"></a><span class=\"lineno\"> 237</span> </div>\n-<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"><a class=\"line\" href=\"a01719.html#a9c235f8829e7afa0436b223365fd8bb8\"> 238</a></span> <span class=\"keyword\">const</span> <a class=\"code hl_typedef\" href=\"a01719.html#abdd9920608523a7ca70b6b330f133b89\">Element</a>& <a class=\"code hl_function\" href=\"a01719.html#a9c235f8829e7afa0436b223365fd8bb8\">element</a>()<span class=\"keyword\"> const</span></div>\n-<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span><span class=\"keyword\"> </span>{</div>\n-<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"> 240</span> <span class=\"keywordflow\">return</span> this->child(Dune::Indices::_0).element();</div>\n-<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span> }</div>\n-<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span> </div>\n-<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> };</div>\n-<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> </div>\n-<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> </div>\n-<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Tree></div>\n-<div class=\"line\"><a id=\"l00247\" name=\"l00247\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a475e15e64943b3461f2f87a7805a3c8e\"> 247</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a00219.html#a475e15e64943b3461f2f87a7805a3c8e\">clearSize</a>(Tree& tree, std::size_t offset)</div>\n-<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"> 248</span> {</div>\n-<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span> TypeTree::applyToTree(tree,Impl::ClearSizeVisitor(offset));</div>\n-<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span> }</div>\n-<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span> </div>\n-<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Tree, <span class=\"keyword\">typename</span> Entity></div>\n-<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a4dc892a209e0f55bc65eadaf2c808454\"> 253</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a00219.html#a4dc892a209e0f55bc65eadaf2c808454\">bindTree</a>(Tree& tree, <span class=\"keyword\">const</span> Entity& entity, std::size_t offset = 0)</div>\n-<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"> 254</span> {</div>\n-<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span> Impl::BindVisitor<Entity> visitor(entity,offset);</div>\n-<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"> 256</span> TypeTree::applyToTree(tree,visitor);</div>\n-<div class=\"line\"><a id=\"l00257\" name=\"l00257\"></a><span class=\"lineno\"> 257</span> }</div>\n-<div class=\"line\"><a id=\"l00258\" name=\"l00258\"></a><span class=\"lineno\"> 258</span> </div>\n-<div class=\"line\"><a id=\"l00259\" name=\"l00259\"></a><span class=\"lineno\"> 259</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> Tree></div>\n-<div class=\"line\"><a id=\"l00260\" name=\"l00260\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00219.html#a5e19b913a34ad68144f4fd873c51b977\"> 260</a></span> <span class=\"keywordtype\">void</span> <a class=\"code hl_function\" href=\"a00219.html#a5e19b913a34ad68144f4fd873c51b977\">initializeTree</a>(Tree& tree, std::size_t treeIndexOffset = 0)</div>\n-<div class=\"line\"><a id=\"l00261\" name=\"l00261\"></a><span class=\"lineno\"> 261</span> {</div>\n-<div class=\"line\"><a id=\"l00262\" name=\"l00262\"></a><span class=\"lineno\"> 262</span> Impl::InitializeTreeVisitor visitor(treeIndexOffset);</div>\n-<div class=\"line\"><a id=\"l00263\" name=\"l00263\"></a><span class=\"lineno\"> 263</span> TypeTree::applyToTree(tree,visitor);</div>\n-<div class=\"line\"><a id=\"l00264\" name=\"l00264\"></a><span class=\"lineno\"> 264</span> }</div>\n-<div class=\"line\"><a id=\"l00265\" name=\"l00265\"></a><span class=\"lineno\"> 265</span> </div>\n-<div class=\"line\"><a id=\"l00266\" name=\"l00266\"></a><span class=\"lineno\"> 266</span> </div>\n-<div class=\"line\"><a id=\"l00267\" name=\"l00267\"></a><span class=\"lineno\"> 267</span> } <span class=\"comment\">// namespace Functions</span></div>\n+<div class=\"line\"><a id=\"l00238\" name=\"l00238\"></a><span class=\"lineno\"> 238</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class </span>C, <span class=\"keyword\">class </span>T,</div>\n+<div class=\"line\"><a id=\"l00239\" name=\"l00239\"></a><span class=\"lineno\"> 239</span> std::enable_if_t<not std::is_assignable<C&,T>::value, <span class=\"keywordtype\">int</span>> = 0></div>\n+<div class=\"line\"><a id=\"l00240\" name=\"l00240\"></a><span class=\"lineno\"> 240</span> <span class=\"keywordtype\">void</span> recursiveAssign(C& c, <span class=\"keyword\">const</span> T& t)</div>\n+<div class=\"line\"><a id=\"l00241\" name=\"l00241\"></a><span class=\"lineno\"> 241</span> {</div>\n+<div class=\"line\"><a id=\"l00242\" name=\"l00242\"></a><span class=\"lineno\"> 242</span> Dune::Hybrid::forEach(c, [&](<span class=\"keyword\">auto</span>&& ci) {</div>\n+<div class=\"line\"><a id=\"l00243\" name=\"l00243\"></a><span class=\"lineno\"> 243</span> recursiveAssign(ci, t);</div>\n+<div class=\"line\"><a id=\"l00244\" name=\"l00244\"></a><span class=\"lineno\"> 244</span> });</div>\n+<div class=\"line\"><a id=\"l00245\" name=\"l00245\"></a><span class=\"lineno\"> 245</span> }</div>\n+<div class=\"line\"><a id=\"l00246\" name=\"l00246\"></a><span class=\"lineno\"> 246</span> </div>\n+<div class=\"line\"><a id=\"l00247\" name=\"l00247\"></a><span class=\"lineno\"> 247</span><span class=\"keyword\">public</span>:</div>\n+<div class=\"line\"><a id=\"l00248\" name=\"l00248\"></a><span class=\"lineno\"> 248</span> </div>\n+<div class=\"line\"><a id=\"l00249\" name=\"l00249\"></a><span class=\"lineno\"> 249</span> <span class=\"keyword\">using </span>Vector = V;</div>\n+<div class=\"line\"><a id=\"l00250\" name=\"l00250\"></a><span class=\"lineno\"> 250</span> </div>\n+<div class=\"line\"><a id=\"l00251\" name=\"l00251\"></a><span class=\"lineno\"> 251</span> ISTLVectorBackend(Vector& vector) :</div>\n+<div class=\"line\"><a id=\"l00252\" name=\"l00252\"></a><span class=\"lineno\"> 252</span> vector_(&vector)</div>\n+<div class=\"line\"><a id=\"l00253\" name=\"l00253\"></a><span class=\"lineno\"> 253</span> {}</div>\n+<div class=\"line\"><a id=\"l00254\" name=\"l00254\"></a><span class=\"lineno\"> 254</span> </div>\n+<div class=\"line\"><a id=\"l00255\" name=\"l00255\"></a><span class=\"lineno\"> 255</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> SizeProv<span class=\"keywordtype\">id</span>er></div>\n+<div class=\"line\"><a id=\"l00256\" name=\"l00256\"></a><span class=\"lineno\"> 256</span> <span class=\"keywordtype\">void</span> resize(<span class=\"keyword\">const</span> SizeProvider& sizeProvider)</div>\n+<div class=\"line\"><a id=\"l00257\" name=\"l00257\"></a><span class=\"lineno\"> 257</span> {</div>\n+<div class=\"line\"><a id=\"l00258\" name=\"l00258\"></a><span class=\"lineno\"> 258</span> <span class=\"keyword\">auto</span> prefix = <span class=\"keyword\">typename</span> SizeProvider::SizePrefix();</div>\n+<div class=\"line\"><a id=\"l00259\" name=\"l00259\"></a><span class=\"lineno\"> 259</span> prefix.resize(0);</div>\n+<div class=\"line\"><a id=\"l00260\" name=\"l00260\"></a><span class=\"lineno\"> 260</span> resize(*vector_, sizeProvider, prefix);</div>\n+<div class=\"line\"><a id=\"l00261\" name=\"l00261\"></a><span class=\"lineno\"> 261</span> }</div>\n+<div class=\"line\"><a id=\"l00262\" name=\"l00262\"></a><span class=\"lineno\"> 262</span> </div>\n+<div class=\"line\"><a id=\"l00263\" name=\"l00263\"></a><span class=\"lineno\"> 263</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> MultiIndex></div>\n+<div class=\"line\"><a id=\"l00264\" name=\"l00264\"></a><span class=\"lineno\"> 264</span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <span class=\"keyword\">operator</span>[](<span class=\"keyword\">const</span> MultiIndex& index) <span class=\"keyword\">const</span></div>\n+<div class=\"line\"><a id=\"l00265\" name=\"l00265\"></a><span class=\"lineno\"> 265</span> {</div>\n+<div class=\"line\"><a id=\"l00266\" name=\"l00266\"></a><span class=\"lineno\"> 266</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00215.html#ga9aaec884c080483fea267d1098f81590\">resolveDynamicMultiIndex</a>(*vector_, index);</div>\n+<div class=\"line\"><a id=\"l00267\" name=\"l00267\"></a><span class=\"lineno\"> 267</span> }</div>\n <div class=\"line\"><a id=\"l00268\" name=\"l00268\"></a><span class=\"lineno\"> 268</span> </div>\n-<div class=\"line\"><a id=\"l00269\" name=\"l00269\"></a><span class=\"lineno\"> 269</span>} <span class=\"comment\">// namespace Dune</span></div>\n-<div class=\"line\"><a id=\"l00270\" name=\"l00270\"></a><span class=\"lineno\"> 270</span> </div>\n-<div class=\"line\"><a id=\"l00271\" name=\"l00271\"></a><span class=\"lineno\"> 271</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH</span></div>\n+<div class=\"line\"><a id=\"l00269\" name=\"l00269\"></a><span class=\"lineno\"> 269</span> <span class=\"keyword\">template</span><<span class=\"keyword\">class</span> MultiIndex></div>\n+<div class=\"line\"><a id=\"l00270\" name=\"l00270\"></a><span class=\"lineno\"> 270</span> <span class=\"keyword\">decltype</span>(<span class=\"keyword\">auto</span>) <span class=\"keyword\">operator</span>[](<span class=\"keyword\">const</span> MultiIndex& index)</div>\n+<div class=\"line\"><a id=\"l00271\" name=\"l00271\"></a><span class=\"lineno\"> 271</span> {</div>\n+<div class=\"line\"><a id=\"l00272\" name=\"l00272\"></a><span class=\"lineno\"> 272</span> <span class=\"keywordflow\">return</span> <a class=\"code hl_function\" href=\"a00215.html#ga9aaec884c080483fea267d1098f81590\">resolveDynamicMultiIndex</a>(*vector_, index);</div>\n+<div class=\"line\"><a id=\"l00273\" name=\"l00273\"></a><span class=\"lineno\"> 273</span> }</div>\n+<div class=\"line\"><a id=\"l00274\" name=\"l00274\"></a><span class=\"lineno\"> 274</span> </div>\n+<div class=\"line\"><a id=\"l00283\" name=\"l00283\"></a><span class=\"lineno\"> 283</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> T></div>\n+<div class=\"line\"><a id=\"l00284\" name=\"l00284\"></a><span class=\"lineno\"> 284</span> <span class=\"keywordtype\">void</span> operator= (<span class=\"keyword\">const</span> T& other)</div>\n+<div class=\"line\"><a id=\"l00285\" name=\"l00285\"></a><span class=\"lineno\"> 285</span> {</div>\n+<div class=\"line\"><a id=\"l00286\" name=\"l00286\"></a><span class=\"lineno\"> 286</span> recursiveAssign(vector(), other);</div>\n+<div class=\"line\"><a id=\"l00287\" name=\"l00287\"></a><span class=\"lineno\"> 287</span> }</div>\n+<div class=\"line\"><a id=\"l00288\" name=\"l00288\"></a><span class=\"lineno\"> 288</span> </div>\n+<div class=\"line\"><a id=\"l00289\" name=\"l00289\"></a><span class=\"lineno\"> 289</span> <span class=\"keyword\">template</span><<span class=\"keyword\">typename</span> T></div>\n+<div class=\"line\"><a id=\"l00290\" name=\"l00290\"></a><span class=\"lineno\"> 290</span> <span class=\"keywordtype\">void</span> operator= (<span class=\"keyword\">const</span> ISTLVectorBackend<T>& other)</div>\n+<div class=\"line\"><a id=\"l00291\" name=\"l00291\"></a><span class=\"lineno\"> 291</span> {</div>\n+<div class=\"line\"><a id=\"l00292\" name=\"l00292\"></a><span class=\"lineno\"> 292</span> vector() = other.vector();</div>\n+<div class=\"line\"><a id=\"l00293\" name=\"l00293\"></a><span class=\"lineno\"> 293</span> }</div>\n+<div class=\"line\"><a id=\"l00294\" name=\"l00294\"></a><span class=\"lineno\"> 294</span> </div>\n+<div class=\"line\"><a id=\"l00295\" name=\"l00295\"></a><span class=\"lineno\"> 295</span> <span class=\"keyword\">const</span> Vector& vector()<span class=\"keyword\"> const</span></div>\n+<div class=\"line\"><a id=\"l00296\" name=\"l00296\"></a><span class=\"lineno\"> 296</span><span class=\"keyword\"> </span>{</div>\n+<div class=\"line\"><a id=\"l00297\" name=\"l00297\"></a><span class=\"lineno\"> 297</span> <span class=\"keywordflow\">return</span> *vector_;</div>\n+<div class=\"line\"><a id=\"l00298\" name=\"l00298\"></a><span class=\"lineno\"> 298</span> }</div>\n+<div class=\"line\"><a id=\"l00299\" name=\"l00299\"></a><span class=\"lineno\"> 299</span> </div>\n+<div class=\"line\"><a id=\"l00300\" name=\"l00300\"></a><span class=\"lineno\"> 300</span> Vector& vector()</div>\n+<div class=\"line\"><a id=\"l00301\" name=\"l00301\"></a><span class=\"lineno\"> 301</span> {</div>\n+<div class=\"line\"><a id=\"l00302\" name=\"l00302\"></a><span class=\"lineno\"> 302</span> <span class=\"keywordflow\">return</span> *vector_;</div>\n+<div class=\"line\"><a id=\"l00303\" name=\"l00303\"></a><span class=\"lineno\"> 303</span> }</div>\n+<div class=\"line\"><a id=\"l00304\" name=\"l00304\"></a><span class=\"lineno\"> 304</span> </div>\n+<div class=\"line\"><a id=\"l00305\" name=\"l00305\"></a><span class=\"lineno\"> 305</span><span class=\"keyword\">private</span>:</div>\n+<div class=\"line\"><a id=\"l00306\" name=\"l00306\"></a><span class=\"lineno\"> 306</span> </div>\n+<div class=\"line\"><a id=\"l00307\" name=\"l00307\"></a><span class=\"lineno\"> 307</span> Vector* vector_;</div>\n+<div class=\"line\"><a id=\"l00308\" name=\"l00308\"></a><span class=\"lineno\"> 308</span>};</div>\n+<div class=\"line\"><a id=\"l00309\" name=\"l00309\"></a><span class=\"lineno\"> 309</span> </div>\n+<div class=\"line\"><a id=\"l00310\" name=\"l00310\"></a><span class=\"lineno\"> 310</span>} <span class=\"comment\">// end namespace Impl</span></div>\n+<div class=\"line\"><a id=\"l00311\" name=\"l00311\"></a><span class=\"lineno\"> 311</span> </div>\n+<div class=\"line\"><a id=\"l00312\" name=\"l00312\"></a><span class=\"lineno\"> 312</span> </div>\n+<div class=\"line\"><a id=\"l00313\" name=\"l00313\"></a><span class=\"lineno\"> 313</span> </div>\n+<div class=\"line\"><a id=\"l00345\" name=\"l00345\"></a><span class=\"lineno\"> 345</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Vector></div>\n+<div class=\"line\"><a id=\"l00346\" name=\"l00346\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00214.html#gae5b9f62f85e3d638423142695a74d056\"> 346</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00214.html#gae5b9f62f85e3d638423142695a74d056\">istlVectorBackend</a>(Vector& v)</div>\n+<div class=\"line\"><a id=\"l00347\" name=\"l00347\"></a><span class=\"lineno\"> 347</span>{</div>\n+<div class=\"line\"><a id=\"l00348\" name=\"l00348\"></a><span class=\"lineno\"> 348</span> <span class=\"keyword\">static_assert</span>(hasUniqueFieldType<Vector&>(), <span class=\"stringliteral\">"Vector type passed to istlVectorBackend() does not have a unique field type."</span>);</div>\n+<div class=\"line\"><a id=\"l00349\" name=\"l00349\"></a><span class=\"lineno\"> 349</span> <span class=\"keywordflow\">return</span> Impl::ISTLVectorBackend<Vector>(v);</div>\n+<div class=\"line\"><a id=\"l00350\" name=\"l00350\"></a><span class=\"lineno\"> 350</span>}</div>\n+<div class=\"line\"><a id=\"l00351\" name=\"l00351\"></a><span class=\"lineno\"> 351</span> </div>\n+<div class=\"line\"><a id=\"l00352\" name=\"l00352\"></a><span class=\"lineno\"> 352</span> </div>\n+<div class=\"line\"><a id=\"l00353\" name=\"l00353\"></a><span class=\"lineno\"> 353</span> </div>\n+<div class=\"line\"><a id=\"l00383\" name=\"l00383\"></a><span class=\"lineno\"> 383</span><span class=\"keyword\">template</span><<span class=\"keyword\">class</span> Vector></div>\n+<div class=\"line\"><a id=\"l00384\" name=\"l00384\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00214.html#ga50a181637103e7abc011235a9fd30611\"> 384</a></span><span class=\"keyword\">auto</span> <a class=\"code hl_function\" href=\"a00214.html#gae5b9f62f85e3d638423142695a74d056\">istlVectorBackend</a>(<span class=\"keyword\">const</span> Vector& v)</div>\n+<div class=\"line\"><a id=\"l00385\" name=\"l00385\"></a><span class=\"lineno\"> 385</span>{</div>\n+<div class=\"line\"><a id=\"l00386\" name=\"l00386\"></a><span class=\"lineno\"> 386</span> <span class=\"keyword\">static_assert</span>(hasUniqueFieldType<const Vector&>(), <span class=\"stringliteral\">"Vector type passed to istlVectorBackend() does not have a unique field type."</span>);</div>\n+<div class=\"line\"><a id=\"l00387\" name=\"l00387\"></a><span class=\"lineno\"> 387</span> <span class=\"keywordflow\">return</span> Impl::ISTLVectorBackend<const Vector>(v);</div>\n+<div class=\"line\"><a id=\"l00388\" name=\"l00388\"></a><span class=\"lineno\"> 388</span>}</div>\n+<div class=\"line\"><a id=\"l00389\" name=\"l00389\"></a><span class=\"lineno\"> 389</span> </div>\n+<div class=\"line\"><a id=\"l00390\" name=\"l00390\"></a><span class=\"lineno\"> 390</span> </div>\n+<div class=\"line\"><a id=\"l00391\" name=\"l00391\"></a><span class=\"lineno\"> 391</span> </div>\n+<div class=\"line\"><a id=\"l00392\" name=\"l00392\"></a><span class=\"lineno\"> 392</span>} <span class=\"comment\">// namespace Functions</span></div>\n+<div class=\"line\"><a id=\"l00393\" name=\"l00393\"></a><span class=\"lineno\"> 393</span>} <span class=\"comment\">// namespace Dune</span></div>\n+<div class=\"line\"><a id=\"l00394\" name=\"l00394\"></a><span class=\"lineno\"> 394</span> </div>\n+<div class=\"line\"><a id=\"l00395\" name=\"l00395\"></a><span class=\"lineno\"> 395</span> </div>\n+<div class=\"line\"><a id=\"l00396\" name=\"l00396\"></a><span class=\"lineno\"> 396</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH</span></div>\n+<div class=\"ttc\" id=\"aa00062_html\"><div class=\"ttname\"><a href=\"a00062.html\">indexaccess.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00214_html_gae5b9f62f85e3d638423142695a74d056\"><div class=\"ttname\"><a href=\"a00214.html#gae5b9f62f85e3d638423142695a74d056\">Dune::Functions::istlVectorBackend</a></div><div class=\"ttdeci\">auto istlVectorBackend(Vector &v)</div><div class=\"ttdoc\">Return a vector backend wrapping non-const ISTL like containers.</div><div class=\"ttdef\"><b>Definition:</b> istlvectorbackend.hh:346</div></div>\n+<div class=\"ttc\" id=\"aa00215_html_ga9aaec884c080483fea267d1098f81590\"><div class=\"ttname\"><a href=\"a00215.html#ga9aaec884c080483fea267d1098f81590\">Dune::Functions::resolveDynamicMultiIndex</a></div><div class=\"ttdeci\">constexpr decltype(auto) resolveDynamicMultiIndex(C &&c, const MultiIndex &multiIndex, const IsFinal &isFinal)</div><div class=\"ttdoc\">Provide multi-index access by chaining operator[].</div><div class=\"ttdef\"><b>Definition:</b> indexaccess.hh:354</div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n-<div class=\"ttc\" id=\"aa00219_html_a475e15e64943b3461f2f87a7805a3c8e\"><div class=\"ttname\"><a href=\"a00219.html#a475e15e64943b3461f2f87a7805a3c8e\">Dune::Functions::clearSize</a></div><div class=\"ttdeci\">void clearSize(Tree &tree, std::size_t offset)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:247</div></div>\n-<div class=\"ttc\" id=\"aa00219_html_a4dc892a209e0f55bc65eadaf2c808454\"><div class=\"ttname\"><a href=\"a00219.html#a4dc892a209e0f55bc65eadaf2c808454\">Dune::Functions::bindTree</a></div><div class=\"ttdeci\">void bindTree(Tree &tree, const Entity &entity, std::size_t offset=0)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:253</div></div>\n-<div class=\"ttc\" id=\"aa00219_html_a5e19b913a34ad68144f4fd873c51b977\"><div class=\"ttname\"><a href=\"a00219.html#a5e19b913a34ad68144f4fd873c51b977\">Dune::Functions::initializeTree</a></div><div class=\"ttdeci\">void initializeTree(Tree &tree, std::size_t treeIndexOffset=0)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:260</div></div>\n-<div class=\"ttc\" id=\"aa01707_html\"><div class=\"ttname\"><a href=\"a01707.html\">Dune::Functions::BasisNodeMixin</a></div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:117</div></div>\n-<div class=\"ttc\" id=\"aa01707_html_a0537018999ae62e89fa51d6b2acaa9c5\"><div class=\"ttname\"><a href=\"a01707.html#a0537018999ae62e89fa51d6b2acaa9c5\">Dune::Functions::BasisNodeMixin::treeIndex</a></div><div class=\"ttdeci\">size_type treeIndex() const</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:147</div></div>\n-<div class=\"ttc\" id=\"aa01707_html_a0e22d133c4157b51c1e9f091aebc59cd\"><div class=\"ttname\"><a href=\"a01707.html#a0e22d133c4157b51c1e9f091aebc59cd\">Dune::Functions::BasisNodeMixin::localIndex</a></div><div class=\"ttdeci\">size_type localIndex(size_type i) const</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:136</div></div>\n-<div class=\"ttc\" id=\"aa01707_html_a29b5cf3ba3af7802e3bf447297ff643e\"><div class=\"ttname\"><a href=\"a01707.html#a29b5cf3ba3af7802e3bf447297ff643e\">Dune::Functions::BasisNodeMixin::offset</a></div><div class=\"ttdeci\">size_type offset() const</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:154</div></div>\n-<div class=\"ttc\" id=\"aa01707_html_a859d50513645ef2ea0188d0779c1df30\"><div class=\"ttname\"><a href=\"a01707.html#a859d50513645ef2ea0188d0779c1df30\">Dune::Functions::BasisNodeMixin::size</a></div><div class=\"ttdeci\">size_type size() const</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:142</div></div>\n-<div class=\"ttc\" id=\"aa01707_html_a8a136ce33ce5d6a43e4acee36760b842\"><div class=\"ttname\"><a href=\"a01707.html#a8a136ce33ce5d6a43e4acee36760b842\">Dune::Functions::BasisNodeMixin::setOffset</a></div><div class=\"ttdeci\">void setOffset(const size_type offset)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:159</div></div>\n-<div class=\"ttc\" id=\"aa01707_html_aa8a0b9332c5d9fd44b680acc810502cd\"><div class=\"ttname\"><a href=\"a01707.html#aa8a0b9332c5d9fd44b680acc810502cd\">Dune::Functions::BasisNodeMixin::size_type</a></div><div class=\"ttdeci\">std::size_t size_type</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:128</div></div>\n-<div class=\"ttc\" id=\"aa01707_html_ab139683837b0ab0b546e925b18fa4f0c\"><div class=\"ttname\"><a href=\"a01707.html#ab139683837b0ab0b546e925b18fa4f0c\">Dune::Functions::BasisNodeMixin::BasisNodeMixin</a></div><div class=\"ttdeci\">BasisNodeMixin()</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:130</div></div>\n-<div class=\"ttc\" id=\"aa01707_html_ae93815e5c4012f7be5d11786f40d267a\"><div class=\"ttname\"><a href=\"a01707.html#ae93815e5c4012f7be5d11786f40d267a\">Dune::Functions::BasisNodeMixin::setSize</a></div><div class=\"ttdeci\">void setSize(const size_type size)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:164</div></div>\n-<div class=\"ttc\" id=\"aa01707_html_afcf81cc8651554885951ad00ca6d2465\"><div class=\"ttname\"><a href=\"a01707.html#afcf81cc8651554885951ad00ca6d2465\">Dune::Functions::BasisNodeMixin::setTreeIndex</a></div><div class=\"ttdeci\">void setTreeIndex(size_type treeIndex)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:169</div></div>\n-<div class=\"ttc\" id=\"aa01711_html\"><div class=\"ttname\"><a href=\"a01711.html\">Dune::Functions::LeafBasisNode</a></div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:186</div></div>\n-<div class=\"ttc\" id=\"aa01715_html\"><div class=\"ttname\"><a href=\"a01715.html\">Dune::Functions::PowerBasisNode</a></div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:193</div></div>\n-<div class=\"ttc\" id=\"aa01715_html_a5b32a16f032d0492e10cd9349a00063d\"><div class=\"ttname\"><a href=\"a01715.html#a5b32a16f032d0492e10cd9349a00063d\">Dune::Functions::PowerBasisNode::element</a></div><div class=\"ttdeci\">const Element & element() const</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:207</div></div>\n-<div class=\"ttc\" id=\"aa01715_html_a730fb3161aee6967017fb7b6de624c00\"><div class=\"ttname\"><a href=\"a01715.html#a730fb3161aee6967017fb7b6de624c00\">Dune::Functions::PowerBasisNode::Element</a></div><div class=\"ttdeci\">typename T::Element Element</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:199</div></div>\n-<div class=\"ttc\" id=\"aa01715_html_aa773c868e1fd0662b133a9c401fe9b4b\"><div class=\"ttname\"><a href=\"a01715.html#aa773c868e1fd0662b133a9c401fe9b4b\">Dune::Functions::PowerBasisNode::PowerBasisNode</a></div><div class=\"ttdeci\">PowerBasisNode(const typename Node::NodeStorage &children)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:203</div></div>\n-<div class=\"ttc\" id=\"aa01715_html_ac162976f8cac3b609f4706aefde700c0\"><div class=\"ttname\"><a href=\"a01715.html#ac162976f8cac3b609f4706aefde700c0\">Dune::Functions::PowerBasisNode::PowerBasisNode</a></div><div class=\"ttdeci\">PowerBasisNode()=default</div></div>\n-<div class=\"ttc\" id=\"aa01719_html\"><div class=\"ttname\"><a href=\"a01719.html\">Dune::Functions::CompositeBasisNode</a></div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:219</div></div>\n-<div class=\"ttc\" id=\"aa01719_html_a0366c531894faebfab57f755debf90eb\"><div class=\"ttname\"><a href=\"a01719.html#a0366c531894faebfab57f755debf90eb\">Dune::Functions::CompositeBasisNode::CompositeBasisNode</a></div><div class=\"ttdeci\">CompositeBasisNode()=default</div></div>\n-<div class=\"ttc\" id=\"aa01719_html_a2f068a781f0d898766b3f393d849f14e\"><div class=\"ttname\"><a href=\"a01719.html#a2f068a781f0d898766b3f393d849f14e\">Dune::Functions::CompositeBasisNode::CompositeBasisNode</a></div><div class=\"ttdeci\">CompositeBasisNode(const typename Node::NodeStorage &children)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:229</div></div>\n-<div class=\"ttc\" id=\"aa01719_html_a9c235f8829e7afa0436b223365fd8bb8\"><div class=\"ttname\"><a href=\"a01719.html#a9c235f8829e7afa0436b223365fd8bb8\">Dune::Functions::CompositeBasisNode::element</a></div><div class=\"ttdeci\">const Element & element() const</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:238</div></div>\n-<div class=\"ttc\" id=\"aa01719_html_abdd9920608523a7ca70b6b330f133b89\"><div class=\"ttname\"><a href=\"a01719.html#abdd9920608523a7ca70b6b330f133b89\">Dune::Functions::CompositeBasisNode::Element</a></div><div class=\"ttdeci\">typename Node::template Child< 0 >::Type::Element Element</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:225</div></div>\n-<div class=\"ttc\" id=\"aa01719_html_ac9d87ea800634bfc8e45ccd2f0b41acf\"><div class=\"ttname\"><a href=\"a01719.html#ac9d87ea800634bfc8e45ccd2f0b41acf\">Dune::Functions::CompositeBasisNode::CompositeBasisNode</a></div><div class=\"ttdeci\">CompositeBasisNode(const std::shared_ptr< Children > &... children)</div><div class=\"ttdef\"><b>Definition:</b> nodes.hh:234</div></div>\n+<div class=\"ttc\" id=\"aa00219_html_ad0a3b4e397e76b3d02cb06a7793fdb7b\"><div class=\"ttname\"><a href=\"a00219.html#ad0a3b4e397e76b3d02cb06a7793fdb7b\">Dune::Functions::fieldTypes</a></div><div class=\"ttdeci\">constexpr auto fieldTypes()</div><div class=\"ttdoc\">Generate list of field types in container.</div><div class=\"ttdef\"><b>Definition:</b> istlvectorbackend.hh:63</div></div>\n+<div class=\"ttc\" id=\"aa00219_html_af8b09a0411c63ab6a6500a7b6edb9dfb\"><div class=\"ttname\"><a href=\"a00219.html#af8b09a0411c63ab6a6500a7b6edb9dfb\">Dune::Functions::hasUniqueFieldType</a></div><div class=\"ttdeci\">constexpr bool hasUniqueFieldType()</div><div class=\"ttdoc\">Check if container has a unique field type.</div><div class=\"ttdef\"><b>Definition:</b> istlvectorbackend.hh:74</div></div>\n+<div class=\"ttc\" id=\"aa02876_html\"><div class=\"ttname\"><a href=\"a02876.html\">concepts.hh</a></div></div>\n </div><!-- fragment --></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n", "details": [{"source1": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-us-ascii\n+utf-8\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,355 +4,365 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * functionspacebases\n-nodes.hh\n+ * backends\n+istlvectorbackend.hh\n Go_to_the_documentation_of_this_file.\n 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-\n 2// vi: set et ts=4 sw=2 sts=2:\n- 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH\n- 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH\n+ 3#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH\n+ 4#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH\n 5\n- 6#include <cassert>\n- 7#include <memory>\n- 8\n- 9#include <dune/common/indices.hh>\n- 10\n- 11#include <dune/typetree/leafnode.hh>\n- 12#include <dune/typetree/powernode.hh>\n- 13#include <dune/typetree/compositenode.hh>\n- 14#include <dune/typetree/traversal.hh>\n- 15#include <dune/typetree/visitor.hh>\n- 16\n- 17namespace Dune {\n- 18 namespace Functions {\n- 19\n- 20\n- 21 namespace Impl {\n- 22\n+ 6#include <cstddef>\n+ 7#include <utility>\n+ 8#include <type_traits>\n+ 9\n+ 10#include <dune/common/std/type_traits.hh>\n+ 11#include <dune/common/indices.hh>\n+ 12#include <dune/common/hybridutilities.hh>\n+ 13#include <dune/common/concept.hh>\n+ 14\n+ 15#include <dune/functions/common/indexaccess.hh>\n+ 16#include <dune/functions/functionspacebases/concepts.hh>\n+ 17\n+ 18\n+ 19namespace Dune {\n+ 20namespace Functions {\n+ 21\n+ 22namespace Impl {\n 23\n- 24 struct ClearSizeVisitor\n- 25 : public TypeTree::TreeVisitor\n- 26 , public TypeTree::DynamicTraversal\n- 27 {\n- 28\n- 29 template<typename Node, typename TreePath>\n- 30 void pre(Node& node, TreePath treePath)\n- 31 {\n- 32 leaf(node,treePath);\n- 33 node.setSize(0);\n- 34 }\n- 35\n- 36 template<typename Node, typename TreePath>\n- 37 void leaf(Node& node, TreePath treePath)\n+ 24template<class V,\n+ 25 std::enable_if_t<not Dune::models<Imp::Concept::HasStaticIndexAccess, V>()\n+, int> = 0>\n+ 26auto fieldTypes(V&& /*v*/)\n+ 27{\n+ 28 return TypeList<V>{};\n+ 29}\n+ 30\n+ 31template<class V,\n+ 32 std::enable_if_t<Dune::models<Imp::Concept::HasStaticIndexAccess, V>(),\n+int> = 0>\n+ 33auto fieldTypes(V&& v)\n+ 34{\n+ 35 if constexpr (Dune::models<Imp::Concept::HasDynamicIndexAccess<std::\n+size_t>, V>())\n+ 36 return fieldTypes(v[std::size_t{0}]);\n+ 37 else\n 38 {\n- 39 node.setOffset(offset_);\n- 40 }\n- 41\n- 42 ClearSizeVisitor(std::size_t offset)\n- 43 : offset_(offset)\n- 44 {}\n+ 39 auto indexRange = typename decltype(range(Hybrid::size(v)))::\n+integer_sequence();\n+ 40 return unpackIntegerSequence([&](auto... i) {\n+ 41 return uniqueTypeList(std::tuple_cat(fieldTypes(v[i])...));\n+ 42 }, indexRange);\n+ 43 }\n+ 44}\n 45\n- 46 const std::size_t offset_;\n+ 46} // namespace Impl\n 47\n- 48 };\n+ 48\n 49\n- 50\n- 51 template<typename Entity>\n- 52 struct BindVisitor\n- 53 : public TypeTree::TreeVisitor\n- 54 , public TypeTree::DynamicTraversal\n- 55 {\n- 56\n- 57 template<typename Node, typename TreePath>\n- 58 void pre(Node& node, TreePath)\n- 59 {\n- 60 node.setOffset(offset_);\n- 61 }\n- 62\n- 63 template<typename Node, typename TreePath>\n- 64 void post(Node& node, TreePath)\n- 65 {\n- 66 node.setSize(offset_ - node.offset());\n- 67 }\n- 68\n- 69 template<typename Node, typename TreePath>\n- 70 void leaf(Node& node, TreePath)\n- 71 {\n- 72 node.setOffset(offset_);\n- 73 node.bind(entity_);\n- 74 offset_ += node.size();\n- 75 }\n- 76\n- 77 BindVisitor(const Entity& entity, std::size_t offset = 0)\n- 78 : entity_(entity)\n- 79 , offset_(offset)\n- 80 {}\n- 81\n- 82 const Entity& entity_;\n- 83 std::size_t offset_;\n- 84\n- 85 };\n- 86\n- 87\n- 88 struct InitializeTreeVisitor :\n- 89 public TypeTree::TreeVisitor,\n- 90 public TypeTree::DynamicTraversal\n- 91 {\n- 92 template<typename Node, typename TreePath>\n- 93 void pre(Node& node, TreePath)\n- 94 {\n- 95 node.setTreeIndex(treeIndex_);\n- 96 ++treeIndex_;\n- 97 }\n- 98\n- 99 template<typename Node, typename TreePath>\n- 100 void leaf(Node& node, TreePath)\n- 101 {\n- 102 node.setTreeIndex(treeIndex_);\n- 103 ++treeIndex_;\n- 104 }\n- 105\n- 106 InitializeTreeVisitor(std::size_t treeIndexOffset = 0) :\n- 107 treeIndex_(treeIndexOffset)\n- 108 {}\n- 109\n- 110 std::size_t treeIndex_;\n- 111 };\n- 112\n- 113 } // end namespace Impl\n+ 62template<class V>\n+63constexpr auto fieldTypes()\n+ 64{\n+ 65 return decltype(Impl::fieldTypes(std::declval<V>())){};\n+ 66}\n+ 67\n+ 73template<class V>\n+74constexpr bool hasUniqueFieldType()\n+ 75{\n+ 76 return std::tuple_size<std::decay_t<decltype(fieldTypes<V>())>>::value==1;\n+ 77}\n+ 78\n+ 79\n+ 80\n+ 81namespace Impl {\n+ 82\n+ 83/*\n+ 84 * \\brief A wrapper providing multi-index access to vector entries\n+ 85 *\n+ 86 * The wrapped vector type should be an istl like random\n+ 87 * access container providing operator[] and size() methods.\n+ 88 * For classical containers this should support indices\n+ 89 * of type std::size_t. For multi-type containers indices\n+ 90 * of the form Dune::index_constant<i> should be supported\n+ 91 * while size() should be a static constexpr method.\n+ 92 *\n+ 93 * When resolving multi-indices the backend appends indices\n+ 94 * using operator[] as long as the result is not a scalar.\n+ 95 * If this exhausts the digits of the multi-index, additional\n+ 96 * zero`s are appended.\n+ 97 *\n+ 98 * \\tparam V Type of the raw wrapper vector\n+ 99 */\n+ 100template<class V>\n+ 101class ISTLVectorBackend\n+ 102{\n+ 103\n+ 104 // Template aliases for using detection idiom.\n+ 105 template<class C>\n+ 106 using dynamicIndexAccess_t = decltype(std::declval<C>()[0]);\n+ 107\n+ 108 template<class C>\n+ 109 using staticIndexAccess_t = decltype(std::declval<C>()[Dune::Indices::\n+_0]);\n+ 110\n+ 111 template<class C>\n+ 112 using resizeMethod_t = decltype(std::declval<C>().resize(0));\n+ 113\n 114\n 115\n-116 class BasisNodeMixin\n- 117 {\n- 118\n- 119 friend struct Impl::ClearSizeVisitor;\n- 120\n- 121 template<typename>\n- 122 friend struct Impl::BindVisitor;\n- 123\n- 124 friend struct Impl::InitializeTreeVisitor;\n+ 116 // Short cuts for feature detection\n+ 117 template<class C>\n+ 118 using hasDynamicIndexAccess = Dune::Std::is_detected<dynamicIndexAccess_t,\n+std::remove_reference_t<C>>;\n+ 119\n+ 120 template<class C>\n+ 121 using hasStaticIndexAccess = Dune::Std::is_detected<staticIndexAccess_t,\n+std::remove_reference_t<C>>;\n+ 122\n+ 123 template<class C>\n+ 124 using hasResizeMethod = Dune::Std::is_detected<resizeMethod_t, std::\n+remove_reference_t<C>>;\n 125\n- 126 public:\n- 127\n-128 using size_type = std::size_t;\n- 129\n-130 BasisNodeMixin() :\n- 131 offset_(0),\n- 132 size_(0),\n- 133 treeIndex_(0)\n- 134 {}\n- 135\n-136 size_type localIndex(size_type i) const\n- 137 {\n- 138 assert(i < size_);\n- 139 return offset_ + i;\n- 140 }\n+ 126 template<class C>\n+ 127 using isDynamicVector = Dune::Std::is_detected<dynamicIndexAccess_t, std::\n+remove_reference_t<C>>;\n+ 128\n+ 129 template<class C>\n+ 130 using isStaticVector = Dune::Std::bool_constant<\n+ 131 Dune::Std::is_detected_v<staticIndexAccess_t, std::remove_reference_t<C>>\n+ 132 and not Dune::Std::is_detected_v<dynamicIndexAccess_t, std::\n+remove_reference_t<C>>>;\n+ 133\n+ 134 template<class C>\n+ 135 using isScalar = Dune::Std::bool_constant<not Dune::Std::\n+is_detected_v<staticIndexAccess_t, std::remove_reference_t<C>>>;\n+ 136\n+ 137 template<class C>\n+ 138 using isVector = Dune::Std::bool_constant<Dune::Std::\n+is_detected_v<staticIndexAccess_t, std::remove_reference_t<C>>>;\n+ 139\n+ 140\n 141\n-142 size_type size() const\n- 143 {\n- 144 return size_;\n- 145 }\n- 146\n-147 size_type treeIndex() const\n- 148 {\n- 149 return treeIndex_;\n- 150 }\n- 151\n- 152 protected:\n- 153\n-154 size_type offset() const\n+ 142 template<class... Args>\n+ 143 static void forwardToResize(Args&&... args)\n+ 144 {\n+ 145 resize(std::forward<Args>(args)...);\n+ 146 }\n+ 147\n+ 148\n+ 149 template<class C, class SizeProvider,\n+ 150 std::enable_if_t<hasResizeMethod<C>::value, int> = 0>\n+ 151 static void resize(C&& c, const SizeProvider& sizeProvider, typename\n+SizeProvider::SizePrefix prefix)\n+ 152 {\n+ 153 auto size = sizeProvider.size(prefix);\n+ 154 if (size==0)\n 155 {\n- 156 return offset_;\n- 157 }\n- 158\n-159 void setOffset(const size_type offset)\n- 160 {\n- 161 offset_ = offset;\n- 162 }\n- 163\n-164 void setSize(const size_type size)\n- 165 {\n- 166 size_ = size;\n- 167 }\n- 168\n-169 void setTreeIndex(size_type treeIndex)\n- 170 {\n- 171 treeIndex_ = treeIndex;\n- 172 }\n- 173\n- 174 private:\n- 175\n- 176 size_type offset_;\n- 177 size_type size_;\n- 178 size_type treeIndex_;\n- 179\n- 180 };\n- 181\n+ 156 // If size==0 this prefix refers to a single coefficient c.\n+ 157 // But being in this overload means that c is not a scalar\n+ 158 // because is has a resize() method. Since operator[] deliberately\n+ 159 // supports implicit padding of multi-indices by as many\n+ 160 // [0]'s as needed to resolve a scalar entry, we should also\n+ 161 // except a non-scalar c here. However, this requires that\n+ 162 // we silently believe that whatever size c already has is\n+ 163 // intended by the user. The only exception is c.size()==0\n+ 164 // which is not acceptable but we also cannot know the desired size.\n+ 165 if (c.size()==0)\n+ 166 DUNE_THROW(RangeError, \"The vector entry v[\" << prefix << \"] should refer\n+to a \"\n+ 167 << \"scalar coefficient, but is a dynamically sized vector of size==0\");\n+ 168 else\n+ 169 // Accept non-zero sized coefficients to avoid that resize(basis)\n+ 170 // fails for a vector that works with operator[] and already\n+ 171 // has the appropriate size.\n+ 172 return;\n+ 173 }\n+ 174 c.resize(size);\n+ 175 prefix.push_back(0);\n+ 176 for(std::size_t i=0; i<size; ++i)\n+ 177 {\n+ 178 prefix.back() = i;\n+ 179 resize(c[i], sizeProvider, prefix);\n+ 180 }\n+ 181 }\n 182\n-183 class LeafBasisNode :\n- 184 public BasisNodeMixin,\n- 185 public TypeTree::LeafNode\n- 186 {};\n- 187\n- 188\n- 189 template<typename T, std::size_t n>\n-190 class PowerBasisNode :\n- 191 public BasisNodeMixin,\n- 192 public TypeTree::PowerNode<T,n>\n- 193 {\n+ 183 template<class C, class SizeProvider,\n+ 184 std::enable_if_t<not hasResizeMethod<C>::value, int> = 0,\n+ 185 std::enable_if_t<isVector<C>::value, int> = 0>\n+ 186 static void resize(C&& c, const SizeProvider& sizeProvider, typename\n+SizeProvider::SizePrefix prefix)\n+ 187 {\n+ 188 auto size = sizeProvider.size(prefix);\n+ 189 // If size == 0 there's nothing to do:\n+ 190 // We can't resize c and it's already\n+ 191 // large enough anyway.\n+ 192 if (size == 0)\n+ 193 return;\n 194\n- 195 using Node = TypeTree::PowerNode<T,n>;\n- 196\n- 197 public:\n- 198\n-199 using Element = typename T::Element;\n- 200\n-201 PowerBasisNode() = default;\n- 202\n-203 PowerBasisNode(const typename Node::NodeStorage& children) :\n- 204 Node(children)\n- 205 {}\n- 206\n-207 const Element& element() const\n- 208 {\n- 209 return this->child(Dune::Indices::_0).element();\n- 210 }\n- 211\n- 212 };\n- 213\n- 214\n- 215 template<typename... T>\n-216 class CompositeBasisNode :\n- 217 public BasisNodeMixin,\n- 218 public TypeTree::CompositeNode<T...>\n- 219 {\n+ 195 // If size>0 but c does not have the appropriate\n+ 196 // size we throw an exception.\n+ 197 //\n+ 198 // We could perhaps also allow c.size()>size.\n+ 199 // But then looping the loop below gets complicated:\n+ 200 // We're not allowed to loop until c.size(). But\n+ 201 // we also cannot use size for termination,\n+ 202 // because this fails if c is a static vector.\n+ 203 if (c.size() != size)\n+ 204 DUNE_THROW(RangeError, \"Can't resize non-resizable entry v[\" << prefix <<\n+\"] of size \" << c.size() << \" to size(\" << prefix << \")=\" << size);\n+ 205\n+ 206 // Recursively resize all entries of c now.\n+ 207 using namespace Dune::Hybrid;\n+ 208 prefix.push_back(0);\n+ 209 forEach(integralRange(Hybrid::size(c)), [&](auto&& i) {\n+ 210 prefix.back() = i;\n+ 211 // Here we'd simply like to call resize(c[i], sizeProvider, prefix);\n+ 212 // but even gcc-7 does not except this bus reports\n+ 213 // \"error: \u2018this\u2019 was not captured for this lambda function\"\n+ 214 // although there's no 'this' because we're in a static method.\n+ 215 // Bypassing this by and additional method that does perfect\n+ 216 // forwarding allows to workaround this.\n+ 217 ISTLVectorBackend<V>::forwardToResize(c[i], sizeProvider, prefix);\n+ 218 });\n+ 219 }\n 220\n- 221 using Node = TypeTree::CompositeNode<T...>;\n- 222\n- 223 public:\n- 224\n-225 using Element = typename Node::template Child<0>::Type::Element;\n- 226\n-227 CompositeBasisNode() = default;\n- 228\n-229 CompositeBasisNode(const typename Node::NodeStorage& children) :\n- 230 Node(children)\n- 231 {}\n- 232\n- 233 template<typename... Children>\n-234 CompositeBasisNode(const std::shared_ptr<Children>&... children) :\n- 235 Node(children...)\n- 236 {}\n+ 221 template<class C, class SizeProvider,\n+ 222 std::enable_if_t<not hasResizeMethod<C>::value, int> = 0,\n+ 223 std::enable_if_t<isScalar<C>::value, int> = 0>\n+ 224 static void resize(C&&, const SizeProvider& sizeProvider, typename\n+SizeProvider::SizePrefix prefix)\n+ 225 {\n+ 226 auto size = sizeProvider.size(prefix);\n+ 227 if (size != 0)\n+ 228 DUNE_THROW(RangeError, \"Can't resize scalar vector entry v[\" << prefix <<\n+\"] to size(\" << prefix << \")=\" << size);\n+ 229 }\n+ 230\n+ 231 template<class C, class T,\n+ 232 std::enable_if_t<std::is_assignable<C&,T>::value, int> = 0>\n+ 233 void recursiveAssign(C& c, const T& t)\n+ 234 {\n+ 235 c = t;\n+ 236 }\n 237\n-238 const Element& element() const\n- 239 {\n- 240 return this->child(Dune::Indices::_0).element();\n- 241 }\n- 242\n- 243 };\n- 244\n- 245\n- 246 template<typename Tree>\n-247 void clearSize(Tree& tree, std::size_t offset)\n- 248 {\n- 249 TypeTree::applyToTree(tree,Impl::ClearSizeVisitor(offset));\n- 250 }\n- 251\n- 252 template<typename Tree, typename Entity>\n-253 void bindTree(Tree& tree, const Entity& entity, std::size_t offset = 0)\n- 254 {\n- 255 Impl::BindVisitor<Entity> visitor(entity,offset);\n- 256 TypeTree::applyToTree(tree,visitor);\n- 257 }\n- 258\n- 259 template<typename Tree>\n-260 void initializeTree(Tree& tree, std::size_t treeIndexOffset = 0)\n- 261 {\n- 262 Impl::InitializeTreeVisitor visitor(treeIndexOffset);\n- 263 TypeTree::applyToTree(tree,visitor);\n- 264 }\n- 265\n- 266\n- 267 } // namespace Functions\n+ 238 template<class C, class T,\n+ 239 std::enable_if_t<not std::is_assignable<C&,T>::value, int> = 0>\n+ 240 void recursiveAssign(C& c, const T& t)\n+ 241 {\n+ 242 Dune::Hybrid::forEach(c, [&](auto&& ci) {\n+ 243 recursiveAssign(ci, t);\n+ 244 });\n+ 245 }\n+ 246\n+ 247public:\n+ 248\n+ 249 using Vector = V;\n+ 250\n+ 251 ISTLVectorBackend(Vector& vector) :\n+ 252 vector_(&vector)\n+ 253 {}\n+ 254\n+ 255 template<class SizeProvider>\n+ 256 void resize(const SizeProvider& sizeProvider)\n+ 257 {\n+ 258 auto prefix = typename SizeProvider::SizePrefix();\n+ 259 prefix.resize(0);\n+ 260 resize(*vector_, sizeProvider, prefix);\n+ 261 }\n+ 262\n+ 263 template<class MultiIndex>\n+ 264 decltype(auto) operator[](const MultiIndex& index) const\n+ 265 {\n+ 266 return resolveDynamicMultiIndex(*vector_, index);\n+ 267 }\n 268\n- 269} // namespace Dune\n- 270\n- 271#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_NODES_HH\n+ 269 template<class MultiIndex>\n+ 270 decltype(auto) operator[](const MultiIndex& index)\n+ 271 {\n+ 272 return resolveDynamicMultiIndex(*vector_, index);\n+ 273 }\n+ 274\n+ 283 template<typename T>\n+ 284 void operator= (const T& other)\n+ 285 {\n+ 286 recursiveAssign(vector(), other);\n+ 287 }\n+ 288\n+ 289 template<typename T>\n+ 290 void operator= (const ISTLVectorBackend<T>& other)\n+ 291 {\n+ 292 vector() = other.vector();\n+ 293 }\n+ 294\n+ 295 const Vector& vector() const\n+ 296 {\n+ 297 return *vector_;\n+ 298 }\n+ 299\n+ 300 Vector& vector()\n+ 301 {\n+ 302 return *vector_;\n+ 303 }\n+ 304\n+ 305private:\n+ 306\n+ 307 Vector* vector_;\n+ 308};\n+ 309\n+ 310} // end namespace Impl\n+ 311\n+ 312\n+ 313\n+ 345template<class Vector>\n+346auto istlVectorBackend(Vector& v)\n+ 347{\n+ 348 static_assert(hasUniqueFieldType<Vector&>(), \"Vector type passed to\n+istlVectorBackend() does not have a unique field type.\");\n+ 349 return Impl::ISTLVectorBackend<Vector>(v);\n+ 350}\n+ 351\n+ 352\n+ 353\n+ 383template<class Vector>\n+384auto istlVectorBackend(const Vector& v)\n+ 385{\n+ 386 static_assert(hasUniqueFieldType<const Vector&>(), \"Vector type passed to\n+istlVectorBackend() does not have a unique field type.\");\n+ 387 return Impl::ISTLVectorBackend<const Vector>(v);\n+ 388}\n+ 389\n+ 390\n+ 391\n+ 392} // namespace Functions\n+ 393} // namespace Dune\n+ 394\n+ 395\n+ 396#endif // DUNE_FUNCTIONS_FUNCTIONSPACEBASES_ISTLVECTORBACKEND_HH\n+indexaccess.hh\n+Dune::Functions::istlVectorBackend\n+auto istlVectorBackend(Vector &v)\n+Return a vector backend wrapping non-const ISTL like containers.\n+Definition: istlvectorbackend.hh:346\n+Dune::Functions::resolveDynamicMultiIndex\n+constexpr decltype(auto) resolveDynamicMultiIndex(C &&c, const MultiIndex\n+&multiIndex, const IsFinal &isFinal)\n+Provide multi-index access by chaining operator[].\n+Definition: indexaccess.hh:354\n Dune\n Definition: polynomial.hh:10\n-Dune::Functions::clearSize\n-void clearSize(Tree &tree, std::size_t offset)\n-Definition: nodes.hh:247\n-Dune::Functions::bindTree\n-void bindTree(Tree &tree, const Entity &entity, std::size_t offset=0)\n-Definition: nodes.hh:253\n-Dune::Functions::initializeTree\n-void initializeTree(Tree &tree, std::size_t treeIndexOffset=0)\n-Definition: nodes.hh:260\n-Dune::Functions::BasisNodeMixin\n-Definition: nodes.hh:117\n-Dune::Functions::BasisNodeMixin::treeIndex\n-size_type treeIndex() const\n-Definition: nodes.hh:147\n-Dune::Functions::BasisNodeMixin::localIndex\n-size_type localIndex(size_type i) const\n-Definition: nodes.hh:136\n-Dune::Functions::BasisNodeMixin::offset\n-size_type offset() const\n-Definition: nodes.hh:154\n-Dune::Functions::BasisNodeMixin::size\n-size_type size() const\n-Definition: nodes.hh:142\n-Dune::Functions::BasisNodeMixin::setOffset\n-void setOffset(const size_type offset)\n-Definition: nodes.hh:159\n-Dune::Functions::BasisNodeMixin::size_type\n-std::size_t size_type\n-Definition: nodes.hh:128\n-Dune::Functions::BasisNodeMixin::BasisNodeMixin\n-BasisNodeMixin()\n-Definition: nodes.hh:130\n-Dune::Functions::BasisNodeMixin::setSize\n-void setSize(const size_type size)\n-Definition: nodes.hh:164\n-Dune::Functions::BasisNodeMixin::setTreeIndex\n-void setTreeIndex(size_type treeIndex)\n-Definition: nodes.hh:169\n-Dune::Functions::LeafBasisNode\n-Definition: nodes.hh:186\n-Dune::Functions::PowerBasisNode\n-Definition: nodes.hh:193\n-Dune::Functions::PowerBasisNode::element\n-const Element & element() const\n-Definition: nodes.hh:207\n-Dune::Functions::PowerBasisNode::Element\n-typename T::Element Element\n-Definition: nodes.hh:199\n-Dune::Functions::PowerBasisNode::PowerBasisNode\n-PowerBasisNode(const typename Node::NodeStorage &children)\n-Definition: nodes.hh:203\n-Dune::Functions::PowerBasisNode::PowerBasisNode\n-PowerBasisNode()=default\n-Dune::Functions::CompositeBasisNode\n-Definition: nodes.hh:219\n-Dune::Functions::CompositeBasisNode::CompositeBasisNode\n-CompositeBasisNode()=default\n-Dune::Functions::CompositeBasisNode::CompositeBasisNode\n-CompositeBasisNode(const typename Node::NodeStorage &children)\n-Definition: nodes.hh:229\n-Dune::Functions::CompositeBasisNode::element\n-const Element & element() const\n-Definition: nodes.hh:238\n-Dune::Functions::CompositeBasisNode::Element\n-typename Node::template Child< 0 >::Type::Element Element\n-Definition: nodes.hh:225\n-Dune::Functions::CompositeBasisNode::CompositeBasisNode\n-CompositeBasisNode(const std::shared_ptr< Children > &... children)\n-Definition: nodes.hh:234\n+Dune::Functions::fieldTypes\n+constexpr auto fieldTypes()\n+Generate list of field types in container.\n+Definition: istlvectorbackend.hh:63\n+Dune::Functions::hasUniqueFieldType\n+constexpr bool hasUniqueFieldType()\n+Check if container has a unique field type.\n+Definition: istlvectorbackend.hh:74\n+concepts.hh\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01047.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01047.html", "unified_diff": "@@ -73,15 +73,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::Polynomial< K > Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00209.html\">Function implementations</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>A scalar polynomial implementation. \n <a href=\"a01047.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00002_source.html\">dune/functions/analyticfunctions/polynomial.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00005_source.html\">dune/functions/analyticfunctions/polynomial.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-methods\" name=\"pub-methods\"></a>\n Public Member Functions</h2></td></tr>\n <tr class=\"memitem:a07e1e774e4c3c7b408ec76238faa98e9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"> </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01047.html#a07e1e774e4c3c7b408ec76238faa98e9\">Polynomial</a> ()=default</td></tr>\n <tr class=\"memdesc:a07e1e774e4c3c7b408ec76238faa98e9\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Default constructor. <a href=\"a01047.html#a07e1e774e4c3c7b408ec76238faa98e9\">More...</a><br /></td></tr>\n <tr class=\"separator:a07e1e774e4c3c7b408ec76238faa98e9\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a9ebe46572da09754e511648d2a4a99fa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"> </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01047.html#a9ebe46572da09754e511648d2a4a99fa\">Polynomial</a> (const <a class=\"el\" href=\"a01047.html\">Polynomial</a> &other)=default</td></tr>\n@@ -428,15 +428,15 @@\n </div><div class=\"memdoc\">\n \n <p>Move-assignment operator. </p>\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00002_source.html\">polynomial.hh</a></li>\n+<li><a class=\"el\" href=\"a00005_source.html\">polynomial.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01051.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01051.html", "unified_diff": "@@ -72,15 +72,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::TrigonometricFunction< K, sinFactor, cosFactor > Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00209.html\">Function implementations</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>A linear combination of trigonomic functions. \n <a href=\"a01051.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00005_source.html\">dune/functions/analyticfunctions/trigonometricfunction.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00002_source.html\">dune/functions/analyticfunctions/trigonometricfunction.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-methods\" name=\"pub-methods\"></a>\n Public Member Functions</h2></td></tr>\n <tr class=\"memitem:a84e99df5856264ae06faa710876763aa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">K </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01051.html#a84e99df5856264ae06faa710876763aa\">operator()</a> (const K &x) const</td></tr>\n <tr class=\"memdesc:a84e99df5856264ae06faa710876763aa\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Evaluate function. <a href=\"a01051.html#a84e99df5856264ae06faa710876763aa\">More...</a><br /></td></tr>\n <tr class=\"separator:a84e99df5856264ae06faa710876763aa\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n@@ -124,15 +124,15 @@\n </div><div class=\"memdoc\">\n \n <p>Evaluate function. </p>\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00005_source.html\">trigonometricfunction.hh</a></li>\n+<li><a class=\"el\" href=\"a00002_source.html\">trigonometricfunction.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01067.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01067.html", "unified_diff": "@@ -72,15 +72,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::CallableFunctionWrapper< F > Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00209.html\">Function implementations</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Wrap a Dune::VirtualFunction into a callable object. \n <a href=\"a01067.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00071_source.html\">dune/functions/common/callable.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00014_source.html\">dune/functions/common/callable.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-methods\" name=\"pub-methods\"></a>\n Public Member Functions</h2></td></tr>\n <tr class=\"memitem:a488ad53137f6f83fd7efff332758bbf3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"> </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01067.html#a488ad53137f6f83fd7efff332758bbf3\">CallableFunctionWrapper</a> (const F &f)</td></tr>\n <tr class=\"memdesc:a488ad53137f6f83fd7efff332758bbf3\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Instantiate from reference to f. <a href=\"a01067.html#a488ad53137f6f83fd7efff332758bbf3\">More...</a><br /></td></tr>\n <tr class=\"separator:a488ad53137f6f83fd7efff332758bbf3\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:af374bad6d7410748c48c4cfdf085fd56\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"> </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01067.html#af374bad6d7410748c48c4cfdf085fd56\">CallableFunctionWrapper</a> (const std::shared_ptr< const F > &f)</td></tr>\n@@ -194,15 +194,15 @@\n \n <p>Forward operator() to F::evaluate() </p>\n <p >This uses the default constructor of F::RangeType </p>\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00071_source.html\">callable.hh</a></li>\n+<li><a class=\"el\" href=\"a00014_source.html\">callable.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01071.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01071.html", "unified_diff": "@@ -69,19 +69,19 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::InvalidRange Class Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00210.html\">Function related utilities</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Dummy range class to be used if no proper type is available. \n <a href=\"a01071.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00080_source.html\">dune/functions/common/defaultderivativetraits.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00035_source.html\">dune/functions/common/defaultderivativetraits.hh</a>></code></p>\n <a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n <div class=\"textblock\"><p >Dummy range class to be used if no proper type is available. </p>\n </div><hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00080_source.html\">defaultderivativetraits.hh</a></li>\n+<li><a class=\"el\" href=\"a00035_source.html\">defaultderivativetraits.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01075.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01075.html", "unified_diff": "@@ -72,15 +72,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::DefaultDerivativeTraits< Signature > Struct Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00210.html\">Function related utilities</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Default implementation for derivative traits. \n <a href=\"a01075.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00080_source.html\">dune/functions/common/defaultderivativetraits.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00035_source.html\">dune/functions/common/defaultderivativetraits.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr class=\"memitem:a3f8978146cb9b334705b651d84194b98\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef <a class=\"el\" href=\"a01071.html\">InvalidRange</a> </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01075.html#a3f8978146cb9b334705b651d84194b98\">Range</a></td></tr>\n <tr class=\"memdesc:a3f8978146cb9b334705b651d84194b98\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Range of derivative for function with given signature. <a href=\"a01075.html#a3f8978146cb9b334705b651d84194b98\">More...</a><br /></td></tr>\n <tr class=\"separator:a3f8978146cb9b334705b651d84194b98\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n@@ -104,15 +104,15 @@\n </div><div class=\"memdoc\">\n \n <p>Range of derivative for function with given signature. </p>\n \n </div>\n </div>\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00080_source.html\">defaultderivativetraits.hh</a></li>\n+<li><a class=\"el\" href=\"a00035_source.html\">defaultderivativetraits.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01079.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01079.html", "unified_diff": "@@ -72,15 +72,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::DefaultDerivativeTraits< double(double) > Struct Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00210.html\">Function related utilities</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Default implementation for derivative traits. \n <a href=\"a01079.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00080_source.html\">dune/functions/common/defaultderivativetraits.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00035_source.html\">dune/functions/common/defaultderivativetraits.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr class=\"memitem:a801e37f182d8c16ba1cfd72de1f17688\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef double </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01079.html#a801e37f182d8c16ba1cfd72de1f17688\">Range</a></td></tr>\n <tr class=\"memdesc:a801e37f182d8c16ba1cfd72de1f17688\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Range of derivative for function with given signature. <a href=\"a01079.html#a801e37f182d8c16ba1cfd72de1f17688\">More...</a><br /></td></tr>\n <tr class=\"separator:a801e37f182d8c16ba1cfd72de1f17688\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n@@ -101,15 +101,15 @@\n </div><div class=\"memdoc\">\n \n <p>Range of derivative for function with given signature. </p>\n \n </div>\n </div>\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00080_source.html\">defaultderivativetraits.hh</a></li>\n+<li><a class=\"el\" href=\"a00035_source.html\">defaultderivativetraits.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01083.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01083.html", "unified_diff": "@@ -72,15 +72,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::DefaultDerivativeTraits< K(FieldVector< K, n >)> Struct Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00210.html\">Function related utilities</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Default implementation for derivative traits. \n <a href=\"a01083.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00080_source.html\">dune/functions/common/defaultderivativetraits.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00035_source.html\">dune/functions/common/defaultderivativetraits.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr class=\"memitem:ad1603332ee1c64f89c0fc18a8ee273d6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef FieldVector< K, n > </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01083.html#ad1603332ee1c64f89c0fc18a8ee273d6\">Range</a></td></tr>\n <tr class=\"memdesc:ad1603332ee1c64f89c0fc18a8ee273d6\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Range of derivative for function with given signature. <a href=\"a01083.html#ad1603332ee1c64f89c0fc18a8ee273d6\">More...</a><br /></td></tr>\n <tr class=\"separator:ad1603332ee1c64f89c0fc18a8ee273d6\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n@@ -110,15 +110,15 @@\n </div><div class=\"memdoc\">\n \n <p>Range of derivative for function with given signature. </p>\n \n </div>\n </div>\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00080_source.html\">defaultderivativetraits.hh</a></li>\n+<li><a class=\"el\" href=\"a00035_source.html\">defaultderivativetraits.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01087.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01087.html", "unified_diff": "@@ -72,15 +72,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::DefaultDerivativeTraits< FieldVector< K, m >(FieldVector< K, n >)> Struct Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00210.html\">Function related utilities</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Default implementation for derivative traits. \n <a href=\"a01087.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00080_source.html\">dune/functions/common/defaultderivativetraits.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00035_source.html\">dune/functions/common/defaultderivativetraits.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr class=\"memitem:ace3fbe5caed8c848072466ff723e82ab\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef FieldMatrix< K, m, n > </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01087.html#ace3fbe5caed8c848072466ff723e82ab\">Range</a></td></tr>\n <tr class=\"memdesc:ace3fbe5caed8c848072466ff723e82ab\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Range of derivative for function with given signature. <a href=\"a01087.html#ace3fbe5caed8c848072466ff723e82ab\">More...</a><br /></td></tr>\n <tr class=\"separator:ace3fbe5caed8c848072466ff723e82ab\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n@@ -110,15 +110,15 @@\n </div><div class=\"memdoc\">\n \n <p>Range of derivative for function with given signature. </p>\n \n </div>\n </div>\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00080_source.html\">defaultderivativetraits.hh</a></li>\n+<li><a class=\"el\" href=\"a00035_source.html\">defaultderivativetraits.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01091.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01091.html", "unified_diff": "@@ -72,15 +72,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::DefaultDerivativeTraits< FieldMatrix< K, 1, m >(FieldVector< K, n >)> Struct Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00210.html\">Function related utilities</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Default implementation for derivative traits. \n <a href=\"a01091.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00080_source.html\">dune/functions/common/defaultderivativetraits.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00035_source.html\">dune/functions/common/defaultderivativetraits.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr class=\"memitem:a5379bc605e79658f7a54ec17e3946e9b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef FieldMatrix< K, m, n > </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01091.html#a5379bc605e79658f7a54ec17e3946e9b\">Range</a></td></tr>\n <tr class=\"memdesc:a5379bc605e79658f7a54ec17e3946e9b\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Range of derivative for function with given signature. <a href=\"a01091.html#a5379bc605e79658f7a54ec17e3946e9b\">More...</a><br /></td></tr>\n <tr class=\"separator:a5379bc605e79658f7a54ec17e3946e9b\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n@@ -110,15 +110,15 @@\n </div><div class=\"memdoc\">\n \n <p>Range of derivative for function with given signature. </p>\n \n </div>\n </div>\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00080_source.html\">defaultderivativetraits.hh</a></li>\n+<li><a class=\"el\" href=\"a00035_source.html\">defaultderivativetraits.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01095.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01095.html", "unified_diff": "@@ -66,17 +66,17 @@\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::DifferentiableFunction< Signature, DerivativeTraits, bufferSize > Class Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00068_source.html\">dune/functions/common/differentiablefunction.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00011_source.html\">dune/functions/common/differentiablefunction.hh</a>></code></p>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00068_source.html\">differentiablefunction.hh</a></li>\n+<li><a class=\"el\" href=\"a00011_source.html\">differentiablefunction.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01103.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01103.html", "unified_diff": "@@ -73,15 +73,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::DifferentiableFunction< Range(Domain), DerivativeTraits, bufferSize > Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00208.html\">Function interface wrappers</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Class storing differentiable functions using type erasure. \n <a href=\"a01103.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00068_source.html\">dune/functions/common/differentiablefunction.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00011_source.html\">dune/functions/common/differentiablefunction.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::DifferentiableFunction< Range(Domain), DerivativeTraits, bufferSize >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01102.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_differentiable_function_3_01_range_07_domain_08_00_01_derivative_traits_00_01buffer_size_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_differentiable_function_3_01_range_07_domain_08_00_01_derivative_traits_00_01buffer_size_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_differentiable_function_3_01_range_07_domain_08_00_01_derivative_traits_00_01buffer_size_01_4_inherit__map\">\n <area shape=\"rect\" title=\"Class storing differentiable functions using type erasure.\" alt=\"\" coords=\"843,65,1081,121\"/>\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"475,43,793,143\"/>\n@@ -224,15 +224,15 @@\n </div><div class=\"memdoc\">\n \n <p>Evaluation of wrapped function. </p>\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00068_source.html\">differentiablefunction.hh</a></li>\n+<li><a class=\"el\" href=\"a00011_source.html\">differentiablefunction.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01127.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01127.html", "unified_diff": "@@ -75,15 +75,15 @@\n <div class=\"center\"><img src=\"a01126.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_differentiable_function_from_callables_3_01_signature_00_01_derivative_traits_00_01_callables_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_differentiable_function_from_callables_3_01_signature_00_01_derivative_traits_00_01_callables_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_differentiable_function_from_callables_3_01_signature_00_01_derivative_traits_00_01_callables_01_4_inherit__map\">\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"5,21,232,77\"/>\n <area shape=\"rect\" href=\"a01127.html\" title=\" \" alt=\"\" coords=\"413,21,696,77\"/>\n </map>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00104_source.html\">differentiablefunctionfromcallables.hh</a></li>\n+<li><a class=\"el\" href=\"a00047_source.html\">differentiablefunctionfromcallables.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01131.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01131.html", "unified_diff": "@@ -74,15 +74,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F > Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00209.html\">Function implementations</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Wrap a list of callable objects as derivative sequence modelling <a class=\"el\" href=\"a01155.html\">Concept::DifferentiableFunction<Range(Domain), DerivativeTraits></a> \n <a href=\"a01131.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00104_source.html\">dune/functions/common/differentiablefunctionfromcallables.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00047_source.html\">dune/functions/common/differentiablefunctionfromcallables.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr class=\"memitem:acffaa1044b3ca19944d0f78fc0ff1ac4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01131.html#acffaa1044b3ca19944d0f78fc0ff1ac4\">Signature</a> = Range(Domain)</td></tr>\n <tr class=\"memdesc:acffaa1044b3ca19944d0f78fc0ff1ac4\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Signature of function. <a href=\"a01131.html#acffaa1044b3ca19944d0f78fc0ff1ac4\">More...</a><br /></td></tr>\n <tr class=\"separator:acffaa1044b3ca19944d0f78fc0ff1ac4\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:acce6cff869c703e4f707474228581e03\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01131.html#acce6cff869c703e4f707474228581e03\">RawSignature</a> = typename <a class=\"el\" href=\"a01291.html\">SignatureTraits</a>< <a class=\"el\" href=\"a01131.html#acffaa1044b3ca19944d0f78fc0ff1ac4\">Signature</a> >::RawSignature</td></tr>\n@@ -255,15 +255,15 @@\n </div><div class=\"memdoc\">\n \n <p>Evaluate function. </p>\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00104_source.html\">differentiablefunctionfromcallables.hh</a></li>\n+<li><a class=\"el\" href=\"a00047_source.html\">differentiablefunctionfromcallables.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01135.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01135.html", "unified_diff": "@@ -74,15 +74,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F, DF, Derivatives... > Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00209.html\">Function implementations</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Wrap a list of callable objects as derivative sequence modelling <a class=\"el\" href=\"a01155.html\">Concept::DifferentiableFunction<Range(Domain), DerivativeTraits></a> \n <a href=\"a01135.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00104_source.html\">dune/functions/common/differentiablefunctionfromcallables.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00047_source.html\">dune/functions/common/differentiablefunctionfromcallables.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr class=\"memitem:a735498bd93fc1c8f33ae9b13ddb56143\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01135.html#a735498bd93fc1c8f33ae9b13ddb56143\">Signature</a> = Range(Domain)</td></tr>\n <tr class=\"separator:a735498bd93fc1c8f33ae9b13ddb56143\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a8a377025a382bd84ae15639b09413719\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01135.html#a8a377025a382bd84ae15639b09413719\">RawSignature</a> = typename <a class=\"el\" href=\"a01291.html\">SignatureTraits</a>< <a class=\"el\" href=\"a01135.html#a735498bd93fc1c8f33ae9b13ddb56143\">Signature</a> >::RawSignature</td></tr>\n <tr class=\"separator:a8a377025a382bd84ae15639b09413719\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n@@ -263,15 +263,15 @@\n </div><div class=\"memdoc\">\n \n <p>Evaluate function. </p>\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00104_source.html\">differentiablefunctionfromcallables.hh</a></li>\n+<li><a class=\"el\" href=\"a00047_source.html\">differentiablefunctionfromcallables.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01139.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01139.html", "unified_diff": "@@ -72,15 +72,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::Concept::Callable< Args > Struct Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00207.html\">Function concepts</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p><a class=\"el\" href=\"a00220.html\">Concept</a> objects that can be called with given argument list. \n <a href=\"a01139.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00053_source.html\">dune/functions/common/functionconcepts.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00020_source.html\">dune/functions/common/functionconcepts.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-methods\" name=\"pub-methods\"></a>\n Public Member Functions</h2></td></tr>\n <tr class=\"memitem:a8020f2dc3373ee93bbb30e7dfd362b9f\"><td class=\"memTemplParams\" colspan=\"2\">template<class F > </td></tr>\n <tr class=\"memitem:a8020f2dc3373ee93bbb30e7dfd362b9f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01139.html#a8020f2dc3373ee93bbb30e7dfd362b9f\">require</a> (F &&f) -> decltype(f(std::declval< Args >()...))</td></tr>\n <tr class=\"separator:a8020f2dc3373ee93bbb30e7dfd362b9f\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n@@ -113,15 +113,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00053_source.html\">functionconcepts.hh</a></li>\n+<li><a class=\"el\" href=\"a00020_source.html\">functionconcepts.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01143.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01143.html", "unified_diff": "@@ -66,15 +66,15 @@\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::Concept::Function< Signature > Struct Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00053_source.html\">functionconcepts.hh</a></li>\n+<li><a class=\"el\" href=\"a00020_source.html\">functionconcepts.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01147.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01147.html", "unified_diff": "@@ -72,15 +72,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::Concept::Function< Range(Domain)> Struct Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00207.html\">Function concepts</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p><a class=\"el\" href=\"a00220.html\">Concept</a> for a function mapping <code>Domain</code> to <code>Range</code>. \n <a href=\"a01147.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00053_source.html\">dune/functions/common/functionconcepts.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00020_source.html\">dune/functions/common/functionconcepts.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::Concept::Function< Range(Domain)>:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01146.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_concept_1_1_function_3_01_range_07_domain_08_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_concept_1_1_function_3_01_range_07_domain_08_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_concept_1_1_function_3_01_range_07_domain_08_4_inherit__map\">\n <area shape=\"rect\" title=\"Concept for a function mapping Domain to Range.\" alt=\"\" coords=\"5,95,196,136\"/>\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"35,5,167,47\"/>\n@@ -123,15 +123,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00053_source.html\">functionconcepts.hh</a></li>\n+<li><a class=\"el\" href=\"a00020_source.html\">functionconcepts.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01151.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01151.html", "unified_diff": "@@ -66,15 +66,15 @@\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::Concept::DifferentiableFunction< Signature, DerivativeTraits > Struct Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00053_source.html\">functionconcepts.hh</a></li>\n+<li><a class=\"el\" href=\"a00020_source.html\">functionconcepts.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01155.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01155.html", "unified_diff": "@@ -73,15 +73,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::Concept::DifferentiableFunction< Range(Domain), DerivativeTraits > Struct Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00207.html\">Function concepts</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p><a class=\"el\" href=\"a00220.html\">Concept</a> for a differentiable function mapping <code>Domain</code> to <code>Range</code>. \n <a href=\"a01155.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00053_source.html\">dune/functions/common/functionconcepts.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00020_source.html\">dune/functions/common/functionconcepts.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::Concept::DifferentiableFunction< Range(Domain), DerivativeTraits >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01154.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_concept_1_1_differentiable_function_3_01_range_07_domain_08_00_01_derivative_traits_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_concept_1_1_differentiable_function_3_01_range_07_domain_08_00_01_derivative_traits_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_concept_1_1_differentiable_function_3_01_range_07_domain_08_00_01_derivative_traits_01_4_inherit__map\">\n <area shape=\"rect\" title=\"Concept for a differentiable function mapping Domain to Range.\" alt=\"\" coords=\"5,109,239,165\"/>\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"29,5,215,61\"/>\n@@ -148,15 +148,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00053_source.html\">functionconcepts.hh</a></li>\n+<li><a class=\"el\" href=\"a00020_source.html\">functionconcepts.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01159.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01159.html", "unified_diff": "@@ -66,15 +66,15 @@\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::Concept::LocalFunction< Signature, LocalContext > Struct Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00053_source.html\">functionconcepts.hh</a></li>\n+<li><a class=\"el\" href=\"a00020_source.html\">functionconcepts.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01163.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01163.html", "unified_diff": "@@ -72,15 +72,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::Concept::LocalFunction< Range(Domain), LocalContext > Struct Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00207.html\">Function concepts</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p><a class=\"el\" href=\"a00220.html\">Concept</a> for a local function mapping <code>Domain</code> to <code>Range</code>. \n <a href=\"a01163.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00053_source.html\">dune/functions/common/functionconcepts.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00020_source.html\">dune/functions/common/functionconcepts.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::Concept::LocalFunction< Range(Domain), LocalContext >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01162.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_concept_1_1_local_function_3_01_range_07_domain_08_00_01_local_context_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_concept_1_1_local_function_3_01_range_07_domain_08_00_01_local_context_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_concept_1_1_local_function_3_01_range_07_domain_08_00_01_local_context_01_4_inherit__map\">\n <area shape=\"rect\" title=\"Concept for a local function mapping Domain to Range.\" alt=\"\" coords=\"11,109,186,165\"/>\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"5,5,192,61\"/>\n@@ -124,15 +124,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00053_source.html\">functionconcepts.hh</a></li>\n+<li><a class=\"el\" href=\"a00020_source.html\">functionconcepts.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01167.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01167.html", "unified_diff": "@@ -66,15 +66,15 @@\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::Concept::DifferentiableLocalFunction< Signature, LocalContext, DerivativeTraits > Struct Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00053_source.html\">functionconcepts.hh</a></li>\n+<li><a class=\"el\" href=\"a00020_source.html\">functionconcepts.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01171.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01171.html", "unified_diff": "@@ -72,15 +72,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::Concept::DifferentiableLocalFunction< Range(Domain), LocalContext, DerivativeTraits > Struct Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00207.html\">Function concepts</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p><a class=\"el\" href=\"a00220.html\">Concept</a> for a differentiable local function mapping <code>Domain</code> to <code>Range</code>. \n <a href=\"a01171.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00053_source.html\">dune/functions/common/functionconcepts.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00020_source.html\">dune/functions/common/functionconcepts.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::Concept::DifferentiableLocalFunction< Range(Domain), LocalContext, DerivativeTraits >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01170.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_concept_1_1_differentiable_local_function_3_01_range_07_domain_08_00_01_local_context_00_01_derivative_traits_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_concept_1_1_differentiable_local_function_3_01_range_07_domain_08_00_01_local_context_00_01_derivative_traits_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_concept_1_1_differentiable_local_function_3_01_range_07_domain_08_00_01_local_context_00_01_derivative_traits_01_4_inherit__map\">\n <area shape=\"rect\" title=\"Concept for a differentiable local function mapping Domain to Range.\" alt=\"\" coords=\"337,13,549,83\"/>\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"5,5,289,91\"/>\n@@ -126,15 +126,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00053_source.html\">functionconcepts.hh</a></li>\n+<li><a class=\"el\" href=\"a00020_source.html\">functionconcepts.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01175.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01175.html", "unified_diff": "@@ -72,15 +72,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::Concept::EntitySet Struct Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00207.html\">Function concepts</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p><a class=\"el\" href=\"a00220.html\">Concept</a> for an entity set for a Concept::GridFunction<Range(Domain), EntitySet, DerivativeTraits> \n <a href=\"a01175.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00053_source.html\">dune/functions/common/functionconcepts.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00020_source.html\">dune/functions/common/functionconcepts.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-methods\" name=\"pub-methods\"></a>\n Public Member Functions</h2></td></tr>\n <tr class=\"memitem:a68f40d08a99de681cf30949d76461d8a\"><td class=\"memTemplParams\" colspan=\"2\">template<class E > </td></tr>\n <tr class=\"memitem:a68f40d08a99de681cf30949d76461d8a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01175.html#a68f40d08a99de681cf30949d76461d8a\">require</a> (E &&f) -> decltype(requireType< typename E::Element >(), requireType< typename E::LocalCoordinate >(), requireType< typename E::GlobalCoordinate >())</td></tr>\n <tr class=\"separator:a68f40d08a99de681cf30949d76461d8a\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n@@ -105,15 +105,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00053_source.html\">functionconcepts.hh</a></li>\n+<li><a class=\"el\" href=\"a00020_source.html\">functionconcepts.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01179.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01179.html", "unified_diff": "@@ -66,15 +66,15 @@\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::Concept::GridFunction< Signature, EntitySet > Struct Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00053_source.html\">functionconcepts.hh</a></li>\n+<li><a class=\"el\" href=\"a00020_source.html\">functionconcepts.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01183.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01183.html", "unified_diff": "@@ -73,15 +73,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::Concept::GridFunction< Range(Domain), EntitySet > Struct Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00207.html\">Function concepts</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p><a class=\"el\" href=\"a00220.html\">Concept</a> for a grid function mapping <code>Domain</code> to <code>Range</code>. \n <a href=\"a01183.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00053_source.html\">dune/functions/common/functionconcepts.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00020_source.html\">dune/functions/common/functionconcepts.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::Concept::GridFunction< Range(Domain), EntitySet >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01182.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_concept_1_1_grid_function_3_01_range_07_domain_08_00_01_entity_set_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_concept_1_1_grid_function_3_01_range_07_domain_08_00_01_entity_set_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_concept_1_1_grid_function_3_01_range_07_domain_08_00_01_entity_set_01_4_inherit__map\">\n <area shape=\"rect\" title=\"Concept for a grid function mapping Domain to Range.\" alt=\"\" coords=\"5,109,212,165\"/>\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"15,5,202,61\"/>\n@@ -165,15 +165,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00053_source.html\">functionconcepts.hh</a></li>\n+<li><a class=\"el\" href=\"a00020_source.html\">functionconcepts.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01187.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01187.html", "unified_diff": "@@ -66,15 +66,15 @@\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::Concept::DifferentiableGridFunction< Signature, EntitySet, DerivativeTraits > Struct Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00053_source.html\">functionconcepts.hh</a></li>\n+<li><a class=\"el\" href=\"a00020_source.html\">functionconcepts.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01191.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01191.html", "unified_diff": "@@ -73,15 +73,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::Concept::DifferentiableGridFunction< Range(Domain), EntitySet, DerivativeTraits > Struct Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00207.html\">Function concepts</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p><a class=\"el\" href=\"a00220.html\">Concept</a> for a differentiable grid function mapping <code>Domain</code> to <code>Range</code>. \n <a href=\"a01191.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00053_source.html\">dune/functions/common/functionconcepts.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00020_source.html\">dune/functions/common/functionconcepts.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::Concept::DifferentiableGridFunction< Range(Domain), EntitySet, DerivativeTraits >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01190.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_concept_1_1_differentiable_grid_function_3_01_range_07_domain_08_00_01_entity_set_00_01_derivative_traits_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_concept_1_1_differentiable_grid_function_3_01_range_07_domain_08_00_01_entity_set_00_01_derivative_traits_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_concept_1_1_differentiable_grid_function_3_01_range_07_domain_08_00_01_entity_set_00_01_derivative_traits_01_4_inherit__map\">\n <area shape=\"rect\" title=\"Concept for a differentiable grid function mapping Domain to Range.\" alt=\"\" coords=\"331,13,520,83\"/>\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"5,5,283,91\"/>\n@@ -188,15 +188,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00053_source.html\">functionconcepts.hh</a></li>\n+<li><a class=\"el\" href=\"a00020_source.html\">functionconcepts.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01195.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01195.html", "unified_diff": "@@ -66,15 +66,15 @@\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::Concept::GridViewFunction< Signature, GridView > Struct Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00053_source.html\">functionconcepts.hh</a></li>\n+<li><a class=\"el\" href=\"a00020_source.html\">functionconcepts.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01199.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01199.html", "unified_diff": "@@ -72,15 +72,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::Concept::GridViewFunction< Range(Domain), GridView > Struct Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00207.html\">Function concepts</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p><a class=\"el\" href=\"a00220.html\">Concept</a> for a grid view function mapping <code>Domain</code> to <code>Range</code>. \n <a href=\"a01199.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00053_source.html\">dune/functions/common/functionconcepts.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00020_source.html\">dune/functions/common/functionconcepts.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::Concept::GridViewFunction< Range(Domain), GridView >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01198.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_concept_1_1_grid_view_function_3_01_range_07_domain_08_00_01_grid_view_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_concept_1_1_grid_view_function_3_01_range_07_domain_08_00_01_grid_view_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_concept_1_1_grid_view_function_3_01_range_07_domain_08_00_01_grid_view_01_4_inherit__map\">\n <area shape=\"rect\" title=\"Concept for a grid view function mapping Domain to Range.\" alt=\"\" coords=\"272,13,455,69\"/>\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"5,5,224,76\"/>\n@@ -125,15 +125,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00053_source.html\">functionconcepts.hh</a></li>\n+<li><a class=\"el\" href=\"a00020_source.html\">functionconcepts.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01203.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01203.html", "unified_diff": "@@ -66,15 +66,15 @@\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::Concept::DifferentiableGridViewFunction< Signature, GridView, DerivativeTraits > Struct Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00053_source.html\">functionconcepts.hh</a></li>\n+<li><a class=\"el\" href=\"a00020_source.html\">functionconcepts.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01207.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01207.html", "unified_diff": "@@ -72,15 +72,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::Concept::DifferentiableGridViewFunction< Range(Domain), GridView, DerivativeTraits > Struct Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00207.html\">Function concepts</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p><a class=\"el\" href=\"a00220.html\">Concept</a> for a differentiable grid view function mapping <code>Domain</code> to <code>Range</code>. \n <a href=\"a01207.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00053_source.html\">dune/functions/common/functionconcepts.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00020_source.html\">dune/functions/common/functionconcepts.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::Concept::DifferentiableGridViewFunction< Range(Domain), GridView, DerivativeTraits >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01206.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_concept_1_1_differentiable_grid_view_function_3_01_range_07_domain_08_00_01_grid_view_00_01_derivative_traits_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_concept_1_1_differentiable_grid_view_function_3_01_range_07_domain_08_00_01_grid_view_00_01_derivative_traits_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_concept_1_1_differentiable_grid_view_function_3_01_range_07_domain_08_00_01_grid_view_00_01_derivative_traits_01_4_inherit__map\">\n <area shape=\"rect\" title=\"Concept for a differentiable grid view function mapping Domain to Range.\" alt=\"\" coords=\"292,13,585,69\"/>\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"5,5,244,76\"/>\n@@ -126,15 +126,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00053_source.html\">functionconcepts.hh</a></li>\n+<li><a class=\"el\" href=\"a00020_source.html\">functionconcepts.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01211.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01211.html", "unified_diff": "@@ -66,15 +66,15 @@\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::FunctionFromCallable< Signature, F, FunctionInterface > Class Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00047_source.html\">functionfromcallable.hh</a></li>\n+<li><a class=\"el\" href=\"a00017_source.html\">functionfromcallable.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01215.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01215.html", "unified_diff": "@@ -72,15 +72,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::FunctionFromCallable< Range(Domain), F, FunctionInterface > Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00210.html\">Function related utilities</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Wrap a callable object as Dune::Function or Dune::VirtualFunction. \n <a href=\"a01215.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00047_source.html\">dune/functions/common/functionfromcallable.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00017_source.html\">dune/functions/common/functionfromcallable.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::FunctionFromCallable< Range(Domain), F, FunctionInterface >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01214.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_function_from_callable_3_01_range_07_domain_08_00_01_f_00_01_function_interface_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_function_from_callable_3_01_range_07_domain_08_00_01_f_00_01_function_interface_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_function_from_callable_3_01_range_07_domain_08_00_01_f_00_01_function_interface_01_4_inherit__map\">\n <area shape=\"rect\" title=\"Wrap a callable object as Dune::Function or Dune::VirtualFunction.\" alt=\"\" coords=\"5,80,205,136\"/>\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"43,5,167,32\"/>\n@@ -226,15 +226,15 @@\n \n <p>Evaluate function. </p>\n <p >This call is passed to the function </p>\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00047_source.html\">functionfromcallable.hh</a></li>\n+<li><a class=\"el\" href=\"a00017_source.html\">functionfromcallable.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01239.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01239.html", "unified_diff": "@@ -72,15 +72,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::PolymorphicType< Interface > Class Template Reference<span class=\"mlabels\"><span class=\"mlabel\">abstract</span></span><div class=\"ingroups\"><a class=\"el\" href=\"a00215.html\">Utility</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Base class with polymorphic type boiler plate code. \n <a href=\"a01239.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00095_source.html\">dune/functions/common/interfaces.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00026_source.html\">dune/functions/common/interfaces.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::PolymorphicType< Interface >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01238.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_polymorphic_type_3_01_interface_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_polymorphic_type_3_01_interface_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_polymorphic_type_3_01_interface_01_4_inherit__map\">\n <area shape=\"rect\" title=\"Base class with polymorphic type boiler plate code.\" alt=\"\" coords=\"5,175,204,217\"/>\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"740,112,975,197\"/>\n@@ -234,15 +234,15 @@\n \n <p>Move object into buffer. </p>\n <p >move(buffer) needs to be redefined by an implementation class, with the return type covariantly adapted. This will return a copy of <em>this created in the given buffer using placement-new with move construction. You must not delete the returned pointer since it points to the given buffer (however with the proper type instead of void</em>). </p>\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00095_source.html\">interfaces.hh</a></li>\n+<li><a class=\"el\" href=\"a00026_source.html\">interfaces.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01243.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01243.html", "unified_diff": "@@ -66,17 +66,17 @@\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::LocalFunction< Signature, LocalContext, DerivativeTraits, bufferSize > Class Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00065_source.html\">dune/functions/common/localfunction.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00053_source.html\">dune/functions/common/localfunction.hh</a>></code></p>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00065_source.html\">localfunction.hh</a></li>\n+<li><a class=\"el\" href=\"a00053_source.html\">localfunction.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01251.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01251.html", "unified_diff": "@@ -73,15 +73,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize > Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00208.html\">Function interface wrappers</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Class storing local functions using type erasure. \n <a href=\"a01251.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00065_source.html\">dune/functions/common/localfunction.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00053_source.html\">dune/functions/common/localfunction.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01250.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_local_function_3_01_range_07_domain_08_00_01_local_context_00_01_derivative_traits_00_01buffer_size_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_local_function_3_01_range_07_domain_08_00_01_local_context_00_01_derivative_traits_00_01buffer_size_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_local_function_3_01_range_07_domain_08_00_01_local_context_00_01_derivative_traits_00_01buffer_size_01_4_inherit__map\">\n <area shape=\"rect\" title=\"Class storing local functions using type erasure.\" alt=\"\" coords=\"917,65,1129,121\"/>\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"559,36,868,151\"/>\n@@ -352,15 +352,15 @@\n </div><div class=\"memdoc\">\n \n <p>Unbind from local context. </p>\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00065_source.html\">localfunction.hh</a></li>\n+<li><a class=\"el\" href=\"a00053_source.html\">localfunction.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01263.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01263.html", "unified_diff": "@@ -74,15 +74,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::StaticMultiIndex< size_type, n > Class Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>A statically sized MultiIndex type. \n <a href=\"a01263.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00101_source.html\">dune/functions/common/multiindex.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00032_source.html\">dune/functions/common/multiindex.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::StaticMultiIndex< size_type, n >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01262.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_static_multi_index_3_01size__type_00_01n_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_static_multi_index_3_01size__type_00_01n_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_static_multi_index_3_01size__type_00_01n_01_4_inherit__map\">\n <area shape=\"rect\" title=\"A statically sized MultiIndex type.\" alt=\"\" coords=\"5,80,193,121\"/>\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"45,5,154,32\"/>\n@@ -188,15 +188,15 @@\n </div><div class=\"memdoc\">\n \n <p>STL member. </p>\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00101_source.html\">multiindex.hh</a></li>\n+<li><a class=\"el\" href=\"a00032_source.html\">multiindex.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01267.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01267.html", "unified_diff": "@@ -75,15 +75,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::StaticMultiIndex< size_type, 1 > Class Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>A statically sized MultiIndex type. \n <a href=\"a01267.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00101_source.html\">dune/functions/common/multiindex.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00032_source.html\">dune/functions/common/multiindex.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::StaticMultiIndex< size_type, 1 >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01266.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_static_multi_index_3_01size__type_00_011_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_static_multi_index_3_01size__type_00_011_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_static_multi_index_3_01size__type_00_011_01_4_inherit__map\">\n <area shape=\"rect\" title=\"A statically sized MultiIndex type.\" alt=\"\" coords=\"5,80,193,121\"/>\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"45,5,154,32\"/>\n@@ -251,15 +251,15 @@\n </div><div class=\"memdoc\">\n \n <p>STL member. </p>\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00101_source.html\">multiindex.hh</a></li>\n+<li><a class=\"el\" href=\"a00032_source.html\">multiindex.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01271.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01271.html", "unified_diff": "@@ -66,26 +66,26 @@\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"headertitle\"><div class=\"title\">std::tuple_size< Dune::Functions::StaticMultiIndex< size_type, n > > Struct Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00101_source.html\">dune/functions/common/multiindex.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00032_source.html\">dune/functions/common/multiindex.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for std::tuple_size< Dune::Functions::StaticMultiIndex< size_type, n > >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01270.png\" border=\"0\" usemap=\"#astd_1_1tuple__size_3_01_dune_1_1_functions_1_1_static_multi_index_3_01size__type_00_01n_01_4_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"astd_1_1tuple__size_3_01_dune_1_1_functions_1_1_static_multi_index_3_01size__type_00_01n_01_4_01_4_inherit__map\" id=\"astd_1_1tuple__size_3_01_dune_1_1_functions_1_1_static_multi_index_3_01size__type_00_01n_01_4_01_4_inherit__map\">\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"5,95,195,151\"/>\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"27,5,173,47\"/>\n </map>\n </div>\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00101_source.html\">multiindex.hh</a></li>\n+<li><a class=\"el\" href=\"a00032_source.html\">multiindex.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01275.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01275.html", "unified_diff": "@@ -75,15 +75,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::OverflowArray< BA, maxSize > Class Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>A dynamically sized array-like class with overflow. \n <a href=\"a01275.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00074_source.html\">dune/functions/common/overflowarray.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00059_source.html\">dune/functions/common/overflowarray.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::OverflowArray< BA, maxSize >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01274.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_overflow_array_3_01_b_a_00_01max_size_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_overflow_array_3_01_b_a_00_01max_size_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_overflow_array_3_01_b_a_00_01max_size_01_4_inherit__map\">\n <area shape=\"rect\" title=\"A dynamically sized array-like class with overflow.\" alt=\"\" coords=\"5,80,183,121\"/>\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"74,5,114,32\"/>\n@@ -1059,15 +1059,15 @@\n </div><div class=\"memdoc\">\n \n <p>Write container to an output stream. </p>\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00074_source.html\">overflowarray.hh</a></li>\n+<li><a class=\"el\" href=\"a00059_source.html\">overflowarray.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01279.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01279.html", "unified_diff": "@@ -72,15 +72,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::PolymorphicSmallObject< Base, bufferSize > Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00215.html\">Utility</a> | <a class=\"el\" href=\"a00215.html\">Utility</a> » <a class=\"el\" href=\"a00216.html\">Utilities for type-erasure</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>A wrapper providing small object optimization with polymorphic types. \n <a href=\"a01279.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00089_source.html\">dune/functions/common/polymorphicsmallobject.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00068_source.html\">dune/functions/common/polymorphicsmallobject.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::PolymorphicSmallObject< Base, bufferSize >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01278.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_polymorphic_small_object_3_01_base_00_01buffer_size_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_polymorphic_small_object_3_01_base_00_01buffer_size_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_polymorphic_small_object_3_01_base_00_01buffer_size_01_4_inherit__map\">\n <area shape=\"rect\" title=\"A wrapper providing small object optimization with polymorphic types.\" alt=\"\" coords=\"5,218,217,259\"/>\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"506,32,793,117\"/>\n@@ -479,15 +479,15 @@\n </div><div class=\"memdoc\">\n \n <p>Move assignment from other <a class=\"el\" href=\"a01279.html\" title=\"A wrapper providing small object optimization with polymorphic types.\">PolymorphicSmallObject</a>. </p>\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00089_source.html\">polymorphicsmallobject.hh</a></li>\n+<li><a class=\"el\" href=\"a00068_source.html\">polymorphicsmallobject.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01283.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01283.html", "unified_diff": "@@ -72,15 +72,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::ReservedDeque< T, n > Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00215.html\">Utility</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>A double-ended queue (deque) class with statically reserved memory. \n <a href=\"a01283.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00059_source.html\">dune/functions/common/reserveddeque.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00023_source.html\">dune/functions/common/reserveddeque.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr><td colspan=\"2\"><div class=\"groupHeader\"></div></td></tr>\n <tr class=\"memitem:a1a11a57db6a51cd6ceebc8aba56e87d9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef T </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01283.html#a1a11a57db6a51cd6ceebc8aba56e87d9\">value_type</a></td></tr>\n <tr class=\"memdesc:a1a11a57db6a51cd6ceebc8aba56e87d9\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">The type of object, T, stored in the vector. <a href=\"a01283.html#a1a11a57db6a51cd6ceebc8aba56e87d9\">More...</a><br /></td></tr>\n <tr class=\"separator:a1a11a57db6a51cd6ceebc8aba56e87d9\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n@@ -1025,15 +1025,15 @@\n </div><div class=\"memdoc\">\n \n <p>Send <a class=\"el\" href=\"a01283.html\" title=\"A double-ended queue (deque) class with statically reserved memory.\">ReservedDeque</a> to an output stream. </p>\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00059_source.html\">reserveddeque.hh</a></li>\n+<li><a class=\"el\" href=\"a00023_source.html\">reserveddeque.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01287.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01287.html", "unified_diff": "@@ -72,15 +72,15 @@\n \n <p>Helper class to check that F is callable. \n <a href=\"a01287.html#details\">More...</a></p>\n <a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n <div class=\"textblock\"><div class=\"compoundTemplParams\">template<typename F><br />\n struct Dune::Functions::IsCallable< F ></div><p >Helper class to check that F is callable. </p>\n </div><hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00086_source.html\">signature.hh</a></li>\n+<li><a class=\"el\" href=\"a00008_source.html\">signature.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01291.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01291.html", "unified_diff": "@@ -69,20 +69,20 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::SignatureTraits< Signature, isCallable > Struct Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00210.html\">Function related utilities</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Helper class to deduce the signature of a callable. \n <a href=\"a01291.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00086_source.html\">dune/functions/common/signature.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00008_source.html\">dune/functions/common/signature.hh</a>></code></p>\n <a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n <div class=\"textblock\"><div class=\"compoundTemplParams\">template<class Signature, bool isCallable = IsCallable<Signature>::value><br />\n struct Dune::Functions::SignatureTraits< Signature, isCallable ></div><p >Helper class to deduce the signature of a callable. </p>\n </div><hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00086_source.html\">signature.hh</a></li>\n+<li><a class=\"el\" href=\"a00008_source.html\">signature.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01295.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01295.html", "unified_diff": "@@ -66,15 +66,15 @@\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::SignatureTag< Signature, DerivativeTraits > Struct Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00086_source.html\">signature.hh</a></li>\n+<li><a class=\"el\" href=\"a00008_source.html\">signature.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01299.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01299.html", "unified_diff": "@@ -72,15 +72,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::SignatureTag< Range(Domain), DerivativeTraitsT > Struct Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00210.html\">Function related utilities</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Tag-class to encapsulate signature information. \n <a href=\"a01299.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00086_source.html\">dune/functions/common/signature.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00008_source.html\">dune/functions/common/signature.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr class=\"memitem:ab8b3a06d19393ab1c7ef395359aaa7ea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01299.html#ab8b3a06d19393ab1c7ef395359aaa7ea\">Signature</a> = Range(Domain)</td></tr>\n <tr class=\"separator:ab8b3a06d19393ab1c7ef395359aaa7ea\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a24e64af41789cc4c921669e46676a05d\"><td class=\"memTemplParams\" colspan=\"2\">template<class T > </td></tr>\n <tr class=\"memitem:a24e64af41789cc4c921669e46676a05d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01299.html#a24e64af41789cc4c921669e46676a05d\">DerivativeTraits</a> = DerivativeTraitsT< T ></td></tr>\n@@ -129,15 +129,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00086_source.html\">signature.hh</a></li>\n+<li><a class=\"el\" href=\"a00008_source.html\">signature.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01311.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01311.html", "unified_diff": "@@ -72,15 +72,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::UniformNodeVisitor< SimpleNodeVisitorImp, leafOnly > Struct Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00215.html\">Utility</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Mixin for visitors that should apply the same action on all nodes. \n <a href=\"a01311.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00083_source.html\">dune/functions/common/treedata.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00065_source.html\">dune/functions/common/treedata.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::UniformNodeVisitor< SimpleNodeVisitorImp, leafOnly >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01310.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_uniform_node_visitor_3_01_simple_node_visitor_imp_00_01leaf_only_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_uniform_node_visitor_3_01_simple_node_visitor_imp_00_01leaf_only_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_uniform_node_visitor_3_01_simple_node_visitor_imp_00_01leaf_only_01_4_inherit__map\">\n <area shape=\"rect\" title=\"Mixin for visitors that should apply the same action on all nodes.\" alt=\"\" coords=\"243,85,453,141\"/>\n <area shape=\"rect\" href=\"a01311.html\" title=\" \" alt=\"\" coords=\"677,5,851,61\"/>\n@@ -236,15 +236,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00083_source.html\">treedata.hh</a></li>\n+<li><a class=\"el\" href=\"a00065_source.html\">treedata.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01315.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01315.html", "unified_diff": "@@ -77,15 +77,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::TreeData< T, ND, LO > Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00215.html\">Utility</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Container allowing to attach data to each node of a tree. \n <a href=\"a01315.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00083_source.html\">dune/functions/common/treedata.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00065_source.html\">dune/functions/common/treedata.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n <tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01327.html\">CopyVisitor</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01323.html\">DestroyVisitor</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n@@ -564,15 +564,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00083_source.html\">treedata.hh</a></li>\n+<li><a class=\"el\" href=\"a00065_source.html\">treedata.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01319.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01319.html", "unified_diff": "@@ -70,15 +70,15 @@\n <a href=\"#pub-methods\">Public Member Functions</a> |\n <a href=\"#pub-attribs\">Public Attributes</a> |\n <a href=\"a01316.html\">List of all members</a> </div>\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::TreeData< T, ND, LO >::InitVisitor Struct Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00083_source.html\">dune/functions/common/treedata.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00065_source.html\">dune/functions/common/treedata.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::TreeData< T, ND, LO >::InitVisitor:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01318.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_tree_data_3_01_t_00_01_n_d_00_01_l_o_01_4_1_1_init_visitor_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_tree_data_3_01_t_00_01_n_d_00_01_l_o_01_4_1_1_init_visitor_inherit__map\" id=\"a_dune_1_1_functions_1_1_tree_data_3_01_t_00_01_n_d_00_01_l_o_01_4_1_1_init_visitor_inherit__map\">\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"863,33,1041,74\"/>\n <area shape=\"rect\" href=\"a01311.html\" title=\" \" alt=\"\" coords=\"641,25,813,81\"/>\n@@ -299,15 +299,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00083_source.html\">treedata.hh</a></li>\n+<li><a class=\"el\" href=\"a00065_source.html\">treedata.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01323.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01323.html", "unified_diff": "@@ -70,15 +70,15 @@\n <a href=\"#pub-methods\">Public Member Functions</a> |\n <a href=\"#pub-attribs\">Public Attributes</a> |\n <a href=\"a01320.html\">List of all members</a> </div>\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::TreeData< T, ND, LO >::DestroyVisitor Struct Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00083_source.html\">dune/functions/common/treedata.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00065_source.html\">dune/functions/common/treedata.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::TreeData< T, ND, LO >::DestroyVisitor:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01322.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_tree_data_3_01_t_00_01_n_d_00_01_l_o_01_4_1_1_destroy_visitor_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_tree_data_3_01_t_00_01_n_d_00_01_l_o_01_4_1_1_destroy_visitor_inherit__map\" id=\"a_dune_1_1_functions_1_1_tree_data_3_01_t_00_01_n_d_00_01_l_o_01_4_1_1_destroy_visitor_inherit__map\">\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"908,33,1105,74\"/>\n <area shape=\"rect\" href=\"a01311.html\" title=\" \" alt=\"\" coords=\"669,25,859,81\"/>\n@@ -299,15 +299,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00083_source.html\">treedata.hh</a></li>\n+<li><a class=\"el\" href=\"a00065_source.html\">treedata.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01327.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01327.html", "unified_diff": "@@ -70,15 +70,15 @@\n <a href=\"#pub-methods\">Public Member Functions</a> |\n <a href=\"#pub-attribs\">Public Attributes</a> |\n <a href=\"a01324.html\">List of all members</a> </div>\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::TreeData< T, ND, LO >::CopyVisitor Struct Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00083_source.html\">dune/functions/common/treedata.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00065_source.html\">dune/functions/common/treedata.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::TreeData< T, ND, LO >::CopyVisitor:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01326.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_tree_data_3_01_t_00_01_n_d_00_01_l_o_01_4_1_1_copy_visitor_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_tree_data_3_01_t_00_01_n_d_00_01_l_o_01_4_1_1_copy_visitor_inherit__map\" id=\"a_dune_1_1_functions_1_1_tree_data_3_01_t_00_01_n_d_00_01_l_o_01_4_1_1_copy_visitor_inherit__map\">\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"879,33,1061,74\"/>\n <area shape=\"rect\" href=\"a01311.html\" title=\" \" alt=\"\" coords=\"655,25,829,81\"/>\n@@ -327,15 +327,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00083_source.html\">treedata.hh</a></li>\n+<li><a class=\"el\" href=\"a00065_source.html\">treedata.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01331.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01331.html", "unified_diff": "@@ -69,15 +69,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::HasStaticSize< T > Struct Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00215.html\">Utility</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Check if type is a statically sized container. \n <a href=\"a01331.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00092_source.html\">dune/functions/common/type_traits.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00029_source.html\">dune/functions/common/type_traits.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::HasStaticSize< T >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01330.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_has_static_size_3_01_t_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_has_static_size_3_01_t_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_has_static_size_3_01_t_01_4_inherit__map\">\n <area shape=\"rect\" title=\"Check if type is a statically sized container.\" alt=\"\" coords=\"135,95,319,136\"/>\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"5,5,244,47\"/>\n@@ -85,15 +85,15 @@\n </map>\n </div>\n <a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n <div class=\"textblock\"><div class=\"compoundTemplParams\">template<class T><br />\n struct Dune::Functions::HasStaticSize< T ></div><p >Check if type is a statically sized container. </p>\n <p >Derives from std::true_type or std::false_type </p>\n </div><hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00092_source.html\">type_traits.hh</a></li>\n+<li><a class=\"el\" href=\"a00029_source.html\">type_traits.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01335.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01335.html", "unified_diff": "@@ -69,15 +69,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::StaticSize< T > Struct Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00215.html\">Utility</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Obtain size of statically sized container. \n <a href=\"a01335.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00092_source.html\">dune/functions/common/type_traits.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00029_source.html\">dune/functions/common/type_traits.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::StaticSize< T >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01334.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_static_size_3_01_t_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_static_size_3_01_t_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_static_size_3_01_t_01_4_inherit__map\">\n <area shape=\"rect\" title=\"Obtain size of statically sized container.\" alt=\"\" coords=\"100,95,317,121\"/>\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"5,5,220,47\"/>\n@@ -85,15 +85,15 @@\n </map>\n </div>\n <a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n <div class=\"textblock\"><div class=\"compoundTemplParams\">template<class T><br />\n struct Dune::Functions::StaticSize< T ></div><p >Obtain size of statically sized container. </p>\n <p >Derives from std::integral_constant<std::size_t, size> </p>\n </div><hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00092_source.html\">type_traits.hh</a></li>\n+<li><a class=\"el\" href=\"a00029_source.html\">type_traits.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01351.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01351.html", "unified_diff": "@@ -73,15 +73,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::TypeErasureBase< Interface, Implementation, bufferSize > Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00215.html\">Utility</a> » <a class=\"el\" href=\"a00216.html\">Utilities for type-erasure</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Base class for type-erased interface wrapper. \n <a href=\"a01351.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00062_source.html\">dune/functions/common/typeerasure.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00050_source.html\">dune/functions/common/typeerasure.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::TypeErasureBase< Interface, Implementation, bufferSize >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01350.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_type_erasure_base_3_01_interface_00_01_implementation_00_01buffer_size_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_type_erasure_base_3_01_interface_00_01_implementation_00_01buffer_size_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_type_erasure_base_3_01_interface_00_01_implementation_00_01buffer_size_01_4_inherit__map\">\n <area shape=\"rect\" title=\"Base class for type-erased interface wrapper.\" alt=\"\" coords=\"5,199,223,255\"/>\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"559,53,877,153\"/>\n@@ -293,15 +293,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00062_source.html\">typeerasure.hh</a></li>\n+<li><a class=\"el\" href=\"a00050_source.html\">typeerasure.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01383.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01383.html", "unified_diff": "@@ -72,15 +72,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::LastType< T > Struct Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00215.html\">Utility</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Get last entry of type list. \n <a href=\"a01383.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00050_source.html\">dune/functions/common/utility.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00041_source.html\">dune/functions/common/utility.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr class=\"memitem:a45225c5413aac4fc372bc39124b6e4c5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01383.html#a45225c5413aac4fc372bc39124b6e4c5\">type</a> = typename std::tuple_element< sizeof...(T) -1, std::tuple< T... > >::type</td></tr>\n <tr class=\"separator:a45225c5413aac4fc372bc39124b6e4c5\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n <a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n@@ -100,15 +100,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00050_source.html\">utility.hh</a></li>\n+<li><a class=\"el\" href=\"a00041_source.html\">utility.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01395.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01395.html", "unified_diff": "@@ -72,15 +72,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::RotateTuple< T > Struct Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00215.html\">Utility</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Rotate type list by one, such that last entry is moved to first position. \n <a href=\"a01395.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00050_source.html\">dune/functions/common/utility.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00041_source.html\">dune/functions/common/utility.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr class=\"memitem:ad2aec0a7681d5138bc8738f98cb86c1f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01395.html#ad2aec0a7681d5138bc8738f98cb86c1f\">type</a> = typename Imp::RotateHelper< std::tuple< T... >, std::make_index_sequence< sizeof...(T) -1 > >::type</td></tr>\n <tr class=\"separator:ad2aec0a7681d5138bc8738f98cb86c1f\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n <a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n@@ -101,15 +101,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00050_source.html\">utility.hh</a></li>\n+<li><a class=\"el\" href=\"a00041_source.html\">utility.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01411.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01411.html", "unified_diff": "@@ -69,15 +69,15 @@\n <div class=\"summary\">\n <a href=\"#pub-methods\">Public Member Functions</a> |\n <a href=\"a01408.html\">List of all members</a> </div>\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::Concept::IndexMergingStrategy Struct Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00179_source.html\">dune/functions/functionspacebases/basistags.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00158_source.html\">dune/functions/functionspacebases/basistags.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-methods\" name=\"pub-methods\"></a>\n Public Member Functions</h2></td></tr>\n <tr class=\"memitem:a8552823d8c75d18bca5f41f36cd7b2dd\"><td class=\"memTemplParams\" colspan=\"2\">template<typename T > </td></tr>\n <tr class=\"memitem:a8552823d8c75d18bca5f41f36cd7b2dd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01411.html#a8552823d8c75d18bca5f41f36cd7b2dd\">require</a> (T &&t) -> decltype(registerIndexMergingStrategy(t))</td></tr>\n <tr class=\"separator:a8552823d8c75d18bca5f41f36cd7b2dd\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n@@ -99,15 +99,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00179_source.html\">basistags.hh</a></li>\n+<li><a class=\"el\" href=\"a00158_source.html\">basistags.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01415.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01415.html", "unified_diff": "@@ -69,15 +69,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::BasisFactory::IndexMergingStrategy Struct Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00211.html\">Function space bases</a> » <a class=\"el\" href=\"a00214.html\">Function space basis utilities</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Base class for index merging strategies to simplify detection. \n <a href=\"a01415.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00179_source.html\">dune/functions/functionspacebases/basistags.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00158_source.html\">dune/functions/functionspacebases/basistags.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::BasisFactory::IndexMergingStrategy:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01414.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_basis_factory_1_1_index_merging_strategy_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_basis_factory_1_1_index_merging_strategy_inherit__map\" id=\"a_dune_1_1_functions_1_1_basis_factory_1_1_index_merging_strategy_inherit__map\">\n <area shape=\"rect\" title=\"Base class for index merging strategies to simplify detection.\" alt=\"\" coords=\"5,104,209,145\"/>\n <area shape=\"rect\" href=\"a01431.html\" title=\"Interleaved merging of direct children with blocking (i.e. creating blocks at the leaves containing o...\" alt=\"\" coords=\"257,5,461,47\"/>\n@@ -85,15 +85,15 @@\n <area shape=\"rect\" href=\"a01423.html\" title=\"Interleaved merging of direct children without blocking.\" alt=\"\" coords=\"257,136,461,177\"/>\n <area shape=\"rect\" href=\"a01419.html\" title=\"Lexicographic merging of direct children without blocking.\" alt=\"\" coords=\"257,201,461,243\"/>\n </map>\n </div>\n <a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n <div class=\"textblock\"><p >Base class for index merging strategies to simplify detection. </p>\n </div><hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00179_source.html\">basistags.hh</a></li>\n+<li><a class=\"el\" href=\"a00158_source.html\">basistags.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01419.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01419.html", "unified_diff": "@@ -69,15 +69,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::BasisFactory::FlatLexicographic Struct Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00211.html\">Function space bases</a> » <a class=\"el\" href=\"a00214.html\">Function space basis utilities</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Lexicographic merging of direct children without blocking. \n <a href=\"a01419.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00179_source.html\">dune/functions/functionspacebases/basistags.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00158_source.html\">dune/functions/functionspacebases/basistags.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::BasisFactory::FlatLexicographic:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01418.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_basis_factory_1_1_flat_lexicographic_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_basis_factory_1_1_flat_lexicographic_inherit__map\" id=\"a_dune_1_1_functions_1_1_basis_factory_1_1_flat_lexicographic_inherit__map\">\n <area shape=\"rect\" title=\"Lexicographic merging of direct children without blocking.\" alt=\"\" coords=\"5,95,209,136\"/>\n <area shape=\"rect\" href=\"a01415.html\" title=\"Base class for index merging strategies to simplify detection.\" alt=\"\" coords=\"5,5,209,47\"/>\n@@ -120,15 +120,15 @@\n <td class=\"markdownTableBodyNone\">g_0 </td><td class=\"markdownTableBodyNone\">(2,k0) </td></tr>\n <tr class=\"markdownTableRowOdd\">\n <td class=\"markdownTableBodyNone\">g_1 </td><td class=\"markdownTableBodyNone\">(3,k1) </td></tr>\n <tr class=\"markdownTableRowEven\">\n <td class=\"markdownTableBodyNone\">g_2 </td><td class=\"markdownTableBodyNone\">(4,k2) </td></tr>\n </table>\n </div><hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00179_source.html\">basistags.hh</a></li>\n+<li><a class=\"el\" href=\"a00158_source.html\">basistags.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01423.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01423.html", "unified_diff": "@@ -69,15 +69,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::BasisFactory::FlatInterleaved Struct Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00211.html\">Function space bases</a> » <a class=\"el\" href=\"a00214.html\">Function space basis utilities</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Interleaved merging of direct children without blocking. \n <a href=\"a01423.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00179_source.html\">dune/functions/functionspacebases/basistags.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00158_source.html\">dune/functions/functionspacebases/basistags.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::BasisFactory::FlatInterleaved:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01422.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_basis_factory_1_1_flat_interleaved_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_basis_factory_1_1_flat_interleaved_inherit__map\" id=\"a_dune_1_1_functions_1_1_basis_factory_1_1_flat_interleaved_inherit__map\">\n <area shape=\"rect\" title=\"Interleaved merging of direct children without blocking.\" alt=\"\" coords=\"5,95,209,136\"/>\n <area shape=\"rect\" href=\"a01415.html\" title=\"Base class for index merging strategies to simplify detection.\" alt=\"\" coords=\"5,5,209,47\"/>\n@@ -120,15 +120,15 @@\n <td class=\"markdownTableBodyNone\">g_1 </td><td class=\"markdownTableBodyNone\">(3,i1) </td></tr>\n <tr class=\"markdownTableRowOdd\">\n <td class=\"markdownTableBodyNone\">f_2 </td><td class=\"markdownTableBodyNone\">(4,i2) </td></tr>\n <tr class=\"markdownTableRowEven\">\n <td class=\"markdownTableBodyNone\">g_2 </td><td class=\"markdownTableBodyNone\">(5,i2) </td></tr>\n </table>\n </div><hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00179_source.html\">basistags.hh</a></li>\n+<li><a class=\"el\" href=\"a00158_source.html\">basistags.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01427.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01427.html", "unified_diff": "@@ -69,15 +69,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::BasisFactory::BlockedLexicographic Struct Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00211.html\">Function space bases</a> » <a class=\"el\" href=\"a00214.html\">Function space basis utilities</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Lexicographic merging of direct children with blocking (i.e. creating one block per direct child). \n <a href=\"a01427.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00179_source.html\">dune/functions/functionspacebases/basistags.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00158_source.html\">dune/functions/functionspacebases/basistags.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::BasisFactory::BlockedLexicographic:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01426.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_basis_factory_1_1_blocked_lexicographic_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_basis_factory_1_1_blocked_lexicographic_inherit__map\" id=\"a_dune_1_1_functions_1_1_basis_factory_1_1_blocked_lexicographic_inherit__map\">\n <area shape=\"rect\" title=\"Lexicographic merging of direct children with blocking (i.e. creating one block per direct child).\" alt=\"\" coords=\"5,95,209,136\"/>\n <area shape=\"rect\" href=\"a01415.html\" title=\"Base class for index merging strategies to simplify detection.\" alt=\"\" coords=\"5,5,209,47\"/>\n@@ -120,15 +120,15 @@\n <td class=\"markdownTableBodyNone\">g_0 </td><td class=\"markdownTableBodyNone\">(1,k0) </td></tr>\n <tr class=\"markdownTableRowOdd\">\n <td class=\"markdownTableBodyNone\">g_1 </td><td class=\"markdownTableBodyNone\">(1,k1) </td></tr>\n <tr class=\"markdownTableRowEven\">\n <td class=\"markdownTableBodyNone\">g_2 </td><td class=\"markdownTableBodyNone\">(1,k2) </td></tr>\n </table>\n </div><hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00179_source.html\">basistags.hh</a></li>\n+<li><a class=\"el\" href=\"a00158_source.html\">basistags.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01431.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01431.html", "unified_diff": "@@ -69,15 +69,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::BasisFactory::BlockedInterleaved Struct Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00211.html\">Function space bases</a> » <a class=\"el\" href=\"a00214.html\">Function space basis utilities</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Interleaved merging of direct children with blocking (i.e. creating blocks at the leaves containing one leaf per child each). \n <a href=\"a01431.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00179_source.html\">dune/functions/functionspacebases/basistags.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00158_source.html\">dune/functions/functionspacebases/basistags.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::BasisFactory::BlockedInterleaved:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01430.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_basis_factory_1_1_blocked_interleaved_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_basis_factory_1_1_blocked_interleaved_inherit__map\" id=\"a_dune_1_1_functions_1_1_basis_factory_1_1_blocked_interleaved_inherit__map\">\n <area shape=\"rect\" title=\"Interleaved merging of direct children with blocking (i.e. creating blocks at the leaves containing o...\" alt=\"\" coords=\"5,95,209,136\"/>\n <area shape=\"rect\" href=\"a01415.html\" title=\"Base class for index merging strategies to simplify detection.\" alt=\"\" coords=\"5,5,209,47\"/>\n@@ -120,15 +120,15 @@\n <td class=\"markdownTableBodyNone\">g_1 </td><td class=\"markdownTableBodyNone\">(i1,1) </td></tr>\n <tr class=\"markdownTableRowOdd\">\n <td class=\"markdownTableBodyNone\">f_2 </td><td class=\"markdownTableBodyNone\">(i2,0) </td></tr>\n <tr class=\"markdownTableRowEven\">\n <td class=\"markdownTableBodyNone\">g_2 </td><td class=\"markdownTableBodyNone\">(i2,1) </td></tr>\n </table>\n </div><hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00179_source.html\">basistags.hh</a></li>\n+<li><a class=\"el\" href=\"a00158_source.html\">basistags.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01467.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01467.html", "unified_diff": "@@ -72,15 +72,15 @@\n <a href=\"#pro-methods\">Protected Member Functions</a> |\n <a href=\"#pro-attribs\">Protected Attributes</a> |\n <a href=\"a01464.html\">List of all members</a> </div>\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::BrezziDouglasMariniNode< GV, k > Class Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00182_source.html\">dune/functions/functionspacebases/brezzidouglasmarinibasis.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00149_source.html\">dune/functions/functionspacebases/brezzidouglasmarinibasis.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::BrezziDouglasMariniNode< GV, k >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01466.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_brezzi_douglas_marini_node_3_01_g_v_00_01k_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_brezzi_douglas_marini_node_3_01_g_v_00_01k_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_brezzi_douglas_marini_node_3_01_g_v_00_01k_01_4_inherit__map\">\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"90,169,301,211\"/>\n <area shape=\"rect\" href=\"a01711.html\" title=\" \" alt=\"\" coords=\"88,95,303,121\"/>\n@@ -573,15 +573,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00182_source.html\">brezzidouglasmarinibasis.hh</a></li>\n+<li><a class=\"el\" href=\"a00149_source.html\">brezzidouglasmarinibasis.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01471.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01471.html", "unified_diff": "@@ -72,15 +72,15 @@\n <a href=\"#pub-static-attribs\">Static Public Attributes</a> |\n <a href=\"#pro-attribs\">Protected Attributes</a> |\n <a href=\"a01468.html\">List of all members</a> </div>\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::BrezziDouglasMariniPreBasis< GV, k > Class Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00182_source.html\">dune/functions/functionspacebases/brezzidouglasmarinibasis.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00149_source.html\">dune/functions/functionspacebases/brezzidouglasmarinibasis.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr class=\"memitem:a73e7fec0c1f6f0c0316bbfceec2c4a00\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01471.html#a73e7fec0c1f6f0c0316bbfceec2c4a00\">GridView</a> = GV</td></tr>\n <tr class=\"memdesc:a73e7fec0c1f6f0c0316bbfceec2c4a00\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">The grid view that the FE space is defined on. <a href=\"a01471.html#a73e7fec0c1f6f0c0316bbfceec2c4a00\">More...</a><br /></td></tr>\n <tr class=\"separator:a73e7fec0c1f6f0c0316bbfceec2c4a00\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a102944d1f32c8b29c6c297f252c7c1f1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01471.html#a102944d1f32c8b29c6c297f252c7c1f1\">size_type</a> = std::size_t</td></tr>\n@@ -657,15 +657,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00182_source.html\">brezzidouglasmarinibasis.hh</a></li>\n+<li><a class=\"el\" href=\"a00149_source.html\">brezzidouglasmarinibasis.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01475.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01475.html", "unified_diff": "@@ -75,15 +75,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::BSplineLocalFiniteElement< GV, R > Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00211.html\">Function space bases</a> » <a class=\"el\" href=\"a00213.html\">Function space basis implementations</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>LocalFiniteElement in the sense of dune-localfunctions, for the B-spline basis on tensor-product grids. \n <a href=\"a01475.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00107_source.html\">dune/functions/functionspacebases/bsplinebasis.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00176_source.html\">dune/functions/functionspacebases/bsplinebasis.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::BSplineLocalFiniteElement< GV, R >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01474.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_b_spline_local_finite_element_3_01_g_v_00_01_r_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_b_spline_local_finite_element_3_01_g_v_00_01_r_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_b_spline_local_finite_element_3_01_g_v_00_01_r_01_4_inherit__map\">\n <area shape=\"rect\" title=\"LocalFiniteElement in the sense of dune-localfunctions, for the B-spline basis on tensor-product grid...\" alt=\"\" coords=\"5,5,199,47\"/>\n <area shape=\"rect\" href=\"a01475.html\" title=\" \" alt=\"\" coords=\"17,109,187,165\"/>\n@@ -551,15 +551,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00107_source.html\">bsplinebasis.hh</a></li>\n+<li><a class=\"el\" href=\"a00176_source.html\">bsplinebasis.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01479.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01479.html", "unified_diff": "@@ -77,15 +77,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::BSplinePreBasis< GV > Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00211.html\">Function space bases</a> » <a class=\"el\" href=\"a00213.html\">Function space basis implementations</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Pre-basis for B-spline basis. \n <a href=\"a01479.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00107_source.html\">dune/functions/functionspacebases/bsplinebasis.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00176_source.html\">dune/functions/functionspacebases/bsplinebasis.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr class=\"memitem:a71f4090ddbb632644769cb0a9c5f394c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01479.html#a71f4090ddbb632644769cb0a9c5f394c\">GridView</a> = GV</td></tr>\n <tr class=\"memdesc:a71f4090ddbb632644769cb0a9c5f394c\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">The grid view that the FE space is defined on. <a href=\"a01479.html#a71f4090ddbb632644769cb0a9c5f394c\">More...</a><br /></td></tr>\n <tr class=\"separator:a71f4090ddbb632644769cb0a9c5f394c\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a7aa8059fdf68035788a75cb680e89cdd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01479.html#a7aa8059fdf68035788a75cb680e89cdd\">size_type</a> = std::size_t</td></tr>\n@@ -1276,15 +1276,15 @@\n </div><div class=\"memdoc\">\n \n <p>Order of the B-spline for each space dimension. </p>\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00107_source.html\">bsplinebasis.hh</a></li>\n+<li><a class=\"el\" href=\"a00176_source.html\">bsplinebasis.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01483.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01483.html", "unified_diff": "@@ -74,15 +74,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::BSplineLocalBasis< GV, R > Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00211.html\">Function space bases</a> » <a class=\"el\" href=\"a00213.html\">Function space basis implementations</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>LocalBasis class in the sense of dune-localfunctions, presenting the restriction of a B-spline patch to a knot span. \n <a href=\"a01483.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00107_source.html\">dune/functions/functionspacebases/bsplinebasis.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00176_source.html\">dune/functions/functionspacebases/bsplinebasis.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::BSplineLocalBasis< GV, R >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01482.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_b_spline_local_basis_3_01_g_v_00_01_r_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_b_spline_local_basis_3_01_g_v_00_01_r_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_b_spline_local_basis_3_01_g_v_00_01_r_01_4_inherit__map\">\n <area shape=\"rect\" title=\"LocalBasis class in the sense of dune-localfunctions, presenting the restriction of a B-spline patch ...\" alt=\"\" coords=\"7,5,178,47\"/>\n <area shape=\"rect\" href=\"a01483.html\" title=\" \" alt=\"\" coords=\"5,109,180,151\"/>\n@@ -415,15 +415,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00107_source.html\">bsplinebasis.hh</a></li>\n+<li><a class=\"el\" href=\"a00176_source.html\">bsplinebasis.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01487.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01487.html", "unified_diff": "@@ -72,15 +72,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::BSplineLocalCoefficients< dim > Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00211.html\">Function space bases</a> » <a class=\"el\" href=\"a00213.html\">Function space basis implementations</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Attaches a shape function to an entity. \n <a href=\"a01487.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00107_source.html\">dune/functions/functionspacebases/bsplinebasis.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00176_source.html\">dune/functions/functionspacebases/bsplinebasis.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-methods\" name=\"pub-methods\"></a>\n Public Member Functions</h2></td></tr>\n <tr class=\"memitem:a73ed6bc866499e512d96cb6d6c315c6f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01487.html#a73ed6bc866499e512d96cb6d6c315c6f\">init</a> (const std::array< unsigned, dim > &sizes)</td></tr>\n <tr class=\"separator:a73ed6bc866499e512d96cb6d6c315c6f\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:acee2241933e75ae41972b3ce44ceb0c1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">std::size_t </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01487.html#acee2241933e75ae41972b3ce44ceb0c1\">size</a> () const</td></tr>\n <tr class=\"memdesc:acee2241933e75ae41972b3ce44ceb0c1\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">number of coefficients <a href=\"a01487.html#acee2241933e75ae41972b3ce44ceb0c1\">More...</a><br /></td></tr>\n@@ -185,15 +185,15 @@\n </div><div class=\"memdoc\">\n \n <p>number of coefficients </p>\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00107_source.html\">bsplinebasis.hh</a></li>\n+<li><a class=\"el\" href=\"a00176_source.html\">bsplinebasis.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01491.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01491.html", "unified_diff": "@@ -72,15 +72,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::BSplineLocalInterpolation< dim, LB > Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00211.html\">Function space bases</a> » <a class=\"el\" href=\"a00213.html\">Function space basis implementations</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Local interpolation in the sense of dune-localfunctions, for the B-spline basis on tensor-product grids. \n <a href=\"a01491.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00107_source.html\">dune/functions/functionspacebases/bsplinebasis.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00176_source.html\">dune/functions/functionspacebases/bsplinebasis.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::BSplineLocalInterpolation< dim, LB >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01490.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_b_spline_local_interpolation_3_01dim_00_01_l_b_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_b_spline_local_interpolation_3_01dim_00_01_l_b_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_b_spline_local_interpolation_3_01dim_00_01_l_b_01_4_inherit__map\">\n <area shape=\"rect\" title=\"Local interpolation in the sense of dune-localfunctions, for the B-spline basis on tensor-product gri...\" alt=\"\" coords=\"5,68,200,109\"/>\n <area shape=\"rect\" href=\"a01491.html\" title=\" \" alt=\"\" coords=\"400,5,639,76\"/>\n@@ -138,15 +138,15 @@\n </div><div class=\"memdoc\">\n \n <p>Local interpolation of a function. </p>\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00107_source.html\">bsplinebasis.hh</a></li>\n+<li><a class=\"el\" href=\"a00176_source.html\">bsplinebasis.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01495.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01495.html", "unified_diff": "@@ -72,15 +72,15 @@\n <a href=\"#pro-methods\">Protected Member Functions</a> |\n <a href=\"#pro-attribs\">Protected Attributes</a> |\n <a href=\"a01492.html\">List of all members</a> </div>\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::BSplineNode< GV > Class Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00107_source.html\">dune/functions/functionspacebases/bsplinebasis.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00176_source.html\">dune/functions/functionspacebases/bsplinebasis.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::BSplineNode< GV >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01494.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_b_spline_node_3_01_g_v_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_b_spline_node_3_01_g_v_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_b_spline_node_3_01_g_v_01_4_inherit__map\">\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"110,169,281,211\"/>\n <area shape=\"rect\" href=\"a01711.html\" title=\" \" alt=\"\" coords=\"88,95,303,121\"/>\n@@ -555,15 +555,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00107_source.html\">bsplinebasis.hh</a></li>\n+<li><a class=\"el\" href=\"a00176_source.html\">bsplinebasis.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01503.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01503.html", "unified_diff": "@@ -76,15 +76,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::CompositePreBasis< IMS, SPB > Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00211.html\">Function space bases</a> » <a class=\"el\" href=\"a00213.html\">Function space basis implementations</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>A pre-basis for composite bases. \n <a href=\"a01503.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00188_source.html\">dune/functions/functionspacebases/compositebasis.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00101_source.html\">dune/functions/functionspacebases/compositebasis.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr class=\"memitem:aa3fbd381a090703bb2f0ea3bde8a3031\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01503.html#aa3fbd381a090703bb2f0ea3bde8a3031\">SubPreBases</a> = std::tuple< SPB... ></td></tr>\n <tr class=\"memdesc:aa3fbd381a090703bb2f0ea3bde8a3031\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Tuple of child pre-bases. <a href=\"a01503.html#aa3fbd381a090703bb2f0ea3bde8a3031\">More...</a><br /></td></tr>\n <tr class=\"separator:aa3fbd381a090703bb2f0ea3bde8a3031\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:ab02c441bc5d90d3b584df84e606582a7\"><td class=\"memTemplParams\" colspan=\"2\">template<std::size_t i> </td></tr>\n@@ -821,15 +821,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00188_source.html\">compositebasis.hh</a></li>\n+<li><a class=\"el\" href=\"a00101_source.html\">compositebasis.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01555.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01555.html", "unified_diff": "@@ -74,15 +74,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::DefaultGlobalBasis< PB > Class Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Global basis for given pre-basis. \n <a href=\"a01555.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00119_source.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00152_source.html\">dune/functions/functionspacebases/defaultglobalbasis.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr class=\"memitem:a4d800349e8aa9ae148a178827d51ccda\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01555.html#a4d800349e8aa9ae148a178827d51ccda\">PreBasis</a> = PB</td></tr>\n <tr class=\"memdesc:a4d800349e8aa9ae148a178827d51ccda\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Pre-basis providing the implementation details. <a href=\"a01555.html#a4d800349e8aa9ae148a178827d51ccda\">More...</a><br /></td></tr>\n <tr class=\"separator:a4d800349e8aa9ae148a178827d51ccda\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:aa33c9a46f1e7548b2a956c36f6554e89\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01555.html#aa33c9a46f1e7548b2a956c36f6554e89\">PrefixPath</a> = TypeTree::HybridTreePath<></td></tr>\n@@ -725,15 +725,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00119_source.html\">defaultglobalbasis.hh</a></li>\n+<li><a class=\"el\" href=\"a00152_source.html\">defaultglobalbasis.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01559.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01559.html", "unified_diff": "@@ -75,15 +75,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::DefaultLocalView< GB > Class Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>The restriction of a finite element basis to a single element. \n <a href=\"a01559.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00140_source.html\">dune/functions/functionspacebases/defaultlocalview.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00128_source.html\">dune/functions/functionspacebases/defaultlocalview.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr class=\"memitem:a9523d45b214ee146d2135416d01aceda\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01559.html#a9523d45b214ee146d2135416d01aceda\">GlobalBasis</a> = GB</td></tr>\n <tr class=\"memdesc:a9523d45b214ee146d2135416d01aceda\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">The global FE basis that this is a view on. <a href=\"a01559.html#a9523d45b214ee146d2135416d01aceda\">More...</a><br /></td></tr>\n <tr class=\"separator:a9523d45b214ee146d2135416d01aceda\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a29917f5ca32a2b2df56b1ae72c2a25ca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01559.html#a29917f5ca32a2b2df56b1ae72c2a25ca\">GridView</a> = typename GlobalBasis::GridView</td></tr>\n@@ -773,15 +773,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00140_source.html\">defaultlocalview.hh</a></li>\n+<li><a class=\"el\" href=\"a00128_source.html\">defaultlocalview.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01563.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01563.html", "unified_diff": "@@ -74,15 +74,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::DefaultNodeToRangeMap< Tree > Struct Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>A simple node to range map using lexicographic ordering. \n <a href=\"a01563.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00173_source.html\">dune/functions/functionspacebases/defaultnodetorangemap.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00140_source.html\">dune/functions/functionspacebases/defaultnodetorangemap.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n <tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01567.html\">Visitor</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-methods\" name=\"pub-methods\"></a>\n@@ -253,15 +253,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00173_source.html\">defaultnodetorangemap.hh</a></li>\n+<li><a class=\"el\" href=\"a00140_source.html\">defaultnodetorangemap.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01567.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01567.html", "unified_diff": "@@ -70,15 +70,15 @@\n <a href=\"#pub-methods\">Public Member Functions</a> |\n <a href=\"#pub-attribs\">Public Attributes</a> |\n <a href=\"a01564.html\">List of all members</a> </div>\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::DefaultNodeToRangeMap< Tree >::Visitor Struct Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00173_source.html\">dune/functions/functionspacebases/defaultnodetorangemap.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00140_source.html\">dune/functions/functionspacebases/defaultnodetorangemap.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::DefaultNodeToRangeMap< Tree >::Visitor:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01566.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_default_node_to_range_map_3_01_tree_01_4_1_1_visitor_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_default_node_to_range_map_3_01_tree_01_4_1_1_visitor_inherit__map\" id=\"a_dune_1_1_functions_1_1_default_node_to_range_map_3_01_tree_01_4_1_1_visitor_inherit__map\">\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"83,80,262,136\"/>\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"5,5,151,32\"/>\n@@ -201,15 +201,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00173_source.html\">defaultnodetorangemap.hh</a></li>\n+<li><a class=\"el\" href=\"a00140_source.html\">defaultnodetorangemap.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01619.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01619.html", "unified_diff": "@@ -72,15 +72,15 @@\n <a href=\"#pro-methods\">Protected Member Functions</a> |\n <a href=\"#pro-attribs\">Protected Attributes</a> |\n <a href=\"a01616.html\">List of all members</a> </div>\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::HierarchicalLagrangeNode< GV, k, R > Class Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00149_source.html\">dune/functions/functionspacebases/hierarchicallagrangebasis.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00104_source.html\">dune/functions/functionspacebases/hierarchicallagrangebasis.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::HierarchicalLagrangeNode< GV, k, R >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01618.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_hierarchical_lagrange_node_3_01_g_v_00_01k_00_01_r_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_hierarchical_lagrange_node_3_01_g_v_00_01k_00_01_r_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_hierarchical_lagrange_node_3_01_g_v_00_01k_00_01_r_01_4_inherit__map\">\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"98,169,293,211\"/>\n <area shape=\"rect\" href=\"a01711.html\" title=\" \" alt=\"\" coords=\"88,95,303,121\"/>\n@@ -557,15 +557,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00149_source.html\">hierarchicallagrangebasis.hh</a></li>\n+<li><a class=\"el\" href=\"a00104_source.html\">hierarchicallagrangebasis.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01623.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01623.html", "unified_diff": "@@ -76,15 +76,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::HierarchicalLagrangePreBasis< GV, k, R > Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00211.html\">Function space bases</a> » <a class=\"el\" href=\"a00213.html\">Function space basis implementations</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>A pre-basis for a hierarchical basis. \n <a href=\"a01623.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00149_source.html\">dune/functions/functionspacebases/hierarchicallagrangebasis.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00104_source.html\">dune/functions/functionspacebases/hierarchicallagrangebasis.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr class=\"memitem:a8d29fa123c51e408af1e34dadf421658\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01623.html#a8d29fa123c51e408af1e34dadf421658\">GridView</a> = GV</td></tr>\n <tr class=\"memdesc:a8d29fa123c51e408af1e34dadf421658\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">The grid view that the FE basis is defined on. <a href=\"a01623.html#a8d29fa123c51e408af1e34dadf421658\">More...</a><br /></td></tr>\n <tr class=\"separator:a8d29fa123c51e408af1e34dadf421658\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a06b5f579aec6e1058020aca7c20a4a5b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01623.html#a06b5f579aec6e1058020aca7c20a4a5b\">size_type</a> = std::size_t</td></tr>\n@@ -670,15 +670,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00149_source.html\">hierarchicallagrangebasis.hh</a></li>\n+<li><a class=\"el\" href=\"a00104_source.html\">hierarchicallagrangebasis.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01627.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01627.html", "unified_diff": "@@ -72,15 +72,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::HierarchicNodeToRangeMap Struct Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>A simple node to range map using the nested tree indices. \n <a href=\"a01627.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00164_source.html\">dune/functions/functionspacebases/hierarchicnodetorangemap.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00170_source.html\">dune/functions/functionspacebases/hierarchicnodetorangemap.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-methods\" name=\"pub-methods\"></a>\n Public Member Functions</h2></td></tr>\n <tr class=\"memitem:a6bcd58a4ffb8c3d2ed7fb0a8e17f1e5a\"><td class=\"memTemplParams\" colspan=\"2\">template<class Node , class TreePath , class Range , std::enable_if_t< models< <a class=\"el\" href=\"a01519.html\">Concept::HasIndexAccess</a>, Range, Dune::index_constant< 0 > >(), int > = 0> </td></tr>\n <tr class=\"memitem:a6bcd58a4ffb8c3d2ed7fb0a8e17f1e5a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">decltype(auto) </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01627.html#a6bcd58a4ffb8c3d2ed7fb0a8e17f1e5a\">operator()</a> (const Node &, const TreePath &treePath, Range &&y) const</td></tr>\n <tr class=\"separator:a6bcd58a4ffb8c3d2ed7fb0a8e17f1e5a\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a7122457e9d3aad7c63a2184012f26566\"><td class=\"memTemplParams\" colspan=\"2\">template<class Node , class TreePath , class Range , std::enable_if_t< not models< <a class=\"el\" href=\"a01519.html\">Concept::HasIndexAccess</a>, Range, Dune::index_constant< 0 > >(), int > = 0> </td></tr>\n@@ -177,15 +177,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00164_source.html\">hierarchicnodetorangemap.hh</a></li>\n+<li><a class=\"el\" href=\"a00170_source.html\">hierarchicnodetorangemap.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01647.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01647.html", "unified_diff": "@@ -74,15 +74,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::HierarchicVectorWrapper< V, CO > Class Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>A wrapper providing multiindex access to vector entries. \n <a href=\"a01647.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00158_source.html\">dune/functions/functionspacebases/hierarchicvectorwrapper.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00173_source.html\">dune/functions/functionspacebases/hierarchicvectorwrapper.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr class=\"memitem:a7662d9e57bc2b8e522f4d423c9bbe750\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01647.html#a7662d9e57bc2b8e522f4d423c9bbe750\">Vector</a> = V</td></tr>\n <tr class=\"separator:a7662d9e57bc2b8e522f4d423c9bbe750\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a84a850d0e5587fc6f14179ec3f15da5c\"><td class=\"memTemplParams\" colspan=\"2\">template<class MultiIndex > </td></tr>\n <tr class=\"memitem:a84a850d0e5587fc6f14179ec3f15da5c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01647.html#a84a850d0e5587fc6f14179ec3f15da5c\">Entry</a> = Coefficient< MultiIndex ></td></tr>\n@@ -390,15 +390,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00158_source.html\">hierarchicvectorwrapper.hh</a></li>\n+<li><a class=\"el\" href=\"a00173_source.html\">hierarchicvectorwrapper.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01667.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01667.html", "unified_diff": "@@ -73,15 +73,15 @@\n <a href=\"#pro-methods\">Protected Member Functions</a> |\n <a href=\"#pro-attribs\">Protected Attributes</a> |\n <a href=\"a01664.html\">List of all members</a> </div>\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::LagrangeNode< GV, k, R > Class Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00125_source.html\">dune/functions/functionspacebases/lagrangebasis.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00122_source.html\">dune/functions/functionspacebases/lagrangebasis.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::LagrangeNode< GV, k, R >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01666.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_lagrange_node_3_01_g_v_00_01k_00_01_r_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_lagrange_node_3_01_g_v_00_01k_00_01_r_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_lagrange_node_3_01_g_v_00_01k_00_01_r_01_4_inherit__map\">\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"106,169,285,211\"/>\n <area shape=\"rect\" href=\"a01711.html\" title=\" \" alt=\"\" coords=\"88,95,303,121\"/>\n@@ -646,15 +646,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00125_source.html\">lagrangebasis.hh</a></li>\n+<li><a class=\"el\" href=\"a00122_source.html\">lagrangebasis.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01671.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01671.html", "unified_diff": "@@ -76,15 +76,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::LagrangePreBasis< GV, k, R > Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00211.html\">Function space bases</a> » <a class=\"el\" href=\"a00213.html\">Function space basis implementations</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>A pre-basis for a PQ-lagrange bases with given order. \n <a href=\"a01671.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00125_source.html\">dune/functions/functionspacebases/lagrangebasis.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00122_source.html\">dune/functions/functionspacebases/lagrangebasis.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::LagrangePreBasis< GV, k, R >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01670.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_lagrange_pre_basis_3_01_g_v_00_01k_00_01_r_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_lagrange_pre_basis_3_01_g_v_00_01k_00_01_r_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_lagrange_pre_basis_3_01_g_v_00_01k_00_01_r_01_4_inherit__map\">\n <area shape=\"rect\" title=\"A pre-basis for a PQ-lagrange bases with given order.\" alt=\"\" coords=\"5,39,184,80\"/>\n <area shape=\"rect\" href=\"a01671.html\" title=\" \" alt=\"\" coords=\"293,5,472,47\"/>\n@@ -1290,15 +1290,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00125_source.html\">lagrangebasis.hh</a></li>\n+<li><a class=\"el\" href=\"a00122_source.html\">lagrangebasis.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01679.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01679.html", "unified_diff": "@@ -72,15 +72,15 @@\n <a href=\"#pub-static-attribs\">Static Public Attributes</a> |\n <a href=\"#pro-attribs\">Protected Attributes</a> |\n <a href=\"a01676.html\">List of all members</a> </div>\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::LagrangeDGPreBasis< GV, k > Class Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00143_source.html\">dune/functions/functionspacebases/lagrangedgbasis.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00119_source.html\">dune/functions/functionspacebases/lagrangedgbasis.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr class=\"memitem:a8af148321780535e5555938ac4590e3c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01679.html#a8af148321780535e5555938ac4590e3c\">GridView</a> = GV</td></tr>\n <tr class=\"memdesc:a8af148321780535e5555938ac4590e3c\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">The grid view that the FE space is defined on. <a href=\"a01679.html#a8af148321780535e5555938ac4590e3c\">More...</a><br /></td></tr>\n <tr class=\"separator:a8af148321780535e5555938ac4590e3c\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:aef9347d55bd08683c5da3937c9e347bc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01679.html#aef9347d55bd08683c5da3937c9e347bc\">size_type</a> = std::size_t</td></tr>\n@@ -893,15 +893,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00143_source.html\">lagrangedgbasis.hh</a></li>\n+<li><a class=\"el\" href=\"a00119_source.html\">lagrangedgbasis.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01687.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01687.html", "unified_diff": "@@ -72,15 +72,15 @@\n <a href=\"#pro-methods\">Protected Member Functions</a> |\n <a href=\"#pro-attribs\">Protected Attributes</a> |\n <a href=\"a01684.html\">List of all members</a> </div>\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::NedelecNode< GV, Range, kind, order > Class Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00131_source.html\">dune/functions/functionspacebases/nedelecbasis.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00134_source.html\">dune/functions/functionspacebases/nedelecbasis.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::NedelecNode< GV, Range, kind, order >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01686.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_nedelec_node_3_01_g_v_00_01_range_00_01kind_00_01order_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_nedelec_node_3_01_g_v_00_01_range_00_01kind_00_01order_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_nedelec_node_3_01_g_v_00_01_range_00_01kind_00_01order_01_4_inherit__map\">\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"108,169,283,225\"/>\n <area shape=\"rect\" href=\"a01711.html\" title=\" \" alt=\"\" coords=\"88,95,303,121\"/>\n@@ -573,15 +573,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00131_source.html\">nedelecbasis.hh</a></li>\n+<li><a class=\"el\" href=\"a00134_source.html\">nedelecbasis.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01691.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01691.html", "unified_diff": "@@ -72,15 +72,15 @@\n <a href=\"#pub-static-attribs\">Static Public Attributes</a> |\n <a href=\"#pro-attribs\">Protected Attributes</a> |\n <a href=\"a01688.html\">List of all members</a> </div>\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::NedelecPreBasis< GV, Range, kind, order > Class Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00131_source.html\">dune/functions/functionspacebases/nedelecbasis.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00134_source.html\">dune/functions/functionspacebases/nedelecbasis.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr class=\"memitem:a4c8d0ac657c0dd2ecc6ecc826cb996a4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01691.html#a4c8d0ac657c0dd2ecc6ecc826cb996a4\">GridView</a> = GV</td></tr>\n <tr class=\"memdesc:a4c8d0ac657c0dd2ecc6ecc826cb996a4\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">The grid view that the FE space is defined on. <a href=\"a01691.html#a4c8d0ac657c0dd2ecc6ecc826cb996a4\">More...</a><br /></td></tr>\n <tr class=\"separator:a4c8d0ac657c0dd2ecc6ecc826cb996a4\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a1ed8686000377d0557455ef973bc5e12\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01691.html#a1ed8686000377d0557455ef973bc5e12\">size_type</a> = std::size_t</td></tr>\n@@ -629,15 +629,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00131_source.html\">nedelecbasis.hh</a></li>\n+<li><a class=\"el\" href=\"a00134_source.html\">nedelecbasis.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01707.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01707.html", "unified_diff": "@@ -71,15 +71,15 @@\n <a href=\"#pub-methods\">Public Member Functions</a> |\n <a href=\"#pro-methods\">Protected Member Functions</a> |\n <a href=\"a01704.html\">List of all members</a> </div>\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::BasisNodeMixin Class Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00191_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00179_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::BasisNodeMixin:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01706.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_basis_node_mixin_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_basis_node_mixin_inherit__map\" id=\"a_dune_1_1_functions_1_1_basis_node_mixin_inherit__map\">\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"5,123,196,165\"/>\n <area shape=\"rect\" href=\"a01719.html\" title=\" \" alt=\"\" coords=\"713,25,948,81\"/>\n@@ -344,15 +344,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00191_source.html\">nodes.hh</a></li>\n+<li><a class=\"el\" href=\"a00179_source.html\">nodes.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01711.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01711.html", "unified_diff": "@@ -71,15 +71,15 @@\n <a href=\"#pub-methods\">Public Member Functions</a> |\n <a href=\"#pro-methods\">Protected Member Functions</a> |\n <a href=\"a01708.html\">List of all members</a> </div>\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::LeafBasisNode Class Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00191_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00179_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::LeafBasisNode:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01710.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_leaf_basis_node_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_leaf_basis_node_inherit__map\" id=\"a_dune_1_1_functions_1_1_leaf_basis_node_inherit__map\">\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"244,209,459,235\"/>\n <area shape=\"rect\" href=\"a01495.html\" title=\" \" alt=\"\" coords=\"527,5,697,47\"/>\n@@ -319,15 +319,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00191_source.html\">nodes.hh</a></li>\n+<li><a class=\"el\" href=\"a00179_source.html\">nodes.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01715.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01715.html", "unified_diff": "@@ -71,15 +71,15 @@\n <a href=\"#pub-methods\">Public Member Functions</a> |\n <a href=\"#pro-methods\">Protected Member Functions</a> |\n <a href=\"a01712.html\">List of all members</a> </div>\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::PowerBasisNode< T, n > Class Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00191_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00179_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::PowerBasisNode< T, n >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01714.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_power_basis_node_3_01_t_00_01n_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_power_basis_node_3_01_t_00_01n_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_power_basis_node_3_01_t_00_01n_01_4_inherit__map\">\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"101,96,295,137\"/>\n <area shape=\"rect\" href=\"a01715.html\" title=\" \" alt=\"\" coords=\"101,215,295,271\"/>\n@@ -421,15 +421,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00191_source.html\">nodes.hh</a></li>\n+<li><a class=\"el\" href=\"a00179_source.html\">nodes.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01719.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01719.html", "unified_diff": "@@ -71,15 +71,15 @@\n <a href=\"#pub-methods\">Public Member Functions</a> |\n <a href=\"#pro-methods\">Protected Member Functions</a> |\n <a href=\"a01716.html\">List of all members</a> </div>\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::CompositeBasisNode< T > Class Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00191_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00179_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::CompositeBasisNode< T >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01718.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_composite_basis_node_3_01_t_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_composite_basis_node_3_01_t_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_composite_basis_node_3_01_t_01_4_inherit__map\">\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"245,39,435,80\"/>\n <area shape=\"rect\" href=\"a01719.html\" title=\" \" alt=\"\" coords=\"688,31,923,87\"/>\n@@ -454,15 +454,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00191_source.html\">nodes.hh</a></li>\n+<li><a class=\"el\" href=\"a00179_source.html\">nodes.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01723.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01723.html", "unified_diff": "@@ -72,15 +72,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::BasisFactory::Experimental::PeriodicIndexSet Class Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Container storing identified indices for a periodic basis. \n <a href=\"a01723.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00116_source.html\">dune/functions/functionspacebases/periodicbasis.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00146_source.html\">dune/functions/functionspacebases/periodicbasis.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-methods\" name=\"pub-methods\"></a>\n Public Member Functions</h2></td></tr>\n <tr class=\"memitem:a97911b25f2c1cf61ab48a667ae448b7e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01723.html#a97911b25f2c1cf61ab48a667ae448b7e\">unifyIndexPair</a> (std::size_t a, std::size_t b)</td></tr>\n <tr class=\"memdesc:a97911b25f2c1cf61ab48a667ae448b7e\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Insert a pair of indices. <a href=\"a01723.html#a97911b25f2c1cf61ab48a667ae448b7e\">More...</a><br /></td></tr>\n <tr class=\"separator:a97911b25f2c1cf61ab48a667ae448b7e\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:ace4a53d881dc7e6add6b0fd05a394738\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const auto & </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01723.html#ace4a53d881dc7e6add6b0fd05a394738\">indexPairSet</a> () const</td></tr>\n@@ -151,15 +151,15 @@\n \n <p>Insert a pair of indices. </p>\n <p >The two bases functions associated to the provided indices will be combined into a single basis function by associating them to a shared global index. </p>\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00116_source.html\">periodicbasis.hh</a></li>\n+<li><a class=\"el\" href=\"a00146_source.html\">periodicbasis.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01735.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01735.html", "unified_diff": "@@ -74,15 +74,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::PowerPreBasis< IMS, SPB, C > Class Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>A pre-basis for power bases. \n <a href=\"a01735.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00113_source.html\">dune/functions/functionspacebases/powerbasis.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00125_source.html\">dune/functions/functionspacebases/powerbasis.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr class=\"memitem:a419106855686e36864eea0100d8e618e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01735.html#a419106855686e36864eea0100d8e618e\">SubPreBasis</a> = SPB</td></tr>\n <tr class=\"memdesc:a419106855686e36864eea0100d8e618e\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">The child pre-basis. <a href=\"a01735.html#a419106855686e36864eea0100d8e618e\">More...</a><br /></td></tr>\n <tr class=\"separator:a419106855686e36864eea0100d8e618e\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a37d97aeb515a5abfd55259f1fb320d12\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01735.html#a37d97aeb515a5abfd55259f1fb320d12\">GridView</a> = typename SPB::GridView</td></tr>\n@@ -711,15 +711,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00113_source.html\">powerbasis.hh</a></li>\n+<li><a class=\"el\" href=\"a00125_source.html\">powerbasis.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01739.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01739.html", "unified_diff": "@@ -72,15 +72,15 @@\n <a href=\"#pro-methods\">Protected Member Functions</a> |\n <a href=\"#pro-attribs\">Protected Attributes</a> |\n <a href=\"a01736.html\">List of all members</a> </div>\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::RannacherTurekNode< GV > Class Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00167_source.html\">dune/functions/functionspacebases/rannacherturekbasis.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00185_source.html\">dune/functions/functionspacebases/rannacherturekbasis.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::RannacherTurekNode< GV >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01738.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_rannacher_turek_node_3_01_g_v_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_rannacher_turek_node_3_01_g_v_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_rannacher_turek_node_3_01_g_v_01_4_inherit__map\">\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"101,169,289,211\"/>\n <area shape=\"rect\" href=\"a01711.html\" title=\" \" alt=\"\" coords=\"88,95,303,121\"/>\n@@ -528,15 +528,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00167_source.html\">rannacherturekbasis.hh</a></li>\n+<li><a class=\"el\" href=\"a00185_source.html\">rannacherturekbasis.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01743.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01743.html", "unified_diff": "@@ -75,15 +75,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::RannacherTurekPreBasis< GV > Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00211.html\">Function space bases</a> » <a class=\"el\" href=\"a00213.html\">Function space basis implementations</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Pre-basis for a Rannacher-Turek basis. \n <a href=\"a01743.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00167_source.html\">dune/functions/functionspacebases/rannacherturekbasis.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00185_source.html\">dune/functions/functionspacebases/rannacherturekbasis.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr class=\"memitem:a5c7c1da97270ba99143631790b29f558\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01743.html#a5c7c1da97270ba99143631790b29f558\">GridView</a> = GV</td></tr>\n <tr class=\"memdesc:a5c7c1da97270ba99143631790b29f558\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">The grid view that the FE basis is defined on. <a href=\"a01743.html#a5c7c1da97270ba99143631790b29f558\">More...</a><br /></td></tr>\n <tr class=\"separator:a5c7c1da97270ba99143631790b29f558\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a3d9ace6e885c64bfc5776f0273f06e3d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01743.html#a3d9ace6e885c64bfc5776f0273f06e3d\">size_type</a> = std::size_t</td></tr>\n@@ -608,15 +608,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00167_source.html\">rannacherturekbasis.hh</a></li>\n+<li><a class=\"el\" href=\"a00185_source.html\">rannacherturekbasis.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01791.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01791.html", "unified_diff": "@@ -72,15 +72,15 @@\n <a href=\"#pro-methods\">Protected Member Functions</a> |\n <a href=\"#pro-attribs\">Protected Attributes</a> |\n <a href=\"a01788.html\">List of all members</a> </div>\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::RaviartThomasNode< GV, k > Class Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00137_source.html\">dune/functions/functionspacebases/raviartthomasbasis.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00161_source.html\">dune/functions/functionspacebases/raviartthomasbasis.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::RaviartThomasNode< GV, k >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01790.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_raviart_thomas_node_3_01_g_v_00_01k_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_raviart_thomas_node_3_01_g_v_00_01k_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_raviart_thomas_node_3_01_g_v_00_01k_01_4_inherit__map\">\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"111,169,279,211\"/>\n <area shape=\"rect\" href=\"a01711.html\" title=\" \" alt=\"\" coords=\"88,95,303,121\"/>\n@@ -573,15 +573,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00137_source.html\">raviartthomasbasis.hh</a></li>\n+<li><a class=\"el\" href=\"a00161_source.html\">raviartthomasbasis.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01795.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01795.html", "unified_diff": "@@ -72,15 +72,15 @@\n <a href=\"#pub-static-attribs\">Static Public Attributes</a> |\n <a href=\"#pro-attribs\">Protected Attributes</a> |\n <a href=\"a01792.html\">List of all members</a> </div>\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::RaviartThomasPreBasis< GV, k > Class Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00137_source.html\">dune/functions/functionspacebases/raviartthomasbasis.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00161_source.html\">dune/functions/functionspacebases/raviartthomasbasis.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr class=\"memitem:ab389963ad645a85730a68ba538962d68\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01795.html#ab389963ad645a85730a68ba538962d68\">GridView</a> = GV</td></tr>\n <tr class=\"memdesc:ab389963ad645a85730a68ba538962d68\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">The grid view that the FE space is defined on. <a href=\"a01795.html#ab389963ad645a85730a68ba538962d68\">More...</a><br /></td></tr>\n <tr class=\"separator:ab389963ad645a85730a68ba538962d68\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a3e54e4eb73680c37e4fc32475f49bd46\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01795.html#a3e54e4eb73680c37e4fc32475f49bd46\">size_type</a> = std::size_t</td></tr>\n@@ -657,15 +657,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00137_source.html\">raviartthomasbasis.hh</a></li>\n+<li><a class=\"el\" href=\"a00161_source.html\">raviartthomasbasis.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01799.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01799.html", "unified_diff": "@@ -74,15 +74,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::SizeInfo< B > Class Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>A class encapsulating size information. \n <a href=\"a01799.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00155_source.html\">dune/functions/functionspacebases/sizeinfo.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00110_source.html\">dune/functions/functionspacebases/sizeinfo.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr class=\"memitem:aa558e8687398c74affd92abb8af9bd58\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01799.html#aa558e8687398c74affd92abb8af9bd58\">Basis</a> = B</td></tr>\n <tr class=\"separator:aa558e8687398c74affd92abb8af9bd58\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a9d54b03391ba53f2cde374099ef62c21\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01799.html#a9d54b03391ba53f2cde374099ef62c21\">size_type</a> = typename Basis::size_type</td></tr>\n <tr class=\"separator:a9d54b03391ba53f2cde374099ef62c21\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n@@ -304,15 +304,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00155_source.html\">sizeinfo.hh</a></li>\n+<li><a class=\"el\" href=\"a00110_source.html\">sizeinfo.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01803.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01803.html", "unified_diff": "@@ -72,15 +72,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::SubEntityDOFs< GridView > Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00211.html\">Function space bases</a> » <a class=\"el\" href=\"a00214.html\">Function space basis utilities</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Range of DOFs associated to sub-entity. \n <a href=\"a01803.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00152_source.html\">dune/functions/functionspacebases/subentitydofs.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00113_source.html\">dune/functions/functionspacebases/subentitydofs.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-methods\" name=\"pub-methods\"></a>\n Public Member Functions</h2></td></tr>\n <tr class=\"memitem:acac48052c1a9079f779b64e68ce52e82\"><td class=\"memTemplParams\" colspan=\"2\">template<class LocalView > </td></tr>\n <tr class=\"memitem:acac48052c1a9079f779b64e68ce52e82\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a01803.html\">SubEntityDOFs</a> & </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01803.html#acac48052c1a9079f779b64e68ce52e82\">bind</a> (const LocalView &localView, std::size_t subEntityIndex, std::size_t subEntityCodim)</td></tr>\n <tr class=\"memdesc:acac48052c1a9079f779b64e68ce52e82\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Bind <a class=\"el\" href=\"a01803.html\" title=\"Range of DOFs associated to sub-entity.\">SubEntityDOFs</a> object to LocalView and sub-entity. <a href=\"a01803.html#acac48052c1a9079f779b64e68ce52e82\">More...</a><br /></td></tr>\n <tr class=\"separator:acac48052c1a9079f779b64e68ce52e82\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n@@ -370,15 +370,15 @@\n </div><div class=\"memdoc\">\n \n <p>Return number of contained DOFs. </p>\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00152_source.html\">subentitydofs.hh</a></li>\n+<li><a class=\"el\" href=\"a00113_source.html\">subentitydofs.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01807.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01807.html", "unified_diff": "@@ -71,15 +71,15 @@\n <a href=\"#pub-methods\">Public Member Functions</a> |\n <a href=\"#pro-attribs\">Protected Attributes</a> |\n <a href=\"a01804.html\">List of all members</a> </div>\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::SubspaceBasis< RB, TP > Class Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00176_source.html\">dune/functions/functionspacebases/subspacebasis.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00107_source.html\">dune/functions/functionspacebases/subspacebasis.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr class=\"memitem:aaa9c058bcb0bc05bdba112801201f281\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01807.html#aaa9c058bcb0bc05bdba112801201f281\">RootBasis</a> = RB</td></tr>\n <tr class=\"separator:aaa9c058bcb0bc05bdba112801201f281\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00d424aa40e6c051f610a308317cc57e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01807.html#a00d424aa40e6c051f610a308317cc57e\">RootLocalView</a> = typename RootBasis::LocalView</td></tr>\n <tr class=\"separator:a00d424aa40e6c051f610a308317cc57e\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n@@ -599,15 +599,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00176_source.html\">subspacebasis.hh</a></li>\n+<li><a class=\"el\" href=\"a00107_source.html\">subspacebasis.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01811.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01811.html", "unified_diff": "@@ -74,15 +74,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::SubspaceLocalView< RLV, PP > Class Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>The restriction of a finite element basis to a single element. \n <a href=\"a01811.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00146_source.html\">dune/functions/functionspacebases/subspacelocalview.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00188_source.html\">dune/functions/functionspacebases/subspacelocalview.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr class=\"memitem:aa1f3b0a89f5d186299ed0a5329562815\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01811.html#aa1f3b0a89f5d186299ed0a5329562815\">RootLocalView</a> = RLV</td></tr>\n <tr class=\"separator:aa1f3b0a89f5d186299ed0a5329562815\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a3a627e895c213316cb666677fb9176de\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01811.html#a3a627e895c213316cb666677fb9176de\">GlobalBasis</a> = <a class=\"el\" href=\"a01807.html\">SubspaceBasis</a>< typename RootLocalView::GlobalBasis, PrefixPath ></td></tr>\n <tr class=\"memdesc:a3a627e895c213316cb666677fb9176de\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">The global FE basis that this is a view on. <a href=\"a01811.html#a3a627e895c213316cb666677fb9176de\">More...</a><br /></td></tr>\n@@ -682,15 +682,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00146_source.html\">subspacelocalview.hh</a></li>\n+<li><a class=\"el\" href=\"a00188_source.html\">subspacelocalview.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01815.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01815.html", "unified_diff": "@@ -71,15 +71,15 @@\n <a href=\"#pub-methods\">Public Member Functions</a> |\n <a href=\"#pro-methods\">Protected Member Functions</a> |\n <a href=\"a01812.html\">List of all members</a> </div>\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::TaylorHoodVelocityTree< GV > Class Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00110_source.html\">dune/functions/functionspacebases/taylorhoodbasis.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00182_source.html\">dune/functions/functionspacebases/taylorhoodbasis.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::TaylorHoodVelocityTree< GV >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01814.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_taylor_hood_velocity_tree_3_01_g_v_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_taylor_hood_velocity_tree_3_01_g_v_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_taylor_hood_velocity_tree_3_01_g_v_01_4_inherit__map\">\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"867,63,1059,104\"/>\n <area shape=\"rect\" href=\"a01715.html\" title=\" \" alt=\"\" coords=\"623,55,817,111\"/>\n@@ -396,15 +396,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00110_source.html\">taylorhoodbasis.hh</a></li>\n+<li><a class=\"el\" href=\"a00182_source.html\">taylorhoodbasis.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01819.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01819.html", "unified_diff": "@@ -71,15 +71,15 @@\n <a href=\"#pub-methods\">Public Member Functions</a> |\n <a href=\"#pro-methods\">Protected Member Functions</a> |\n <a href=\"a01816.html\">List of all members</a> </div>\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::TaylorHoodBasisTree< GV > Class Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00110_source.html\">dune/functions/functionspacebases/taylorhoodbasis.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00182_source.html\">dune/functions/functionspacebases/taylorhoodbasis.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::TaylorHoodBasisTree< GV >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01818.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_taylor_hood_basis_tree_3_01_g_v_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_taylor_hood_basis_tree_3_01_g_v_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_taylor_hood_basis_tree_3_01_g_v_01_4_inherit__map\">\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"972,39,1164,80\"/>\n <area shape=\"rect\" href=\"a01719.html\" title=\" \" alt=\"\" coords=\"688,31,923,87\"/>\n@@ -395,15 +395,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00110_source.html\">taylorhoodbasis.hh</a></li>\n+<li><a class=\"el\" href=\"a00182_source.html\">taylorhoodbasis.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01823.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01823.html", "unified_diff": "@@ -77,15 +77,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::TaylorHoodPreBasis< GV, HI > Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00211.html\">Function space bases</a> » <a class=\"el\" href=\"a00213.html\">Function space basis implementations</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Pre-basis for lowest order Taylor-Hood basis. \n <a href=\"a01823.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00110_source.html\">dune/functions/functionspacebases/taylorhoodbasis.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00182_source.html\">dune/functions/functionspacebases/taylorhoodbasis.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr class=\"memitem:a4fbd3d92587a03f3871066968035f194\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01823.html#a4fbd3d92587a03f3871066968035f194\">GridView</a> = GV</td></tr>\n <tr class=\"memdesc:a4fbd3d92587a03f3871066968035f194\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">The grid view that the FE basis is defined on. <a href=\"a01823.html#a4fbd3d92587a03f3871066968035f194\">More...</a><br /></td></tr>\n <tr class=\"separator:a4fbd3d92587a03f3871066968035f194\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:aeed4421421902dc5900eedca651e56b9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01823.html#aeed4421421902dc5900eedca651e56b9\">size_type</a> = std::size_t</td></tr>\n@@ -805,15 +805,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00110_source.html\">taylorhoodbasis.hh</a></li>\n+<li><a class=\"el\" href=\"a00182_source.html\">taylorhoodbasis.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01827.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01827.html", "unified_diff": "@@ -75,15 +75,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::Experimental::TransformedIndexPreBasis< RPB, T > Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00211.html\">Function space bases</a> » <a class=\"el\" href=\"a00213.html\">Function space basis implementations</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>A pre-basis transforming multi-indices. \n <a href=\"a01827.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00161_source.html\">dune/functions/functionspacebases/transformedindexbasis.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00164_source.html\">dune/functions/functionspacebases/transformedindexbasis.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr class=\"memitem:a64aa0bf3453d3f749622b7ea521715ae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01827.html#a64aa0bf3453d3f749622b7ea521715ae\">RawPreBasis</a> = RPB</td></tr>\n <tr class=\"separator:a64aa0bf3453d3f749622b7ea521715ae\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a218ba207b64f73e09b2018d951f2dd54\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01827.html#a218ba207b64f73e09b2018d951f2dd54\">GridView</a> = typename RawPreBasis::GridView</td></tr>\n <tr class=\"memdesc:a218ba207b64f73e09b2018d951f2dd54\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">The grid view that the FE basis is defined on. <a href=\"a01827.html#a218ba207b64f73e09b2018d951f2dd54\">More...</a><br /></td></tr>\n@@ -772,15 +772,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00161_source.html\">transformedindexbasis.hh</a></li>\n+<li><a class=\"el\" href=\"a00164_source.html\">transformedindexbasis.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01831.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01831.html", "unified_diff": "@@ -73,15 +73,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation< IndexTransformation, SizeImplementation, minIS, maxIS > Class Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>A generic implementation of a transformation. \n <a href=\"a01831.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00161_source.html\">dune/functions/functionspacebases/transformedindexbasis.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00164_source.html\">dune/functions/functionspacebases/transformedindexbasis.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-methods\" name=\"pub-methods\"></a>\n Public Member Functions</h2></td></tr>\n <tr class=\"memitem:a219750b8ee3e1c033ad682d97799025b\"><td class=\"memTemplParams\" colspan=\"2\">template<class IT_R , class SI_R > </td></tr>\n <tr class=\"memitem:a219750b8ee3e1c033ad682d97799025b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\"> </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01831.html#a219750b8ee3e1c033ad682d97799025b\">GenericIndexingTransformation</a> (IT_R &&<a class=\"el\" href=\"a00227.html#af76509ea5d22293cf990c33c3306992f\">indexTransformation</a>, SI_R &&sizeImplementation)</td></tr>\n <tr class=\"separator:a219750b8ee3e1c033ad682d97799025b\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a6023cfa399a887be2d3e61b254725e7c\"><td class=\"memTemplParams\" colspan=\"2\">template<class MultiIndex , class PreBasis > </td></tr>\n@@ -313,15 +313,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00161_source.html\">transformedindexbasis.hh</a></li>\n+<li><a class=\"el\" href=\"a00164_source.html\">transformedindexbasis.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01843.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01843.html", "unified_diff": "@@ -79,15 +79,15 @@\n </td></tr>\n <tr class=\"memitem:gafe8f06fb6d4027bfaf39e0971d8eb3c6\"><td class=\"memTemplParams\" colspan=\"2\">template<class F , class GridView > </td></tr>\n <tr class=\"memitem:gafe8f06fb6d4027bfaf39e0971d8eb3c6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a01843.html\">AnalyticGridViewFunction</a>< typename std::invoke_result< F, typename GridView::template Codim< 0 >::Geometry::GlobalCoordinate >::type(typename GridView::template Codim< 0 >::Geometry::GlobalCoordinate), GridView, typename std::decay< F >::type > </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00209.html#gafe8f06fb6d4027bfaf39e0971d8eb3c6\">makeAnalyticGridViewFunction</a> (F &&f, const GridView &gridView)</td></tr>\n <tr class=\"memdesc:gafe8f06fb6d4027bfaf39e0971d8eb3c6\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create an <a class=\"el\" href=\"a01843.html\">AnalyticGridViewFunction</a> from a function and a grid view. <a href=\"a00209.html#gafe8f06fb6d4027bfaf39e0971d8eb3c6\">More...</a><br /></td></tr>\n <tr class=\"separator:gafe8f06fb6d4027bfaf39e0971d8eb3c6\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00014_source.html\">analyticgridviewfunction.hh</a></li>\n+<li><a class=\"el\" href=\"a00080_source.html\">analyticgridviewfunction.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01847.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01847.html", "unified_diff": "@@ -74,15 +74,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits > Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00209.html\">Function implementations</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Class wrapping any differentiable function as grid function. \n <a href=\"a01847.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00014_source.html\">dune/functions/gridfunctions/analyticgridviewfunction.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00080_source.html\">dune/functions/gridfunctions/analyticgridviewfunction.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr class=\"memitem:aa2e57079e8165771b468b0f8ec045543\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01847.html#aa2e57079e8165771b468b0f8ec045543\">Signature</a> = Range(Domain)</td></tr>\n <tr class=\"separator:aa2e57079e8165771b468b0f8ec045543\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:ad2d85b10863874dd3e2776713d5076e9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01847.html#ad2d85b10863874dd3e2776713d5076e9\">RawSignature</a> = typename <a class=\"el\" href=\"a01291.html\">SignatureTraits</a>< <a class=\"el\" href=\"a01847.html#aa2e57079e8165771b468b0f8ec045543\">Signature</a> >::RawSignature</td></tr>\n <tr class=\"separator:ad2d85b10863874dd3e2776713d5076e9\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n@@ -486,15 +486,15 @@\n </div><div class=\"memdoc\">\n \n <p>Construct the associated local-function. </p>\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00014_source.html\">analyticgridviewfunction.hh</a></li>\n+<li><a class=\"el\" href=\"a00080_source.html\">analyticgridviewfunction.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01851.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01851.html", "unified_diff": "@@ -78,15 +78,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::ComposedGridFunction< OF, IF > Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00209.html\">Function implementations</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Composition of grid functions with another function. \n <a href=\"a01851.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00020_source.html\">dune/functions/gridfunctions/composedgridfunction.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00092_source.html\">dune/functions/gridfunctions/composedgridfunction.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr class=\"memitem:a60e88941320bce2a3fd832dcb33b79e8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01851.html#a60e88941320bce2a3fd832dcb33b79e8\">EntitySet</a> = typename InnerFunction< 0 >::EntitySet</td></tr>\n <tr class=\"separator:a60e88941320bce2a3fd832dcb33b79e8\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a6c0975897a61d00e1e5db9e8d1c5943c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01851.html#a6c0975897a61d00e1e5db9e8d1c5943c\">Element</a> = typename EntitySet::Element</td></tr>\n <tr class=\"separator:a6c0975897a61d00e1e5db9e8d1c5943c\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n@@ -483,15 +483,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00020_source.html\">composedgridfunction.hh</a></li>\n+<li><a class=\"el\" href=\"a00092_source.html\">composedgridfunction.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01859.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01859.html", "unified_diff": "@@ -73,15 +73,15 @@\n <a href=\"#pro-methods\">Protected Member Functions</a> |\n <a href=\"#pro-attribs\">Protected Attributes</a> |\n <a href=\"a01856.html\">List of all members</a> </div>\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase< B, V, NTRE > Class Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00026_source.html\">dune/functions/gridfunctions/discreteglobalbasisfunction.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00089_source.html\">dune/functions/gridfunctions/discreteglobalbasisfunction.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase< B, V, NTRE >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01858.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_impl_doc_1_1_discrete_global_basis_function_base_3_01_b_00_01_v_00_01_n_t_r_e_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_impl_doc_1_1_discrete_global_basis_function_base_3_01_b_00_01_v_00_01_n_t_r_e_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_impl_doc_1_1_discrete_global_basis_function_base_3_01_b_00_01_v_00_01_n_t_r_e_01_4_inherit__map\">\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"5,49,235,105\"/>\n <area shape=\"rect\" href=\"a01859.html\" title=\" \" alt=\"\" coords=\"464,5,709,61\"/>\n@@ -475,15 +475,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00026_source.html\">discreteglobalbasisfunction.hh</a></li>\n+<li><a class=\"el\" href=\"a00089_source.html\">discreteglobalbasisfunction.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01863.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01863.html", "unified_diff": "@@ -69,15 +69,15 @@\n <div class=\"summary\">\n <a href=\"#pub-attribs\">Public Attributes</a> |\n <a href=\"a01860.html\">List of all members</a> </div>\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase< B, V, NTRE >::Data Struct Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00026_source.html\">dune/functions/gridfunctions/discreteglobalbasisfunction.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00089_source.html\">dune/functions/gridfunctions/discreteglobalbasisfunction.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-attribs\" name=\"pub-attribs\"></a>\n Public Attributes</h2></td></tr>\n <tr class=\"memitem:a869d1890dea002afea9673d30bf7a6f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"a01859.html#aa0f3fc49504b54be8b78cb443b447747\">EntitySet</a> </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01863.html#a869d1890dea002afea9673d30bf7a6f9\">entitySet</a></td></tr>\n <tr class=\"separator:a869d1890dea002afea9673d30bf7a6f9\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:aa8af2b92d6781bed52269bfaf15a03d7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">std::shared_ptr< const <a class=\"el\" href=\"a01859.html#a3692f2d61e9901fcc190337eb0c8d2c3\">Basis</a> > </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01863.html#aa8af2b92d6781bed52269bfaf15a03d7\">basis</a></td></tr>\n <tr class=\"separator:aa8af2b92d6781bed52269bfaf15a03d7\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n@@ -148,15 +148,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00026_source.html\">discreteglobalbasisfunction.hh</a></li>\n+<li><a class=\"el\" href=\"a00089_source.html\">discreteglobalbasisfunction.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01867.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01867.html", "unified_diff": "@@ -72,15 +72,15 @@\n <a href=\"#pro-methods\">Protected Member Functions</a> |\n <a href=\"#pro-attribs\">Protected Attributes</a> |\n <a href=\"a01864.html\">List of all members</a> </div>\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase< B, V, NTRE >::LocalFunctionBase Class Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00026_source.html\">dune/functions/gridfunctions/discreteglobalbasisfunction.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00089_source.html\">dune/functions/gridfunctions/discreteglobalbasisfunction.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase< B, V, NTRE >::LocalFunctionBase:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01866.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_impl_doc_1_1_discrete_global_basis_function_base_3_01_b_00_01_v_00_01_n_t_r_e_01_4_1_1_local_function_base_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_impl_doc_1_1_discrete_global_basis_function_base_3_01_b_00_01_v_00_01_n_t_r_e_01_4_1_1_local_function_base_inherit__map\" id=\"a_dune_1_1_functions_1_1_impl_doc_1_1_discrete_global_basis_function_base_3_01_b_00_01_v_00_01_n_t_r_e_01_4_1_1_local_function_base_inherit__map\">\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"5,45,239,101\"/>\n <area shape=\"rect\" href=\"a01879.html\" title=\" \" alt=\"\" coords=\"288,5,484,61\"/>\n@@ -535,15 +535,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00026_source.html\">discreteglobalbasisfunction.hh</a></li>\n+<li><a class=\"el\" href=\"a00089_source.html\">discreteglobalbasisfunction.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01871.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01871.html", "unified_diff": "@@ -76,15 +76,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative< DGBF > Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00209.html\">Function implementations</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Derivative of a <code><a class=\"el\" href=\"a01875.html\" title=\"A grid function induced by a global basis and a coefficient vector.\">DiscreteGlobalBasisFunction</a></code> \n <a href=\"a01871.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00026_source.html\">dune/functions/gridfunctions/discreteglobalbasisfunction.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00089_source.html\">dune/functions/gridfunctions/discreteglobalbasisfunction.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::DiscreteGlobalBasisFunctionDerivative< DGBF >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01870.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_discrete_global_basis_function_derivative_3_01_d_g_b_f_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_discrete_global_basis_function_derivative_3_01_d_g_b_f_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_discrete_global_basis_function_derivative_3_01_d_g_b_f_01_4_inherit__map\">\n <area shape=\"rect\" title=\"Derivative of a DiscreteGlobalBasisFunction\" alt=\"\" coords=\"743,21,941,77\"/>\n <area shape=\"rect\" href=\"a01859.html\" title=\" \" alt=\"\" coords=\"464,14,693,85\"/>\n@@ -673,15 +673,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00026_source.html\">discreteglobalbasisfunction.hh</a></li>\n+<li><a class=\"el\" href=\"a00089_source.html\">discreteglobalbasisfunction.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01875.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01875.html", "unified_diff": "@@ -77,15 +77,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::DiscreteGlobalBasisFunction< B, V, NTRE, R > Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00209.html\">Function implementations</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>A grid function induced by a global basis and a coefficient vector. \n <a href=\"a01875.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00026_source.html\">dune/functions/gridfunctions/discreteglobalbasisfunction.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00089_source.html\">dune/functions/gridfunctions/discreteglobalbasisfunction.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::DiscreteGlobalBasisFunction< B, V, NTRE, R >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01874.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_discrete_global_basis_function_3_01_b_00_01_v_00_01_n_t_r_e_00_01_r_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_discrete_global_basis_function_3_01_b_00_01_v_00_01_n_t_r_e_00_01_r_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_discrete_global_basis_function_3_01_b_00_01_v_00_01_n_t_r_e_00_01_r_01_4_inherit__map\">\n <area shape=\"rect\" title=\"A grid function induced by a global basis and a coefficient vector.\" alt=\"\" coords=\"731,7,905,63\"/>\n <area shape=\"rect\" href=\"a01859.html\" title=\" \" alt=\"\" coords=\"436,7,681,63\"/>\n@@ -742,15 +742,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00026_source.html\">discreteglobalbasisfunction.hh</a></li>\n+<li><a class=\"el\" href=\"a00089_source.html\">discreteglobalbasisfunction.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01879.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01879.html", "unified_diff": "@@ -73,15 +73,15 @@\n <a href=\"#pro-attribs\">Protected Attributes</a> |\n <a href=\"#friends\">Friends</a> |\n <a href=\"a01876.html\">List of all members</a> </div>\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::DiscreteGlobalBasisFunction< B, V, NTRE, R >::LocalFunction Class Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00026_source.html\">dune/functions/gridfunctions/discreteglobalbasisfunction.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00089_source.html\">dune/functions/gridfunctions/discreteglobalbasisfunction.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::DiscreteGlobalBasisFunction< B, V, NTRE, R >::LocalFunction:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01878.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_discrete_global_basis_function_3_01_b_00_01_v_00_01_n_t_r_e_00_01_r_01_4_1_1_local_function_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_discrete_global_basis_function_3_01_b_00_01_v_00_01_n_t_r_e_00_01_r_01_4_1_1_local_function_inherit__map\" id=\"a_dune_1_1_functions_1_1_discrete_global_basis_function_3_01_b_00_01_v_00_01_n_t_r_e_00_01_r_01_4_1_1_local_function_inherit__map\">\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"287,5,483,61\"/>\n <area shape=\"rect\" href=\"a01867.html\" title=\" \" alt=\"\" coords=\"5,5,239,61\"/>\n@@ -577,15 +577,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00026_source.html\">discreteglobalbasisfunction.hh</a></li>\n+<li><a class=\"el\" href=\"a00089_source.html\">discreteglobalbasisfunction.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01883.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01883.html", "unified_diff": "@@ -76,15 +76,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative< DGBF >::LocalFunction Class Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>local function evaluating the derivative in reference coordinates \n <a href=\"a01883.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00026_source.html\">dune/functions/gridfunctions/discreteglobalbasisfunction.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00089_source.html\">dune/functions/gridfunctions/discreteglobalbasisfunction.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::DiscreteGlobalBasisFunctionDerivative< DGBF >::LocalFunction:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01882.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_discrete_global_basis_function_derivative_3_01_d_g_b_f_01_4_1_1_local_function_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_discrete_global_basis_function_derivative_3_01_d_g_b_f_01_4_1_1_local_function_inherit__map\" id=\"a_dune_1_1_functions_1_1_discrete_global_basis_function_derivative_3_01_d_g_b_f_01_4_1_1_local_function_inherit__map\">\n <area shape=\"rect\" title=\"local function evaluating the derivative in reference coordinates\" alt=\"\" coords=\"287,5,485,61\"/>\n <area shape=\"rect\" href=\"a01867.html\" title=\" \" alt=\"\" coords=\"5,5,239,61\"/>\n@@ -585,15 +585,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00026_source.html\">discreteglobalbasisfunction.hh</a></li>\n+<li><a class=\"el\" href=\"a00089_source.html\">discreteglobalbasisfunction.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01887.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01887.html", "unified_diff": "@@ -75,15 +75,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::FaceNormalGridFunction< GV > Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00209.html\">Function implementations</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Grid function implementing the piecewise element face normal. \n <a href=\"a01887.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00035_source.html\">dune/functions/gridfunctions/facenormalgridfunction.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00077_source.html\">dune/functions/gridfunctions/facenormalgridfunction.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr class=\"memitem:a83c9500a49fbf25de2f8aaf04e422011\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01887.html#a83c9500a49fbf25de2f8aaf04e422011\">GridView</a> = GV</td></tr>\n <tr class=\"separator:a83c9500a49fbf25de2f8aaf04e422011\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a0c37b830a7bbba309a4df30441de8b8e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01887.html#a0c37b830a7bbba309a4df30441de8b8e\">EntitySet</a> = <a class=\"el\" href=\"a01919.html\">GridViewEntitySet</a>< <a class=\"el\" href=\"a01887.html#a83c9500a49fbf25de2f8aaf04e422011\">GridView</a>, 0 ></td></tr>\n <tr class=\"separator:a0c37b830a7bbba309a4df30441de8b8e\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n@@ -373,15 +373,15 @@\n </div><div class=\"memdoc\">\n \n <p>Return a local-function associated to <a class=\"el\" href=\"a01887.html\" title=\"Grid function implementing the piecewise element face normal.\">FaceNormalGridFunction</a>. </p>\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00035_source.html\">facenormalgridfunction.hh</a></li>\n+<li><a class=\"el\" href=\"a00077_source.html\">facenormalgridfunction.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01895.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01895.html", "unified_diff": "@@ -66,27 +66,27 @@\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::GridFunction< Signature, EntitySet, DerivativeTraits, bufferSize > Class Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00017_source.html\">dune/functions/gridfunctions/gridfunction.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00098_source.html\">dune/functions/gridfunctions/gridfunction.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::GridFunction< Signature, EntitySet, DerivativeTraits, bufferSize >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01894.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_grid_function_3_01_signature_00_01_entity_set_00_01_derivative_traits_00_01buffer_size_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_grid_function_3_01_signature_00_01_entity_set_00_01_derivative_traits_00_01buffer_size_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_grid_function_3_01_signature_00_01_entity_set_00_01_derivative_traits_00_01buffer_size_01_4_inherit__map\">\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"5,21,220,77\"/>\n <area shape=\"rect\" href=\"a01895.html\" title=\" \" alt=\"\" coords=\"445,21,699,77\"/>\n <area shape=\"rect\" href=\"a01927.html\" title=\"Wrapper class for functions defined on a GridView.\" alt=\"\" coords=\"748,14,927,85\"/>\n </map>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00017_source.html\">gridfunction.hh</a></li>\n+<li><a class=\"el\" href=\"a00098_source.html\">gridfunction.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01903.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01903.html", "unified_diff": "@@ -73,15 +73,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::GridFunction< Range(Domain), ES, DerivativeTraits, bufferSize > Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00208.html\">Function interface wrappers</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Wrapper class for functions defined on a Grid. \n <a href=\"a01903.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00017_source.html\">dune/functions/gridfunctions/gridfunction.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00098_source.html\">dune/functions/gridfunctions/gridfunction.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::GridFunction< Range(Domain), ES, DerivativeTraits, bufferSize >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01902.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_grid_function_3_01_range_07_domain_08_00_01_e_s_00_01_derivative_traits_00_01buffer_size_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_grid_function_3_01_range_07_domain_08_00_01_e_s_00_01_derivative_traits_00_01buffer_size_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_grid_function_3_01_range_07_domain_08_00_01_e_s_00_01_derivative_traits_00_01buffer_size_01_4_inherit__map\">\n <area shape=\"rect\" title=\"Wrapper class for functions defined on a Grid.\" alt=\"\" coords=\"824,65,1075,121\"/>\n <area shape=\"rect\" title=\" \" alt=\"\" coords=\"464,43,775,143\"/>\n@@ -317,15 +317,15 @@\n <p>Get local function of wrapped function. </p>\n <p >This is a free function, to be found by ADL.</p>\n <p >Notice that the returned <a class=\"el\" href=\"a01243.html\">LocalFunction</a> can only be used after it has been bound to a proper local context. </p>\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00017_source.html\">gridfunction.hh</a></li>\n+<li><a class=\"el\" href=\"a00098_source.html\">gridfunction.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01919.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01919.html", "unified_diff": "@@ -73,15 +73,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::GridViewEntitySet< GV, cd > Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00210.html\">Function related utilities</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>An entity set for all entities of given codim in a grid view. \n <a href=\"a01919.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00023_source.html\">dune/functions/gridfunctions/gridviewentityset.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00083_source.html\">dune/functions/gridfunctions/gridviewentityset.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::GridViewEntitySet< GV, cd >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01918.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_grid_view_entity_set_3_01_g_v_00_01cd_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_grid_view_entity_set_3_01_g_v_00_01cd_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_grid_view_entity_set_3_01_g_v_00_01cd_01_4_inherit__map\">\n <area shape=\"rect\" title=\"An entity set for all entities of given codim in a grid view.\" alt=\"\" coords=\"5,5,184,47\"/>\n <area shape=\"rect\" href=\"a01919.html\" title=\" \" alt=\"\" coords=\"5,109,184,151\"/>\n@@ -453,15 +453,15 @@\n </div><div class=\"memdoc\">\n \n <p>Return number of Elements visited by an iterator. </p>\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00023_source.html\">gridviewentityset.hh</a></li>\n+<li><a class=\"el\" href=\"a00083_source.html\">gridviewentityset.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01923.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01923.html", "unified_diff": "@@ -66,17 +66,17 @@\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::GridViewFunction< Signature, GridView, DerivativeTraits, bufferSize > Class Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00038_source.html\">dune/functions/gridfunctions/gridviewfunction.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00086_source.html\">dune/functions/gridfunctions/gridviewfunction.hh</a>></code></p>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00038_source.html\">gridviewfunction.hh</a></li>\n+<li><a class=\"el\" href=\"a00086_source.html\">gridviewfunction.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01927.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01927.html", "unified_diff": "@@ -72,15 +72,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::GridViewFunction< Range(Domain), GV, DerivativeTraits, bufferSize > Class Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00208.html\">Function interface wrappers</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Wrapper class for functions defined on a GridView. \n <a href=\"a01927.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00038_source.html\">dune/functions/gridfunctions/gridviewfunction.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00086_source.html\">dune/functions/gridfunctions/gridviewfunction.hh</a>></code></p>\n <div class=\"dynheader\">\n Inheritance diagram for Dune::Functions::GridViewFunction< Range(Domain), GV, DerivativeTraits, bufferSize >:</div>\n <div class=\"dyncontent\">\n <div class=\"center\"><img src=\"a01926.png\" border=\"0\" usemap=\"#a_dune_1_1_functions_1_1_grid_view_function_3_01_range_07_domain_08_00_01_g_v_00_01_derivative_traits_00_01buffer_size_01_4_inherit__map\" alt=\"Inheritance graph\"/></div>\n <map name=\"a_dune_1_1_functions_1_1_grid_view_function_3_01_range_07_domain_08_00_01_g_v_00_01_derivative_traits_00_01buffer_size_01_4_inherit__map\" id=\"a_dune_1_1_functions_1_1_grid_view_function_3_01_range_07_domain_08_00_01_g_v_00_01_derivative_traits_00_01buffer_size_01_4_inherit__map\">\n <area shape=\"rect\" title=\"Wrapper class for functions defined on a GridView.\" alt=\"\" coords=\"748,14,927,85\"/>\n <area shape=\"rect\" href=\"a01895.html\" title=\" \" alt=\"\" coords=\"445,21,699,77\"/>\n@@ -120,15 +120,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this class was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00038_source.html\">gridviewfunction.hh</a></li>\n+<li><a class=\"el\" href=\"a00086_source.html\">gridviewfunction.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01931.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01931.html", "unified_diff": "@@ -73,15 +73,15 @@\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::LocalDerivativeTraits< EntitySet, DerivativeTraits > Struct Template Reference<div class=\"ingroups\"><a class=\"el\" href=\"a00206.html\">Functions</a> » <a class=\"el\" href=\"a00210.html\">Function related utilities</a></div></div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n <p>Derivative traits for local functions. \n <a href=\"a01931.html#details\">More...</a></p>\n \n-<p><code>#include <<a class=\"el\" href=\"a00029_source.html\">dune/functions/gridfunctions/localderivativetraits.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00095_source.html\">dune/functions/gridfunctions/localderivativetraits.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n <tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01935.html\">Traits</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01939.html\">Traits< R(LocalDomain)></a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n@@ -128,15 +128,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00029_source.html\">localderivativetraits.hh</a></li>\n+<li><a class=\"el\" href=\"a00095_source.html\">localderivativetraits.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01935.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01935.html", "unified_diff": "@@ -69,15 +69,15 @@\n <div class=\"summary\">\n <a href=\"#pub-types\">Public Types</a> |\n <a href=\"a01932.html\">List of all members</a> </div>\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::LocalDerivativeTraits< EntitySet, DerivativeTraits >::Traits< Signature > Struct Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00029_source.html\">dune/functions/gridfunctions/localderivativetraits.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00095_source.html\">dune/functions/gridfunctions/localderivativetraits.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr class=\"memitem:ab37a5c5f4de2d44c5334bab2b33cf8a0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef <a class=\"el\" href=\"a01071.html\">InvalidRange</a> </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01935.html#ab37a5c5f4de2d44c5334bab2b33cf8a0\">Range</a></td></tr>\n <tr class=\"separator:ab37a5c5f4de2d44c5334bab2b33cf8a0\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n <h2 class=\"groupheader\">Member Typedef Documentation</h2>\n@@ -96,15 +96,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00029_source.html\">localderivativetraits.hh</a></li>\n+<li><a class=\"el\" href=\"a00095_source.html\">localderivativetraits.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a01939.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a01939.html", "unified_diff": "@@ -69,15 +69,15 @@\n <div class=\"summary\">\n <a href=\"#pub-types\">Public Types</a> |\n <a href=\"a01936.html\">List of all members</a> </div>\n <div class=\"headertitle\"><div class=\"title\">Dune::Functions::LocalDerivativeTraits< EntitySet, DerivativeTraits >::Traits< R(LocalDomain)> Struct Template Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n \n-<p><code>#include <<a class=\"el\" href=\"a00029_source.html\">dune/functions/gridfunctions/localderivativetraits.hh</a>></code></p>\n+<p><code>#include <<a class=\"el\" href=\"a00095_source.html\">dune/functions/gridfunctions/localderivativetraits.hh</a>></code></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"pub-types\" name=\"pub-types\"></a>\n Public Types</h2></td></tr>\n <tr class=\"memitem:a80a14d6e3599853298641c023ff34acd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">using </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01939.html#a80a14d6e3599853298641c023ff34acd\">Range</a> = typename DerivativeTraits< R(<a class=\"el\" href=\"a01931.html#a0339d22fe9243285caf3a79a286912b5\">Domain</a>)>::Range</td></tr>\n <tr class=\"separator:a80a14d6e3599853298641c023ff34acd\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n <h2 class=\"groupheader\">Member Typedef Documentation</h2>\n@@ -96,15 +96,15 @@\n </tr>\n </table>\n </div><div class=\"memdoc\">\n \n </div>\n </div>\n <hr/>The documentation for this struct was generated from the following file:<ul>\n-<li><a class=\"el\" href=\"a00029_source.html\">localderivativetraits.hh</a></li>\n+<li><a class=\"el\" href=\"a00095_source.html\">localderivativetraits.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a02876.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a02876.html", "unified_diff": "@@ -70,16 +70,16 @@\n <a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> </div>\n <div class=\"headertitle\"><div class=\"title\">functionspacebases/concepts.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n <div class=\"textblock\"><code>#include <dune/common/concept.hh></code><br />\n <code>#include <dune/common/reservedvector.hh></code><br />\n-<code>#include <<a class=\"el\" href=\"a00050_source.html\">dune/functions/common/utility.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00191_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00041_source.html\">dune/functions/common/utility.hh</a>></code><br />\n+<code>#include <<a class=\"el\" href=\"a00179_source.html\">dune/functions/functionspacebases/nodes.hh</a>></code><br />\n </div>\n <p><a href=\"a02876_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n <tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01511.html\">Dune::Functions::Concept::HasResize</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a02876_source.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a02876_source.html", "unified_diff": "@@ -74,17 +74,17 @@\n <div class=\"line\"><a id=\"l00003\" name=\"l00003\"></a><span class=\"lineno\"> 3</span><span class=\"preprocessor\">#ifndef DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONCEPTS_HH</span></div>\n <div class=\"line\"><a id=\"l00004\" name=\"l00004\"></a><span class=\"lineno\"> 4</span><span class=\"preprocessor\">#define DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONCEPTS_HH</span></div>\n <div class=\"line\"><a id=\"l00005\" name=\"l00005\"></a><span class=\"lineno\"> 5</span> </div>\n <div class=\"line\"><a id=\"l00006\" name=\"l00006\"></a><span class=\"lineno\"> 6</span> </div>\n <div class=\"line\"><a id=\"l00007\" name=\"l00007\"></a><span class=\"lineno\"> 7</span><span class=\"preprocessor\">#include <dune/common/concept.hh></span></div>\n <div class=\"line\"><a id=\"l00008\" name=\"l00008\"></a><span class=\"lineno\"> 8</span><span class=\"preprocessor\">#include <dune/common/reservedvector.hh></span></div>\n <div class=\"line\"><a id=\"l00009\" name=\"l00009\"></a><span class=\"lineno\"> 9</span> </div>\n-<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00050.html\">dune/functions/common/utility.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00010\" name=\"l00010\"></a><span class=\"lineno\"> 10</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00041.html\">dune/functions/common/utility.hh</a>></span></div>\n <div class=\"line\"><a id=\"l00011\" name=\"l00011\"></a><span class=\"lineno\"> 11</span> </div>\n-<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00191.html\">dune/functions/functionspacebases/nodes.hh</a>></span></div>\n+<div class=\"line\"><a id=\"l00012\" name=\"l00012\"></a><span class=\"lineno\"> 12</span><span class=\"preprocessor\">#include <<a class=\"code\" href=\"a00179.html\">dune/functions/functionspacebases/nodes.hh</a>></span></div>\n <div class=\"line\"><a id=\"l00013\" name=\"l00013\"></a><span class=\"lineno\"> 13</span> </div>\n <div class=\"line\"><a id=\"l00014\" name=\"l00014\"></a><span class=\"lineno\"> 14</span> </div>\n <div class=\"line\"><a id=\"l00015\" name=\"l00015\"></a><span class=\"lineno\"> 15</span><span class=\"keyword\">namespace </span><a class=\"code hl_namespace\" href=\"a00218.html\">Dune</a> {</div>\n <div class=\"line\"><a id=\"l00016\" name=\"l00016\"></a><span class=\"lineno\"> 16</span><span class=\"keyword\">namespace </span>Functions {</div>\n <div class=\"line\"><a id=\"l00017\" name=\"l00017\"></a><span class=\"lineno\"> 17</span><span class=\"keyword\">namespace </span>Concept {</div>\n <div class=\"line\"><a id=\"l00018\" name=\"l00018\"></a><span class=\"lineno\"> 18</span> </div>\n <div class=\"line\"><a id=\"l00019\" name=\"l00019\"></a><span class=\"lineno\"> 19</span><span class=\"keyword\">using namespace </span>Dune::Concept;</div>\n@@ -285,16 +285,16 @@\n <div class=\"line\"><a id=\"l00214\" name=\"l00214\"></a><span class=\"lineno\"> 214</span> </div>\n <div class=\"line\"><a id=\"l00215\" name=\"l00215\"></a><span class=\"lineno\"> 215</span>} <span class=\"comment\">// namespace Dune::Functions::Concept</span></div>\n <div class=\"line\"><a id=\"l00216\" name=\"l00216\"></a><span class=\"lineno\"> 216</span>} <span class=\"comment\">// namespace Dune::Functions</span></div>\n <div class=\"line\"><a id=\"l00217\" name=\"l00217\"></a><span class=\"lineno\"> 217</span>} <span class=\"comment\">// namespace Dune</span></div>\n <div class=\"line\"><a id=\"l00218\" name=\"l00218\"></a><span class=\"lineno\"> 218</span> </div>\n <div class=\"line\"><a id=\"l00219\" name=\"l00219\"></a><span class=\"lineno\"> 219</span> </div>\n <div class=\"line\"><a id=\"l00220\" name=\"l00220\"></a><span class=\"lineno\"> 220</span><span class=\"preprocessor\">#endif </span><span class=\"comment\">// DUNE_FUNCTIONS_FUNCTIONSPACEBASES_CONCEPTS_HH</span></div>\n-<div class=\"ttc\" id=\"aa00050_html\"><div class=\"ttname\"><a href=\"a00050.html\">utility.hh</a></div></div>\n-<div class=\"ttc\" id=\"aa00191_html\"><div class=\"ttname\"><a href=\"a00191.html\">nodes.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00041_html\"><div class=\"ttname\"><a href=\"a00041.html\">utility.hh</a></div></div>\n+<div class=\"ttc\" id=\"aa00179_html\"><div class=\"ttname\"><a href=\"a00179.html\">nodes.hh</a></div></div>\n <div class=\"ttc\" id=\"aa00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">Dune</a></div><div class=\"ttdef\"><b>Definition:</b> polynomial.hh:10</div></div>\n <div class=\"ttc\" id=\"aa01511_html\"><div class=\"ttname\"><a href=\"a01511.html\">Dune::Functions::Concept::HasResize</a></div><div class=\"ttdef\"><b>Definition:</b> functionspacebases/concepts.hh:23</div></div>\n <div class=\"ttc\" id=\"aa01511_html_a8a1de367869f4afa30734f258f48677c\"><div class=\"ttname\"><a href=\"a01511.html#a8a1de367869f4afa30734f258f48677c\">Dune::Functions::Concept::HasResize::require</a></div><div class=\"ttdeci\">auto require(C &&c) -> decltype(c.resize(0))</div></div>\n <div class=\"ttc\" id=\"aa01515_html\"><div class=\"ttname\"><a href=\"a01515.html\">Dune::Functions::Concept::HasSizeMethod</a></div><div class=\"ttdef\"><b>Definition:</b> functionspacebases/concepts.hh:33</div></div>\n <div class=\"ttc\" id=\"aa01515_html_a69f10c8a3a68dbb4348c200ac2d6235c\"><div class=\"ttname\"><a href=\"a01515.html#a69f10c8a3a68dbb4348c200ac2d6235c\">Dune::Functions::Concept::HasSizeMethod::require</a></div><div class=\"ttdeci\">auto require(C &&c) -> decltype(c.size())</div></div>\n <div class=\"ttc\" id=\"aa01519_html\"><div class=\"ttname\"><a href=\"a01519.html\">Dune::Functions::Concept::HasIndexAccess</a></div><div class=\"ttdef\"><b>Definition:</b> functionspacebases/concepts.hh:43</div></div>\n <div class=\"ttc\" id=\"aa01519_html_a33325ec9829369b9e04df631d930a028\"><div class=\"ttname\"><a href=\"a01519.html#a33325ec9829369b9e04df631d930a028\">Dune::Functions::Concept::HasIndexAccess::require</a></div><div class=\"ttdeci\">auto require(C &&c, I &&i) -> decltype(c[i])</div></div>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/dir_000001_000002.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/dir_000001_000002.html", "unified_diff": "@@ -62,14 +62,14 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_8457ebf380090bd61e5d3eab5b7eb9a1.html\">backends</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"contents\">\n-<h3>backends → common Relation</h3><table class=\"dirtab\"><tr class=\"dirtab\"><th class=\"dirtab\">File in dune/functions/backends</th><th class=\"dirtab\">Includes file in dune/functions/common</th></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00011.html\">istlvectorbackend.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00041.html\">indexaccess.hh</a></td></tr></table></div><!-- contents -->\n+<h3>backends → common Relation</h3><table class=\"dirtab\"><tr class=\"dirtab\"><th class=\"dirtab\">File in dune/functions/backends</th><th class=\"dirtab\">Includes file in dune/functions/common</th></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00191.html\">istlvectorbackend.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00062.html\">indexaccess.hh</a></td></tr></table></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/dir_000001_000007.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/dir_000001_000007.html", "unified_diff": "@@ -62,14 +62,14 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_8457ebf380090bd61e5d3eab5b7eb9a1.html\">backends</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"contents\">\n-<h3>backends → functionspacebases Relation</h3><table class=\"dirtab\"><tr class=\"dirtab\"><th class=\"dirtab\">File in dune/functions/backends</th><th class=\"dirtab\">Includes file in dune/functions/functionspacebases</th></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00011.html\">istlvectorbackend.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a02876.html\">functionspacebases/concepts.hh</a></td></tr></table></div><!-- contents -->\n+<h3>backends → functionspacebases Relation</h3><table class=\"dirtab\"><tr class=\"dirtab\"><th class=\"dirtab\">File in dune/functions/backends</th><th class=\"dirtab\">Includes file in dune/functions/functionspacebases</th></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00191.html\">istlvectorbackend.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a02876.html\">functionspacebases/concepts.hh</a></td></tr></table></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/dir_000002_000008.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/dir_000002_000008.html", "unified_diff": "@@ -62,14 +62,14 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"contents\">\n-<h3>common → gridfunctions Relation</h3><table class=\"dirtab\"><tr class=\"dirtab\"><th class=\"dirtab\">File in dune/functions/common</th><th class=\"dirtab\">Includes file in dune/functions/gridfunctions</th></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00053.html\">functionconcepts.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00023.html\">gridviewentityset.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00053.html\">functionconcepts.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00029.html\">localderivativetraits.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00083.html\">treedata.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00017.html\">gridfunction.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00083.html\">treedata.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00023.html\">gridviewentityset.hh</a></td></tr></table></div><!-- contents -->\n+<h3>common → gridfunctions Relation</h3><table class=\"dirtab\"><tr class=\"dirtab\"><th class=\"dirtab\">File in dune/functions/common</th><th class=\"dirtab\">Includes file in dune/functions/gridfunctions</th></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00020.html\">functionconcepts.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00083.html\">gridviewentityset.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00020.html\">functionconcepts.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00095.html\">localderivativetraits.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00065.html\">treedata.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00098.html\">gridfunction.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00065.html\">treedata.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00083.html\">gridviewentityset.hh</a></td></tr></table></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/dir_000007_000001.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/dir_000007_000001.html", "unified_diff": "@@ -62,14 +62,14 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"contents\">\n-<h3>functionspacebases → backends Relation</h3><table class=\"dirtab\"><tr class=\"dirtab\"><th class=\"dirtab\">File in dune/functions/functionspacebases</th><th class=\"dirtab\">Includes file in dune/functions/backends</th></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00170.html\">interpolate.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a02873.html\">backends/concepts.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00170.html\">interpolate.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00011.html\">istlvectorbackend.hh</a></td></tr></table></div><!-- contents -->\n+<h3>functionspacebases → backends Relation</h3><table class=\"dirtab\"><tr class=\"dirtab\"><th class=\"dirtab\">File in dune/functions/functionspacebases</th><th class=\"dirtab\">Includes file in dune/functions/backends</th></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00131.html\">interpolate.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a02873.html\">backends/concepts.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00131.html\">interpolate.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00191.html\">istlvectorbackend.hh</a></td></tr></table></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/dir_000007_000002.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/dir_000007_000002.html", "unified_diff": "@@ -62,14 +62,14 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"contents\">\n-<h3>functionspacebases → common Relation</h3><table class=\"dirtab\"><tr class=\"dirtab\"><th class=\"dirtab\">File in dune/functions/functionspacebases</th><th class=\"dirtab\">Includes file in dune/functions/common</th></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00188.html\">compositebasis.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00056.html\">staticforloop.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00188.html\">compositebasis.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00092.html\">type_traits.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00188.html\">compositebasis.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00050.html\">utility.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00119.html\">defaultglobalbasis.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00092.html\">type_traits.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00140.html\">defaultlocalview.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00101.html\">multiindex.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00140.html\">defaultlocalview.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00074.html\">overflowarray.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00122.html\">flatmultiindex.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00101.html\">multiindex.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a02876.html\">functionspacebases/concepts.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00050.html\">utility.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00164.html\">hierarchicnodetorangemap.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00041.html\">indexaccess.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00158.html\">hierarchicvectorwrapper.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00041.html\">indexaccess.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00158.html\">hierarchicvectorwrapper.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00092.html\">type_traits.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00158.html\">hierarchicvectorwrapper.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00050.html\">utility.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00170.html\">interpolate.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00053.html\">functionconcepts.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00113.html\">powerbasis.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00092.html\">type_traits.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00113.html\">powerbasis.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00050.html\">utility.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00176.html\">subspacebasis.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00092.html\">type_traits.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00161.html\">transformedindexbasis.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00056.html\">staticforloop.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00161.html\">transformedindexbasis.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00092.html\">type_traits.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00161.html\">transformedindexbasis.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00050.html\">utility.hh</a></td></tr></table></div><!-- contents -->\n+<h3>functionspacebases → common Relation</h3><table class=\"dirtab\"><tr class=\"dirtab\"><th class=\"dirtab\">File in dune/functions/functionspacebases</th><th class=\"dirtab\">Includes file in dune/functions/common</th></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00101.html\">compositebasis.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00056.html\">staticforloop.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00101.html\">compositebasis.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00029.html\">type_traits.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00101.html\">compositebasis.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00041.html\">utility.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00152.html\">defaultglobalbasis.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00029.html\">type_traits.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00128.html\">defaultlocalview.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00032.html\">multiindex.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00128.html\">defaultlocalview.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00059.html\">overflowarray.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00143.html\">flatmultiindex.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00032.html\">multiindex.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a02876.html\">functionspacebases/concepts.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00041.html\">utility.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00170.html\">hierarchicnodetorangemap.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00062.html\">indexaccess.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00173.html\">hierarchicvectorwrapper.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00062.html\">indexaccess.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00173.html\">hierarchicvectorwrapper.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00029.html\">type_traits.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00173.html\">hierarchicvectorwrapper.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00041.html\">utility.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00131.html\">interpolate.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00020.html\">functionconcepts.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00125.html\">powerbasis.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00029.html\">type_traits.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00125.html\">powerbasis.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00041.html\">utility.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00107.html\">subspacebasis.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00029.html\">type_traits.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00164.html\">transformedindexbasis.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00056.html\">staticforloop.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00164.html\">transformedindexbasis.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00029.html\">type_traits.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00164.html\">transformedindexbasis.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00041.html\">utility.hh</a></td></tr></table></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/dir_000007_000008.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/dir_000007_000008.html", "unified_diff": "@@ -62,14 +62,14 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"contents\">\n-<h3>functionspacebases → gridfunctions Relation</h3><table class=\"dirtab\"><tr class=\"dirtab\"><th class=\"dirtab\">File in dune/functions/functionspacebases</th><th class=\"dirtab\">Includes file in dune/functions/gridfunctions</th></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00170.html\">interpolate.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00038.html\">gridviewfunction.hh</a></td></tr></table></div><!-- contents -->\n+<h3>functionspacebases → gridfunctions Relation</h3><table class=\"dirtab\"><tr class=\"dirtab\"><th class=\"dirtab\">File in dune/functions/functionspacebases</th><th class=\"dirtab\">Includes file in dune/functions/gridfunctions</th></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00131.html\">interpolate.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00086.html\">gridviewfunction.hh</a></td></tr></table></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/dir_000008_000001.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/dir_000008_000001.html", "unified_diff": "@@ -62,14 +62,14 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"contents\">\n-<h3>gridfunctions → backends Relation</h3><table class=\"dirtab\"><tr class=\"dirtab\"><th class=\"dirtab\">File in dune/functions/gridfunctions</th><th class=\"dirtab\">Includes file in dune/functions/backends</th></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00026.html\">discreteglobalbasisfunction.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a02873.html\">backends/concepts.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00026.html\">discreteglobalbasisfunction.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00011.html\">istlvectorbackend.hh</a></td></tr></table></div><!-- contents -->\n+<h3>gridfunctions → backends Relation</h3><table class=\"dirtab\"><tr class=\"dirtab\"><th class=\"dirtab\">File in dune/functions/gridfunctions</th><th class=\"dirtab\">Includes file in dune/functions/backends</th></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00089.html\">discreteglobalbasisfunction.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a02873.html\">backends/concepts.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00089.html\">discreteglobalbasisfunction.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00191.html\">istlvectorbackend.hh</a></td></tr></table></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/dir_000008_000002.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/dir_000008_000002.html", "unified_diff": "@@ -62,14 +62,14 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"contents\">\n-<h3>gridfunctions → common Relation</h3><table class=\"dirtab\"><tr class=\"dirtab\"><th class=\"dirtab\">File in dune/functions/gridfunctions</th><th class=\"dirtab\">Includes file in dune/functions/common</th></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00014.html\">analyticgridviewfunction.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00080.html\">defaultderivativetraits.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00014.html\">analyticgridviewfunction.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00068.html\">differentiablefunction.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00014.html\">analyticgridviewfunction.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00098.html\">differentiablefunction_imp.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00014.html\">analyticgridviewfunction.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00086.html\">signature.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00020.html\">composedgridfunction.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00080.html\">defaultderivativetraits.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00020.html\">composedgridfunction.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00068.html\">differentiablefunction.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00017.html\">gridfunction.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00080.html\">defaultderivativetraits.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00017.html\">gridfunction.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00068.html\">differentiablefunction.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00017.html\">gridfunction.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00053.html\">functionconcepts.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00017.html\">gridfunction.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00065.html\">localfunction.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00017.html\">gridfunction.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00062.html\">typeerasure.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00032.html\">gridfunction_imp.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00098.html\">differentiablefunction_imp.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00032.html\">gridfunction_imp.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00095.html\">interfaces.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00032.html\">gridfunction_imp.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00092.html\">type_traits.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00029.html\">localderivativetraits.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00080.html\">defaultderivativetraits.hh</a></td></tr></table></div><!-- contents -->\n+<h3>gridfunctions → common Relation</h3><table class=\"dirtab\"><tr class=\"dirtab\"><th class=\"dirtab\">File in dune/functions/gridfunctions</th><th class=\"dirtab\">Includes file in dune/functions/common</th></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00080.html\">analyticgridviewfunction.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00035.html\">defaultderivativetraits.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00080.html\">analyticgridviewfunction.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00011.html\">differentiablefunction.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00080.html\">analyticgridviewfunction.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00071.html\">differentiablefunction_imp.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00080.html\">analyticgridviewfunction.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00008.html\">signature.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00092.html\">composedgridfunction.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00035.html\">defaultderivativetraits.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00092.html\">composedgridfunction.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00011.html\">differentiablefunction.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00098.html\">gridfunction.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00035.html\">defaultderivativetraits.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00098.html\">gridfunction.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00011.html\">differentiablefunction.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00098.html\">gridfunction.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00020.html\">functionconcepts.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00098.html\">gridfunction.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00053.html\">localfunction.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00098.html\">gridfunction.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00050.html\">typeerasure.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00074.html\">gridfunction_imp.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00071.html\">differentiablefunction_imp.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00074.html\">gridfunction_imp.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00026.html\">interfaces.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00074.html\">gridfunction_imp.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00029.html\">type_traits.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00095.html\">localderivativetraits.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00035.html\">defaultderivativetraits.hh</a></td></tr></table></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/dir_000008_000007.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/dir_000008_000007.html", "unified_diff": "@@ -62,14 +62,14 @@\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n <li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\">gridfunctions</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"contents\">\n-<h3>gridfunctions → functionspacebases Relation</h3><table class=\"dirtab\"><tr class=\"dirtab\"><th class=\"dirtab\">File in dune/functions/gridfunctions</th><th class=\"dirtab\">Includes file in dune/functions/functionspacebases</th></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00026.html\">discreteglobalbasisfunction.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00128.html\">flatvectorview.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00026.html\">discreteglobalbasisfunction.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00164.html\">hierarchicnodetorangemap.hh</a></td></tr></table></div><!-- contents -->\n+<h3>gridfunctions → functionspacebases Relation</h3><table class=\"dirtab\"><tr class=\"dirtab\"><th class=\"dirtab\">File in dune/functions/gridfunctions</th><th class=\"dirtab\">Includes file in dune/functions/functionspacebases</th></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00089.html\">discreteglobalbasisfunction.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00155.html\">flatvectorview.hh</a></td></tr><tr class=\"dirtab\"><td class=\"dirtab\"><a class=\"el\" href=\"a00089.html\">discreteglobalbasisfunction.hh</a></td><td class=\"dirtab\"><a class=\"el\" href=\"a00170.html\">hierarchicnodetorangemap.hh</a></td></tr></table></div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n </html>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/dir_14cf9ce796563c596e9b8f0f574fe0cc.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/dir_14cf9ce796563c596e9b8f0f574fe0cc.html", "unified_diff": "@@ -81,58 +81,58 @@\n <area shape=\"rect\" href=\"dir_000002_000007.html\" title=\"1\" alt=\"\" coords=\"191,121,199,136\"/>\n <area shape=\"rect\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\" title=\"functions\" alt=\"\" coords=\"16,16,296,207\"/>\n </map>\n </div>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"files\" name=\"files\"></a>\n Files</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00071.html\">callable.hh</a> <a href=\"a00071_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00014.html\">callable.hh</a> <a href=\"a00014_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00080.html\">defaultderivativetraits.hh</a> <a href=\"a00080_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00035.html\">defaultderivativetraits.hh</a> <a href=\"a00035_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00068.html\">differentiablefunction.hh</a> <a href=\"a00068_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00011.html\">differentiablefunction.hh</a> <a href=\"a00011_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00098.html\">differentiablefunction_imp.hh</a> <a href=\"a00098_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00071.html\">differentiablefunction_imp.hh</a> <a href=\"a00071_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00104.html\">differentiablefunctionfromcallables.hh</a> <a href=\"a00104_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00047.html\">differentiablefunctionfromcallables.hh</a> <a href=\"a00047_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html\">functionconcepts.hh</a> <a href=\"a00053_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00020.html\">functionconcepts.hh</a> <a href=\"a00020_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00047.html\">functionfromcallable.hh</a> <a href=\"a00047_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00017.html\">functionfromcallable.hh</a> <a href=\"a00017_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00041.html\">indexaccess.hh</a> <a href=\"a00041_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00062.html\">indexaccess.hh</a> <a href=\"a00062_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00095.html\">interfaces.hh</a> <a href=\"a00095_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00026.html\">interfaces.hh</a> <a href=\"a00026_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00065.html\">localfunction.hh</a> <a href=\"a00065_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html\">localfunction.hh</a> <a href=\"a00053_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00077.html\">localfunction_imp.hh</a> <a href=\"a00077_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00044.html\">localfunction_imp.hh</a> <a href=\"a00044_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00101.html\">multiindex.hh</a> <a href=\"a00101_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00032.html\">multiindex.hh</a> <a href=\"a00032_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00074.html\">overflowarray.hh</a> <a href=\"a00074_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00059.html\">overflowarray.hh</a> <a href=\"a00059_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00089.html\">polymorphicsmallobject.hh</a> <a href=\"a00089_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00068.html\">polymorphicsmallobject.hh</a> <a href=\"a00068_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00044.html\">referencehelper.hh</a> <a href=\"a00044_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00038.html\">referencehelper.hh</a> <a href=\"a00038_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00059.html\">reserveddeque.hh</a> <a href=\"a00059_source.html\">[code]</a></td></tr>\n-<tr class=\"memdesc:a00059\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">An stl-compliant double-ended queue which stores everything on the stack. <br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00023.html\">reserveddeque.hh</a> <a href=\"a00023_source.html\">[code]</a></td></tr>\n+<tr class=\"memdesc:a00023\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">An stl-compliant double-ended queue which stores everything on the stack. <br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00086.html\">signature.hh</a> <a href=\"a00086_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00008.html\">signature.hh</a> <a href=\"a00008_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00056.html\">staticforloop.hh</a> <a href=\"a00056_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00083.html\">treedata.hh</a> <a href=\"a00083_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00065.html\">treedata.hh</a> <a href=\"a00065_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00092.html\">type_traits.hh</a> <a href=\"a00092_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00029.html\">type_traits.hh</a> <a href=\"a00029_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00062.html\">typeerasure.hh</a> <a href=\"a00062_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html\">typeerasure.hh</a> <a href=\"a00050_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html\">utility.hh</a> <a href=\"a00050_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00041.html\">utility.hh</a> <a href=\"a00041_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/dir_55b300d561fb400353f8dbad76da65d6.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/dir_55b300d561fb400353f8dbad76da65d6.html", "unified_diff": "@@ -83,31 +83,31 @@\n <area shape=\"rect\" href=\"dir_000008_000007.html\" title=\"2\" alt=\"\" coords=\"247,123,255,138\"/>\n <area shape=\"rect\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\" title=\"functions\" alt=\"\" coords=\"16,16,373,207\"/>\n </map>\n </div>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"files\" name=\"files\"></a>\n Files</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00014.html\">analyticgridviewfunction.hh</a> <a href=\"a00014_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00080.html\">analyticgridviewfunction.hh</a> <a href=\"a00080_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00020.html\">composedgridfunction.hh</a> <a href=\"a00020_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00092.html\">composedgridfunction.hh</a> <a href=\"a00092_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00026.html\">discreteglobalbasisfunction.hh</a> <a href=\"a00026_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00089.html\">discreteglobalbasisfunction.hh</a> <a href=\"a00089_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00035.html\">facenormalgridfunction.hh</a> <a href=\"a00035_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00077.html\">facenormalgridfunction.hh</a> <a href=\"a00077_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00017.html\">gridfunction.hh</a> <a href=\"a00017_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00098.html\">gridfunction.hh</a> <a href=\"a00098_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00032.html\">gridfunction_imp.hh</a> <a href=\"a00032_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00074.html\">gridfunction_imp.hh</a> <a href=\"a00074_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00023.html\">gridviewentityset.hh</a> <a href=\"a00023_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00083.html\">gridviewentityset.hh</a> <a href=\"a00083_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00038.html\">gridviewfunction.hh</a> <a href=\"a00038_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00086.html\">gridviewfunction.hh</a> <a href=\"a00086_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00029.html\">localderivativetraits.hh</a> <a href=\"a00029_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00095.html\">localderivativetraits.hh</a> <a href=\"a00095_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/dir_8457ebf380090bd61e5d3eab5b7eb9a1.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/dir_8457ebf380090bd61e5d3eab5b7eb9a1.html", "unified_diff": "@@ -83,15 +83,15 @@\n </map>\n </div>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"files\" name=\"files\"></a>\n Files</h2></td></tr>\n <tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a02873.html\">backends/concepts.hh</a> <a href=\"a02873_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00011.html\">istlvectorbackend.hh</a> <a href=\"a00011_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00191.html\">istlvectorbackend.hh</a> <a href=\"a00191_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/dir_a2250aba7ee066a4c694d7c3cf43d078.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/dir_a2250aba7ee066a4c694d7c3cf43d078.html", "unified_diff": "@@ -83,74 +83,74 @@\n <area shape=\"rect\" href=\"dir_000007_000001.html\" title=\"2\" alt=\"\" coords=\"242,122,250,137\"/>\n <area shape=\"rect\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\" title=\"functions\" alt=\"\" coords=\"16,16,331,207\"/>\n </map>\n </div>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"files\" name=\"files\"></a>\n Files</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00179.html\">basistags.hh</a> <a href=\"a00179_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html\">basistags.hh</a> <a href=\"a00158_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00185.html\">boundarydofs.hh</a> <a href=\"a00185_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00167.html\">boundarydofs.hh</a> <a href=\"a00167_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00182.html\">brezzidouglasmarinibasis.hh</a> <a href=\"a00182_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00149.html\">brezzidouglasmarinibasis.hh</a> <a href=\"a00149_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00107.html\">bsplinebasis.hh</a> <a href=\"a00107_source.html\">[code]</a></td></tr>\n-<tr class=\"memdesc:a00107\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">The B-spline global function space basis. <br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00176.html\">bsplinebasis.hh</a> <a href=\"a00176_source.html\">[code]</a></td></tr>\n+<tr class=\"memdesc:a00176\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">The B-spline global function space basis. <br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00188.html\">compositebasis.hh</a> <a href=\"a00188_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00101.html\">compositebasis.hh</a> <a href=\"a00101_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a02876.html\">functionspacebases/concepts.hh</a> <a href=\"a02876_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00119.html\">defaultglobalbasis.hh</a> <a href=\"a00119_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00152.html\">defaultglobalbasis.hh</a> <a href=\"a00152_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00140.html\">defaultlocalview.hh</a> <a href=\"a00140_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00128.html\">defaultlocalview.hh</a> <a href=\"a00128_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00173.html\">defaultnodetorangemap.hh</a> <a href=\"a00173_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00140.html\">defaultnodetorangemap.hh</a> <a href=\"a00140_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00122.html\">flatmultiindex.hh</a> <a href=\"a00122_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00143.html\">flatmultiindex.hh</a> <a href=\"a00143_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00128.html\">flatvectorview.hh</a> <a href=\"a00128_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00155.html\">flatvectorview.hh</a> <a href=\"a00155_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00134.html\">globalvaluedlocalfiniteelement.hh</a> <a href=\"a00134_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00137.html\">globalvaluedlocalfiniteelement.hh</a> <a href=\"a00137_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00149.html\">hierarchicallagrangebasis.hh</a> <a href=\"a00149_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00104.html\">hierarchicallagrangebasis.hh</a> <a href=\"a00104_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00164.html\">hierarchicnodetorangemap.hh</a> <a href=\"a00164_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00170.html\">hierarchicnodetorangemap.hh</a> <a href=\"a00170_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html\">hierarchicvectorwrapper.hh</a> <a href=\"a00158_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00173.html\">hierarchicvectorwrapper.hh</a> <a href=\"a00173_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00170.html\">interpolate.hh</a> <a href=\"a00170_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00131.html\">interpolate.hh</a> <a href=\"a00131_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00125.html\">lagrangebasis.hh</a> <a href=\"a00125_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00122.html\">lagrangebasis.hh</a> <a href=\"a00122_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00143.html\">lagrangedgbasis.hh</a> <a href=\"a00143_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00119.html\">lagrangedgbasis.hh</a> <a href=\"a00119_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00131.html\">nedelecbasis.hh</a> <a href=\"a00131_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00134.html\">nedelecbasis.hh</a> <a href=\"a00134_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00191.html\">nodes.hh</a> <a href=\"a00191_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00179.html\">nodes.hh</a> <a href=\"a00179_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00116.html\">periodicbasis.hh</a> <a href=\"a00116_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00146.html\">periodicbasis.hh</a> <a href=\"a00146_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00113.html\">powerbasis.hh</a> <a href=\"a00113_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00125.html\">powerbasis.hh</a> <a href=\"a00125_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00167.html\">rannacherturekbasis.hh</a> <a href=\"a00167_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00185.html\">rannacherturekbasis.hh</a> <a href=\"a00185_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00137.html\">raviartthomasbasis.hh</a> <a href=\"a00137_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00161.html\">raviartthomasbasis.hh</a> <a href=\"a00161_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00155.html\">sizeinfo.hh</a> <a href=\"a00155_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00110.html\">sizeinfo.hh</a> <a href=\"a00110_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00152.html\">subentitydofs.hh</a> <a href=\"a00152_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00113.html\">subentitydofs.hh</a> <a href=\"a00113_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00176.html\">subspacebasis.hh</a> <a href=\"a00176_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00107.html\">subspacebasis.hh</a> <a href=\"a00107_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00146.html\">subspacelocalview.hh</a> <a href=\"a00146_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00188.html\">subspacelocalview.hh</a> <a href=\"a00188_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00110.html\">taylorhoodbasis.hh</a> <a href=\"a00110_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00182.html\">taylorhoodbasis.hh</a> <a href=\"a00182_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00161.html\">transformedindexbasis.hh</a> <a href=\"a00161_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00164.html\">transformedindexbasis.hh</a> <a href=\"a00164_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/dir_e22f2c69b2799e923164d7b2e4fa3f8c.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/dir_e22f2c69b2799e923164d7b2e4fa3f8c.html", "unified_diff": "@@ -77,17 +77,17 @@\n <area shape=\"rect\" href=\"dir_e22f2c69b2799e923164d7b2e4fa3f8c.html\" title=\"analyticfunctions\" alt=\"\" coords=\"27,52,147,100\"/>\n <area shape=\"rect\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\" title=\"functions\" alt=\"\" coords=\"16,16,157,111\"/>\n </map>\n </div>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"files\" name=\"files\"></a>\n Files</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00002.html\">polynomial.hh</a> <a href=\"a00002_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00005.html\">polynomial.hh</a> <a href=\"a00005_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00005.html\">trigonometricfunction.hh</a> <a href=\"a00005_source.html\">[code]</a></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00002.html\">trigonometricfunction.hh</a> <a href=\"a00002_source.html\">[code]</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/dune-functions.tag.gz", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/dune-functions.tag.gz", "unified_diff": null, "details": [{"source1": "dune-functions.tag", "source2": "dune-functions.tag", "unified_diff": null, "details": [{"source1": "dune-functions.tag", "source2": "dune-functions.tag", "unified_diff": "@@ -4,70 +4,39 @@\n <name>mainpage.md</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/doc/doxygen/</path>\n <filename>a00197.html</filename>\n </compound>\n <compound kind=\"file\">\n <name>polynomial.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/analyticfunctions/</path>\n- <filename>a00002.html</filename>\n+ <filename>a00005.html</filename>\n <class kind=\"class\">Dune::Functions::Polynomial</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n </compound>\n <compound kind=\"file\">\n <name>trigonometricfunction.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/analyticfunctions/</path>\n- <filename>a00005.html</filename>\n+ <filename>a00002.html</filename>\n <class kind=\"class\">Dune::Functions::TrigonometricFunction</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <member kind=\"function\">\n <type>TrigonometricFunction< K, -cosFactor, sinFactor ></type>\n <name>derivative</name>\n <anchorfile>a00209.html</anchorfile>\n <anchor>ga7ec424ff4be740ad675bd85750940472</anchor>\n <arglist>(const TrigonometricFunction< K, sinFactor, cosFactor > &f)</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n- <name>backends/concepts.hh</name>\n- <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/backends/</path>\n- <filename>a02873.html</filename>\n- <class kind=\"struct\">Dune::Functions::Concept::ConstVectorBackend</class>\n- <class kind=\"struct\">Dune::Functions::Concept::VectorBackend</class>\n- <namespace>Dune</namespace>\n- <namespace>Dune::Functions</namespace>\n- <namespace>Dune::Functions::Concept</namespace>\n- </compound>\n- <compound kind=\"file\">\n- <name>functionspacebases/concepts.hh</name>\n- <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/</path>\n- <filename>a02876.html</filename>\n- <includes id=\"a00050\" name=\"utility.hh\" local=\"no\" imported=\"no\">dune/functions/common/utility.hh</includes>\n- <includes id=\"a00191\" name=\"nodes.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/nodes.hh</includes>\n- <class kind=\"struct\">Dune::Functions::Concept::HasResize</class>\n- <class kind=\"struct\">Dune::Functions::Concept::HasSizeMethod</class>\n- <class kind=\"struct\">Dune::Functions::Concept::HasIndexAccess</class>\n- <class kind=\"struct\">Dune::Functions::Concept::BasisNode</class>\n- <class kind=\"struct\">Dune::Functions::Concept::LeafBasisNode</class>\n- <class kind=\"struct\">Dune::Functions::Concept::PowerBasisNode</class>\n- <class kind=\"struct\">Dune::Functions::Concept::CompositeBasisNode</class>\n- <class kind=\"struct\">Dune::Functions::Concept::BasisTree</class>\n- <class kind=\"struct\">Dune::Functions::Concept::PreBasis</class>\n- <class kind=\"struct\">Dune::Functions::Concept::LocalView</class>\n- <class kind=\"struct\">Dune::Functions::Concept::GlobalBasis</class>\n- <namespace>Dune</namespace>\n- <namespace>Dune::Functions</namespace>\n- <namespace>Dune::Functions::Concept</namespace>\n- </compound>\n- <compound kind=\"file\">\n <name>istlvectorbackend.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/backends/</path>\n- <filename>a00011.html</filename>\n- <includes id=\"a00041\" name=\"indexaccess.hh\" local=\"no\" imported=\"no\">dune/functions/common/indexaccess.hh</includes>\n+ <filename>a00191.html</filename>\n+ <includes id=\"a00062\" name=\"indexaccess.hh\" local=\"no\" imported=\"no\">dune/functions/common/indexaccess.hh</includes>\n <includes id=\"a02876\" name=\"functionspacebases/concepts.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/concepts.hh</includes>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <member kind=\"function\">\n <type>constexpr auto</type>\n <name>fieldTypes</name>\n <anchorfile>a00219.html</anchorfile>\n@@ -95,15 +64,15 @@\n <anchor>ga50a181637103e7abc011235a9fd30611</anchor>\n <arglist>(const Vector &v)</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>callable.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/common/</path>\n- <filename>a00071.html</filename>\n+ <filename>a00014.html</filename>\n <class kind=\"class\">Dune::Functions::CallableFunctionWrapper</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <member kind=\"function\">\n <type>CallableFunctionWrapper< F ></type>\n <name>callable</name>\n <anchorfile>a00209.html</anchorfile>\n@@ -117,54 +86,54 @@\n <anchor>ga5831245ed303c2103ab06af079cb8cf9</anchor>\n <arglist>(const std::shared_ptr< F > &fp)</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>defaultderivativetraits.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/common/</path>\n- <filename>a00080.html</filename>\n+ <filename>a00035.html</filename>\n <class kind=\"class\">Dune::Functions::InvalidRange</class>\n <class kind=\"struct\">Dune::Functions::DefaultDerivativeTraits</class>\n <class kind=\"struct\">Dune::Functions::DefaultDerivativeTraits< double(double) ></class>\n <class kind=\"struct\">Dune::Functions::DefaultDerivativeTraits< K(FieldVector< K, n >)></class>\n <class kind=\"struct\">Dune::Functions::DefaultDerivativeTraits< FieldVector< K, m >(FieldVector< K, n >)></class>\n <class kind=\"struct\">Dune::Functions::DefaultDerivativeTraits< FieldMatrix< K, 1, m >(FieldVector< K, n >)></class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n </compound>\n <compound kind=\"file\">\n <name>differentiablefunction.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/common/</path>\n- <filename>a00068.html</filename>\n- <includes id=\"a00092\" name=\"type_traits.hh\" local=\"no\" imported=\"no\">dune/functions/common/type_traits.hh</includes>\n- <includes id=\"a00080\" name=\"defaultderivativetraits.hh\" local=\"no\" imported=\"no\">dune/functions/common/defaultderivativetraits.hh</includes>\n- <includes id=\"a00098\" name=\"differentiablefunction_imp.hh\" local=\"no\" imported=\"no\">dune/functions/common/differentiablefunction_imp.hh</includes>\n- <includes id=\"a00086\" name=\"signature.hh\" local=\"no\" imported=\"no\">dune/functions/common/signature.hh</includes>\n- <includes id=\"a00062\" name=\"typeerasure.hh\" local=\"no\" imported=\"no\">dune/functions/common/typeerasure.hh</includes>\n- <includes id=\"a00053\" name=\"functionconcepts.hh\" local=\"no\" imported=\"no\">dune/functions/common/functionconcepts.hh</includes>\n+ <filename>a00011.html</filename>\n+ <includes id=\"a00029\" name=\"type_traits.hh\" local=\"no\" imported=\"no\">dune/functions/common/type_traits.hh</includes>\n+ <includes id=\"a00035\" name=\"defaultderivativetraits.hh\" local=\"no\" imported=\"no\">dune/functions/common/defaultderivativetraits.hh</includes>\n+ <includes id=\"a00071\" name=\"differentiablefunction_imp.hh\" local=\"no\" imported=\"no\">dune/functions/common/differentiablefunction_imp.hh</includes>\n+ <includes id=\"a00008\" name=\"signature.hh\" local=\"no\" imported=\"no\">dune/functions/common/signature.hh</includes>\n+ <includes id=\"a00050\" name=\"typeerasure.hh\" local=\"no\" imported=\"no\">dune/functions/common/typeerasure.hh</includes>\n+ <includes id=\"a00020\" name=\"functionconcepts.hh\" local=\"no\" imported=\"no\">dune/functions/common/functionconcepts.hh</includes>\n <class kind=\"class\">Dune::Functions::DifferentiableFunction</class>\n <class kind=\"class\">Dune::Functions::DifferentiableFunction< Range(Domain), DerivativeTraits, bufferSize ></class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n </compound>\n <compound kind=\"file\">\n <name>differentiablefunction_imp.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/common/</path>\n- <filename>a00098.html</filename>\n- <includes id=\"a00092\" name=\"type_traits.hh\" local=\"no\" imported=\"no\">dune/functions/common/type_traits.hh</includes>\n+ <filename>a00071.html</filename>\n+ <includes id=\"a00029\" name=\"type_traits.hh\" local=\"no\" imported=\"no\">dune/functions/common/type_traits.hh</includes>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n </compound>\n <compound kind=\"file\">\n <name>differentiablefunctionfromcallables.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/common/</path>\n- <filename>a00104.html</filename>\n- <includes id=\"a00086\" name=\"signature.hh\" local=\"no\" imported=\"no\">dune/functions/common/signature.hh</includes>\n- <includes id=\"a00068\" name=\"differentiablefunction.hh\" local=\"no\" imported=\"no\">dune/functions/common/differentiablefunction.hh</includes>\n- <includes id=\"a00053\" name=\"functionconcepts.hh\" local=\"no\" imported=\"no\">dune/functions/common/functionconcepts.hh</includes>\n+ <filename>a00047.html</filename>\n+ <includes id=\"a00008\" name=\"signature.hh\" local=\"no\" imported=\"no\">dune/functions/common/signature.hh</includes>\n+ <includes id=\"a00011\" name=\"differentiablefunction.hh\" local=\"no\" imported=\"no\">dune/functions/common/differentiablefunction.hh</includes>\n+ <includes id=\"a00020\" name=\"functionconcepts.hh\" local=\"no\" imported=\"no\">dune/functions/common/functionconcepts.hh</includes>\n <class kind=\"class\">Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F ></class>\n <class kind=\"class\">Dune::Functions::DifferentiableFunctionFromCallables< Range(Domain), DerivativeTraits, F, DF, Derivatives... ></class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <member kind=\"function\">\n <type>DifferentiableFunctionFromCallables< Signature, DerivativeTraits, F... ></type>\n <name>makeDifferentiableFunctionFromCallables</name>\n@@ -172,18 +141,18 @@\n <anchor>gad3bb1b3fe74c7f750a3980f4c0ce0449</anchor>\n <arglist>(const SignatureTag< Signature, DerivativeTraits > &signatureTag, F &&... f)</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>functionconcepts.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/common/</path>\n- <filename>a00053.html</filename>\n- <includes id=\"a00086\" name=\"signature.hh\" local=\"no\" imported=\"no\">dune/functions/common/signature.hh</includes>\n- <includes id=\"a00029\" name=\"localderivativetraits.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/localderivativetraits.hh</includes>\n- <includes id=\"a00023\" name=\"gridviewentityset.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/gridviewentityset.hh</includes>\n+ <filename>a00020.html</filename>\n+ <includes id=\"a00008\" name=\"signature.hh\" local=\"no\" imported=\"no\">dune/functions/common/signature.hh</includes>\n+ <includes id=\"a00095\" name=\"localderivativetraits.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/localderivativetraits.hh</includes>\n+ <includes id=\"a00083\" name=\"gridviewentityset.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/gridviewentityset.hh</includes>\n <class kind=\"struct\">Dune::Functions::Concept::Callable</class>\n <class kind=\"struct\">Dune::Functions::Concept::Function< Range(Domain)></class>\n <class kind=\"struct\">Dune::Functions::Concept::DifferentiableFunction< Range(Domain), DerivativeTraits ></class>\n <class kind=\"struct\">Dune::Functions::Concept::LocalFunction< Range(Domain), LocalContext ></class>\n <class kind=\"struct\">Dune::Functions::Concept::DifferentiableLocalFunction< Range(Domain), LocalContext, DerivativeTraits ></class>\n <class kind=\"struct\">Dune::Functions::Concept::EntitySet</class>\n <class kind=\"struct\">Dune::Functions::Concept::GridFunction< Range(Domain), EntitySet ></class>\n@@ -284,25 +253,25 @@\n <anchor>ga5fe279401b9387533b85b085d6d521cc</anchor>\n <arglist>()</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>functionfromcallable.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/common/</path>\n- <filename>a00047.html</filename>\n- <includes id=\"a00086\" name=\"signature.hh\" local=\"no\" imported=\"no\">dune/functions/common/signature.hh</includes>\n+ <filename>a00017.html</filename>\n+ <includes id=\"a00008\" name=\"signature.hh\" local=\"no\" imported=\"no\">dune/functions/common/signature.hh</includes>\n <class kind=\"class\">Dune::Functions::FunctionFromCallable< Range(Domain), F, FunctionInterface ></class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n </compound>\n <compound kind=\"file\">\n <name>indexaccess.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/common/</path>\n- <filename>a00041.html</filename>\n- <includes id=\"a00050\" name=\"utility.hh\" local=\"no\" imported=\"no\">dune/functions/common/utility.hh</includes>\n+ <filename>a00062.html</filename>\n+ <includes id=\"a00041\" name=\"utility.hh\" local=\"no\" imported=\"no\">dune/functions/common/utility.hh</includes>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <member kind=\"function\">\n <type>auto</type>\n <name>hybridIndexAccess</name>\n <anchorfile>a00215.html</anchorfile>\n <anchor>ga2226fe3a86eb176df27c9801a98a10ae</anchor>\n@@ -343,46 +312,46 @@\n <anchor>ga4cc6af2842348271c242c048e0411637</anchor>\n <arglist>(C &&c, const MultiIndex &multiIndex)</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>interfaces.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/common/</path>\n- <filename>a00095.html</filename>\n+ <filename>a00026.html</filename>\n <class kind=\"class\">Dune::Functions::PolymorphicType</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n </compound>\n <compound kind=\"file\">\n <name>localfunction.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/common/</path>\n- <filename>a00065.html</filename>\n- <includes id=\"a00080\" name=\"defaultderivativetraits.hh\" local=\"no\" imported=\"no\">dune/functions/common/defaultderivativetraits.hh</includes>\n- <includes id=\"a00068\" name=\"differentiablefunction.hh\" local=\"no\" imported=\"no\">dune/functions/common/differentiablefunction.hh</includes>\n- <includes id=\"a00077\" name=\"localfunction_imp.hh\" local=\"no\" imported=\"no\">dune/functions/common/localfunction_imp.hh</includes>\n- <includes id=\"a00062\" name=\"typeerasure.hh\" local=\"no\" imported=\"no\">dune/functions/common/typeerasure.hh</includes>\n- <includes id=\"a00053\" name=\"functionconcepts.hh\" local=\"no\" imported=\"no\">dune/functions/common/functionconcepts.hh</includes>\n+ <filename>a00053.html</filename>\n+ <includes id=\"a00035\" name=\"defaultderivativetraits.hh\" local=\"no\" imported=\"no\">dune/functions/common/defaultderivativetraits.hh</includes>\n+ <includes id=\"a00011\" name=\"differentiablefunction.hh\" local=\"no\" imported=\"no\">dune/functions/common/differentiablefunction.hh</includes>\n+ <includes id=\"a00044\" name=\"localfunction_imp.hh\" local=\"no\" imported=\"no\">dune/functions/common/localfunction_imp.hh</includes>\n+ <includes id=\"a00050\" name=\"typeerasure.hh\" local=\"no\" imported=\"no\">dune/functions/common/typeerasure.hh</includes>\n+ <includes id=\"a00020\" name=\"functionconcepts.hh\" local=\"no\" imported=\"no\">dune/functions/common/functionconcepts.hh</includes>\n <class kind=\"class\">Dune::Functions::LocalFunction</class>\n <class kind=\"class\">Dune::Functions::LocalFunction< Range(Domain), LocalContext, DerivativeTraits, bufferSize ></class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n </compound>\n <compound kind=\"file\">\n <name>localfunction_imp.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/common/</path>\n- <filename>a00077.html</filename>\n- <includes id=\"a00092\" name=\"type_traits.hh\" local=\"no\" imported=\"no\">dune/functions/common/type_traits.hh</includes>\n- <includes id=\"a00098\" name=\"differentiablefunction_imp.hh\" local=\"no\" imported=\"no\">dune/functions/common/differentiablefunction_imp.hh</includes>\n+ <filename>a00044.html</filename>\n+ <includes id=\"a00029\" name=\"type_traits.hh\" local=\"no\" imported=\"no\">dune/functions/common/type_traits.hh</includes>\n+ <includes id=\"a00071\" name=\"differentiablefunction_imp.hh\" local=\"no\" imported=\"no\">dune/functions/common/differentiablefunction_imp.hh</includes>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n </compound>\n <compound kind=\"file\">\n <name>multiindex.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/common/</path>\n- <filename>a00101.html</filename>\n+ <filename>a00032.html</filename>\n <class kind=\"class\">Dune::Functions::StaticMultiIndex</class>\n <class kind=\"class\">Dune::Functions::StaticMultiIndex< size_type, 1 ></class>\n <class kind=\"struct\">std::tuple_size< Dune::Functions::StaticMultiIndex< size_type, n > ></class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <member kind=\"function\">\n <type>Stream &</type>\n@@ -391,31 +360,31 @@\n <anchor>af1c4bfbe0c688f745e4731c519db55dd</anchor>\n <arglist>(Stream &stream, const StaticMultiIndex< size_type, n > &c)</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>overflowarray.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/common/</path>\n- <filename>a00074.html</filename>\n+ <filename>a00059.html</filename>\n <class kind=\"class\">Dune::Functions::OverflowArray</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n </compound>\n <compound kind=\"file\">\n <name>polymorphicsmallobject.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/common/</path>\n- <filename>a00089.html</filename>\n+ <filename>a00068.html</filename>\n <class kind=\"class\">Dune::Functions::PolymorphicSmallObject</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n </compound>\n <compound kind=\"file\">\n <name>referencehelper.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/common/</path>\n- <filename>a00044.html</filename>\n+ <filename>a00038.html</filename>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <member kind=\"typedef\">\n <type>Dune::ResolveRef_t< T ></type>\n <name>ResolveRef_t</name>\n <anchorfile>a00219.html</anchorfile>\n <anchor>a51755a2fa6d9e5737a8e2b32cbe3cc15</anchor>\n@@ -435,31 +404,31 @@\n <anchor>a432dd9531e141b59ba6b90a6104f2cb7</anchor>\n <arglist/>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>reserveddeque.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/common/</path>\n- <filename>a00059.html</filename>\n+ <filename>a00023.html</filename>\n <class kind=\"class\">Dune::Functions::ReservedDeque</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <member kind=\"define\">\n <type>#define</type>\n <name>CHECKSIZE</name>\n- <anchorfile>a00059.html</anchorfile>\n+ <anchorfile>a00023.html</anchorfile>\n <anchor>a65543e75bc949ecdb95a25b1f4e11675</anchor>\n <arglist>(X)</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>signature.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/common/</path>\n- <filename>a00086.html</filename>\n- <includes id=\"a00080\" name=\"defaultderivativetraits.hh\" local=\"no\" imported=\"no\">dune/functions/common/defaultderivativetraits.hh</includes>\n+ <filename>a00008.html</filename>\n+ <includes id=\"a00035\" name=\"defaultderivativetraits.hh\" local=\"no\" imported=\"no\">dune/functions/common/defaultderivativetraits.hh</includes>\n <class kind=\"struct\">Dune::Functions::SignatureTraits</class>\n <class kind=\"struct\">Dune::Functions::SignatureTag< Range(Domain), DerivativeTraitsT ></class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <member kind=\"function\">\n <type>auto</type>\n <name>derivativeSignatureTag</name>\n@@ -475,44 +444,44 @@\n <arglist>(Dune::Functions::SignatureTag< Signature, DerivativeTraits > tag)</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>staticforloop.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/common/</path>\n <filename>a00056.html</filename>\n- <includes id=\"a00092\" name=\"type_traits.hh\" local=\"no\" imported=\"no\">dune/functions/common/type_traits.hh</includes>\n+ <includes id=\"a00029\" name=\"type_traits.hh\" local=\"no\" imported=\"no\">dune/functions/common/type_traits.hh</includes>\n <includes id=\"a02876\" name=\"functionspacebases/concepts.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/concepts.hh</includes>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <member kind=\"function\">\n <type>void</type>\n <name>staticFindInRange</name>\n <anchorfile>a00215.html</anchorfile>\n <anchor>gaa625ea93bc3285b8a09c9267302386ec</anchor>\n <arglist>(F &&f, Args &&... args)</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>treedata.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/common/</path>\n- <filename>a00083.html</filename>\n- <includes id=\"a00023\" name=\"gridviewentityset.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/gridviewentityset.hh</includes>\n- <includes id=\"a00017\" name=\"gridfunction.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/gridfunction.hh</includes>\n+ <filename>a00065.html</filename>\n+ <includes id=\"a00083\" name=\"gridviewentityset.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/gridviewentityset.hh</includes>\n+ <includes id=\"a00098\" name=\"gridfunction.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/gridfunction.hh</includes>\n <class kind=\"struct\">Dune::Functions::UniformNodeVisitor</class>\n <class kind=\"class\">Dune::Functions::TreeData</class>\n <class kind=\"struct\">Dune::Functions::TreeData::InitVisitor</class>\n <class kind=\"struct\">Dune::Functions::TreeData::DestroyVisitor</class>\n <class kind=\"struct\">Dune::Functions::TreeData::CopyVisitor</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n </compound>\n <compound kind=\"file\">\n <name>type_traits.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/common/</path>\n- <filename>a00092.html</filename>\n+ <filename>a00029.html</filename>\n <class kind=\"struct\">Dune::Functions::HasStaticSize</class>\n <class kind=\"struct\">Dune::Functions::StaticSize</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <member kind=\"typedef\">\n <type>typename std::enable_if< std::is_constructible< T, Args... >::value, int >::type</type>\n <name>enableIfConstructible</name>\n@@ -520,27 +489,27 @@\n <anchor>ga673247dd74bcdd9e5acfc7735faf8a5b</anchor>\n <arglist/>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>typeerasure.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/common/</path>\n- <filename>a00062.html</filename>\n- <includes id=\"a00092\" name=\"type_traits.hh\" local=\"no\" imported=\"no\">dune/functions/common/type_traits.hh</includes>\n- <includes id=\"a00095\" name=\"interfaces.hh\" local=\"no\" imported=\"no\">dune/functions/common/interfaces.hh</includes>\n- <includes id=\"a00089\" name=\"polymorphicsmallobject.hh\" local=\"no\" imported=\"no\">dune/functions/common/polymorphicsmallobject.hh</includes>\n+ <filename>a00050.html</filename>\n+ <includes id=\"a00029\" name=\"type_traits.hh\" local=\"no\" imported=\"no\">dune/functions/common/type_traits.hh</includes>\n+ <includes id=\"a00026\" name=\"interfaces.hh\" local=\"no\" imported=\"no\">dune/functions/common/interfaces.hh</includes>\n+ <includes id=\"a00068\" name=\"polymorphicsmallobject.hh\" local=\"no\" imported=\"no\">dune/functions/common/polymorphicsmallobject.hh</includes>\n <class kind=\"class\">Dune::Functions::TypeErasureBase</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n </compound>\n <compound kind=\"file\">\n <name>utility.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/common/</path>\n- <filename>a00050.html</filename>\n- <includes id=\"a00053\" name=\"functionconcepts.hh\" local=\"no\" imported=\"no\">dune/functions/common/functionconcepts.hh</includes>\n+ <filename>a00041.html</filename>\n+ <includes id=\"a00020\" name=\"functionconcepts.hh\" local=\"no\" imported=\"no\">dune/functions/common/functionconcepts.hh</includes>\n <class kind=\"struct\">Dune::Functions::LastType</class>\n <class kind=\"struct\">Dune::Functions::RotateTuple</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <member kind=\"typedef\">\n <type>typename Imp::ExpandTupleHelper< T, ArgTuple >::Type</type>\n <name>ExpandTuple</name>\n@@ -618,15 +587,15 @@\n <anchor>a6bb3a351c2ab1b4eb46d4ba1ec3d95a0</anchor>\n <arglist>(T &&t)</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>basistags.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/</path>\n- <filename>a00179.html</filename>\n+ <filename>a00158.html</filename>\n <class kind=\"struct\">Dune::Functions::Concept::IndexMergingStrategy</class>\n <class kind=\"struct\">Dune::Functions::BasisFactory::IndexMergingStrategy</class>\n <class kind=\"struct\">Dune::Functions::BasisFactory::FlatLexicographic</class>\n <class kind=\"struct\">Dune::Functions::BasisFactory::FlatInterleaved</class>\n <class kind=\"struct\">Dune::Functions::BasisFactory::BlockedLexicographic</class>\n <class kind=\"struct\">Dune::Functions::BasisFactory::BlockedInterleaved</class>\n <namespace>Dune</namespace>\n@@ -683,33 +652,33 @@\n <anchor>ga649b67336300e9f05e38b5479ca21a24</anchor>\n <arglist>()</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>boundarydofs.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/</path>\n- <filename>a00185.html</filename>\n- <includes id=\"a00152\" name=\"subentitydofs.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/subentitydofs.hh</includes>\n+ <filename>a00167.html</filename>\n+ <includes id=\"a00113\" name=\"subentitydofs.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/subentitydofs.hh</includes>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <member kind=\"function\">\n <type>void</type>\n <name>forEachBoundaryDOF</name>\n <anchorfile>a00214.html</anchorfile>\n <anchor>gaa60b94e3da01aa62a555f6955a7f09e5</anchor>\n <arglist>(const Basis &basis, F &&f)</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>brezzidouglasmarinibasis.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/</path>\n- <filename>a00182.html</filename>\n- <includes id=\"a00134\" name=\"globalvaluedlocalfiniteelement.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh</includes>\n- <includes id=\"a00191\" name=\"nodes.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/nodes.hh</includes>\n- <includes id=\"a00119\" name=\"defaultglobalbasis.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/defaultglobalbasis.hh</includes>\n+ <filename>a00149.html</filename>\n+ <includes id=\"a00137\" name=\"globalvaluedlocalfiniteelement.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh</includes>\n+ <includes id=\"a00179\" name=\"nodes.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/nodes.hh</includes>\n+ <includes id=\"a00152\" name=\"defaultglobalbasis.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/defaultglobalbasis.hh</includes>\n <class kind=\"class\">Dune::Functions::BrezziDouglasMariniPreBasis</class>\n <class kind=\"class\">Dune::Functions::BrezziDouglasMariniNode</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <namespace>Dune::Functions::BasisFactory</namespace>\n <member kind=\"typedef\">\n <type>DefaultGlobalBasis< BrezziDouglasMariniPreBasis< GV, k > ></type>\n@@ -725,17 +694,17 @@\n <anchor>ga72847f418332ba3d5444a7f153776610</anchor>\n <arglist>()</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>bsplinebasis.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/</path>\n- <filename>a00107.html</filename>\n- <includes id=\"a00191\" name=\"nodes.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/nodes.hh</includes>\n- <includes id=\"a00119\" name=\"defaultglobalbasis.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/defaultglobalbasis.hh</includes>\n+ <filename>a00176.html</filename>\n+ <includes id=\"a00179\" name=\"nodes.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/nodes.hh</includes>\n+ <includes id=\"a00152\" name=\"defaultglobalbasis.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/defaultglobalbasis.hh</includes>\n <class kind=\"class\">Dune::Functions::BSplineLocalBasis</class>\n <class kind=\"class\">Dune::Functions::BSplineLocalCoefficients</class>\n <class kind=\"class\">Dune::Functions::BSplineLocalInterpolation</class>\n <class kind=\"class\">Dune::Functions::BSplineLocalFiniteElement</class>\n <class kind=\"class\">Dune::Functions::BSplinePreBasis</class>\n <class kind=\"class\">Dune::Functions::BSplineNode</class>\n <namespace>Dune</namespace>\n@@ -755,41 +724,72 @@\n <anchor>ga63a9701af71fffbbb851a38cb8cf886f</anchor>\n <arglist>(const std::vector< double > &knotVector, unsigned int order, bool makeOpen=true)</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>compositebasis.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/</path>\n- <filename>a00188.html</filename>\n+ <filename>a00101.html</filename>\n <includes id=\"a00056\" name=\"staticforloop.hh\" local=\"no\" imported=\"no\">dune/functions/common/staticforloop.hh</includes>\n- <includes id=\"a00092\" name=\"type_traits.hh\" local=\"no\" imported=\"no\">dune/functions/common/type_traits.hh</includes>\n- <includes id=\"a00050\" name=\"utility.hh\" local=\"no\" imported=\"no\">dune/functions/common/utility.hh</includes>\n- <includes id=\"a00179\" name=\"basistags.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/basistags.hh</includes>\n- <includes id=\"a00191\" name=\"nodes.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/nodes.hh</includes>\n+ <includes id=\"a00029\" name=\"type_traits.hh\" local=\"no\" imported=\"no\">dune/functions/common/type_traits.hh</includes>\n+ <includes id=\"a00041\" name=\"utility.hh\" local=\"no\" imported=\"no\">dune/functions/common/utility.hh</includes>\n+ <includes id=\"a00158\" name=\"basistags.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/basistags.hh</includes>\n+ <includes id=\"a00179\" name=\"nodes.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/nodes.hh</includes>\n <includes id=\"a02876\" name=\"functionspacebases/concepts.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/concepts.hh</includes>\n- <includes id=\"a00119\" name=\"defaultglobalbasis.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/defaultglobalbasis.hh</includes>\n+ <includes id=\"a00152\" name=\"defaultglobalbasis.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/defaultglobalbasis.hh</includes>\n <class kind=\"class\">Dune::Functions::CompositePreBasis</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <namespace>Dune::Functions::BasisFactory</namespace>\n <namespace>Dune::Functions::BasisBuilder</namespace>\n <member kind=\"function\">\n <type>auto</type>\n <name>composite</name>\n <anchorfile>a00213.html</anchorfile>\n <anchor>ga0ee62f9744ec8ba58fdfc4c68df34449</anchor>\n <arglist>(Args &&... args)</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n+ <name>backends/concepts.hh</name>\n+ <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/backends/</path>\n+ <filename>a02873.html</filename>\n+ <class kind=\"struct\">Dune::Functions::Concept::ConstVectorBackend</class>\n+ <class kind=\"struct\">Dune::Functions::Concept::VectorBackend</class>\n+ <namespace>Dune</namespace>\n+ <namespace>Dune::Functions</namespace>\n+ <namespace>Dune::Functions::Concept</namespace>\n+ </compound>\n+ <compound kind=\"file\">\n+ <name>functionspacebases/concepts.hh</name>\n+ <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/</path>\n+ <filename>a02876.html</filename>\n+ <includes id=\"a00041\" name=\"utility.hh\" local=\"no\" imported=\"no\">dune/functions/common/utility.hh</includes>\n+ <includes id=\"a00179\" name=\"nodes.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/nodes.hh</includes>\n+ <class kind=\"struct\">Dune::Functions::Concept::HasResize</class>\n+ <class kind=\"struct\">Dune::Functions::Concept::HasSizeMethod</class>\n+ <class kind=\"struct\">Dune::Functions::Concept::HasIndexAccess</class>\n+ <class kind=\"struct\">Dune::Functions::Concept::BasisNode</class>\n+ <class kind=\"struct\">Dune::Functions::Concept::LeafBasisNode</class>\n+ <class kind=\"struct\">Dune::Functions::Concept::PowerBasisNode</class>\n+ <class kind=\"struct\">Dune::Functions::Concept::CompositeBasisNode</class>\n+ <class kind=\"struct\">Dune::Functions::Concept::BasisTree</class>\n+ <class kind=\"struct\">Dune::Functions::Concept::PreBasis</class>\n+ <class kind=\"struct\">Dune::Functions::Concept::LocalView</class>\n+ <class kind=\"struct\">Dune::Functions::Concept::GlobalBasis</class>\n+ <namespace>Dune</namespace>\n+ <namespace>Dune::Functions</namespace>\n+ <namespace>Dune::Functions::Concept</namespace>\n+ </compound>\n+ <compound kind=\"file\">\n <name>defaultglobalbasis.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/</path>\n- <filename>a00119.html</filename>\n- <includes id=\"a00092\" name=\"type_traits.hh\" local=\"no\" imported=\"no\">dune/functions/common/type_traits.hh</includes>\n- <includes id=\"a00140\" name=\"defaultlocalview.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/defaultlocalview.hh</includes>\n+ <filename>a00152.html</filename>\n+ <includes id=\"a00029\" name=\"type_traits.hh\" local=\"no\" imported=\"no\">dune/functions/common/type_traits.hh</includes>\n+ <includes id=\"a00128\" name=\"defaultlocalview.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/defaultlocalview.hh</includes>\n <includes id=\"a02876\" name=\"functionspacebases/concepts.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/concepts.hh</includes>\n <class kind=\"class\">Dune::Functions::DefaultGlobalBasis</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <namespace>Dune::Functions::BasisFactory</namespace>\n <namespace>Dune::Functions::BasisBuilder</namespace>\n <member kind=\"function\">\n@@ -813,26 +813,26 @@\n <anchor>a1f0dc55c03c3a9862c76456d5574abe2</anchor>\n <arglist>(const GridView &gridView, PreBasisFactory &&preBasisFactory)</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>defaultlocalview.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/</path>\n- <filename>a00140.html</filename>\n- <includes id=\"a00074\" name=\"overflowarray.hh\" local=\"no\" imported=\"no\">dune/functions/common/overflowarray.hh</includes>\n- <includes id=\"a00101\" name=\"multiindex.hh\" local=\"no\" imported=\"no\">dune/functions/common/multiindex.hh</includes>\n+ <filename>a00128.html</filename>\n+ <includes id=\"a00059\" name=\"overflowarray.hh\" local=\"no\" imported=\"no\">dune/functions/common/overflowarray.hh</includes>\n+ <includes id=\"a00032\" name=\"multiindex.hh\" local=\"no\" imported=\"no\">dune/functions/common/multiindex.hh</includes>\n <includes id=\"a02876\" name=\"functionspacebases/concepts.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/concepts.hh</includes>\n <class kind=\"class\">Dune::Functions::DefaultLocalView</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n </compound>\n <compound kind=\"file\">\n <name>defaultnodetorangemap.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/</path>\n- <filename>a00173.html</filename>\n+ <filename>a00140.html</filename>\n <includes id=\"a02876\" name=\"functionspacebases/concepts.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/concepts.hh</includes>\n <class kind=\"struct\">Dune::Functions::DefaultNodeToRangeMap</class>\n <class kind=\"struct\">Dune::Functions::DefaultNodeToRangeMap::Visitor</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <member kind=\"function\">\n <type>DefaultNodeToRangeMap< Tree ></type>\n@@ -848,30 +848,30 @@\n <anchor>ad5971c4cc40d4d8a400ef5fe9e596350</anchor>\n <arglist>(const Basis &basis, TreePath &&treePath) -> decltype(makeDefaultNodeToRangeMap(TypeTree::child(basis.localView().tree(), treePath)))</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>flatmultiindex.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/</path>\n- <filename>a00122.html</filename>\n- <includes id=\"a00101\" name=\"multiindex.hh\" local=\"no\" imported=\"no\">dune/functions/common/multiindex.hh</includes>\n+ <filename>a00143.html</filename>\n+ <includes id=\"a00032\" name=\"multiindex.hh\" local=\"no\" imported=\"no\">dune/functions/common/multiindex.hh</includes>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <member kind=\"typedef\">\n <type>StaticMultiIndex< size_type, 1 ></type>\n <name>FlatMultiIndex</name>\n <anchorfile>a00214.html</anchorfile>\n <anchor>ga6b523ca86bfec2581ea9c173a722f8f3</anchor>\n <arglist/>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>flatvectorview.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/</path>\n- <filename>a00128.html</filename>\n+ <filename>a00155.html</filename>\n <includes id=\"a02876\" name=\"functionspacebases/concepts.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/concepts.hh</includes>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <member kind=\"function\">\n <type>auto</type>\n <name>flatVectorView</name>\n <anchorfile>a00219.html</anchorfile>\n@@ -892,24 +892,24 @@\n <anchor>a4fac6802f21000f59e52aade3cd47b08</anchor>\n <arglist>(T &&t)</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>globalvaluedlocalfiniteelement.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/</path>\n- <filename>a00134.html</filename>\n+ <filename>a00137.html</filename>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n </compound>\n <compound kind=\"file\">\n <name>hierarchicallagrangebasis.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/</path>\n- <filename>a00149.html</filename>\n- <includes id=\"a00191\" name=\"nodes.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/nodes.hh</includes>\n- <includes id=\"a00119\" name=\"defaultglobalbasis.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/defaultglobalbasis.hh</includes>\n+ <filename>a00104.html</filename>\n+ <includes id=\"a00179\" name=\"nodes.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/nodes.hh</includes>\n+ <includes id=\"a00152\" name=\"defaultglobalbasis.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/defaultglobalbasis.hh</includes>\n <class kind=\"class\">Dune::Functions::HierarchicalLagrangePreBasis</class>\n <class kind=\"class\">Dune::Functions::HierarchicalLagrangeNode</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <namespace>Dune::Functions::BasisFactory</namespace>\n <member kind=\"typedef\">\n <type>DefaultGlobalBasis< HierarchicalLagrangePreBasis< GV, k, R > ></type>\n@@ -925,28 +925,28 @@\n <anchor>gae1668779c06b647fd909294cbedf28cf</anchor>\n <arglist>()</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>hierarchicnodetorangemap.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/</path>\n- <filename>a00164.html</filename>\n+ <filename>a00170.html</filename>\n <includes id=\"a02876\" name=\"functionspacebases/concepts.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/concepts.hh</includes>\n- <includes id=\"a00041\" name=\"indexaccess.hh\" local=\"no\" imported=\"no\">dune/functions/common/indexaccess.hh</includes>\n+ <includes id=\"a00062\" name=\"indexaccess.hh\" local=\"no\" imported=\"no\">dune/functions/common/indexaccess.hh</includes>\n <class kind=\"struct\">Dune::Functions::HierarchicNodeToRangeMap</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n </compound>\n <compound kind=\"file\">\n <name>hierarchicvectorwrapper.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/</path>\n- <filename>a00158.html</filename>\n- <includes id=\"a00041\" name=\"indexaccess.hh\" local=\"no\" imported=\"no\">dune/functions/common/indexaccess.hh</includes>\n- <includes id=\"a00050\" name=\"utility.hh\" local=\"no\" imported=\"no\">dune/functions/common/utility.hh</includes>\n- <includes id=\"a00092\" name=\"type_traits.hh\" local=\"no\" imported=\"no\">dune/functions/common/type_traits.hh</includes>\n+ <filename>a00173.html</filename>\n+ <includes id=\"a00062\" name=\"indexaccess.hh\" local=\"no\" imported=\"no\">dune/functions/common/indexaccess.hh</includes>\n+ <includes id=\"a00041\" name=\"utility.hh\" local=\"no\" imported=\"no\">dune/functions/common/utility.hh</includes>\n+ <includes id=\"a00029\" name=\"type_traits.hh\" local=\"no\" imported=\"no\">dune/functions/common/type_traits.hh</includes>\n <includes id=\"a02876\" name=\"functionspacebases/concepts.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/concepts.hh</includes>\n <class kind=\"class\">Dune::Functions::HierarchicVectorWrapper</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <member kind=\"function\">\n <type>HierarchicVectorWrapper< V ></type>\n <name>hierarchicVector</name>\n@@ -968,22 +968,22 @@\n <anchor>ae48bf799daaf0751086b47457350675e</anchor>\n <arglist>(V &v)</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>interpolate.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/</path>\n- <filename>a00170.html</filename>\n- <includes id=\"a00038\" name=\"gridviewfunction.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/gridviewfunction.hh</includes>\n- <includes id=\"a00053\" name=\"functionconcepts.hh\" local=\"no\" imported=\"no\">dune/functions/common/functionconcepts.hh</includes>\n+ <filename>a00131.html</filename>\n+ <includes id=\"a00086\" name=\"gridviewfunction.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/gridviewfunction.hh</includes>\n+ <includes id=\"a00020\" name=\"functionconcepts.hh\" local=\"no\" imported=\"no\">dune/functions/common/functionconcepts.hh</includes>\n <includes id=\"a02873\" name=\"backends/concepts.hh\" local=\"no\" imported=\"no\">dune/functions/backends/concepts.hh</includes>\n- <includes id=\"a00011\" name=\"istlvectorbackend.hh\" local=\"no\" imported=\"no\">dune/functions/backends/istlvectorbackend.hh</includes>\n- <includes id=\"a00155\" name=\"sizeinfo.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/sizeinfo.hh</includes>\n- <includes id=\"a00128\" name=\"flatvectorview.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/flatvectorview.hh</includes>\n- <includes id=\"a00164\" name=\"hierarchicnodetorangemap.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/hierarchicnodetorangemap.hh</includes>\n+ <includes id=\"a00191\" name=\"istlvectorbackend.hh\" local=\"no\" imported=\"no\">dune/functions/backends/istlvectorbackend.hh</includes>\n+ <includes id=\"a00110\" name=\"sizeinfo.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/sizeinfo.hh</includes>\n+ <includes id=\"a00155\" name=\"flatvectorview.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/flatvectorview.hh</includes>\n+ <includes id=\"a00170\" name=\"hierarchicnodetorangemap.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/hierarchicnodetorangemap.hh</includes>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <member kind=\"function\">\n <type>void</type>\n <name>interpolate</name>\n <anchorfile>a00219.html</anchorfile>\n <anchor>a13b0c6bf02d744e7b2078d1a535b5211</anchor>\n@@ -1003,17 +1003,17 @@\n <anchor>a2e34859322800ae26a292903910ef9f7</anchor>\n <arglist>(const B &basis, C &&coeff, const F &f)</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>lagrangebasis.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/</path>\n- <filename>a00125.html</filename>\n- <includes id=\"a00191\" name=\"nodes.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/nodes.hh</includes>\n- <includes id=\"a00119\" name=\"defaultglobalbasis.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/defaultglobalbasis.hh</includes>\n+ <filename>a00122.html</filename>\n+ <includes id=\"a00179\" name=\"nodes.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/nodes.hh</includes>\n+ <includes id=\"a00152\" name=\"defaultglobalbasis.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/defaultglobalbasis.hh</includes>\n <class kind=\"class\">Dune::Functions::LagrangePreBasis</class>\n <class kind=\"class\">Dune::Functions::LagrangeNode</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <namespace>Dune::Functions::BasisFactory</namespace>\n <member kind=\"typedef\">\n <type>DefaultGlobalBasis< LagrangePreBasis< GV, k, R > ></type>\n@@ -1036,18 +1036,18 @@\n <anchor>ga177b4e1b21990d7fc9350ac0caeb3c6c</anchor>\n <arglist>(int order)</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>lagrangedgbasis.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/</path>\n- <filename>a00143.html</filename>\n- <includes id=\"a00191\" name=\"nodes.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/nodes.hh</includes>\n- <includes id=\"a00119\" name=\"defaultglobalbasis.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/defaultglobalbasis.hh</includes>\n- <includes id=\"a00125\" name=\"lagrangebasis.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/lagrangebasis.hh</includes>\n+ <filename>a00119.html</filename>\n+ <includes id=\"a00179\" name=\"nodes.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/nodes.hh</includes>\n+ <includes id=\"a00152\" name=\"defaultglobalbasis.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/defaultglobalbasis.hh</includes>\n+ <includes id=\"a00122\" name=\"lagrangebasis.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/lagrangebasis.hh</includes>\n <class kind=\"class\">Dune::Functions::LagrangeDGPreBasis</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <namespace>Dune::Functions::BasisFactory</namespace>\n <member kind=\"typedef\">\n <type>LagrangeNode< GV, k ></type>\n <name>LagrangeDGNode</name>\n@@ -1069,18 +1069,18 @@\n <anchor>gae7dbc0c4e48b9cf3da63d6ef431b3481</anchor>\n <arglist>()</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>nedelecbasis.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/</path>\n- <filename>a00131.html</filename>\n- <includes id=\"a00119\" name=\"defaultglobalbasis.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/defaultglobalbasis.hh</includes>\n- <includes id=\"a00134\" name=\"globalvaluedlocalfiniteelement.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh</includes>\n- <includes id=\"a00191\" name=\"nodes.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/nodes.hh</includes>\n+ <filename>a00134.html</filename>\n+ <includes id=\"a00152\" name=\"defaultglobalbasis.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/defaultglobalbasis.hh</includes>\n+ <includes id=\"a00137\" name=\"globalvaluedlocalfiniteelement.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh</includes>\n+ <includes id=\"a00179\" name=\"nodes.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/nodes.hh</includes>\n <class kind=\"class\">Dune::Functions::NedelecPreBasis</class>\n <class kind=\"class\">Dune::Functions::NedelecNode</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <namespace>Dune::Functions::BasisFactory</namespace>\n <member kind=\"typedef\">\n <type>DefaultGlobalBasis< NedelecPreBasis< GV, Range, kind, order > ></type>\n@@ -1096,15 +1096,15 @@\n <anchor>gafe0fe439067c288f197101b8686223e8</anchor>\n <arglist>()</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>nodes.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/</path>\n- <filename>a00191.html</filename>\n+ <filename>a00179.html</filename>\n <class kind=\"class\">Dune::Functions::BasisNodeMixin</class>\n <class kind=\"class\">Dune::Functions::LeafBasisNode</class>\n <class kind=\"class\">Dune::Functions::PowerBasisNode</class>\n <class kind=\"class\">Dune::Functions::CompositeBasisNode</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <member kind=\"function\">\n@@ -1128,17 +1128,17 @@\n <anchor>a5e19b913a34ad68144f4fd873c51b977</anchor>\n <arglist>(Tree &tree, std::size_t treeIndexOffset=0)</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>periodicbasis.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/</path>\n- <filename>a00116.html</filename>\n+ <filename>a00146.html</filename>\n <includes id=\"a02876\" name=\"functionspacebases/concepts.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/concepts.hh</includes>\n- <includes id=\"a00161\" name=\"transformedindexbasis.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/transformedindexbasis.hh</includes>\n+ <includes id=\"a00164\" name=\"transformedindexbasis.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/transformedindexbasis.hh</includes>\n <class kind=\"class\">Dune::Functions::BasisFactory::Experimental::PeriodicIndexSet</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <namespace>Dune::Functions::BasisFactory</namespace>\n <namespace>Dune::Functions::BasisFactory::Experimental</namespace>\n <member kind=\"function\">\n <type>auto</type>\n@@ -1147,21 +1147,21 @@\n <anchor>ga797d4c1dfcfe6b0a98de9284c4f6b5e3</anchor>\n <arglist>(RawPreBasisIndicator &&rawPreBasisIndicator, PIS &&periodicIndexSet)</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>powerbasis.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/</path>\n- <filename>a00113.html</filename>\n- <includes id=\"a00050\" name=\"utility.hh\" local=\"no\" imported=\"no\">dune/functions/common/utility.hh</includes>\n- <includes id=\"a00092\" name=\"type_traits.hh\" local=\"no\" imported=\"no\">dune/functions/common/type_traits.hh</includes>\n- <includes id=\"a00179\" name=\"basistags.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/basistags.hh</includes>\n- <includes id=\"a00191\" name=\"nodes.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/nodes.hh</includes>\n+ <filename>a00125.html</filename>\n+ <includes id=\"a00041\" name=\"utility.hh\" local=\"no\" imported=\"no\">dune/functions/common/utility.hh</includes>\n+ <includes id=\"a00029\" name=\"type_traits.hh\" local=\"no\" imported=\"no\">dune/functions/common/type_traits.hh</includes>\n+ <includes id=\"a00158\" name=\"basistags.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/basistags.hh</includes>\n+ <includes id=\"a00179\" name=\"nodes.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/nodes.hh</includes>\n <includes id=\"a02876\" name=\"functionspacebases/concepts.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/concepts.hh</includes>\n- <includes id=\"a00119\" name=\"defaultglobalbasis.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/defaultglobalbasis.hh</includes>\n+ <includes id=\"a00152\" name=\"defaultglobalbasis.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/defaultglobalbasis.hh</includes>\n <class kind=\"class\">Dune::Functions::PowerPreBasis</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <namespace>Dune::Functions::BasisFactory</namespace>\n <namespace>Dune::Functions::BasisBuilder</namespace>\n <member kind=\"function\">\n <type>auto</type>\n@@ -1177,17 +1177,17 @@\n <anchor>gab84b622cf7be16d0373640b6f0478eb0</anchor>\n <arglist>(ChildPreBasisFactory &&childPreBasisFactory)</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>rannacherturekbasis.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/</path>\n- <filename>a00167.html</filename>\n- <includes id=\"a00191\" name=\"nodes.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/nodes.hh</includes>\n- <includes id=\"a00119\" name=\"defaultglobalbasis.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/defaultglobalbasis.hh</includes>\n+ <filename>a00185.html</filename>\n+ <includes id=\"a00179\" name=\"nodes.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/nodes.hh</includes>\n+ <includes id=\"a00152\" name=\"defaultglobalbasis.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/defaultglobalbasis.hh</includes>\n <class kind=\"class\">Dune::Functions::RannacherTurekPreBasis</class>\n <class kind=\"class\">Dune::Functions::RannacherTurekNode</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <namespace>Dune::Functions::BasisFactory</namespace>\n <member kind=\"typedef\">\n <type>DefaultGlobalBasis< RannacherTurekPreBasis< GV > ></type>\n@@ -1203,18 +1203,18 @@\n <anchor>ga366449c1a41fc29ff55fed0c1485f60b</anchor>\n <arglist>()</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>raviartthomasbasis.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/</path>\n- <filename>a00137.html</filename>\n- <includes id=\"a00134\" name=\"globalvaluedlocalfiniteelement.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh</includes>\n- <includes id=\"a00191\" name=\"nodes.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/nodes.hh</includes>\n- <includes id=\"a00119\" name=\"defaultglobalbasis.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/defaultglobalbasis.hh</includes>\n+ <filename>a00161.html</filename>\n+ <includes id=\"a00137\" name=\"globalvaluedlocalfiniteelement.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/globalvaluedlocalfiniteelement.hh</includes>\n+ <includes id=\"a00179\" name=\"nodes.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/nodes.hh</includes>\n+ <includes id=\"a00152\" name=\"defaultglobalbasis.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/defaultglobalbasis.hh</includes>\n <class kind=\"class\">Dune::Functions::RaviartThomasPreBasis</class>\n <class kind=\"class\">Dune::Functions::RaviartThomasNode</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <namespace>Dune::Functions::BasisFactory</namespace>\n <member kind=\"typedef\">\n <type>DefaultGlobalBasis< RaviartThomasPreBasis< GV, k > ></type>\n@@ -1230,30 +1230,30 @@\n <anchor>gac7c656af99728aa385381f5d78ae0b98</anchor>\n <arglist>()</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>sizeinfo.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/</path>\n- <filename>a00155.html</filename>\n+ <filename>a00110.html</filename>\n <class kind=\"class\">Dune::Functions::SizeInfo</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <member kind=\"function\">\n <type>SizeInfo< Basis ></type>\n <name>sizeInfo</name>\n <anchorfile>a00219.html</anchorfile>\n <anchor>abd7e25a89325dbe2232b17308dae45f2</anchor>\n <arglist>(const Basis &basis)</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>subentitydofs.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/</path>\n- <filename>a00152.html</filename>\n+ <filename>a00113.html</filename>\n <class kind=\"class\">Dune::Functions::SubEntityDOFs</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <member kind=\"function\">\n <type>auto</type>\n <name>subEntityDOFs</name>\n <anchorfile>a00214.html</anchorfile>\n@@ -1274,17 +1274,17 @@\n <anchor>ga09ad7987f85909bfcf269a0de9c652d8</anchor>\n <arglist>(const LocalView &localView, const Intersection &intersection)</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>subspacebasis.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/</path>\n- <filename>a00176.html</filename>\n- <includes id=\"a00092\" name=\"type_traits.hh\" local=\"no\" imported=\"no\">dune/functions/common/type_traits.hh</includes>\n- <includes id=\"a00146\" name=\"subspacelocalview.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/subspacelocalview.hh</includes>\n+ <filename>a00107.html</filename>\n+ <includes id=\"a00029\" name=\"type_traits.hh\" local=\"no\" imported=\"no\">dune/functions/common/type_traits.hh</includes>\n+ <includes id=\"a00188\" name=\"subspacelocalview.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/subspacelocalview.hh</includes>\n <includes id=\"a02876\" name=\"functionspacebases/concepts.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/concepts.hh</includes>\n <class kind=\"class\">Dune::Functions::SubspaceBasis</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <member kind=\"function\">\n <type/>\n <name>SubspaceBasis</name>\n@@ -1313,27 +1313,27 @@\n <anchor>abb8781cf3fb98ca29446be66bcf65ac4</anchor>\n <arglist>(const RootBasis &rootBasis, const PrefixTreeIndices &... prefixTreeIndices)</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>subspacelocalview.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/</path>\n- <filename>a00146.html</filename>\n+ <filename>a00188.html</filename>\n <includes id=\"a02876\" name=\"functionspacebases/concepts.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/concepts.hh</includes>\n <class kind=\"class\">Dune::Functions::SubspaceLocalView</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n </compound>\n <compound kind=\"file\">\n <name>taylorhoodbasis.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/</path>\n- <filename>a00110.html</filename>\n- <includes id=\"a00191\" name=\"nodes.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/nodes.hh</includes>\n- <includes id=\"a00125\" name=\"lagrangebasis.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/lagrangebasis.hh</includes>\n- <includes id=\"a00119\" name=\"defaultglobalbasis.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/defaultglobalbasis.hh</includes>\n+ <filename>a00182.html</filename>\n+ <includes id=\"a00179\" name=\"nodes.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/nodes.hh</includes>\n+ <includes id=\"a00122\" name=\"lagrangebasis.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/lagrangebasis.hh</includes>\n+ <includes id=\"a00152\" name=\"defaultglobalbasis.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/defaultglobalbasis.hh</includes>\n <class kind=\"class\">Dune::Functions::TaylorHoodPreBasis</class>\n <class kind=\"class\">Dune::Functions::TaylorHoodVelocityTree</class>\n <class kind=\"class\">Dune::Functions::TaylorHoodBasisTree</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <namespace>Dune::Functions::BasisFactory</namespace>\n <member kind=\"typedef\">\n@@ -1350,22 +1350,22 @@\n <anchor>ga2384fc6a8ee2005fb29adb7221609ce3</anchor>\n <arglist>()</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>transformedindexbasis.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/functionspacebases/</path>\n- <filename>a00161.html</filename>\n+ <filename>a00164.html</filename>\n <includes id=\"a00056\" name=\"staticforloop.hh\" local=\"no\" imported=\"no\">dune/functions/common/staticforloop.hh</includes>\n- <includes id=\"a00092\" name=\"type_traits.hh\" local=\"no\" imported=\"no\">dune/functions/common/type_traits.hh</includes>\n- <includes id=\"a00050\" name=\"utility.hh\" local=\"no\" imported=\"no\">dune/functions/common/utility.hh</includes>\n- <includes id=\"a00179\" name=\"basistags.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/basistags.hh</includes>\n- <includes id=\"a00191\" name=\"nodes.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/nodes.hh</includes>\n+ <includes id=\"a00029\" name=\"type_traits.hh\" local=\"no\" imported=\"no\">dune/functions/common/type_traits.hh</includes>\n+ <includes id=\"a00041\" name=\"utility.hh\" local=\"no\" imported=\"no\">dune/functions/common/utility.hh</includes>\n+ <includes id=\"a00158\" name=\"basistags.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/basistags.hh</includes>\n+ <includes id=\"a00179\" name=\"nodes.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/nodes.hh</includes>\n <includes id=\"a02876\" name=\"functionspacebases/concepts.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/concepts.hh</includes>\n- <includes id=\"a00119\" name=\"defaultglobalbasis.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/defaultglobalbasis.hh</includes>\n+ <includes id=\"a00152\" name=\"defaultglobalbasis.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/defaultglobalbasis.hh</includes>\n <class kind=\"class\">Dune::Functions::Experimental::TransformedIndexPreBasis</class>\n <class kind=\"class\">Dune::Functions::BasisFactory::Experimental::GenericIndexingTransformation</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <namespace>Dune::Functions::Experimental</namespace>\n <namespace>Dune::Functions::BasisFactory</namespace>\n <namespace>Dune::Functions::BasisFactory::Experimental</namespace>\n@@ -1390,60 +1390,60 @@\n <anchor>af76509ea5d22293cf990c33c3306992f</anchor>\n <arglist>(IndexTransformation &&indexTransformation, SizeImplementation &&sizeImplementation, Dune::index_constant< minIndexSize >, Dune::index_constant< maxIndexSize >)</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>analyticgridviewfunction.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/gridfunctions/</path>\n- <filename>a00014.html</filename>\n- <includes id=\"a00086\" name=\"signature.hh\" local=\"no\" imported=\"no\">dune/functions/common/signature.hh</includes>\n- <includes id=\"a00080\" name=\"defaultderivativetraits.hh\" local=\"no\" imported=\"no\">dune/functions/common/defaultderivativetraits.hh</includes>\n- <includes id=\"a00098\" name=\"differentiablefunction_imp.hh\" local=\"no\" imported=\"no\">dune/functions/common/differentiablefunction_imp.hh</includes>\n- <includes id=\"a00068\" name=\"differentiablefunction.hh\" local=\"no\" imported=\"no\">dune/functions/common/differentiablefunction.hh</includes>\n- <includes id=\"a00023\" name=\"gridviewentityset.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/gridviewentityset.hh</includes>\n- <includes id=\"a00029\" name=\"localderivativetraits.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/localderivativetraits.hh</includes>\n+ <filename>a00080.html</filename>\n+ <includes id=\"a00008\" name=\"signature.hh\" local=\"no\" imported=\"no\">dune/functions/common/signature.hh</includes>\n+ <includes id=\"a00035\" name=\"defaultderivativetraits.hh\" local=\"no\" imported=\"no\">dune/functions/common/defaultderivativetraits.hh</includes>\n+ <includes id=\"a00071\" name=\"differentiablefunction_imp.hh\" local=\"no\" imported=\"no\">dune/functions/common/differentiablefunction_imp.hh</includes>\n+ <includes id=\"a00011\" name=\"differentiablefunction.hh\" local=\"no\" imported=\"no\">dune/functions/common/differentiablefunction.hh</includes>\n+ <includes id=\"a00083\" name=\"gridviewentityset.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/gridviewentityset.hh</includes>\n+ <includes id=\"a00095\" name=\"localderivativetraits.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/localderivativetraits.hh</includes>\n <class kind=\"class\">Dune::Functions::AnalyticGridViewFunction< Range(Domain), GV, F, DerivativeTraits ></class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <member kind=\"function\">\n <type>AnalyticGridViewFunction< typename std::invoke_result< F, typename GridView::template Codim< 0 >::Geometry::GlobalCoordinate >::type(typename GridView::template Codim< 0 >::Geometry::GlobalCoordinate), GridView, typename std::decay< F >::type ></type>\n <name>makeAnalyticGridViewFunction</name>\n <anchorfile>a00209.html</anchorfile>\n <anchor>gafe8f06fb6d4027bfaf39e0971d8eb3c6</anchor>\n <arglist>(F &&f, const GridView &gridView)</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>composedgridfunction.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/gridfunctions/</path>\n- <filename>a00020.html</filename>\n- <includes id=\"a00080\" name=\"defaultderivativetraits.hh\" local=\"no\" imported=\"no\">dune/functions/common/defaultderivativetraits.hh</includes>\n- <includes id=\"a00068\" name=\"differentiablefunction.hh\" local=\"no\" imported=\"no\">dune/functions/common/differentiablefunction.hh</includes>\n- <includes id=\"a00017\" name=\"gridfunction.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/gridfunction.hh</includes>\n+ <filename>a00092.html</filename>\n+ <includes id=\"a00035\" name=\"defaultderivativetraits.hh\" local=\"no\" imported=\"no\">dune/functions/common/defaultderivativetraits.hh</includes>\n+ <includes id=\"a00011\" name=\"differentiablefunction.hh\" local=\"no\" imported=\"no\">dune/functions/common/differentiablefunction.hh</includes>\n+ <includes id=\"a00098\" name=\"gridfunction.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/gridfunction.hh</includes>\n <class kind=\"class\">Dune::Functions::ComposedGridFunction</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <member kind=\"function\">\n <type>auto</type>\n <name>makeComposedGridFunction</name>\n <anchorfile>a00209.html</anchorfile>\n <anchor>ga9e5ac1cc0fdfb7d7a0e937f58aff21fd</anchor>\n <arglist>(OF &&outerFunction, IF &&... innerFunction)</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>discreteglobalbasisfunction.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/gridfunctions/</path>\n- <filename>a00026.html</filename>\n- <includes id=\"a00164\" name=\"hierarchicnodetorangemap.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/hierarchicnodetorangemap.hh</includes>\n- <includes id=\"a00128\" name=\"flatvectorview.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/flatvectorview.hh</includes>\n- <includes id=\"a00023\" name=\"gridviewentityset.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/gridviewentityset.hh</includes>\n- <includes id=\"a00017\" name=\"gridfunction.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/gridfunction.hh</includes>\n+ <filename>a00089.html</filename>\n+ <includes id=\"a00170\" name=\"hierarchicnodetorangemap.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/hierarchicnodetorangemap.hh</includes>\n+ <includes id=\"a00155\" name=\"flatvectorview.hh\" local=\"no\" imported=\"no\">dune/functions/functionspacebases/flatvectorview.hh</includes>\n+ <includes id=\"a00083\" name=\"gridviewentityset.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/gridviewentityset.hh</includes>\n+ <includes id=\"a00098\" name=\"gridfunction.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/gridfunction.hh</includes>\n <includes id=\"a02873\" name=\"backends/concepts.hh\" local=\"no\" imported=\"no\">dune/functions/backends/concepts.hh</includes>\n- <includes id=\"a00011\" name=\"istlvectorbackend.hh\" local=\"no\" imported=\"no\">dune/functions/backends/istlvectorbackend.hh</includes>\n+ <includes id=\"a00191\" name=\"istlvectorbackend.hh\" local=\"no\" imported=\"no\">dune/functions/backends/istlvectorbackend.hh</includes>\n <class kind=\"class\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase</class>\n <class kind=\"struct\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::Data</class>\n <class kind=\"class\">Dune::Functions::ImplDoc::DiscreteGlobalBasisFunctionBase::LocalFunctionBase</class>\n <class kind=\"class\">Dune::Functions::DiscreteGlobalBasisFunction</class>\n <class kind=\"class\">Dune::Functions::DiscreteGlobalBasisFunction::LocalFunction</class>\n <class kind=\"class\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative</class>\n <class kind=\"class\">Dune::Functions::DiscreteGlobalBasisFunctionDerivative::LocalFunction</class>\n@@ -1457,62 +1457,62 @@\n <anchor>ga9f1a8d6ac1558adad6150feb9b4e3168</anchor>\n <arglist>(B &&basis, V &&vector)</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>facenormalgridfunction.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/gridfunctions/</path>\n- <filename>a00035.html</filename>\n- <includes id=\"a00017\" name=\"gridfunction.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/gridfunction.hh</includes>\n- <includes id=\"a00023\" name=\"gridviewentityset.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/gridviewentityset.hh</includes>\n+ <filename>a00077.html</filename>\n+ <includes id=\"a00098\" name=\"gridfunction.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/gridfunction.hh</includes>\n+ <includes id=\"a00083\" name=\"gridviewentityset.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/gridviewentityset.hh</includes>\n <class kind=\"class\">Dune::Functions::FaceNormalGridFunction</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n </compound>\n <compound kind=\"file\">\n <name>gridfunction.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/gridfunctions/</path>\n- <filename>a00017.html</filename>\n- <includes id=\"a00062\" name=\"typeerasure.hh\" local=\"no\" imported=\"no\">dune/functions/common/typeerasure.hh</includes>\n- <includes id=\"a00080\" name=\"defaultderivativetraits.hh\" local=\"no\" imported=\"no\">dune/functions/common/defaultderivativetraits.hh</includes>\n- <includes id=\"a00068\" name=\"differentiablefunction.hh\" local=\"no\" imported=\"no\">dune/functions/common/differentiablefunction.hh</includes>\n- <includes id=\"a00065\" name=\"localfunction.hh\" local=\"no\" imported=\"no\">dune/functions/common/localfunction.hh</includes>\n- <includes id=\"a00053\" name=\"functionconcepts.hh\" local=\"no\" imported=\"no\">dune/functions/common/functionconcepts.hh</includes>\n- <includes id=\"a00029\" name=\"localderivativetraits.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/localderivativetraits.hh</includes>\n- <includes id=\"a00032\" name=\"gridfunction_imp.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/gridfunction_imp.hh</includes>\n+ <filename>a00098.html</filename>\n+ <includes id=\"a00050\" name=\"typeerasure.hh\" local=\"no\" imported=\"no\">dune/functions/common/typeerasure.hh</includes>\n+ <includes id=\"a00035\" name=\"defaultderivativetraits.hh\" local=\"no\" imported=\"no\">dune/functions/common/defaultderivativetraits.hh</includes>\n+ <includes id=\"a00011\" name=\"differentiablefunction.hh\" local=\"no\" imported=\"no\">dune/functions/common/differentiablefunction.hh</includes>\n+ <includes id=\"a00053\" name=\"localfunction.hh\" local=\"no\" imported=\"no\">dune/functions/common/localfunction.hh</includes>\n+ <includes id=\"a00020\" name=\"functionconcepts.hh\" local=\"no\" imported=\"no\">dune/functions/common/functionconcepts.hh</includes>\n+ <includes id=\"a00095\" name=\"localderivativetraits.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/localderivativetraits.hh</includes>\n+ <includes id=\"a00074\" name=\"gridfunction_imp.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/gridfunction_imp.hh</includes>\n <class kind=\"class\">Dune::Functions::GridFunction</class>\n <class kind=\"class\">Dune::Functions::GridFunction< Range(Domain), ES, DerivativeTraits, bufferSize ></class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n </compound>\n <compound kind=\"file\">\n <name>gridfunction_imp.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/gridfunctions/</path>\n- <filename>a00032.html</filename>\n- <includes id=\"a00092\" name=\"type_traits.hh\" local=\"no\" imported=\"no\">dune/functions/common/type_traits.hh</includes>\n- <includes id=\"a00095\" name=\"interfaces.hh\" local=\"no\" imported=\"no\">dune/functions/common/interfaces.hh</includes>\n- <includes id=\"a00098\" name=\"differentiablefunction_imp.hh\" local=\"no\" imported=\"no\">dune/functions/common/differentiablefunction_imp.hh</includes>\n+ <filename>a00074.html</filename>\n+ <includes id=\"a00029\" name=\"type_traits.hh\" local=\"no\" imported=\"no\">dune/functions/common/type_traits.hh</includes>\n+ <includes id=\"a00026\" name=\"interfaces.hh\" local=\"no\" imported=\"no\">dune/functions/common/interfaces.hh</includes>\n+ <includes id=\"a00071\" name=\"differentiablefunction_imp.hh\" local=\"no\" imported=\"no\">dune/functions/common/differentiablefunction_imp.hh</includes>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n </compound>\n <compound kind=\"file\">\n <name>gridviewentityset.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/gridfunctions/</path>\n- <filename>a00023.html</filename>\n+ <filename>a00083.html</filename>\n <class kind=\"class\">Dune::Functions::GridViewEntitySet</class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n </compound>\n <compound kind=\"file\">\n <name>gridviewfunction.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/gridfunctions/</path>\n- <filename>a00038.html</filename>\n- <includes id=\"a00017\" name=\"gridfunction.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/gridfunction.hh</includes>\n- <includes id=\"a00023\" name=\"gridviewentityset.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/gridviewentityset.hh</includes>\n- <includes id=\"a00014\" name=\"analyticgridviewfunction.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/analyticgridviewfunction.hh</includes>\n+ <filename>a00086.html</filename>\n+ <includes id=\"a00098\" name=\"gridfunction.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/gridfunction.hh</includes>\n+ <includes id=\"a00083\" name=\"gridviewentityset.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/gridviewentityset.hh</includes>\n+ <includes id=\"a00080\" name=\"analyticgridviewfunction.hh\" local=\"no\" imported=\"no\">dune/functions/gridfunctions/analyticgridviewfunction.hh</includes>\n <class kind=\"class\">Dune::Functions::GridViewFunction</class>\n <class kind=\"class\">Dune::Functions::GridViewFunction< Range(Domain), GV, DerivativeTraits, bufferSize ></class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n <member kind=\"function\">\n <type>std::decay< F >::type</type>\n <name>makeGridViewFunction</name>\n@@ -1527,16 +1527,16 @@\n <anchor>a34f2d140a1fed46862286f68d26c9975</anchor>\n <arglist>(F &&f, const GridView &gridView) -> decltype(makeAnalyticGridViewFunction(std::forward< F >(f), gridView))</arglist>\n </member>\n </compound>\n <compound kind=\"file\">\n <name>localderivativetraits.hh</name>\n <path>/build/reproducible-path/dune-functions-2.9.0/dune/functions/gridfunctions/</path>\n- <filename>a00029.html</filename>\n- <includes id=\"a00080\" name=\"defaultderivativetraits.hh\" local=\"no\" imported=\"no\">dune/functions/common/defaultderivativetraits.hh</includes>\n+ <filename>a00095.html</filename>\n+ <includes id=\"a00035\" name=\"defaultderivativetraits.hh\" local=\"no\" imported=\"no\">dune/functions/common/defaultderivativetraits.hh</includes>\n <class kind=\"struct\">Dune::Functions::LocalDerivativeTraits</class>\n <class kind=\"struct\">Dune::Functions::LocalDerivativeTraits::Traits</class>\n <class kind=\"struct\">Dune::Functions::LocalDerivativeTraits::Traits< R(LocalDomain)></class>\n <namespace>Dune</namespace>\n <namespace>Dune::Functions</namespace>\n </compound>\n <compound kind=\"file\">\n"}]}]}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/files.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/files.html", "unified_diff": "@@ -68,83 +68,83 @@\n <div class=\"textblock\">Here is a list of all files with brief descriptions:</div><div class=\"directory\">\n <div class=\"levels\">[detail level <span onclick=\"javascript:toggleLevel(1);\">1</span><span onclick=\"javascript:toggleLevel(2);\">2</span><span onclick=\"javascript:toggleLevel(3);\">3</span><span onclick=\"javascript:toggleLevel(4);\">4</span>]</div><table class=\"directory\">\n <tr id=\"row_0_\" class=\"even\"><td class=\"entry\"><span style=\"width:0px;display:inline-block;\"> </span><span id=\"arr_0_\" class=\"arrow\" onclick=\"toggleFolder('0_')\">▼</span><span id=\"img_0_\" class=\"iconfopen\" onclick=\"toggleFolder('0_')\"> </span><a class=\"el\" href=\"dir_e68e8157741866f444e17edd764ebbae.html\" target=\"_self\">doc</a></td><td class=\"desc\"></td></tr>\n <tr id=\"row_0_0_\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\"> </span><span class=\"iconfclosed\"></span><a class=\"el\" href=\"dir_04f2ecc425faf0d475a3caf484e551f3.html\" target=\"_self\">doxygen</a></td><td class=\"desc\"></td></tr>\n <tr id=\"row_1_\" class=\"even\"><td class=\"entry\"><span style=\"width:0px;display:inline-block;\"> </span><span id=\"arr_1_\" class=\"arrow\" onclick=\"toggleFolder('1_')\">▼</span><span id=\"img_1_\" class=\"iconfopen\" onclick=\"toggleFolder('1_')\"> </span><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\" target=\"_self\">dune</a></td><td class=\"desc\"></td></tr>\n <tr id=\"row_1_0_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\"> </span><span id=\"arr_1_0_\" class=\"arrow\" onclick=\"toggleFolder('1_0_')\">▼</span><span id=\"img_1_0_\" class=\"iconfopen\" onclick=\"toggleFolder('1_0_')\"> </span><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\" target=\"_self\">functions</a></td><td class=\"desc\"></td></tr>\n <tr id=\"row_1_0_0_\" class=\"even\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\"> </span><span id=\"arr_1_0_0_\" class=\"arrow\" onclick=\"toggleFolder('1_0_0_')\">▼</span><span id=\"img_1_0_0_\" class=\"iconfopen\" onclick=\"toggleFolder('1_0_0_')\"> </span><a class=\"el\" href=\"dir_e22f2c69b2799e923164d7b2e4fa3f8c.html\" target=\"_self\">analyticfunctions</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_0_0_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00002_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00002.html\" target=\"_self\">polynomial.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_0_1_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00005_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00005.html\" target=\"_self\">trigonometricfunction.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_0_0_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00005_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00005.html\" target=\"_self\">polynomial.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_0_1_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00002_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00002.html\" target=\"_self\">trigonometricfunction.hh</a></td><td class=\"desc\"></td></tr>\n <tr id=\"row_1_0_1_\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\"> </span><span id=\"arr_1_0_1_\" class=\"arrow\" onclick=\"toggleFolder('1_0_1_')\">▼</span><span id=\"img_1_0_1_\" class=\"iconfopen\" onclick=\"toggleFolder('1_0_1_')\"> </span><a class=\"el\" href=\"dir_8457ebf380090bd61e5d3eab5b7eb9a1.html\" target=\"_self\">backends</a></td><td class=\"desc\"></td></tr>\n <tr id=\"row_1_0_1_0_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a02873_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a02873.html\" target=\"_self\">backends/concepts.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_1_1_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00011_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00011.html\" target=\"_self\">istlvectorbackend.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_1_1_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00191_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00191.html\" target=\"_self\">istlvectorbackend.hh</a></td><td class=\"desc\"></td></tr>\n <tr id=\"row_1_0_2_\" class=\"even\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\"> </span><span id=\"arr_1_0_2_\" class=\"arrow\" onclick=\"toggleFolder('1_0_2_')\">▼</span><span id=\"img_1_0_2_\" class=\"iconfopen\" onclick=\"toggleFolder('1_0_2_')\"> </span><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\" target=\"_self\">common</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_2_0_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00071_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00071.html\" target=\"_self\">callable.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_2_1_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00080_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00080.html\" target=\"_self\">defaultderivativetraits.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_2_2_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00068_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00068.html\" target=\"_self\">differentiablefunction.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_2_3_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00098_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00098.html\" target=\"_self\">differentiablefunction_imp.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_2_4_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00104_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00104.html\" target=\"_self\">differentiablefunctionfromcallables.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_2_5_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00053_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00053.html\" target=\"_self\">functionconcepts.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_2_6_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00047_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00047.html\" target=\"_self\">functionfromcallable.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_2_7_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00041_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00041.html\" target=\"_self\">indexaccess.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_2_8_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00095_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00095.html\" target=\"_self\">interfaces.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_2_9_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00065_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00065.html\" target=\"_self\">localfunction.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_2_10_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00077_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00077.html\" target=\"_self\">localfunction_imp.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_2_11_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00101_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00101.html\" target=\"_self\">multiindex.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_2_12_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00074_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00074.html\" target=\"_self\">overflowarray.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_2_13_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00089_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00089.html\" target=\"_self\">polymorphicsmallobject.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_2_14_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00044_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00044.html\" target=\"_self\">referencehelper.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_2_15_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00059_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00059.html\" target=\"_self\">reserveddeque.hh</a></td><td class=\"desc\">An stl-compliant double-ended queue which stores everything on the stack </td></tr>\n-<tr id=\"row_1_0_2_16_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00086_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00086.html\" target=\"_self\">signature.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_2_0_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00014_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00014.html\" target=\"_self\">callable.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_2_1_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00035_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00035.html\" target=\"_self\">defaultderivativetraits.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_2_2_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00011_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00011.html\" target=\"_self\">differentiablefunction.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_2_3_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00071_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00071.html\" target=\"_self\">differentiablefunction_imp.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_2_4_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00047_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00047.html\" target=\"_self\">differentiablefunctionfromcallables.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_2_5_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00020_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00020.html\" target=\"_self\">functionconcepts.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_2_6_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00017_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00017.html\" target=\"_self\">functionfromcallable.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_2_7_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00062_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00062.html\" target=\"_self\">indexaccess.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_2_8_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00026_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00026.html\" target=\"_self\">interfaces.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_2_9_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00053_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00053.html\" target=\"_self\">localfunction.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_2_10_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00044_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00044.html\" target=\"_self\">localfunction_imp.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_2_11_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00032_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00032.html\" target=\"_self\">multiindex.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_2_12_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00059_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00059.html\" target=\"_self\">overflowarray.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_2_13_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00068_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00068.html\" target=\"_self\">polymorphicsmallobject.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_2_14_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00038_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00038.html\" target=\"_self\">referencehelper.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_2_15_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00023_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00023.html\" target=\"_self\">reserveddeque.hh</a></td><td class=\"desc\">An stl-compliant double-ended queue which stores everything on the stack </td></tr>\n+<tr id=\"row_1_0_2_16_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00008_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00008.html\" target=\"_self\">signature.hh</a></td><td class=\"desc\"></td></tr>\n <tr id=\"row_1_0_2_17_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00056_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00056.html\" target=\"_self\">staticforloop.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_2_18_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00083_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00083.html\" target=\"_self\">treedata.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_2_19_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00092_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00092.html\" target=\"_self\">type_traits.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_2_20_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00062_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00062.html\" target=\"_self\">typeerasure.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_2_21_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00050_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00050.html\" target=\"_self\">utility.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_2_18_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00065_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00065.html\" target=\"_self\">treedata.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_2_19_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00029_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00029.html\" target=\"_self\">type_traits.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_2_20_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00050_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00050.html\" target=\"_self\">typeerasure.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_2_21_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00041_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00041.html\" target=\"_self\">utility.hh</a></td><td class=\"desc\"></td></tr>\n <tr id=\"row_1_0_3_\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\"> </span><span id=\"arr_1_0_3_\" class=\"arrow\" onclick=\"toggleFolder('1_0_3_')\">▼</span><span id=\"img_1_0_3_\" class=\"iconfopen\" onclick=\"toggleFolder('1_0_3_')\"> </span><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\" target=\"_self\">functionspacebases</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_3_0_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00179_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00179.html\" target=\"_self\">basistags.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_3_1_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00185_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00185.html\" target=\"_self\">boundarydofs.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_3_2_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00182_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00182.html\" target=\"_self\">brezzidouglasmarinibasis.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_3_3_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00107_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00107.html\" target=\"_self\">bsplinebasis.hh</a></td><td class=\"desc\">The B-spline global function space basis </td></tr>\n-<tr id=\"row_1_0_3_4_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00188_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00188.html\" target=\"_self\">compositebasis.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_3_0_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00158_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00158.html\" target=\"_self\">basistags.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_3_1_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00167_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00167.html\" target=\"_self\">boundarydofs.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_3_2_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00149_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00149.html\" target=\"_self\">brezzidouglasmarinibasis.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_3_3_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00176_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00176.html\" target=\"_self\">bsplinebasis.hh</a></td><td class=\"desc\">The B-spline global function space basis </td></tr>\n+<tr id=\"row_1_0_3_4_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00101_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00101.html\" target=\"_self\">compositebasis.hh</a></td><td class=\"desc\"></td></tr>\n <tr id=\"row_1_0_3_5_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a02876_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a02876.html\" target=\"_self\">functionspacebases/concepts.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_3_6_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00119_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00119.html\" target=\"_self\">defaultglobalbasis.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_3_7_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00140_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00140.html\" target=\"_self\">defaultlocalview.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_3_8_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00173_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00173.html\" target=\"_self\">defaultnodetorangemap.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_3_9_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00122_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00122.html\" target=\"_self\">flatmultiindex.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_3_10_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00128_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00128.html\" target=\"_self\">flatvectorview.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_3_11_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00134_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00134.html\" target=\"_self\">globalvaluedlocalfiniteelement.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_3_12_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00149_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00149.html\" target=\"_self\">hierarchicallagrangebasis.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_3_13_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00164_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00164.html\" target=\"_self\">hierarchicnodetorangemap.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_3_14_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00158_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00158.html\" target=\"_self\">hierarchicvectorwrapper.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_3_15_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00170_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00170.html\" target=\"_self\">interpolate.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_3_16_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00125_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00125.html\" target=\"_self\">lagrangebasis.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_3_17_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00143_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00143.html\" target=\"_self\">lagrangedgbasis.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_3_18_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00131_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00131.html\" target=\"_self\">nedelecbasis.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_3_19_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00191_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00191.html\" target=\"_self\">nodes.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_3_20_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00116_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00116.html\" target=\"_self\">periodicbasis.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_3_21_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00113_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00113.html\" target=\"_self\">powerbasis.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_3_22_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00167_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00167.html\" target=\"_self\">rannacherturekbasis.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_3_23_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00137_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00137.html\" target=\"_self\">raviartthomasbasis.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_3_24_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00155_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00155.html\" target=\"_self\">sizeinfo.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_3_25_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00152_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00152.html\" target=\"_self\">subentitydofs.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_3_26_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00176_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00176.html\" target=\"_self\">subspacebasis.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_3_27_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00146_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00146.html\" target=\"_self\">subspacelocalview.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_3_28_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00110_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00110.html\" target=\"_self\">taylorhoodbasis.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_3_29_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00161_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00161.html\" target=\"_self\">transformedindexbasis.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_3_6_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00152_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00152.html\" target=\"_self\">defaultglobalbasis.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_3_7_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00128_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00128.html\" target=\"_self\">defaultlocalview.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_3_8_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00140_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00140.html\" target=\"_self\">defaultnodetorangemap.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_3_9_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00143_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00143.html\" target=\"_self\">flatmultiindex.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_3_10_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00155_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00155.html\" target=\"_self\">flatvectorview.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_3_11_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00137_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00137.html\" target=\"_self\">globalvaluedlocalfiniteelement.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_3_12_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00104_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00104.html\" target=\"_self\">hierarchicallagrangebasis.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_3_13_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00170_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00170.html\" target=\"_self\">hierarchicnodetorangemap.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_3_14_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00173_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00173.html\" target=\"_self\">hierarchicvectorwrapper.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_3_15_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00131_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00131.html\" target=\"_self\">interpolate.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_3_16_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00122_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00122.html\" target=\"_self\">lagrangebasis.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_3_17_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00119_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00119.html\" target=\"_self\">lagrangedgbasis.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_3_18_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00134_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00134.html\" target=\"_self\">nedelecbasis.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_3_19_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00179_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00179.html\" target=\"_self\">nodes.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_3_20_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00146_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00146.html\" target=\"_self\">periodicbasis.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_3_21_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00125_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00125.html\" target=\"_self\">powerbasis.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_3_22_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00185_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00185.html\" target=\"_self\">rannacherturekbasis.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_3_23_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00161_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00161.html\" target=\"_self\">raviartthomasbasis.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_3_24_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00110_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00110.html\" target=\"_self\">sizeinfo.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_3_25_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00113_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00113.html\" target=\"_self\">subentitydofs.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_3_26_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00107_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00107.html\" target=\"_self\">subspacebasis.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_3_27_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00188_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00188.html\" target=\"_self\">subspacelocalview.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_3_28_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00182_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00182.html\" target=\"_self\">taylorhoodbasis.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_3_29_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00164_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00164.html\" target=\"_self\">transformedindexbasis.hh</a></td><td class=\"desc\"></td></tr>\n <tr id=\"row_1_0_4_\" class=\"even\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\"> </span><span id=\"arr_1_0_4_\" class=\"arrow\" onclick=\"toggleFolder('1_0_4_')\">▼</span><span id=\"img_1_0_4_\" class=\"iconfopen\" onclick=\"toggleFolder('1_0_4_')\"> </span><a class=\"el\" href=\"dir_55b300d561fb400353f8dbad76da65d6.html\" target=\"_self\">gridfunctions</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_4_0_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00014_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00014.html\" target=\"_self\">analyticgridviewfunction.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_4_1_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00020_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00020.html\" target=\"_self\">composedgridfunction.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_4_2_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00026_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00026.html\" target=\"_self\">discreteglobalbasisfunction.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_4_3_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00035_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00035.html\" target=\"_self\">facenormalgridfunction.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_4_4_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00017_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00017.html\" target=\"_self\">gridfunction.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_4_5_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00032_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00032.html\" target=\"_self\">gridfunction_imp.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_4_6_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00023_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00023.html\" target=\"_self\">gridviewentityset.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_4_7_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00038_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00038.html\" target=\"_self\">gridviewfunction.hh</a></td><td class=\"desc\"></td></tr>\n-<tr id=\"row_1_0_4_8_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00029_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00029.html\" target=\"_self\">localderivativetraits.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_4_0_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00080_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00080.html\" target=\"_self\">analyticgridviewfunction.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_4_1_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00092_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00092.html\" target=\"_self\">composedgridfunction.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_4_2_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00089_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00089.html\" target=\"_self\">discreteglobalbasisfunction.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_4_3_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00077_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00077.html\" target=\"_self\">facenormalgridfunction.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_4_4_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00098_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00098.html\" target=\"_self\">gridfunction.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_4_5_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00074_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00074.html\" target=\"_self\">gridfunction_imp.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_4_6_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00083_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00083.html\" target=\"_self\">gridviewentityset.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_4_7_\" class=\"even\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00086_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00086.html\" target=\"_self\">gridviewfunction.hh</a></td><td class=\"desc\"></td></tr>\n+<tr id=\"row_1_0_4_8_\"><td class=\"entry\"><span style=\"width:64px;display:inline-block;\"> </span><a href=\"a00095_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00095.html\" target=\"_self\">localderivativetraits.hh</a></td><td class=\"desc\"></td></tr>\n </table>\n </div><!-- directory -->\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/globals.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/globals.html", "unified_diff": "@@ -59,15 +59,15 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div class=\"contents\">\n <div class=\"textblock\">Here is a list of all file members with links to the files they belong to:</div><ul>\n-<li>CHECKSIZE : <a class=\"el\" href=\"a00059.html#a65543e75bc949ecdb95a25b1f4e11675\">reserveddeque.hh</a></li>\n+<li>CHECKSIZE : <a class=\"el\" href=\"a00023.html#a65543e75bc949ecdb95a25b1f4e11675\">reserveddeque.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/globals_defs.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/globals_defs.html", "unified_diff": "@@ -59,15 +59,15 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div class=\"contents\">\n  <ul>\n-<li>CHECKSIZE : <a class=\"el\" href=\"a00059.html#a65543e75bc949ecdb95a25b1f4e11675\">reserveddeque.hh</a></li>\n+<li>CHECKSIZE : <a class=\"el\" href=\"a00023.html#a65543e75bc949ecdb95a25b1f4e11675\">reserveddeque.hh</a></li>\n </ul>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n"}, {"source1": "./usr/share/doc/libdune-functions-doc/doxygen/a00116.html", "source2": "./usr/share/doc/libdune-functions-doc/doxygen/a00008.html", "comments": ["Files 12% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=11\"/>\n <meta name=\"generator\" content=\"Doxygen 1.9.4\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n-<title>dune-functions: periodicbasis.hh File Reference</title>\n+<title>dune-functions: signature.hh File Reference</title>\n <link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"jquery.js\"></script>\n <script type=\"text/javascript\" src=\"dynsections.js\"></script>\n <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n <script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n <script type=\"text/javascript\" src=\"search/search.js\"></script>\n <link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n@@ -58,58 +58,57 @@\n <iframe src=\"javascript:void(0)\" frameborder=\"0\" \n name=\"MSearchResults\" id=\"MSearchResults\">\n </iframe>\n </div>\n \n <div id=\"nav-path\" class=\"navpath\">\n <ul>\n-<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a2250aba7ee066a4c694d7c3cf43d078.html\">functionspacebases</a></li> </ul>\n+<li class=\"navelem\"><a class=\"el\" href=\"dir_5e69be5995c9f5d42bf491ae6f29600e.html\">dune</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a5545368301c4029d7054f90c0ed45fc.html\">functions</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_14cf9ce796563c596e9b8f0f574fe0cc.html\">common</a></li> </ul>\n </div>\n </div><!-- top -->\n <div class=\"header\">\n <div class=\"summary\">\n <a href=\"#nested-classes\">Classes</a> |\n <a href=\"#namespaces\">Namespaces</a> |\n <a href=\"#func-members\">Functions</a> </div>\n- <div class=\"headertitle\"><div class=\"title\">periodicbasis.hh File Reference</div></div>\n+ <div class=\"headertitle\"><div class=\"title\">signature.hh File Reference</div></div>\n </div><!--header-->\n <div class=\"contents\">\n-<div class=\"textblock\"><code>#include <utility></code><br />\n-<code>#include <type_traits></code><br />\n-<code>#include <limits></code><br />\n-<code>#include <set></code><br />\n-<code>#include <vector></code><br />\n-<code>#include <<a class=\"el\" href=\"a02876_source.html\">dune/functions/functionspacebases/concepts.hh</a>></code><br />\n-<code>#include <<a class=\"el\" href=\"a00161_source.html\">dune/functions/functionspacebases/transformedindexbasis.hh</a>></code><br />\n+<div class=\"textblock\"><code>#include <type_traits></code><br />\n+<code>#include <tuple></code><br />\n+<code>#include <<a class=\"el\" href=\"a00035_source.html\">dune/functions/common/defaultderivativetraits.hh</a>></code><br />\n </div>\n-<p><a href=\"a00116_source.html\">Go to the source code of this file.</a></p>\n+<p><a href=\"a00008_source.html\">Go to the source code of this file.</a></p>\n <table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"nested-classes\" name=\"nested-classes\"></a>\n Classes</h2></td></tr>\n-<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">class  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01723.html\">Dune::Functions::BasisFactory::Experimental::PeriodicIndexSet</a></td></tr>\n-<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Container storing identified indices for a periodic basis. <a href=\"a01723.html#details\">More...</a><br /></td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01291.html\">Dune::Functions::SignatureTraits< Signature, isCallable ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Helper class to deduce the signature of a callable. <a href=\"a01291.html#details\">More...</a><br /></td></tr>\n+<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a01299.html\">Dune::Functions::SignatureTag< Range(Domain), DerivativeTraitsT ></a></td></tr>\n+<tr class=\"memdesc:\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Tag-class to encapsulate signature information. <a href=\"a01299.html#details\">More...</a><br /></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"namespaces\" name=\"namespaces\"></a>\n Namespaces</h2></td></tr>\n <tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">Dune</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n <tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">Dune::Functions</a></td></tr>\n <tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a00224\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00224.html\">Dune::Functions::BasisFactory</a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n-<tr class=\"memitem:a00227\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">namespace  </td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00227.html\">Dune::Functions::BasisFactory::Experimental</a></td></tr>\n-<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table><table class=\"memberdecls\">\n <tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a id=\"func-members\" name=\"func-members\"></a>\n Functions</h2></td></tr>\n-<tr class=\"memitem:ga797d4c1dfcfe6b0a98de9284c4f6b5e3\"><td class=\"memTemplParams\" colspan=\"2\">template<class RawPreBasisIndicator , class PIS > </td></tr>\n-<tr class=\"memitem:ga797d4c1dfcfe6b0a98de9284c4f6b5e3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html#ga797d4c1dfcfe6b0a98de9284c4f6b5e3\">Dune::Functions::BasisFactory::Experimental::periodic</a> (RawPreBasisIndicator &&rawPreBasisIndicator, PIS &&periodicIndexSet)</td></tr>\n-<tr class=\"memdesc:ga797d4c1dfcfe6b0a98de9284c4f6b5e3\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Create a pre-basis factory that can create a periodic pre-basis. <a href=\"a00213.html#ga797d4c1dfcfe6b0a98de9284c4f6b5e3\">More...</a><br /></td></tr>\n-<tr class=\"separator:ga797d4c1dfcfe6b0a98de9284c4f6b5e3\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga18b2a675f9153814c422d33878daebb2\"><td class=\"memTemplParams\" colspan=\"2\">template<class Range , class Domain , template< class > class DerivativeTraits> </td></tr>\n+<tr class=\"memitem:ga18b2a675f9153814c422d33878daebb2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00210.html#ga18b2a675f9153814c422d33878daebb2\">Dune::Functions::derivativeSignatureTag</a> (SignatureTag< Range(Domain), DerivativeTraits > tag)</td></tr>\n+<tr class=\"memdesc:ga18b2a675f9153814c422d33878daebb2\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Construct <a class=\"el\" href=\"a01295.html\">SignatureTag</a> for derivative. <a href=\"a00210.html#ga18b2a675f9153814c422d33878daebb2\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga18b2a675f9153814c422d33878daebb2\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n+<tr class=\"memitem:ga95d38d90c6b8ee6d3a2a0202cb80b56d\"><td class=\"memTemplParams\" colspan=\"2\">template<std::size_t maxOrder, class Signature , template< class > class DerivativeTraits> </td></tr>\n+<tr class=\"memitem:ga95d38d90c6b8ee6d3a2a0202cb80b56d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">auto </td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00210.html#ga95d38d90c6b8ee6d3a2a0202cb80b56d\">Dune::Functions::derivativeSignatureTags</a> (<a class=\"el\" href=\"a01295.html\">Dune::Functions::SignatureTag</a>< Signature, DerivativeTraits > tag)</td></tr>\n+<tr class=\"memdesc:ga95d38d90c6b8ee6d3a2a0202cb80b56d\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">Construct SignatureTags for derivatives. <a href=\"a00210.html#ga95d38d90c6b8ee6d3a2a0202cb80b56d\">More...</a><br /></td></tr>\n+<tr class=\"separator:ga95d38d90c6b8ee6d3a2a0202cb80b56d\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n </table>\n </div><!-- contents -->\n <!-- start footer part -->\n <hr class=\"footer\"/><address class=\"footer\"><small>\n Generated by <a href=\"https://www.doxygen.org/index.html\"><img class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/></a> 1.9.4\n </small></address>\n </body>\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -4,40 +4,42 @@\n \n \n dune-functions\u00a02.9.0\n \n \n * dune\n * functions\n- * functionspacebases\n+ * common\n Classes | Namespaces | Functions\n-periodicbasis.hh File Reference\n-#include <utility>\n+signature.hh File Reference\n #include <type_traits>\n-#include <limits>\n-#include <set>\n-#include <vector>\n-#include <dune/functions/functionspacebases/concepts.hh>\n-#include <dune/functions/functionspacebases/transformedindexbasis.hh>\n+#include <tuple>\n+#include <dune/functions/common/defaultderivativetraits.hh>\n Go_to_the_source_code_of_this_file.\n Classes\n-class \u00a0Dune::Functions::BasisFactory::Experimental::PeriodicIndexSet\n-\u00a0 Container storing identified indices for a periodic basis. More...\n+struct \u00a0Dune::Functions::SignatureTraits<_Signature,_isCallable_>\n+\u00a0 Helper class to deduce the signature of a callable. More...\n+\u00a0\n+struct \u00a0Dune::Functions::SignatureTag<_Range(Domain),_DerivativeTraitsT_>\n+\u00a0 Tag-class to encapsulate signature information. More...\n \u00a0\n Namespaces\n namespace \u00a0Dune\n \u00a0\n namespace \u00a0Dune::Functions\n \u00a0\n-namespace \u00a0Dune::Functions::BasisFactory\n-\u00a0\n-namespace \u00a0Dune::Functions::BasisFactory::Experimental\n-\u00a0\n Functions\n-template<class RawPreBasisIndicator , class PIS >\n-auto\u00a0Dune::Functions::BasisFactory::Experimental::periodic\n- (RawPreBasisIndicator &&rawPreBasisIndicator, PIS &&periodicIndexSet)\n-\u00a0 Create a pre-basis factory that can create a periodic pre-basis. More...\n+template<class Range , class Domain , template< class > class\n+DerivativeTraits>\n+auto\u00a0Dune::Functions::derivativeSignatureTag (SignatureTag< Range(Domain),\n+ DerivativeTraits > tag)\n+\u00a0 Construct SignatureTag for derivative. More...\n+\u00a0\n+template<std::size_t maxOrder, class Signature , template< class > class\n+DerivativeTraits>\n+auto\u00a0Dune::Functions::derivativeSignatureTags (Dune::Functions::SignatureTag<\n+ Signature, DerivativeTraits > tag)\n+\u00a0 Construct SignatureTags for derivatives. More...\n \u00a0\n \n ===============================================================================\n Generated by\u00a0[doxygen] 1.9.4\n"}]}]}]}]}]}